Timer Start ⏱️▶️
Benchmark a workflow section without touching a stopwatch
- passthrough
- output
Sometimes the question is "how long does the upscale actually take?" - not the whole queue, just the one stage. Or you're comparing two approaches and want a number, not a feeling. ComfyUI's built-in timing is coarse, so people end up watching the progress bar like it's a stopwatch. The Timer Start node from TensorVizion/OmniNodes is the better answer: a named start marker that pairs with a Timer Stop later in the graph, and together they hand you an elapsed-seconds reading for any section you care about.
It's about as simple as a node gets. Give it a timer_id (default "default"), connect whatever output marks the start of the section you want to measure to its optional passthrough socket, and it records a start timestamp. The passthrough isn't doing data work - it's a dependency hook, exactly like the Smart Unloader's: by feeding a real value through the node, you force ComfyUI to execute it at that exact point in the graph. Wire nothing in, and the timer might fire at a surprising time, because ComfyUI runs nodes in dependency order, not visual order.
The pairing rule
Timer Start only records the moment. The reading happens in a Timer Stop node with the same timer_id later in the graph - it reads back the stored start and computes elapsed time. The two nodes share a little dict stashed on a ComfyUI internal module, which is how a start in one file and a stop in another can find each other despite the pack's per-file loader isolating every module.
The practical implications:
- Misspelled or mismatched
timer_idbetween Start and Stop means the stop has nothing to read - the stop reports-1and says so explicitly rather than silently lying. - You can run several independent timers at once by using different
timer_idvalues for each pair.
Inputs and outputs
Inputs: timer_id (a string, default "default") and the optional any-type passthrough. Output: a single output that passes the passthrough value through untouched - so the node can sit inline in a chain without interrupting it.
Install
Part of OmniNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes
Or ComfyUI Manager → OmniNodes → restart. Pure Python standard library; no extra installs. It appears under TensorVizion/Workflow.
Troubleshooting
- Elapsed is -1 or nonsense - the Stop couldn't find a matching Start. Check that both
timer_idvalues are identical, and that the Start actually executed (it only runs if its inputs upstream ran). - Timer fires at the wrong time - connect the section's first output to
passthroughso the node is anchored to the right moment in the graph. - Node missing - restart ComfyUI and look for
[OmniNodes]lines in the terminal.
Use it with the Timer Stop to finally get hard numbers on which sampler/upscaler chain is actually faster. That's a five-minute measurement that will change how you build workflows.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| timer_id | STRING | default | — |
| passthroughopt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output | * | — |