guts/docs/PIPELINE.md
jing 34f84ab162 [lane F] Round 0 scaffold: docs, contracts, lane charters, bootable stub world
GDD v1 (flow-locked hybrid movement, 5 biomes + secret, boss roster),
TECH contracts (world API, level schema v0, bus events, manifest law),
ART_BIBLE (synthetic scanner look), PIPELINE (MODELBEAST-first, fal gated),
PROCESS (PROCITY lane/round law), charters A-F + ROUND1 instructions.
Seed code: shell + boot + core (rng/bus/flags) + stub world (peristalsis
shader tube, 1 draw / 102k tris, contract-complete) + qa.sh (GREEN).
Verified in-browser; evidence docs/shots/laneF/round0_stub_tube.png.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 01:28:35 +10:00

4.3 KiB
Raw Permalink Blame History

PIPELINE — asset generation (Lane D)

Everything generates free and local on the m3ultra box via MODELBEAST; fal.ai is a paid, gated fallback. Verified live 2026-07-16: m3ultra@100.89.131.57 (tailnet, key auth), ~/Documents/MODELBEAST/server/operators/ = flux_local (FLUX.2-klein-4B text→image on MPS, ~6 s/img, weights cached), mflux_image_edit (img2img/inpaint), sf3d (image→GLB, seconds, draft quality), trellis_mac (TRELLIS image→GLB 1024_cascade, ~38 min, quality), seedvr2_upscale. Venvs: ~/Documents/MODELBEAST/venvs/{mflux,rmbg,sf3d}.

Run pipeline scripts on the m3ultra box (clone this repo there) or drive over ssh the PROCITY way — copy the working patterns from ~/Documents/PROCITY/pipeline/ (gen_skins.py --local drives flux_local/run.py directly, no server, one GPU job at a time; gen_props.py chains concept→trellis; gen_audio.py is the procedural audio precedent; normalize.py is the Blender house-law enforcer; glb_stat.py the dependency-free GLB parser). Don't reinvent these — port them.

Textures (round 1)

  1. pipeline/gen_textures.py --dry-run lists the pack (prompts live in the script, style stems from ART_BIBLE). --local → flux_local → pipeline/.genraw/ at 1024².
  2. Tile check: script renders each result wrap-offset by 50% into a contact sheet — seams are instantly visible. Fix seams by mirror-tiling or mflux_image_edit inpaint (≤2 attempts, then pick a different prompt).
  3. Normals: pipeline/derive_maps.py — grayscale → height (blur pyramid) → Sobel normal map, plus WebP conversion (≤1024, quality ~82). Pure numpy/PIL, no model.
  4. --harvestweb/assets/gen/*.webp + entries in web/assets/manifest.json (build_manifest.py), thumbs contact sheet → docs/shots/laneD/.
  5. Eyeball in-engine (boot with ?dbg=1, check tiling scale on the stub tube) before committing. Delete rejects from .genraw/ — committed junk is forever.

Meshes (round 2+, after concept sign-off)

concept (flux_local, ART_BIBLE stem) → sf3d draft (seconds — iterate the concept until the silhouette reads) → trellis_mac final → normalize.py (Blender: metres, +Y up, origin, decimate to ≤5k tris — TRELLIS outputs run 2577k, always decimate — WebP ≤1024, no Draco) → thumbnail → manifest. Eyeball every thumbnail.

Known TRELLIS weaknesses (PROCITY scars): transparent/glassy surfaces, thin wires/fins → don't burn attempts; straight to the fal list.

fal.ai fallback (the only money in the project)

Rules: ≤2 local attempts per asset, then it goes on pipeline/FAL_LIST.md with the concept image attached — John personally approves and runs the batch (key is his; never committed, never in env on shared boxes). Cost ~10¢/gen billed 30¢ (MeshGod law). Expected fal candidates: tapeworm head (long thin body), anything translucent. Check the 3GOD depot (digalot.fyi/3god) + ~/Documents/3D=models/ first — never regenerate what exists.

Audio (round 1 proof, round 2 full pack)

Procedural synthesis in numpy → WAV → ffmpeg OGG/Opus + M4A/AAC dual-ship (the PROCITY gen_audio.py approach — $0, deterministic, seamless loops, parody-safe). GUTS pack: biome ambience beds (wet cavernous drones, muffled heartbeat — tempo maps to danger, E's hook), sfx (pellet, torpedo, squelch hits, boost, gate, pickup chime, alarm), boss stingers. Beds loudnorm 16 LUFS, sfx peak-normalized, budget ≤10 MB shipped. Verification = spectrogram sheet + numeric loop-seam check into docs/shots/laneD/; final ear-check is John's.

Licensing

Everything generated here is ours (🟢 web-ok). Any sourced mesh must be Sketchfab CC0/CC-BY or CGTrader royalty-free; no ActorCore in web builds (house licensing zones). No humanoid characters planned, so the Mixamo fleet rule shouldn't apply — if a humanoid ever appears, use the character_kit base meshes, never a new rig.

Artifacts

Git-ignored (regenerable): pipeline/.genraw/, pipeline/.genprops/, pipeline/.genaudio/, pipeline/_normalized/. Committed: scripts, prompt/batch JSONs, FAL_LIST.md, web/assets/** shipped files, docs/shots/laneD/ evidence.

step cost
textures, normals, audio, drafts, TRELLIS meshes free (local MPS)
fal.ai fallback meshes ~30¢/asset, gated on John, expected ≤$3 total