Nodes/OmniNodes/Timer Start ⏱️▶️
ComfyUI Node

Timer Start ⏱️▶️

Benchmark a workflow section without touching a stopwatch

By TensorVizion·Created 3 months ago·Updated about 8 hours ago· 0
Timer Start ⏱️▶️
  • passthrough
  • output
timer_iddefault

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_id between Start and Stop means the stop has nothing to read - the stop reports -1 and says so explicitly rather than silently lying.
  • You can run several independent timers at once by using different timer_id values 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_id values 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 passthrough so 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.

CategoryTensorVizion/Workflow

Inputs (2)

NameTypeDefaultDescription
timer_idSTRINGdefault
passthroughopt*

Outputs (1)

NameTypeDescription
output*