execution¶
Runs your workflows for real and records the ComfyUI canvas as video while they run. The level that produces the results gallery.
| Needs | server (provided by registration) |
| Default | yes |
| Fails the run | yes |
| Source | orchestration/levels/execution.py, reporting/screenshot.py |
This is the level the whole tool exists for: not a green check, but a video of your nodes working on somebody else's machine.
How the video is made¶
capture_execution_frames() drives a real browser at the live server, loads
the workflow, queues it, and captures at a fixed cadence of 5 fps while it
executes. Frames are written as frame_%06d.png, then encoded by
encode_mp4_timeline() into driver.mp4 -- timeline-accurate, meaning the
mp4's playback timing matches real elapsed capture time, with the pre-run frame
held across the validate/queue window. The loose frames are then dropped; the
mp4 is the artifact the report plays, through a native <video> element with a
real seek bar.
Before capture starts the view is prepared the same way
static_capture does it: fit the graph, close panels and
alerts, hide the unsaved dot. A high-quality PNG is taken after execution
completes, once previews have rendered.
What lands on disk¶
Per workflow, under the run's output directory:
videos/<workflow>/driver.mp4 the canvas recording
videos/<workflow>/metadata.json frame timings + log offsets
screenshots/<workflow>_executed.png final frame, full quality
logs/<workflow>.log that workflow's log slice
logs/<workflow>_console.log browser console
logs/<workflow>_resources.csv RAM/VRAM/CPU samples
Per-workflow status, duration and RAM/VRAM peaks go into results.json. See
what a run does for the full tree.
What it catches¶
Everything the earlier levels structurally cannot: shape and dtype errors, OOM under real allocation, models that fail to load, nodes that produce black images or empty outputs, and the actual wall-clock cost of your graph on each lane.
Zero workflows is an error¶
A pack that ships no workflows at all fails the run. It used to log one
line and return PASSED with no results.json written -- a green badge for
a level that executed nothing.
This is the discovery bug it was hiding: a pack whose example workflows live
in a folder comfy-test does not scan contributes nothing and went green.
Confirm the folder is one of the names ComfyUI itself recognises -- see
what a pack looks like. execution now behaves like
coverage, which has always refused to pass a vacuous 0/0.
Say it deliberately when you mean it:
skip_workflow = trueunder[test.<lane>]-- run the pipeline but not the workflows, on that lane only- drop
executionfrom[test] levels-- stop asking for it at all
An empty per-accelerator selection (cpu = []) is not affected: this
checks that workflows were discovered, not which ones a given lane selected.
Config¶
| Key | Effect |
|---|---|
[test.workflows] cpu / cuda / rocm |
which workflows run on this backend |
[test.workflows] timeout |
per-workflow timeout, default 3600s |
[test] res |
capture resolution (viewport height), default 1080 |
[test.<lane>] skip_workflow |
run the pipeline but not the workflows |
In the default set, and a terminal level: a run ends in exactly one of
static_capture, validation, execution_light and execution, chosen by
what you list in [test] levels
(ADR-0012).
See also¶
- The ladder -- all 13 levels and the resource model
execution_light-- same execution, one still instead of video, for memory-constrained lanes- ADR-0010 -- why a real browser