Local Timer End
Finally, time one section of your workflow
- passthrough
- timer
- passthrough
- time_string
- time_float
Local Timer End is the second half of a two-node stopwatch that answers a genuinely annoying question: "how long did that part of my workflow take?" ComfyUI shows you total execution time, but if your graph has three samplers and an upscale pass, total time tells you nothing about where the minutes went. Wire a Local Timer Start before the section you care about, wire this node after it, and it tells you the elapsed time in the format you actually want.
It's a passthrough node with a timer grafted on. You connect whatever data the section would have carried anyway through the passthrough input, so it costs you nothing in graph flow, and you connect the timer input from a Local Timer Start node's timer output. It computes now - start_time when it runs and hands you the result.
The inputs that matter
There are only three, and two are passthrough plumbing:
passthrough- any value or list, passed through unchanged. It's a wildcard, so you can thread an image, a latent, a string, anything. That's the point: the node can sit in your data path without changing it.timer- connect thetimeroutput of the paired Local Timer Start node. Nothing else works here; it's a dedicated TIMER type.format- how the elapsed time is reported:h m s(default) →"3h 5m 2s"style, with zero parts omitted (34 seconds just shows"34s").hh:mm:ss→"03:05:02".h/m/s→ a float in that unit, rounded to 2 decimal places, for math or for logging.
The outputs
Three outputs, matched to the format. passthrough is your data, unchanged - that's what continues your workflow. time_string is the human-readable elapsed time (empty when you pick a float format). time_float is the numeric elapsed time in the unit your format implied (0.0 for string-only formats). So pick the format that matches how you want to consume the result; it also prints the measured time to the ComfyUI console, which is handy for a quick look without wiring anything.
Install
It's part of Img Label Tools: ComfyUI Manager → search "Img Label Tools" → install, or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/rjgoif/ComfyUI-Img-Label-Tools
Restart ComfyUI after either. No dependencies beyond what ComfyUI already ships.
Gotchas
The Start node intentionally re-executes on every run so timings are real, but that means anything hanging off its passthrough output also re-runs even if its inputs didn't change - don't use the Start's passthrough as a "cache protector" for an expensive section. And remember ComfyUI executes in dependency order: Start needs to be placed before the nodes you're timing in that order, not just visually above them. Multiple pairs work independently, so you can time several sections of one workflow at once - that's the "Local" in the name.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| passthrough | * | Any value or list — passed through unchanged. | |
| timer | TIMER | Connect from a TimerStart node's 'timer' output. | |
| format | COMBO | h m s | Output format. h m s → '3h 5m 2s' / '34s' (zero parts omitted) hh:mm:ss → '03:05:02' h → float hours (2 dp) m → float minutes (2 dp) s → float seconds (2 dp) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| passthrough | * | The passthrough input, unchanged. |
| time_string | STRING | Elapsed time as a formatted string (empty for float-only formats). |
| time_float | FLOAT | Elapsed time as a float in the unit chosen by 'format' (0.0 for string-only formats). |