# LANE D — Assets (FLUX textures, GLB meshes, audio, manifest)

Mission: make it gorgeous, for free. You own `pipeline/**`, `web/assets/**`, and
`web/js/core/assets.js`. **PIPELINE.md is your bible; ART_BIBLE.md is your spec.**
Everything you ship is optional at runtime — you make GUTS beautiful, not functional.

## Ground rules (hard-won, PROCITY scars)

- **Free-first, always.** flux_local / sf3d / trellis_mac on the m3ultra box
  (`m3ultra@100.89.131.57`, repo cloned there). fal.ai only via `FAL_LIST.md` + John's go,
  after ≤2 local attempts. Check 3GOD depot + `~/Documents/3D=models/` before generating.
- **Port, don't reinvent:** PROCITY's `gen_skins.py --local`, `gen_props.py`, `gen_audio.py`,
  `normalize.py`, `glb_stat.py` (`~/Documents/PROCITY/pipeline/`) are proven against these
  exact operators. Adapt them; keep their idempotent/resumable, `--dry-run`-first shape.
- **Eyeball law:** contact sheets for every batch; view textures in-engine on the stub tube;
  thumbnail every GLB; delete rejects before harvest. Never "should look right".
- **House GLB law:** metres, +Y up, sensible origin, ≤5k tris (decimate TRELLIS's 25–77k),
  WebP ≤1024, no Draco. `normalize.py` enforces; you verify.
- One GPU job at a time on the beast; long TRELLIS runs get a heartbeat (`jobs` convention)
  if >10 min.

## Deliverables by area

- **Textures:** grayscale SEM-style tiling walls (2/biome), matcaps, derived normal maps
  (`derive_maps.py`, numpy Sobel — no model), acid/decal sprites. ART_BIBLE prompt kit.
- **Meshes (round 2+):** ENDO-1 ship, GDD enemy/boss heroes. concept → sf3d draft →
  trellis_mac → normalize → thumb → manifest. Enemies must read at a glance: silhouette
  first, detail second; check thumbs at 128 px — if it doesn't read there, it won't in-game.
- **Audio:** procedural numpy pack (PIPELINE §Audio) — beds per biome, sfx set, stingers.
  OGG+M4A dual, ≤10 MB shipped, spectrogram + loop-seam evidence.
- **`assets.js` + `manifest.json`:** the loader contract (TECH.md) — null on miss, never
  throw; `?localassets=0` empty-boot path; `build_manifest.py` + `validate_manifest.py`
  (qa hook).

## You owe / consume

Owe: the manifest contract + validator; contact sheets/thumbs in `docs/shots/laneD/`;
provenance + prompt log per asset (committed batch JSONs — regeneration must be possible);
FAL_LIST.md when candidates appear. Consume: ART_BIBLE (F/A arbitrate look disputes), C's
boss specs for hero concepts, A's UV/tiling conventions (ask in NOTES before assuming).

## Verification

In-engine screenshots of your textures on the stub tube (`?dbg=1`), thumbs for meshes,
spectrograms for audio, `validate_manifest.py` 0 errors in qa. Numbers (gen-time, file
sizes, tri counts) measured and logged in NOTES.
