Delay
An honest pause you can drop into any wire
- value
- value
Delay is the most honest node in this pack. It does exactly one thing: sleep for N seconds, then pass whatever value came in straight through. That's it. No cleverness, no side effects, no hidden state - and that's precisely why it's useful.
The mechanism, from the source, is a one-liner: time.sleep(seconds), wrapped so the value rides through untouched. It's a wildcard * node, so it accepts a MODEL, a LATENT, a string, anything, and hands back the same thing. The inputs are value (anything - "drop this node into any wire," per the tooltip), seconds (0–600, default 0.5), and an optional label that tags the console line so you can tell which delay fired when several are in play.
Where it earns its keep is inside a loop body. The pack's Repeat/For Each loops rebuild the graph between iterations, and a wall-clock pause is how you make a slow iteration watchable - the console prints [Delay] sleeping 0.5s (with your label, if set) and the queue visibly paces. If you're debugging which iteration of a loop is producing the bad output, a half-second gap between console lines is often all the visibility you need. It's also handy as a crude rate-limiter or to give a browser-served preview (like the pack's own HTML compare page) time to appear before the next run stomps it.
The one thing to say out loud: this blocks the queue. It's a real sleep on the execution thread, not a non-blocking timer, so a 60-second delay holds up whatever is queued behind it. The 0.5 second default is a good reminder of what it's for - debugging rhythm, not production pacing.
Installing
Ships in Kinburg-Nodes: ComfyUI Manager → search "Kinburg-Nodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Kinburg/Kinburg-Nodes
# restart ComfyUI
Pure Python time module - no dependencies, no models, nothing to download. It's in the flow/loops package alongside the For Each/Repeat/While family, so if you're already using those loops for graph-expansion iteration, this is the sibling that makes them legible.
Gotchas
Don't use it as a workaround for missing sync between nodes - if you're sleeping to "wait for a file to exist," you're building a race condition with extra steps. And remember the default of 0.5 s multiplies across loop iterations: a 100-iteration loop with default delay adds 50 seconds of pure waiting. Set seconds to 0 when you want the node as a passthrough marker that just logs - the print still happens, the sleep doesn't.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| value | * | Passed straight through after the pause — drop this node into any wire. | |
| seconds | FLOAT | 0.50–600 | How long to pause before passing the value on. Handy inside a loop body to watch iterations. |
| labelopt | STRING | Optional tag printed to the console on each pause, e.g. to mark which delay fired. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |