Nodes/ControlFlowUtils/⏩ Cycle Continue
ComfyUI Node

⏩ Cycle Continue

Passing Data From One Queue Run to the Next

By VykosX·Created 2 years ago·Updated 2 years ago· 147
⏩ Cycle Continue
  • CYCLE
  • data
  • aux
  • aux2
  • aux3
  • aux4
  • aux5
  • index
  • data
  • aux
  • aux2
  • aux3
  • aux4
  • aux5
index_override

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:

  1. The dry run. The first pass of a cycle is a "DRY RUN" where index and data are None. If you feed that None straight 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.
  2. 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.

Category🐺 VykosX-ControlFlowUtils

Inputs (8)

NameTypeDefaultDescription
CYCLECYCLEConnect 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_overrideoptINTManually 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)

NameTypeDescription
indexINTThe 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