Skip to content

v1.14.0 — agent-drivable diagnostics, background downloads, version rollback

Choose a tag to compare

@mattmillerai mattmillerai released this 05 Aug 00:18
5798668

89 commits since v1.13.0 (17 features, 38 fixes). No breaking changes.

This release is what the Comfy MCP servers have been waiting on: every verb the
local MCP's tool surface calls but could not reach on 1.13.0 now ships.

New commands

  • comfy system-stats / comfy free — ComfyUI /system_stats and /free
    passthrough, so device/VRAM data is available from the CLI instead of grepping
    a log. (#626)
  • comfy workflow notes <path> — read Note / MarkdownNote text out of a
    frontend workflow, offline. This is where LoRA trigger-word guidance lives.
    (#611)
  • comfy node deps — read-only per-pack Python dependency report: each
    requirement marked satisfied / mismatch / missing against the workspace venv.
    --registry <node-id> pre-checks a not-yet-installed pack, so a conflict
    can be assessed before installing. (#610, #625)
  • comfy model download --background — persistent download state plus
    comfy model download-status, comfy model downloads, and
    comfy model download-cancel. A multi-GB transfer no longer has to be held
    open by its caller. (#607)
  • comfy update comfy --version <X> — headless ComfyUI version
    switch/rollback with tag validation, stashing by default. (#606)
  • comfy templates check — a per-template runnable / missing /
    api-required verdict, so a gallery template can be assessed against this
    install before it is fetched. (#557)
  • comfy upload --host/--port — local target routing for uploads. (#648)

Fixes worth calling out

  • models search --text walks every model folder, not just checkpoints
    it previously returned zero for files plainly on disk. (#603)
  • comfy env detects legacy ComfyUI-Manager clones and reconciles a stale
    manager_gui_mode, so Manager present on disk is no longer reported
    not-installed. (#609)
  • comfy logs resolves the right file — candidate-based resolution with a
    user/comfyui.log fallback, a crash-surviving pointer, and staleness
    metadata. (#608)
  • A dead local server is now attributable to the job that killed it. This is
    the headline fix for anyone who has watched an oversized workflow take ComfyUI
    down and been told only server_not_running. jobs status falls back to the
    on-disk state file when the server is down (#602), run --wait writes that
    state at submit and names the prompt_id on disconnect (#605), the watcher
    records a terminal server_died (#604), and — the part that makes it usable —
    jobs status also consults that record when the server is back UP but has no
    history of the prompt (#674). Without that last piece the documented recovery
    ("relaunch, then check") threw the attribution away, which is exactly what a
    user does first. The read is scoped to the queried target and to matching
    loopback host spellings, so a cloud run — or a job from a second local
    instance on another port — is never reported as an answer about this one.
  • comfy nodes refreshes its annotation data live from comfy-complete, and
    templates fetch emits a correct envelope. (#474)
  • nodes search is tokenized and order-independent, with a category
    haystack and close-match fallback. (#646)
  • Model downloads are atomic — streamed to a .part sibling and renamed on
    completion, so a killed transfer never leaves a truncated file sitting at the
    final model path. (#666)
  • validate / nodes read the same server run submits to — they now
    honor the persisted background server instead of always consulting
    127.0.0.1:8188, and validate names the server its verdict came from. (#667)

Agent-facing contract

  • envelope/1 now emitted by comfy launch / comfy stop (#588) and by
    generate list / generate schema (#621); model download and generate
    emit envelope errors on every failure path (#581, #601).
  • comfy run gates on paid partner nodes via --allow-spend, and validate
    reports partner_nodes / spends_credits (#591, #590).
  • Server-supplied text is stripped of ANSI/control sequences and escaped before
    reaching Rich markup sinks (#614, #627, #655).
  • jobs ls state-file rows are scoped to the resolved --where target, with
    --all to opt out (#582), and jobs cancel emits prompt_not_found for an
    unknown local id rather than failing opaquely (#580).

Hardening

Absolute-path resolution for probe binaries to block Windows CWD planting
(#567), a shared read cap on three unbounded HTTP body reads (#654), authed
urllib routed through a no-redirect opener (#530), and PostHog key
shape-validation with the logger quieted (#620).