Timer Stop ⏱️⏹️
The other half of the timer — and what -1 actually means
- passthrough
- output
- elapsed_seconds
- summary
The Timer Stop is where a timed section actually pays out. Its sibling, Timer Start, records the moment; this node reads that stored start back and tells you how many seconds passed - as a real elapsed_seconds FLOAT you can wire into a display, a log, or a conditional. If you've ever eyeballed the progress bar to estimate a stage's cost, this is the honest version.
How it works
Both timer nodes share a timer_id - a plain string that's your contract between them. Timer Stop looks up the start timestamp Timer Start recorded under that same id, subtracts, and reports the delta. The matching is done through a shared store on a ComfyUI internal module, which sounds exotic but just means "both files can find the same dict regardless of load order." Connect the passthrough (optional, any type) to whatever output marks the end of the section you're timing - that dependency edge forces the stop to execute at the right point, same anchor trick as Timer Start.
The -1 in the title: if no matching Timer Start has run - wrong id, misspelled id, or the Start node simply never executed because its upstream didn't run - elapsed_seconds returns -1 and the summary says so in plain words. The author chose an explicit sentinel over a silent zero, and that's the right call: a zero would look like a fast section when it's actually a broken measurement.
Inputs and outputs
Inputs: timer_id (default "default") and the optional any-type passthrough. Outputs:
output- the passthrough value, untouched, so the timer can sit inline.elapsed_seconds- a FLOAT, the whole point. Wire it to a text display or a value node to keep the timing visible.summary- a string with the human-readable result, including the -1 note when the pair is broken.
Install
Ships with OmniNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes
Or ComfyUI Manager → OmniNodes → restart. No extra dependencies. Found under TensorVizion/Workflow.
Troubleshooting
- Always -1 - your Start and Stop
timer_idvalues don't match, or the Start never ran. Check both spellings and make sure the Start node's upstream actually executed. - Starts working only sometimes - if the Start is conditional or bypassed on some runs, the Stop has nothing to read on those runs. That's by design; time a section only when it actually runs.
- Node missing from menu - full restart, then watch the terminal for
[OmniNodes]load output.
Pair it with Timer Start around a heavy stage (an upscale, a model merge, a video encode) and you'll finally have the numbers to decide whether that fancy alternative is actually faster or just newer.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| timer_id | STRING | default | — |
| passthroughopt | * | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| output | * | — |
| elapsed_seconds | FLOAT | — |
| summary | STRING | — |