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>
77 lines
4.3 KiB
Markdown
77 lines
4.3 KiB
Markdown
# 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`, ~3–8 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 25–77k, 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 |
|