Pause Workflow
Stop the Pipeline Before It Wastes an Upscale
- any1
- any2
- any1
- any2
The gate you put between "looks fine" and "spends your whole evening"
Pause Workflow is a checkpoint in your graph. Execution reaches it, the whole workflow stops dead, the node turns a dull olive, and you get two buttons: Continue and Cancel. Everything you wired through it passes straight through untouched. That's it - that's the entire trick, and it's genuinely useful.
The README's own pitch is the classic case: pause before deciding whether a result is worth upscaling. Standard advice in this community is generate at native resolution, then do the expensive pass - hires fix at low denoise, an ESRGAN model, ControlNet Tile with the base image as the control reference. That second pass costs real VRAM and real minutes, and it runs whether or not the base image is worth a damn. This node is the "do you actually want to spend that?" question made into a button. Same deal for artifact checks before a heavier pass, or - the author's stated motivation - checking whether a video is worth progressing, which the image-picker nodes never catered to.
How it actually works
It exists because "how do I pause a ComfyUI workflow?" got asked constantly, and the tools that did it (cg-image-picker) broke on frontend updates. So the author built this: a pass-through node whose Python side flips a "paused" flag, tells the frontend, then just sits in a time.sleep(0.1) loop polling a class-level dictionary. The pack's small JS extension adds the two buttons to the node itself. Click Continue and it POSTs to a local endpoint that flips the flag, the loop exits, and the node returns whatever you fed it. Click Cancel and it raises ComfyUI's InterruptProcessingException - the same interrupt the stop button uses - so the whole prompt dies. There's even a cancel-all route wired into ComfyUI's own interrupt, so hitting stop doesn't leave paused nodes hanging forever.
No models, no API keys, no dependencies. The pack is one Python file, one JS file, and an MIT license.
The inputs that matter
Just two, and they're both * wildcards:
- any1 (required) - your main pass-through. Latent, image, conditioning, whatever.
- any2 (optional) - a second one if you're carrying two things to the far side.
Both come out as any1 and any2, byte-for-byte identical to what went in. That's the whole point: whatever you pause on, downstream nodes see the exact same object, so the flow keeps its shape across the checkpoint.
Install
Via ComfyUI Manager, search for ComfyUI-pause. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/wywywywy/ComfyUI-pause.git
Then restart ComfyUI. There's no requirements.txt to babysit and nothing to download - it's as painless as custom nodes get.
Where people get burned
The pause fires when the node is reached, not when you click a button - you can't stop a sampler mid-step, so don't expect a kill switch. More importantly, this is a synchronous block: it occupies the execution thread while it waits. Run the workflow headless or through the API with no one at a browser to click Continue, and it hangs until the heat death. Don't put it in a queued batch you walk away from. And note the "all-or-nothing" limit: if you generate a batch of four and want to keep two, this isn't your tool - cg-image-filter does selective picking. Two pass-throughs is also the ceiling, so if you need more, the author himself points to the newer ComfyUI-AsyncPause.
One user in the announcement thread did report the workflow freezing after a full restart (not a Manager restart). It's a single report, so don't lose sleep, but if you hit a weird hang after rebooting, restart cleanly and check for stale versions. A refresh and a working checkpoint can save you more time than any LoRA tweak.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| any1 | * | — | |
| any2opt | * | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| any1 | * | — |
| any2 | * | — |