Execution Time Reporter
The text file that finally tells you which node ate your VRAM
You've got a workflow that works but takes forever, or a video gen that OOMs at the same step every run. ComfyUI's status bar gives you a total time, but it won't say which node is the pig. ExecutionTimeReporter is a tiny node from the ComfyUI_performance-report pack that answers exactly that: it times every node in the graph, watches GPU and RAM as each one runs, and dumps the whole autopsy to a text file you can actually read.
What it actually does
Here's the thing that surprises people: the node itself does nothing. It has zero inputs, zero outputs, and nothing to wire. You just drop it into a workflow (the README says at the end), run, and then go read a report.
The real work happens behind the scenes. The pack monkeypatches ComfyUI's execution engine on startup - it wraps execution.execute and PromptExecutor.execute_async - and that wrapper times every single node, grabs GPU memory before and after via torch.cuda.memory_allocated()/reserved(), resets and reads per-node peak memory, and tracks RAM with psutil. When the workflow finishes, if the ExecutionTimeReporter node was in it, the pack writes ComfyUI/output/reports/execution_report_YYYYMMDD-HHMMSS.txt and clears its tracking data.
The report is genuinely useful once you get past the plain-text formatting. You get a chronological execution timeline with per-node duration, GPU delta and peak, and RAM delta; a performance analysis sorted slowest-first with each node's share of total time; a memory section that flags the VRAM hogs; and a summary that subtracts node time from wall-clock time to show you ComfyUI's own framework overhead. Small deltas are filtered out (>1MB GPU, >10MB RAM), so it doesn't drown you in noise. That "this node takes 65% of the run" ranking is the whole reason to install it - it turns "why is this slow?" from a guess into a list.
Installing it
Standard custom-node drill:
cd ComfyUI/custom_nodes
git clone https://github.com/njlent/ComfyUI_performance-report
Then restart ComfyUI. You can also search "ComfyUI Execution Time Reporter" in ComfyUI Manager, though for a pack this obscure the clone is the more reliable path.
One real gotcha: there's no requirements.txt in the pack, but psutil is a hard import in its monitoring code - not wrapped in a try/except like torch is. If your ComfyUI environment doesn't already have psutil, the whole pack fails to load. The fix is one line: pip install psutil. If GPU stats show up as "not available," your torch was built without CUDA - that's expected, not broken.
Common issues & honest caveats
- "No timing data found": the reporter node isn't in the workflow. It only exists to trigger the report, so no node, no file.
- No report after a run: the report is written only when the workflow completes successfully. Fail the run and you get nothing - you don't even get a partial file.
- Permission errors:
output/reportsneeds to be writable by the ComfyUI process. Usually a non-issue, but worth knowing.
The bigger caveat is architectural: this is a monkeypatch of ComfyUI internals, and the README's "works with all recent versions" is optimistic. A ComfyUI update that changes execution.execute or execute_async won't just break the reports - it can break every queue, because the wrapper wraps the real function. Keep the pack updated, and don't leave it installed forever.
Also, the timing runs on every workflow once the pack is loaded, not just ones with the node - the file write is what's gated. And tracking data is only cleaned up when a report is generated, so workflows run without the node leave entries behind. It's small per run, but on a long-lived server it creeps. Practical takeaway: install it for a profiling session, rip it out when you're done.
Is it worth it?
It's an obscure pack with basically no community footprint - I checked, nobody's really talking about it - but the source is three small files and it does exactly what it says. Given the ecosystem's malware history, "read the three files" is a feature, not a bug. Reach for it when you're tuning a workflow or chasing an OOM; skip it if you just want a total time, because ComfyUI already shows you that. For finding the node eating 65% of your render, it's the rare profiling tool that's boring in the best way.
Inputs (0)
No inputs
Outputs (0)
No outputs