⏩ Cycle Continue
Passing Data From One Queue Run to the Next
- CYCLE
- data
- aux
- aux2
- aux3
- aux4
- aux5
- index
- data
- aux
- aux2
- aux3
- aux4
- aux5
Most ComfyUI nodes are forgetful: they get inputs, produce outputs, and move on. Cycle Continue (⏩ Cycle Continue, from ControlFlowUtils) is the node that remembers. It's the middle link of the pack's three-node Cycle family - Cycle starts, Cycle Continue carries data forward, Cycle End caches it back - and its entire job is turning "this run's output" into "next run's input."
If that sounds like the difference between a loop and a pipeline, you've got it. This is the node that lets you process an image, generate the next step from the result, and have that next step be a separate prompt run - queue the workflow, check the output, queue it again, and it picks up where it left off.
What it does
- CYCLE (required) - connect this to a Cycle node's CYCLE output. This is the state handle; it's how Cycle Continue knows where in the iteration you are.
- data (required) - the value you want to propagate into the next run. This is the pipeline's cargo.
- index_override (optional INT) - force the loop counter to a specific value. Handy for complex stepping or manual resets.
- aux, aux2–aux5 (optional) - more cargo slots, same behavior as data.
The outputs mirror the inputs: index (the current counter value before step is applied) and data/aux/aux2–aux5, which you're meant to feed through your processing chain and into a Cycle End node. The typical wiring is Cycle Continue → processing nodes → Cycle End, so the processed values get cached and come back out of Cycle Continue on the next run.
There's no real configuration to screw up here - you wire it correctly or the loop just doesn't connect. Which brings us to the honest part.
How this actually runs (and the trap)
Cycles iterate per prompt execution, not per node run. To get continuous iteration you queue multiple prompts - either manually, or by setting execution to Instant/Auto-Queue, which chains runs together automatically. That automatic chaining is exactly why you also need an exit strategy: the node's own description recommends interrupting with this pack's Halt Execution node once the cycle finishes, because otherwise an Auto-Queue cycle will happily keep looping past where you wanted it to stop.
Two classic failure modes:
- The dry run. The first pass of a cycle is a "DRY RUN" where index and data are
None. If you feed thatNonestraight into processing without handling it, you get a confusing error on run one, then perfect behavior on run two. Gate your initialization off Cycle's RESET? output instead. - Stale state. Cycle state persists in memory until ComfyUI restarts. Pick the workflow back up next week and the cycle resumes mid-iteration with last week's data. Sometimes that's a feature; when it's not, restart ComfyUI to clear it.
Install
Cycle Continue ships in VykosX/ControlFlowUtils:
# ComfyUI Manager → Install Custom Nodes → search "ControlFlowUtils"
# or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/VykosX/ControlFlowUtils
Restart, and find it under 🐺 VykosX-ControlFlowUtils alongside Cycle and Cycle End. No dependencies beyond a current ComfyUI. If you're new to the family, load the "Simple Cycle Workflow" sample from the repo first - seeing the state round-trip in a working graph beats any explanation.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| CYCLE | CYCLE | Connect to the CYCLE output of a [Cycle] node to establish a loop | |
| data | * | The initial value of any data you wish to iterate on and propagate to subsequent prompts | |
| index_overrideopt | INT | Manually override the current index of the Cycle. You can use this input to have complex Step calculations or to reset the loop manually | |
| auxopt | * | Any optional Auxiliary data you wish to iterate on and propagate to subsequent prompts | |
| aux2opt | * | The initial value of any Auxiliary data you wish to iterate on and propagate to subsequent prompts | |
| aux3opt | * | The initial value of any Auxiliary data you wish to iterate on and propagate to subsequent prompts | |
| aux4opt | * | The initial value of any Auxiliary data you wish to iterate on and propagate to subsequent prompts | |
| aux5opt | * | The initial value of any Auxiliary data you wish to iterate on and propagate to subsequent prompts |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| index | INT | The Index of the loop counter before being incremented or decremented by Step |
| data | * | Connect to the Data input of a [CycleEnd] node after processing |
| aux | * | Connect to the respective Aux input of a [CycleEnd] node after processing |
| aux2 | * | Connect to the respective Aux input of a [CycleEnd] node after processing |
| aux3 | * | Connect to the respective Aux input of a [CycleEnd] node after processing |
| aux4 | * | Connect to the respective Aux input of a [CycleEnd] node after processing |
| aux5 | * | Connect to the respective Aux input of a [CycleEnd] node after processing |