Saya Image Phase AUTO STOP / UNLOAD
It says AUTO STOP / UNLOAD, but the unload is the other node's job
- image
- image
- validated_path
- manifest_json
The display name is a small lie, and the lie is the point. Saya Image Phase AUTO STOP / UNLOAD does stop a phase and get the VRAM freed - but not from inside the node. It saves your finished phase to disk, marks it validated, tells the frontend "done, next phase in 2 seconds," and only then, once ComfyUI's execution fully succeeds, does the browser side of the pack actually unload the model. Do it from inside an output node and you'd yank models out from under a run that isn't finished. This node exists because of exactly that ordering problem.
It's the terminal node of each pass in the author's "isolated 6-pass" pipeline that ships in alphaziod/saya-comfy-couple-plus. Despite the pack's README reading like it's all Comfy Couple regional prompting, the code bundles a whole auto image-generation system: base → hires → refiner → pre-detail → detailers → final upscale, six passes that each load their own checkpoint, run, and unload so a big pipeline fits in normal VRAM. This node ends every one of those passes. It writes the finished PNG plus a JSON manifest into ComfyUI/output/image/checkpoints/ (the default checkpoint_root), promotes the "candidate" to "validated" with an atomic rename and a rollback copy, and fires a saya_image_phase_complete websocket event. The web UI hears it, waits two seconds, flips the workflow to the next phase, and submits a brand-new prompt run.
What you actually set on it, for a beginner who's just wiring one:
- image - your VAEDecode output for the finished phase. It's passed straight through.
- phase and detailer - which pass this boundary belongs to. Phase 5 (DETAILERS) is the one where
detailermeans something (face,hands,eyes…); elsewhere leave it onnone. Pick the wrong phase and the promote step refuses, because the candidate manifest stores the phase and detailer too. - seed, positive_prompt, negative_prompt, and the three
_jsonwidgets (models_json,vaes_json,samplers_json) are metadata recorded into the manifest so a later pass can resume with the same seed and prompt. They don't control execution - if an extension deserializes them oddly the node just writes what it can instead of crashing an expensive render. - checkpoint_root - relative to ComfyUI's output folder. Keep the default
image/checkpointsunless you know better.
Outputs are image (pass-through), validated_path (the path of the validated PNG on disk), and manifest_json (everything it recorded). The next phase's LOAD node reads that PNG and manifest, which is how an isolated phase rebuilds its context without any model staying resident.
Install is the same as the rest of the pack: ComfyUI Manager → search saya-comfy-couple-plus, or clone into custom_nodes, then restart. Only numpy and Pillow are required; PyTorch comes from ComfyUI and there are no model downloads. Two things bite people: the README flags the pack as work-in-progress - ports and behavior can change between updates, so back up workflows you care about - and after updating, if an old node still shows stale inputs, delete it from the graph and re-add it after a full restart.
Real failure modes here are the quiet kind. If a phase errors before this node runs, no harm done: the candidate stays on disk and you can regenerate or redo the pass. If you point checkpoint_root at an absolute path or something containing .., the node refuses - it's deliberately locked to a folder under output. And if "next phase" never fires, it's usually the frontend JS being stale - hard-refresh the browser after an update so the pack's web/ extension reloads.
Don't buy the name too literally. This node is a save point with a hand-off.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| phase | COMBO | 6 options: 1 — BASE GENERATION, 2 — HIRES / USDU, 3 — REFINER HIDREAM, 4 — PRE-DETAIL UPSCALE, 5 — DETAILERS, 6 — FINAL UPSCALE / COLOR / SAVE | |
| detailer | COMBO | 19 options: none, body, hair, face, full_eyes, eyes, +13 | |
| checkpoint_root | STRING | image/checkpoints | — |
| seed | INT | 00–18446744073709550000 | — |
| positive_prompt | STRING | — | |
| negative_prompt | STRING | — | |
| models_json | STRING | [] | — |
| vaes_json | STRING | [] | — |
| samplers_json | STRING | {} | — |
| source_pathopt | STRING | — | |
| save_receiptopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| validated_path | STRING | — |
| manifest_json | STRING | — |