Nodes/ComfyUI Render Time/⭐Render Time (ComfyCode)⭐
ComfyUI Node

⭐Render Time (ComfyCode)⭐

The node that times your whole workflow and does nothing itself

By videofeedback·Created 5 months ago·Updated 4 months ago· 1
⭐Render Time (ComfyCode)⭐
  • source
    prefix

    RenderTime is the front door of the ComfyUI Render Time pack, and it is a small scam in the best way: the node's actual Python function is literally called noop and returns an empty dict. It computes nothing, saves nothing, connects to nothing. All the work happens in the plugin's patched execution engine, and the node is just the dashboard that shows you what it recorded. You drop it on the canvas with zero wires, queue a run, and it fills with a per-node timing table. It's a telemetry display dressed up as a node, and for a lot of workflows that's exactly what you want.

    When do you reach for it? When a workflow is slow and you can't tell where the time is going. Is it the sampler, the upscaler, the VAE decode, or the file write? Guessing is how you burn an evening. This replaces the guess with a wall-clock number per node, plus a share-of-total percentage bar so the culprit jumps out at you. It also labels cached nodes [CACHED] and counts them as 0 s - which is honestly the fastest way to internalize how ComfyUI's cache works. Change only the seed and the whole loader/sampler branch re-runs while unchanged inputs get skipped; watch that table once and you'll stop re-queuing identical prompts out of paranoia.

    How it works

    The pack hooks the engine in three places when it loads (__init__.py): it wraps comfy_execution.get_output_data to clock every node start/end, wraps execute to detect cache hits and inject the timing snapshot into extra_pnginfo on output nodes, and wraps PromptExecutor.execute_async to total things up, write the report files, and push a render_time.update WebSocket event to the browser. The node's frontend listens for that event and redraws - which is also why it's per-tab safe: each workflow tab keeps its own run's data, so switching tabs doesn't show you somebody else's numbers.

    The two inputs that matter

    The node has no outputs at all - don't go looking for wires leaving it. Just these two inputs:

    • prefix (STRING, default empty) - the shared filename prefix for the files it writes. The author's own tooltip calls it "the shared filename prefix used by JSON, TXT, PNG, and Render Time MP4 outputs." Set it per workflow, or your output/ folder fills with dated-but-generic files you can't tell apart.
    • source (optional, accepts any type) - wire this from a Save Image or Save Video node to scope the report to that branch. The pack walks upstream from the wire and only reports nodes in that dependency graph, which is exactly what you want when one workflow produces multiple outputs and you need to time one of them in isolation. Skip it and you get the whole run.

    Installing it

    ComfyUI Manager, search ComfyUI Render Time, install, restart. Or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/videofeedback/comfyui-render-time comfyui-Render-Time
    pip install -r comfyui-Render-Time/requirements.txt
    

    The only dependency is Pillow, there are zero model downloads, and it needs ComfyUI >= 0.3.0 and Python >= 3.10. On macOS, the README insists on Python 3.13 specifically (prebuilt wheels; newer alpha builds can fail), so brew install [email protected] first if you're there. Restart ComfyUI either way - the engine patches only apply at startup.

    Gotchas worth knowing

    • The table is empty until you run something. Add the node, queue a prompt, then it fills. That's not a bug.
    • All four file outputs are on by default. Every run writes LOG.txt (live, line by line), LOG.json, COMFYUI.json (the workflow with timing embedded in extra.render_time_report - drag it back in to reload), and a WORKFLOW.png. If you only want the on-screen table, flip them off in the node's Settings tab.
    • Timing is wall-clock, not GPU compute. A slow file write, or a job sitting in queue behind another render, inflates the number. For a real benchmark, run one job alone and compare like-for-like.
    • Log reconstruction needs v1.0.0+ logs. Older logs lack the LINKS_JSON/SLOTS_JSON blocks the reconstruct script needs, and you get an unconnected skeleton.

    One honest caveat: this pack is young and barely has a footprint in the community - a solo author (Ramiro Montes De Oca), MIT-licensed, with no reddit chatter behind it yet. That means fewer eyes on the bugs and no battle-tested reputation. For a tool whose only cost is two seconds of your canvas and one tiny pip install, that's an acceptable trade - it genuinely does one thing well.

    Category⭐ComfyCode⭐

    Inputs (2)

    NameTypeDefaultDescription
    prefixSTRING
    sourceopt*

    Outputs (0)

    No outputs