Generation Timer
Measure how long each Cyclist iteration actually takes
- last gen time
- total loop time
Generation Timer measures how long a run takes and outputs the time as a float - both the last iteration's time and the running total across the loop. In a Cyclist workflow that's more useful than it sounds: once you're looping, "how long does one pass take" and "how long has this whole cycle been running" become real questions, and this answers them as numbers you can wire into anything.
What it's actually timing
It's not a stopwatch you start and stop by hand. The timer starts automatically right before each generation - when the workflow is checked at the top of a run - and stops when the last Save/Memorize node in the workflow fires. So it measures the work, from the beginning of the run to the moment your final result is committed. That framing is exactly what you want in a loop: each Queue Prompt is one iteration, and the timer brackets the useful part of it.
The killer use, straight from the pack's docs, is a time-limited loop: check ComfyUI's "Auto Queue," let it churn, and use the timer's total against a target with a Compare Anything and an Interrupt to stop after, say, ten minutes of generating. "Run for N minutes then quit" is a genuinely nice thing to be able to express, and the timer is what makes it measurable.
The inputs and outputs
loop_id(STRING, defaultForLoop_1) - which loop this timer belongs to. Assign different timers to different loop ids if you run more than one.mode(enum) - the unit for the output:hours,minutes,seconds, ormilliseconds.
Two FLOAT outputs:
last gen time- how long the most recent iteration took.total loop time- accumulated time across the whole cycle so far.
Wire total loop time into a comparison for a time-budget loop, or just route either into a display node to watch it.
Install
- ComfyUI Manager: search comfyui-cyclist, install, restart.
- Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/Pos13/comfyui-cyclist, restart.
Pure Python - nothing to download.
The caveats that matter
Two the author is upfront about. First, its numbers won't match ComfyUI's own reported time. It only counts from when the Generation Timer node is checked to when the last Save/Memorize (or a Force Timer Stop) executes - so anything before the node is checked, and anything after the final save, is invisible to it. It's measuring your loop's work, not the wall-clock of the whole run. Don't be surprised when the two disagree.
Second, and this one will actually block you: the timer only works when loop_id is a widget, not a converted input. The author flags it as a limitation they couldn't work around. So leave loop_id as a typed widget on the node - don't right-click and convert it to an input, or the timer silently won't function.
You can run multiple timers, but assign them to different loops to keep their totals separate. And the pack-wide note: Cyclist is archived and unmaintained - still works, no future support.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| loop_id | STRING | ForLoop_1 | — |
| mode | COMBO | seconds | 4 options: hours, minutes, seconds, milliseconds |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| last gen time | FLOAT | — |
| total loop time | FLOAT | — |