Neo Execution Timer ⚡
A glowing stopwatch that lives on the graph
NeoTimer is a pure display node: a big neon MM:SS counter that ticks while your generation runs, with a small it/s readout underneath during sampling. It's not a tool - it's a glanceable clock that lives on the canvas instead of buried in the terminal. And it has one genuinely neat trick: it auto-pauses whenever a NeoChooser in the same workflow blocks for a pick, so from across the room you can tell whether ComfyUI is churning or politely waiting on your decision.
How it works
The Python side is essentially a no-op - execute() just returns {}. The node is marked OUTPUT_NODE, so ComfyUI treats it as a terminal: it always runs, like Save Image, and never gets pruned out of the graph. All the brains live in the client JavaScript, which runs a singleton timer that starts on execution_start, listens for the neo_chooser_show event to pause, and stops on completion, error, or interrupt. The final elapsed time is stashed into the node's properties (elapsed_time_str), so reload the workflow and the last run's time is still there.
Two things worth knowing before you decorate a big graph with a row of these:
- Every NeoTimer shows the same clock. The timer is a single global instance; each node you add is a mirror of it, not a per-branch stopwatch.
- The speed line only shows the currently executing node's sampling rate -
it/swhen it's fast,s/itwhen it's slow - fed from ComfyUI's progress events. It's a mood ring, not a profiler.
Inputs and outputs
There are none. No inputs, no outputs - the schema is empty on both sides. You just add the node to the canvas and it does its thing. That's the whole point: nothing to wire, nothing to misconfigure. It sits wherever you can see it.
So be honest about what it's for. It won't benchmark individual nodes or give you per-step timings - for real profiling you want the console or a proper tracing tool. What it does well is give you a wall-clock readout for your session and a clear visual "paused, go pick" signal that matches the pack's chooser. If that sounds cosmetic, it is - but it's the good kind, the kind that costs nothing and reads at a glance.
Installing it
Same pack as NeoChooser, so one install gets you both. ComfyUI Manager (search "NeoChooser"), or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/13february/NeoChooser
Then restart ComfyUI. It appears under NeoNodes → NeoTimer. Dependencies are just numpy and Pillow - already present in any ComfyUI install - and there are no model downloads. Note the README's install URL (13february/ComfyUI-NeoChooser) is outdated; the real repo is 13february/NeoChooser.
Common issues
- Stuck at 00:00 or missing entirely? The extension probably didn't load - check the browser console for errors. The custom canvas widget is also the kind of thing ComfyUI's Nodes 2.0 frontend rewrite has been known to misrender; if that's the culprit, opt out of Nodes 2.0 and reload.
- The clock is global and resets each run. Don't expect it to survive across runs or track a long-running job's total across pauses - it counts a single execution and stops when the queue finishes.
- The display font loads from Google Fonts, so on a fully offline box it falls back to a default sans-serif. Works fine, just less pretty.
- Since it's an output node it always executes, which can look "active" - that's just ComfyUI treating it as a terminal, not the node doing work.
Pair it with NeoChooser and you get the full idea: the chooser holds the queue, the timer blinks into a paused state, you make your pick, and the clock resumes with the decision out of the timing. That sync is genuinely the reason to reach for this over a $2 desk timer.
Inputs (0)
No inputs
Outputs (0)
No outputs