macos-cpu¶
Apple Silicon, MPS rather than CUDA, and the most expensive runner in the matrix. The lane that catches "CUDA or nothing" assumptions.
| OS / accelerator | macOS / CPU |
| Install method | manual -- venv + a ComfyUI checkout |
| Runner | macos-latest (GitHub-hosted, 10x billing) |
| Install path | attach |
| Config key | [test.macos] |
| Also accepts | macos, macos_cpu |
Why this lane exists¶
It is the only lane where cuda_capable is false. A pack that reaches for
torch.device("cuda") unconditionally, or calls torch.cuda.empty_cache() as
if it were universal, fails here and passes everywhere else.
The ComfyUI-native answers are comfy.model_management.get_torch_device() and
soft_empty_cache(), which dispatch across MPS, XPU, NPU, MLU and CUDA.
syntax fails the first pattern statically and
warnings reports the second.
Cost, and execution_light¶
At 10x billing this lane dominates a full matrix's runner budget. It is also
memory-constrained: the full per-frame capture loop can peg the browser process
and kill the Playwright IPC pipe on a 7 GB runner, which is exactly why
execution_light exists
(ADR-0011).
A pack that hits this lists execution_light instead of execution; for
per-lane variation use skip_workflow:
[test.macos]
skip_workflow = true # run the pipeline, not the workflows
Gotchas¶
- Attach lane -- no installability claim.
- macOS resolves pack requirements differently. That lane overrides the
index-routed install path with plain uv, so
extra_pip_indicesmay not reach your pack's own requirements there. Verify before depending on it.
See also¶
macos-desktop-- the Electron app on the same hardware