Force Timer Stop
End the Generation Timer early to measure just part of a Cyclist run
- any_in
Force Timer Stop does exactly one thing: it tells the Generation Timer to stop, right now, the moment any input reaches it. Normally the timer runs until the last Save/Memorize node in your workflow fires. This node lets you stop it earlier, so you can measure a specific stretch of a run instead of the whole thing.
Why you'd want a manual stop
By default the Generation Timer brackets the entire useful run - start of generation to the final save. That's the right measurement most of the time. But sometimes you want to know how long one block takes: just the sampling, just the upscale, just the part before your VAE decode. Force Timer Stop is the marker you drop at the end of the block you care about. Whatever executes up to that point is what gets timed; everything after is excluded. The start is always generation-start (you can't move that), but the end is now wherever you plant this node.
To be clear about the division of labour: you don't need Force Timer Stop to use the Generation Timer at all - the timer stops fine on its own at the last Save/Memorize node. This is purely for when you want to end the measurement somewhere other than the natural end of the workflow.
The inputs that matter
any_in(*) - the trigger. It's a wildcard pass-through: park it on whatever wire marks the end of the block you're timing, and the timer stops when that value arrives. It doesn't care what the value is; its arrival is the signal.loop_id(STRING, defaultForLoop_1) - which timer to stop. Match this to theloop_idon the Generation Timer you want to halt, so if you've got several timers, only the right one stops.
It's a terminal (output) node - no outputs. It exists to fire, not to pass anything onward.
Install
- ComfyUI Manager: search comfyui-cyclist, install, restart.
- Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/Pos13/comfyui-cyclist, restart.
Pure Python - no downloads.
Things to know
Placement is everything, same as with the Interrupt node: the timer stops when any_in is executed, so put this node in the execution path right after the last thing you want counted. If it fires too early or too late, move it up or down the graph accordingly.
Two inherited caveats from the Generation Timer it controls: its measurements won't match ComfyUI's own reported run time (it's timing your bracketed section, not the whole wall clock), and the timer only works when the timer's loop_id is a widget rather than a converted input. Keep the ids matched between this node and its Generation Timer, and keep them as widgets.
And the pack-wide note: Cyclist is archived and unmaintained. This is a tiny, simple node, so it's about as safe as they come - but there's no support behind it.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| any_in | * | — | |
| loop_id | STRING | ForLoop_1 | — |
Outputs (0)
No outputs