LC Timer ⏱️
LC Timer ⏱️ is a stopwatch with no inputs, no outputs, and no reason to exist except that you can't tune speed blind
What it is (and why the schema is empty)
Open the docs for LC Timer and you get nothing: no inputs, no outputs, no execution. That isn't a bug or a scraping failure - the thing has literally no sockets and never runs. It's a stopwatch that lives on the canvas.
You'd reach for it the moment you start tuning for speed, which is exactly when intuition fails. Swap the sampler, bump the steps, try the new speed-up node, turn on Sage - and you have no idea whether any of it helped, because the number you're comparing against is a vague memory of "that run felt quick". LC Timer turns that into a number you can trust, sitting right next to the nodes you're changing.
How it works
All of it happens in the browser. The Python class exists only to put the node in the menu; FUNCTION is a noop that returns nothing. The JS registers listeners on ComfyUI's own execution_start and execution_success events, so the number it shows is wall-clock time for the whole queued run, measured from the moment the queue starts to the moment it reports success.
Then it does the part that makes it useful rather than decorative: it scores your newest run against the average of the previous five, and shows the difference in green (faster), red (slower) or grey ("same", within 2%). Underneath that is a scrolling list of recent runs with their clock times, so you can see the shape of a session, not just one delta.
Two judgement calls in there are the reason I trust it:
- Runs under half a second are discarded. That's a fully cached run that did nothing - including it would flatter whatever you just changed into looking infinitely fast.
- Stopped and errored runs are recorded but excluded from scoring. They show up as "stopped" so you know the timer saw them, and they don't pollute the average.
The history is stored in the node's own properties, so it saves with the workflow and survives a reload. Right-click the node → ⏱️ Clear timer history when you want a clean slate (do that before an A/B test, or you're averaging across two different setups).
Inputs and outputs
There are none, and that's the correct design. Nothing wires into it, it wires into nothing, and it can't break a graph because it isn't part of the execution. Drop one anywhere - a corner of the canvas is traditional.
Using it without fooling yourself
The honest limits of the measurement: it's wall clock, in the browser, for the whole run. That includes model loading on the first run after a swap, VAE decode, saving, anything else queueing at the same time. That makes it great for "is this faster end to end" and useless for "which node is slow" - for that, read ComfyUI's own console timings.
So compare like with like. Same model, same steps, same resolution, and change one thing. Queue twice before you believe a small difference; the first run after any change pays a load cost the second one doesn't. And clear the history when you switch test subjects.
Where it earns its place is exactly where the pack uses it: the LC Speed Boost Test example workflow ships a group bypasser that chooses between the boosted path and the plain one, plus an LC Timer to score each - which is the whole point. A speed-up node you can't measure is a superstition.
Install
ComfyUI Manager → ComfyUI_LC123_nodes. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes.git
Restart ComfyUI. The pack is 141 Python nodes plus 5 JS-only ones (v1.49.3), MIT, one author (lonecatone23, the CivitAI creator behind synth.studio.models) - and it's a friction-removal pack in the rgthree mould: it generates nothing, it just makes a graph workable.
No requirements.txt means no pip step and no dependency roulette; it uses the torch and numpy ComfyUI already has.
Because the face is drawn in the browser by the pack's lc_timer.js, two things are worth checking if it misbehaves:
- The face is empty or blank → Ctrl+F5 after installing or updating. The browser caches the pack's JavaScript, and this node is JavaScript.
- The node never appears at all →
__init__.pyisn't directly insideComfyUI/custom_nodes/ComfyUI_LC123_nodes/. The console prints an[LC123] +line per module; silence means the folder nesting is wrong.
Inputs (0)
No inputs
Outputs (0)
No outputs