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

77 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. `--harvest``web/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 |