Ready-to-follow checklist for standing up a headless Linux + eGPU CUDA node to
offload the CUDA-only 3D/mocap jobs the Mac can't run (splat->mesh, GVHMR mocap).
Bare-metal Linux required (no VM GPU passthrough on Mac hosts). Planned remote-CUDA
operators: sugar_mesh, gvhmr_mocap.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
trellis_mac verified end-to-end: 18.4MB PBR GLB, clean coherent geometry on a
thin-ringed astrolabe (far beyond SF3D draft quality). ~15GB one-time download
then ~5min cached generation. All three local image->3D paths now live: sf3d
(fast draft), trellis_mac (SOTA local), plus fal cloud tier.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
dinov3-vitl16-pretrain-lvd1689m access granted (the natural-image variant TRELLIS.2
needs — note the approval email named the sat493m satellite variant, but lvd1689m
came through too). Added HF_HUB_DISABLE_XET=1 (same xet download bug as flux) +
KMP_DUPLICATE_LIB_OK/OMP_NUM_THREADS=1 guards (torch + Metal-kernel omp). First
local TRELLIS.2 generation now running.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Two new local image-prep operators through the already-installed mflux 0.18 (no
new heavy install, ungated weights):
- seedvr2_upscale: mflux-upscale-seedvr2 (ByteDance SeedVR2, MIT) — faithful
local upscale, free alternative to cloud fal_upscale
- mflux_image_edit: mflux-generate-qwen-edit (Qwen-Image-Edit, Apache-2.0) —
local prompt-based image editing, free alternative to fal_image_edit
Research verdict on dinov3 (recorded): waiting for Meta approval is the only
legitimate path — TRELLIS.2's DiT is trained on DINOv3 ViT-L/16 features so the
encoder can't be swapped, and the only ungated mirrors are unauthorized
re-uploads. trellis_mac stays blocked on the pending gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New operator: briaai/RMBG-2.0 image->transparent cutout, fully local on Apple
Silicon (weights unlocked by owner HF license). Free local alternative to the
cloud fal_bg_remove; the recommended pre-pass before SF3D / image->3D. Verified:
clean 1024px cutout of the FLUX astrolabe (alpha 0-255, 86.6% removed, thin rings
preserved). Same OpenMP guardrails as sf3d. scripts/install_rmbg.sh; venvs/rmbg.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
torch and the compiled texture_baker/uv_unwrapper each link a libomp. Allowing
the duplicate runtime clears 'OMP: Error #15' but the duplicate then corrupts the
multithreaded CPU LAPACK path (torch.linalg.svd MPS fallback) -> segfault with no
Python traceback. Forcing OMP_NUM_THREADS=1 + MKL_NUM_THREADS=1 removes the
threading collision. Verified: clean 1.3MB GLB (13298 verts) in ~5s on M3 Ultra,
9GB peak. SF3D local image->3D now works (weights unlocked by owner HF license).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- run.py: force HF_HUB_DISABLE_XET=1 (xet chunked downloader fails on BFL repos
with 'Unable to parse string as hex hash value'; HTTP path is reliable)
- BENCHMARKS.md: warm generation times for all 5 local FLUX models on M3 Ultra
(Klein 4B 9.1s, schnell-4bit 18.5s, Klein 9B 18.7s, schnell 20.4s, dev 108s).
Verdict: Klein 9B = best hero-asset quality (beats schnell at same speed),
Klein 4B = volume workhorse.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- mb: zero-dependency python CLI for the full API (ops/upload/run/wait/follow/
download incl. folder assets, retry/cancel, settings). Schema-aware -p k=v
coercion. Works from any tailnet machine via MB_HOST. Tested end-to-end
(upload -> blender_convert -> download).
- AGENTS.md: complete handover brief for other agents using this box as an
asset factory — endpoints, CLI reference, catalog, recipes, lanes/etiquette.
- scripts/serve.sh (headless start/restart) + scripts/install_launchagent.sh
(optional boot persistence, owner-run)
- flux_local upgraded to mflux 0.18 reality: flux2-klein-4b default (Apache,
UNGATED — runs with zero keys), klein-9b, schnell/schnell-4bit community
quant, dev/krea-dev. Research verdict: FLUX.1-dev no longer competitive
(Elo ~1027) vs klein ~1083-1119 vs nano-banana ~1154.
- openrouter_image rewritten to the dedicated Image API (POST /api/v1/images):
b64_json parsing, seed, resolution/aspect, exact usage.cost logging; model
enum: gemini-2.5-flash-image / 3.1-flash-image (NB2) / 3-pro-image
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- flux_local: prompt->image fully on-device via mflux (schnell/dev, steps,
quantize, seed, size). Both FLUX repos are HF-gated as of 2026-07 (schnell
included) — clean GatedRepoError surfaces with a hint; needs owner HF token.
- openrouter_image: prompt->image via OpenRouter chat/completions with
modalities [image,text]; parses data-URL images from the response; model
picker for nano-banana / nano-banana-pro. Gated on OPENROUTER_API_KEY.
- settings: openrouter_key added to vault (masked/redacted/env-injected)
- scripts/install_mflux.sh; venv installed
- A/B flow: run both with the same prompt, judge in Compare mode
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Operators (16 total):
- fal_hunyuan3d_v21: Hunyuan3D 2.1 single-image (live-verified dash variant,
~90s; v21 multi-view is broken on fal — v2 stays the multi-view path)
- fal_bg_remove (BiRefNet v2): subject cutout pre-pass — the biggest quality
lever before image->3D
- fal_upscale (SeedVR faithful upscale), fal_image_edit (nano-banana prompt
edits), fal_text_image (Ideogram v3 — first no-input operator)
- fal_common: collect='images' mode; recursive URL extractor now takes the
wanted extension set
UI: operator dropdown grouped by category (optgroup); operators with
accepts: [] run without a selected asset ('No input asset needed' note);
run-button/launch logic updated accordingly.
Review fixes (Opus Phase 1 commit):
- runner._run_lane crashed (TypeError) when a queued job was deleted before
the worker picked it up
- PUT /api/settings treated empty string as a masked placeholder, making
secrets impossible to clear from the UI
- store.register_file mutated the caller's meta dict via pop
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>