Skip to content

execution_light

The same workflow execution as execution, with the video capture removed. One screenshot at the end.

Needs server (provided by registration)
Default no (opt-in)
Fails the run yes
Source orchestration/levels/execution_light.py

The workflows really run and the results are just as real -- what you lose is the recording, not the coverage.

Why it exists

The 5 fps capture loop in execution pegs the browser process at 100% CPU. On a weak runner -- macos-cpu on a 7 GB GitHub-hosted machine is the case that motivated this -- the Playwright IPC pipe eventually dies, taking the run with it.

Here the browser sits idle while the workflow is driven from Python over WebSocket polling, and exactly one screenshot is taken at the end. Same execution, a fraction of the load.

That trade is the whole level: pick it per lane, not per pack (ADR-0011).

What you get, and what you lose

execution execution_light
Workflows actually run yes yes
results.json, durations, RAM/VRAM peaks yes yes
Per-workflow logs and console yes yes
Final screenshot yes yes
Canvas video (driver.mp4) yes no
Browser CPU load during the run high idle

The results gallery still gets a card per workflow; it just shows a still where the video would be.

How a failure is detected

This is the only level that queues through the API rather than the browser, so it listens for ComfyUI's execution events on a WebSocket directly.

That listening is conditional in a way worth knowing about. ComfyUI only sends execution_start, execution_error and execution_success when the prompt was submitted with a client_id -- all three are broadcast=False, and PromptExecutor.add_message gates on client_id is not None or broadcast (execution.py). A prompt queued without one produces no terminal event at all, so a failing workflow and a passing one look identical on the wire.

comfy-test sends the client_id of the socket it is listening on. As a second line of defence it also reads the verdict ComfyUI files in /history/<prompt_id>: status.status_str is success or error, and the execution_error payload is replayed in status.messages. So a failure is reported with the real exception type, message and node whether it was seen live or recovered afterwards.

This used to be a silent pass

Before that fix, a workflow that raised mid-graph produced no event, the completion fallback saw a history entry, concluded "done", and reported passed. Verified against ComfyUI 0.33.0.

Choosing between them

Both are terminal levels: a run ends in one of them, not both. Which one is decided by [test] levels in your comfy-test.toml -- list one or the other. There is no command-line override (ADR-0012).

Zero workflows is an error

Listing execution_light on a pack that ships no workflows now fails the run. It used to log one line and return PASSED: the level that exists to prove your nodes run had nothing to run, and the badge said pass.

Three ways out, depending on what you meant: add a workflow, drop the level from [test] levels, or set skip_workflow = true under [test.<lane>] to skip workflows on one lane. See the note on execution.

Config

Opt-in -- it is not in the default set, so it must be listed in levels. Same workflow keys as execution: [test.workflows] cpu / cuda / timeout, and [test] res for the screenshot.

See also

  • The ladder -- all 13 levels and the resource model
  • execution -- the full-capture version
  • Lanes -- which lanes are memory-constrained