Spike for epic #346. Independent; improves developer loop for #348+.
Question: art_pipe is CUDA-only (main.py::_check_gpu_compat requires nvidia-smi; its TRELLIS backend is stubbed pending CUDA extension builds), which means every pipeline change needs the shared GPU host. trellis-mac (our fork of the PyTorch-MPS TRELLIS.2 port — generate.py, Metal backends in backends/, patches/mps_compat.py; ~5 min per GLB on an M4 Pro) already does image→3D locally. Can it serve as a local-dev modeling backend so the full submit→worker→GridFS→SignalR loop runs on a Mac?
Investigate (time-boxed):
Wrap trellis-mac behind art_pipe's worker protocol (stdin JSON → stdout NDJSON per src/artpipe/worker.py) as an alternate artpipe.json manifest — how much glue is it? (They differ: Python 3.10/cu128 vs 3.11/MPS — separate venv is fine, that's art_pipe's model anyway)
Or simpler: a dev-mode flag in the #348 worker that shells out to trellis-generate directly for the modeling stage and stubs the other stages
What can't run on Mac (rigging chain? Blender headless actually works on macOS — check art_pipe's Blender 5.1 assumptions) — define the honest local-dev boundary
Whether GpuCoordinator interaction should be bypassed or mocked in dev mode
Deliverable: a comment with the recommended local-dev story for pipeline work (wrap vs dev-flag vs "don't bother, use the GPU host"), and if viable, a follow-up ticket to implement it. Also note anything worth upstreaming to Eric's ProArt repo (e.g. an MPS backend seam).
Spike for epic #346. Independent; improves developer loop for #348+.
**Question:** art_pipe is CUDA-only (`main.py::_check_gpu_compat` requires `nvidia-smi`; its TRELLIS backend is stubbed pending CUDA extension builds), which means every pipeline change needs the shared GPU host. `trellis-mac` (our fork of the PyTorch-MPS TRELLIS.2 port — `generate.py`, Metal backends in `backends/`, `patches/mps_compat.py`; ~5 min per GLB on an M4 Pro) already does image→3D locally. Can it serve as a local-dev modeling backend so the full submit→worker→GridFS→SignalR loop runs on a Mac?
**Investigate (time-boxed):**
- [ ] Wrap `trellis-mac` behind art_pipe's worker protocol (stdin JSON → stdout NDJSON per `src/artpipe/worker.py`) as an alternate `artpipe.json` manifest — how much glue is it? (They differ: Python 3.10/cu128 vs 3.11/MPS — separate venv is fine, that's art_pipe's model anyway)
- [ ] Or simpler: a dev-mode flag in the #348 worker that shells out to `trellis-generate` directly for the modeling stage and stubs the other stages
- [ ] What can't run on Mac (rigging chain? Blender headless actually works on macOS — check art_pipe's Blender 5.1 assumptions) — define the honest local-dev boundary
- [ ] Whether GpuCoordinator interaction should be bypassed or mocked in dev mode
**Deliverable:** a comment with the recommended local-dev story for pipeline work (wrap vs dev-flag vs "don't bother, use the GPU host"), and if viable, a follow-up ticket to implement it. Also note anything worth upstreaming to Eric's ProArt repo (e.g. an MPS backend seam).
Static audit done (2026-07-04) — answers the feasibility half of this spike; scope has grown from "local dev path" to a first-class Mac workstream (M1–M4: #356–#359) targeting the M5 Pro Max / 128 GB machine.
OpenPose (cv2.dnn), MediaPipe, RigNet (pyg CPU wheels, slow), smart_rig/Blender
—
Core findings: art_pipe has zero device abstraction — 13 backends hardcode "cuda", install always pulls cu128 wheels (torch_compat.py, venv_setup.py, bootstrap.py), main.py::_check_gpu_compat requires nvidia-smi, and blender/headless/_helpers.py never sets compute_device_type="METAL" so Cycles silently renders on CPU on macOS. Exact file:line inventory is in #356.
Recommendation (supersedes the wrap-vs-dev-flag question): do #356 (device seam, upstream to ProArt) → #357 (all-Tier-A profile = full pipeline on Mac without any Metal kernel work) → #358 (TRELLIS via trellis-mac, then the other Tier-B/C backends). Remaining hands-on validation work of this spike is absorbed into #357's per-stage benchmark checklist. GpuCoordinator handling on Mac is decided in #359 (bypass recommended).
Static audit done (2026-07-04) — answers the feasibility half of this spike; scope has grown from "local dev path" to a first-class Mac workstream (M1–M4: #356–#359) targeting the M5 Pro Max / 128 GB machine.
**Per-backend MPS verdicts:**
| Tier | Backends | Path |
|---|---|---|
| A — portable with device patch | SDXL-Lightning, SDXL-Turbo, SD-Turbo-Tex, Shap-E, TripoSR, MDM, FLUX.schnell (fp16, 22 GB — fits unified memory) | #356 + #357 |
| B/C — blocked by CUDA exts with Metal drop-ins available | TRELLIS (nvdiffrast/spconv/flash-attn), InstantMesh (nvdiffrast), Hunyuan3D paint (custom_rasterizer), UniRig (spconv) — trellis-mac's `mtldiffrast`/`mtlgemm`/`mtlmesh`/`mtlbvh` are API drop-ins | #358 |
| D — no Metal path | TripoSG (fvdb) | CUDA-only, documented |
| CPU-fine today | OpenPose (cv2.dnn), MediaPipe, RigNet (pyg CPU wheels, slow), smart_rig/Blender | — |
**Core findings:** art_pipe has zero device abstraction — 13 backends hardcode `"cuda"`, install always pulls cu128 wheels (`torch_compat.py`, `venv_setup.py`, `bootstrap.py`), `main.py::_check_gpu_compat` requires nvidia-smi, and `blender/headless/_helpers.py` never sets `compute_device_type="METAL"` so Cycles silently renders on CPU on macOS. Exact file:line inventory is in #356.
**Recommendation (supersedes the wrap-vs-dev-flag question):** do #356 (device seam, upstream to ProArt) → #357 (all-Tier-A profile = full pipeline on Mac without any Metal kernel work) → #358 (TRELLIS via trellis-mac, then the other Tier-B/C backends). Remaining hands-on validation work of this spike is absorbed into #357's per-stage benchmark checklist. GpuCoordinator handling on Mac is decided in #359 (bypass recommended).
Spike answered and superseded: the static audit (comment above) became the M1–M4 workstream (#356–#359), and the implementation route chosen was the device seam + Tier-A profile rather than wrapping trellis-mac (which remains #358's flagship item for TRELLIS-class quality). Local dev on Apple Silicon is proven far beyond this spike's question — the full 7-stage Character plan runs end-to-end on the M5 through the platform stack. Closing; nothing left in this spike that isn't tracked in M1–M4.
Spike answered and superseded: the static audit (comment above) became the M1–M4 workstream (#356–#359), and the implementation route chosen was the device seam + Tier-A profile rather than wrapping trellis-mac (which remains #358's flagship item for TRELLIS-class quality). Local dev on Apple Silicon is proven far beyond this spike's question — the full 7-stage Character plan runs end-to-end on the M5 through the platform stack. Closing; nothing left in this spike that isn't tracked in M1–M4.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Spike for epic #346. Independent; improves developer loop for #348+.
Question: art_pipe is CUDA-only (
main.py::_check_gpu_compatrequiresnvidia-smi; its TRELLIS backend is stubbed pending CUDA extension builds), which means every pipeline change needs the shared GPU host.trellis-mac(our fork of the PyTorch-MPS TRELLIS.2 port —generate.py, Metal backends inbackends/,patches/mps_compat.py; ~5 min per GLB on an M4 Pro) already does image→3D locally. Can it serve as a local-dev modeling backend so the full submit→worker→GridFS→SignalR loop runs on a Mac?Investigate (time-boxed):
trellis-macbehind art_pipe's worker protocol (stdin JSON → stdout NDJSON persrc/artpipe/worker.py) as an alternateartpipe.jsonmanifest — how much glue is it? (They differ: Python 3.10/cu128 vs 3.11/MPS — separate venv is fine, that's art_pipe's model anyway)trellis-generatedirectly for the modeling stage and stubs the other stagesDeliverable: a comment with the recommended local-dev story for pipeline work (wrap vs dev-flag vs "don't bother, use the GPU host"), and if viable, a follow-up ticket to implement it. Also note anything worth upstreaming to Eric's ProArt repo (e.g. an MPS backend seam).
Static audit done (2026-07-04) — answers the feasibility half of this spike; scope has grown from "local dev path" to a first-class Mac workstream (M1–M4: #356–#359) targeting the M5 Pro Max / 128 GB machine.
Per-backend MPS verdicts:
mtldiffrast/mtlgemm/mtlmesh/mtlbvhare API drop-insCore findings: art_pipe has zero device abstraction — 13 backends hardcode
"cuda", install always pulls cu128 wheels (torch_compat.py,venv_setup.py,bootstrap.py),main.py::_check_gpu_compatrequires nvidia-smi, andblender/headless/_helpers.pynever setscompute_device_type="METAL"so Cycles silently renders on CPU on macOS. Exact file:line inventory is in #356.Recommendation (supersedes the wrap-vs-dev-flag question): do #356 (device seam, upstream to ProArt) → #357 (all-Tier-A profile = full pipeline on Mac without any Metal kernel work) → #358 (TRELLIS via trellis-mac, then the other Tier-B/C backends). Remaining hands-on validation work of this spike is absorbed into #357's per-stage benchmark checklist. GpuCoordinator handling on Mac is decided in #359 (bypass recommended).
Spike answered and superseded: the static audit (comment above) became the M1–M4 workstream (#356–#359), and the implementation route chosen was the device seam + Tier-A profile rather than wrapping trellis-mac (which remains #358's flagship item for TRELLIS-class quality). Local dev on Apple Silicon is proven far beyond this spike's question — the full 7-stage Character plan runs end-to-end on the M5 through the platform stack. Closing; nothing left in this spike that isn't tracked in M1–M4.