Nodes/ComfyUI LC123 Nodes/LC Timer ⏱️
ComfyUI Node

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

By lonecatone23·Created 3 months ago·Updated about 13 hours ago· 48
LC Timer ⏱️

      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__.py isn't directly inside ComfyUI/custom_nodes/ComfyUI_LC123_nodes/. The console prints an [LC123] + line per module; silence means the folder nesting is wrong.
      CategoryLC123/utils

      Inputs (0)

      No inputs

      Outputs (0)

      No outputs