Check Output
Tell the graph 'this part is done' before the gate opens
- value
- value
ComfyUI's execution order is mostly "whatever the dependency graph says," and sometimes that's wrong for what you want. CheckOutput is a coordination node: you drop it on the end of a sub-workflow, give it a channel name, and it tells any ExecutionGate on that same channel "wait - this part hasn't finished yet." It's the "I'm done here" signal of this pack's execution-gate system.
Think of it as an explicit barrier between graph areas that have no real data dependency but a real order requirement. The classic case: one branch writes files or updates state that a later branch must not read before it exists.
How it works
Two inputs:
value- a wildcard (*). It accepts anything and passes it through untouched; its only job is to make this node execute when that value is available.channel- a string naming the gate group. Defaultdefault.
Because CheckOutput is an OUTPUT_NODE, it always executes when its subgraph is reached. At submit time, a prompt handler wires every CheckOutput on a channel into every ExecutionGate on the same channel as a hidden dependency - so the gate holds its value until all the checkpoints on its channel have run. Output is value, the input unchanged, so it can sit inline in a data path and not disturb it.
It's deliberately the dumb half of the pair. The smart half is ExecutionGate (which does the waiting) and ExecutionGateControl (the master on/off for a channel). You'll rarely place CheckOutput in isolation - you're wiring it as the "this branch reached its end" sentinel that unlocks a gate elsewhere.
Where it fits
Any workflow where ordering matters more than data flow: a preprocessing branch that must finish before a consuming branch starts, a save node that must complete before a cleanup step, an update that must land before a read. It's the ComfyUI-native replacement for "just add a long enough delay" - deterministic instead of hopeful.
One honest note: for simple "run this after that" needs you may not need the full gate system at all; ComfyUI's normal dependency edges handle most cases. Reach for CheckOutput + ExecutionGate when you have a genuine cross-branch ordering constraint that a cable can't express.
Installing it
Part of Mickmumpitz-Nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/mickmumpitz/ComfyUI-Mickmumpitz-Nodes.git
or ComfyUI Manager → search "Mickmumpitz" → install → restart. No downloads; the pack's deps are just numpy, Pillow and opencv-python.
Troubleshooting
- Gate never releases - a CheckOutput on the same channel never ran (wrong subgraph, bypassed, errored). The gate waits forever. Check the channel strings match exactly.
- Two unrelated groups blocking each other - they share the
defaultchannel. Give each group its own channel name. - Checkpoint ignored - you wired a CheckOutput but no
ExecutionGateexists on that channel. The checkpoint is inert without its gate. - Output-node side effects - because it always executes when reached, don't hang heavy work downstream of it and expect it to be skipped.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| value | * | — | |
| channel | STRING | default | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |