The README still read as a fal.ai front-end with a local afterthought: the headline
`mb` example ran fal_trellis2, the "recommended chain for best image→3D" was four
fal_* calls, and the operator table listed 5 local ops against 9 cloud ones. That is
backwards now — 22 of the 31 operators run entirely on the fleet.
It also predated most of what we have: the whole audio/video/text suite (tts_local,
stt_local, voice_clone_local, music_local, lipsync_local, wan_video, llm_local,
motion_local), comfyui_sd, flux_local, mflux_image_edit, seedvr2_upscale and
bg_remove_local were all missing from the catalog entirely.
- lead with local; cloud demoted to its own opt-in "costs real money" section
- all 31 operators documented, grouped by what you're trying to make
- recommended chain is now local: bg_remove_local -> [seedvr2_upscale] -> trellis_mac
(quality) or hunyuan3d_mlx (faster, ~3x lighter, the only one that runs on M1)
- setup section reordered: most local ops need nothing, hunyuan3d_mlx needs no HF
login at all, only sf3d/trellis_mac/bg_remove_local are gated
- lanes corrected: gpu+cpu are a NODE POOL (gpu 1/node, cpu per-node cpu_slots),
not the old flat "gpu=1, cpu=3, net=6"
- manifest `python` documented as repo-relative (remote nodes can't resolve absolute)
- link PERFCHECK.md; drop the stale "on the M3 Ultra" framing — it's a fleet
- verified: every operator on disk appears, no phantom ids, no broken doc links
Also: .gitignore had `*.env` and `.env`, neither of which matches a suffixed name
like `.env.remote` — which is sitting un-ignored in the m1's checkout right now, one
`git add -A` away from being committed. Ignore the `.env.*` family (keeping
.env.example committable). Nothing has leaked: no .env file is tracked.
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>
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>