Sub-ticket of epic #346, Mac workstream. Depends on #356 (device seam). Target hardware: M5 Pro Max, 128 GB unified memory.
What: an end-to-end pipeline profile that runs every stage on Apple Silicon using only Tier-A backends (audit: portable with a device patch, no CUDA extensions). 128 GB unified memory removes the 24 GB VRAM ceiling that constrains the Linux host — models that queue behind GpuCoordinator leases on SERVER can run generously on the Mac.
Profile (default model per stage on macOS):
Stage
Backend
Audit status
concept
SDXL-Lightning (fallback SDXL-Turbo)
portable-as-is
modeling
TripoSR (fallback Shap-E)
needs-work: torchmcubes CPU build, rembg/onnxruntime
texturing
SD-Turbo-Tex
portable-as-is
rigging
smart_rig (Blender addon, CPU) → RigNet CPU fallback (pyg CPU wheels, slow)
headless Blender w/ Metal (#356) + OpenPose/MediaPipe (already CPU)
fine
Scope:
Introduce a pipeline profile concept (linux-cuda vs macos-mps) selecting default + allowed models per stage — data-driven alongside the stage plans from #347; per-OS manifest overrides from #356
Validate each profile stage on the M5: run, record wall-time + peak memory + output quality on 3 student-realistic prompts (matrix mirrors spike #354 — post results there for comparison against the CUDA host)
FLUX.schnell as optional concept upgrade: bf16→fp16/fp32 on MPS, 22 GB weights — trivial fit in 128 GB unified memory; measure speed before enabling
MPS-specific fixes discovered during validation (op fallbacks via PYTORCH_ENABLE_MPS_FALLBACK, dtype issues) folded back into #356's device helper
hymotion reality-check: manifest says 4 GB, CLAUDE.md says 24 GB+ — measure on the Mac (unified memory can hold it either way); enable in the profile if throughput is acceptable
Document the profile + measured timings in art_pipe docs (upstream candidate)
Note: quality parity with the CUDA profile is NOT the goal here — a working, honest Mac chain is. TRELLIS-class modeling quality arrives via #355/M3.
Acceptance: on the M5 Mac, one command runs a character prompt through concept → modeling → texturing → rigging → animation → export producing a rigged, animated GLB with previews, all stages on MPS/CPU per the profile, with recorded timings per stage.
Sub-ticket of epic #346, Mac workstream. Depends on #356 (device seam). Target hardware: M5 Pro Max, 128 GB unified memory.
**What:** an end-to-end pipeline profile that runs every stage on Apple Silicon using only Tier-A backends (audit: portable with a device patch, no CUDA extensions). 128 GB unified memory removes the 24 GB VRAM ceiling that constrains the Linux host — models that queue behind GpuCoordinator leases on SERVER can run generously on the Mac.
**Profile (default model per stage on macOS):**
| Stage | Backend | Audit status |
|---|---|---|
| concept | SDXL-Lightning (fallback SDXL-Turbo) | portable-as-is |
| modeling | TripoSR (fallback Shap-E) | needs-work: torchmcubes CPU build, rembg/onnxruntime |
| texturing | SD-Turbo-Tex | portable-as-is |
| rigging | smart_rig (Blender addon, CPU) → RigNet CPU fallback (pyg CPU wheels, slow) | CPU-fine |
| animation | MDM | device int `0` → mps mapping (#356) |
| export/enrichment | headless Blender w/ Metal (#356) + OpenPose/MediaPipe (already CPU) | fine |
**Scope:**
- [ ] Introduce a **pipeline profile** concept (linux-cuda vs macos-mps) selecting default + allowed models per stage — data-driven alongside the stage plans from #347; per-OS manifest overrides from #356
- [ ] Validate each profile stage on the M5: run, record wall-time + peak memory + output quality on 3 student-realistic prompts (matrix mirrors spike #354 — post results there for comparison against the CUDA host)
- [ ] FLUX.schnell as optional concept upgrade: bf16→fp16/fp32 on MPS, 22 GB weights — trivial fit in 128 GB unified memory; measure speed before enabling
- [ ] MPS-specific fixes discovered during validation (op fallbacks via `PYTORCH_ENABLE_MPS_FALLBACK`, dtype issues) folded back into #356's device helper
- [ ] hymotion reality-check: manifest says 4 GB, CLAUDE.md says 24 GB+ — measure on the Mac (unified memory can hold it either way); enable in the profile if throughput is acceptable
- [ ] Document the profile + measured timings in art_pipe docs (upstream candidate)
**Note:** quality parity with the CUDA profile is NOT the goal here — a working, honest Mac chain is. TRELLIS-class modeling quality arrives via #355/M3.
**Acceptance:** on the M5 Mac, one command runs a character prompt through concept → modeling → texturing → rigging → animation → export producing a rigged, animated GLB with previews, all stages on MPS/CPU per the profile, with recorded timings per stage.
First real generations on the M5 Max — both Tier-A launch backends work on MPS through the canonical worker seam (artpipe serve → POST /jobs), zero PYTORCH_ENABLE_MPS_FALLBACK needed. Report committed at art_pipe/docs/mps-validation-m5.md (branch feature/device-abstraction-mps, commits ef32053/6463acb/5f0e04d).
Run
Wall time
Output
sdxl_lightning "robot mascot" (cold)
19.9 s
clean 1024px concept PNG
sdxl_lightning "red dragon"
12.4 s
prompt-faithful cartoon game art (eyeballed: excellent)
~5–7 s of each SDXL run is per-job model reload (fresh subprocess per job) — warm-worker mode is the biggest Mac latency lever. Disk: 8.8 GB weights of the 25 GB budget.
Fixes committed (two are upstream candidates): torchmcubes has no MPS kernel → CPU marching-cubes wrap in triposr; transformers<5 pin (breaks TripoSR ckpt on CUDA too); TripoSR weights/torchmcubes provisioning via manifest setup_commands; psutil made optional in hardware.detect() (stdlib server venv crashed).
Remaining for this ticket: profile config concept, sdxl_turbo/shap_e/mdm validation, unified-memory admission budgeting (VRAM gate is nvidia-smi-only → everything admitted optimistically), Blender export stage (no Blender installed here yet). Cross-reference for the #354 matrix: Mac numbers above vs CUDA host TBD.
**First real generations on the M5 Max — both Tier-A launch backends work on MPS through the canonical worker seam** (`artpipe serve` → `POST /jobs`), zero `PYTORCH_ENABLE_MPS_FALLBACK` needed. Report committed at `art_pipe/docs/mps-validation-m5.md` (branch `feature/device-abstraction-mps`, commits `ef32053`/`6463acb`/`5f0e04d`).
| Run | Wall time | Output |
|---|---|---|
| sdxl_lightning "robot mascot" (cold) | 19.9 s | clean 1024px concept PNG |
| sdxl_lightning "red dragon" | 12.4 s | prompt-faithful cartoon game art (eyeballed: excellent) |
| sdxl_lightning "treasure chest" | 10.3 s | clean |
| triposr dragon PNG → 3D | 11.3 s | 81k-vert OBJ + 3.2 MB GLB, clearly the dragon w/ vertex colors |
~5–7 s of each SDXL run is per-job model reload (fresh subprocess per job) — **warm-worker mode is the biggest Mac latency lever**. Disk: 8.8 GB weights of the 25 GB budget.
Fixes committed (two are upstream candidates): torchmcubes has no MPS kernel → CPU marching-cubes wrap in triposr; `transformers<5` pin (breaks TripoSR ckpt on CUDA too); TripoSR weights/torchmcubes provisioning via manifest `setup_commands`; psutil made optional in `hardware.detect()` (stdlib server venv crashed).
Remaining for this ticket: profile config concept, sdxl_turbo/shap_e/mdm validation, unified-memory admission budgeting (VRAM gate is nvidia-smi-only → everything admitted optimistically), Blender export stage (no Blender installed here yet). Cross-reference for the #354 matrix: Mac numbers above vs CUDA host TBD.
Slice 2 done on feature/device-abstraction-mps (commits 82b422f…1d56900; pytest 596 passed — 22 new profile tests; independently re-verified).
Pipeline profiles implemented in config.py (PIPELINE_PROFILES: linux-cuda/windows-cuda/macos-mps), auto-detected (detect_profile_name(), ARTPIPE_PROFILE override). The existing PIPELINE_* constants now derive from the active profile, so preset resolution, submission normalization, node registry, and stage fallbacks were wired for free. Verified live: default submission on this Mac resolves triposr/image_to_3d; env override flips to linux-cuda.
Unified-memory VRAM admission implemented (not deferred): dispatcher free/total VRAM falls back to unified memory on Apple Silicon, vram_mb enforced with 1.4× overhead & 0.85 cap.
sdxl_turbo on MPS: zero fixes (6.2–9.3 s). shap_e on MPS: 2 fixes (undeclared ipywidgets dep — hits CUDA too; float64→float32 schedule extraction, upstream candidate) — 35 s/64-step and 116 s/128-step text→3D GLBs, prompt-faithful.
Disk now ~18 GB weights total. Deferred: flux (gated), mdm (SMPL licensing — flagged: it's the macos-mps motion default, needs the license step or a profile change), sf3d/instantmesh/riggers/Blender stages; shap_e fixed-output-path clobber noted.
Next: first end-to-end platform run on the Mac (#359 slice 1) using the validated concept+modeling chain.
Slice 2 done on `feature/device-abstraction-mps` (commits `82b422f`…`1d56900`; pytest **596 passed** — 22 new profile tests; independently re-verified).
- **Pipeline profiles implemented** in `config.py` (`PIPELINE_PROFILES`: linux-cuda/windows-cuda/macos-mps), auto-detected (`detect_profile_name()`, `ARTPIPE_PROFILE` override). The existing `PIPELINE_*` constants now derive from the active profile, so preset resolution, submission normalization, node registry, and stage fallbacks were wired for free. Verified live: default submission on this Mac resolves triposr/image_to_3d; env override flips to linux-cuda.
- **Unified-memory VRAM admission implemented** (not deferred): dispatcher free/total VRAM falls back to unified memory on Apple Silicon, `vram_mb` enforced with 1.4× overhead & 0.85 cap.
- **sdxl_turbo on MPS: zero fixes** (6.2–9.3 s). **shap_e on MPS: 2 fixes** (undeclared ipywidgets dep — hits CUDA too; float64→float32 schedule extraction, upstream candidate) — 35 s/64-step and 116 s/128-step text→3D GLBs, prompt-faithful.
- Disk now ~18 GB weights total. Deferred: flux (gated), mdm (SMPL licensing — flagged: it's the macos-mps motion default, needs the license step or a profile change), sf3d/instantmesh/riggers/Blender stages; shap_e fixed-output-path clobber noted.
Next: first end-to-end platform run on the Mac (#359 slice 1) using the validated concept+modeling chain.
Resolved in spikersoft-artpipe PR #1 (merged to main). The macos-mps profile is shipped config (auto-detected, ARTPIPE_PROFILE override), unified-memory VRAM admission enforced, and the full Tier-A chain validated repeatedly on the M5 — culminating in complete 7-stage Character and Prop plans through the platform stack (45–72 s Prop smoke). Validated backends at close: sdxl_lightning, sdxl_turbo, triposr, shap_e, sd_turbo_tex, Blender stages, SafetyCheck, plus trellis_mac in allowed_models (#358). Remaining per-backend stragglers (flux gated, mdm SMPL licensing, sf3d/instantmesh) are documented in docs/mps-validation-m5.md and tracked via #358/#354 where relevant. Closing.
Resolved in spikersoft-artpipe PR #1 (merged to `main`). The `macos-mps` profile is shipped config (auto-detected, `ARTPIPE_PROFILE` override), unified-memory VRAM admission enforced, and the full Tier-A chain validated repeatedly on the M5 — culminating in complete 7-stage Character and Prop plans through the platform stack (45–72 s Prop smoke). Validated backends at close: sdxl_lightning, sdxl_turbo, triposr, shap_e, sd_turbo_tex, Blender stages, SafetyCheck, plus trellis_mac in allowed_models (#358). Remaining per-backend stragglers (flux gated, mdm SMPL licensing, sf3d/instantmesh) are documented in `docs/mps-validation-m5.md` and tracked via #358/#354 where relevant. Closing.
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.
Sub-ticket of epic #346, Mac workstream. Depends on #356 (device seam). Target hardware: M5 Pro Max, 128 GB unified memory.
What: an end-to-end pipeline profile that runs every stage on Apple Silicon using only Tier-A backends (audit: portable with a device patch, no CUDA extensions). 128 GB unified memory removes the 24 GB VRAM ceiling that constrains the Linux host — models that queue behind GpuCoordinator leases on SERVER can run generously on the Mac.
Profile (default model per stage on macOS):
0→ mps mapping (#356)Scope:
PYTORCH_ENABLE_MPS_FALLBACK, dtype issues) folded back into #356's device helperNote: quality parity with the CUDA profile is NOT the goal here — a working, honest Mac chain is. TRELLIS-class modeling quality arrives via #355/M3.
Acceptance: on the M5 Mac, one command runs a character prompt through concept → modeling → texturing → rigging → animation → export producing a rigged, animated GLB with previews, all stages on MPS/CPU per the profile, with recorded timings per stage.
First real generations on the M5 Max — both Tier-A launch backends work on MPS through the canonical worker seam (
artpipe serve→POST /jobs), zeroPYTORCH_ENABLE_MPS_FALLBACKneeded. Report committed atart_pipe/docs/mps-validation-m5.md(branchfeature/device-abstraction-mps, commitsef32053/6463acb/5f0e04d).~5–7 s of each SDXL run is per-job model reload (fresh subprocess per job) — warm-worker mode is the biggest Mac latency lever. Disk: 8.8 GB weights of the 25 GB budget.
Fixes committed (two are upstream candidates): torchmcubes has no MPS kernel → CPU marching-cubes wrap in triposr;
transformers<5pin (breaks TripoSR ckpt on CUDA too); TripoSR weights/torchmcubes provisioning via manifestsetup_commands; psutil made optional inhardware.detect()(stdlib server venv crashed).Remaining for this ticket: profile config concept, sdxl_turbo/shap_e/mdm validation, unified-memory admission budgeting (VRAM gate is nvidia-smi-only → everything admitted optimistically), Blender export stage (no Blender installed here yet). Cross-reference for the #354 matrix: Mac numbers above vs CUDA host TBD.
Slice 2 done on
feature/device-abstraction-mps(commits82b422f…1d56900; pytest 596 passed — 22 new profile tests; independently re-verified).config.py(PIPELINE_PROFILES: linux-cuda/windows-cuda/macos-mps), auto-detected (detect_profile_name(),ARTPIPE_PROFILEoverride). The existingPIPELINE_*constants now derive from the active profile, so preset resolution, submission normalization, node registry, and stage fallbacks were wired for free. Verified live: default submission on this Mac resolves triposr/image_to_3d; env override flips to linux-cuda.vram_mbenforced with 1.4× overhead & 0.85 cap.Next: first end-to-end platform run on the Mac (#359 slice 1) using the validated concept+modeling chain.
Resolved in spikersoft-artpipe PR #1 (merged to
main). Themacos-mpsprofile is shipped config (auto-detected,ARTPIPE_PROFILEoverride), unified-memory VRAM admission enforced, and the full Tier-A chain validated repeatedly on the M5 — culminating in complete 7-stage Character and Prop plans through the platform stack (45–72 s Prop smoke). Validated backends at close: sdxl_lightning, sdxl_turbo, triposr, shap_e, sd_turbo_tex, Blender stages, SafetyCheck, plus trellis_mac in allowed_models (#358). Remaining per-backend stragglers (flux gated, mdm SMPL licensing, sf3d/instantmesh) are documented indocs/mps-validation-m5.mdand tracked via #358/#354 where relevant. Closing.