101 lines
5.7 KiB
Markdown
101 lines
5.7 KiB
Markdown
# LANE E — ASSETS (skins, GLBs, the depot manifest)
|
||
|
||
> **Prompt for Opus 4.8.** You are working in `/Users/jing/Documents/PROCITY` with SSH access
|
||
> to **ultra** (`ssh johnking@100.91.239.7`, key auth works non-interactively — mind: no GNU
|
||
> coreutils/timeout/setsid, system python 3.9, Homebrew at /opt/homebrew). Read
|
||
> `docs/CITY_SPEC.md` and `docs/RESEARCH.md` first. You own `pipeline/*`, `web/assets/*`, and
|
||
> `web/assets/manifest.json`. Do not touch other lanes' files. **Spending rule: fal/MeshGod
|
||
> generations cost real money — batch nothing without listing it in a plan file first and
|
||
> keeping v1 to the shortlist below. Prompt-pack image gen is near-free but still list counts.**
|
||
> Verify every visual result with your own eyes (render thumbnails / open in browser) — never
|
||
> "should look right". Commit in small, described steps on `main`.
|
||
|
||
## Mission
|
||
|
||
Feed the other lanes: audit what exists, normalize the best of it into a PROCITY asset set,
|
||
publish it (3GOD depot + local), and ship the **manifest** that Lanes B/C/D consume. Then the
|
||
gap-fill generation passes (facade skins first, GLB props second). Everything optional at
|
||
runtime — the game must run asset-free — so this lane is about making it *gorgeous*, not
|
||
making it *work*.
|
||
|
||
## Step 1 — Audit (no generation yet)
|
||
|
||
- On ultra, read `~/Documents/3D=models/MANIFEST.md` + `CH_MAPPING.md`, then inventory
|
||
`shop-fittings/`, `street-furniture/`, `furniture/`, `props-scenes/` against the fittings
|
||
needs in CITY_SPEC's shop-type table and LANE_C's fittings list. Note tri counts, scale
|
||
sanity, licensing zone (🟢 web-ok only — anything unclear goes in a QUARANTINE list, not
|
||
the manifest).
|
||
- Hit `https://digalot.fyi/3god/api/list` — some of this may already be uploaded.
|
||
- Output: `pipeline/AUDIT.md` — table of candidate GLBs → PROCITY fitting/furniture id,
|
||
status (ready / needs-normalize / missing / quarantined-licence).
|
||
|
||
## Step 2 — Normalize & publish GLBs
|
||
|
||
- `pipeline/normalize.py` — runs **on ultra** against Blender + the existing MESHGOD scripts
|
||
(`~/Documents/MESHGOD/scripts/finish_glb.py`, `render_glb.py` — read them, extend, don't
|
||
fork): enforce house GLB law (metres, +Y up, origin at base, facing −Z, ≤5k tris props,
|
||
webp textures ≤1024, no Draco), name as `procity_<category>_<name>_01.glb`, render a
|
||
256px thumbnail per asset.
|
||
- Upload to 3GOD (`POST /api/upload?name=<f>.glb`), thumbnails into `web/assets/thumbs/`.
|
||
- Priority order (what Lanes B/C actually place first): record crate + record bin, clothes
|
||
rack, metal wire shelf, garage shelves, bookshelf, cube shelf, glass case, counter (balcao),
|
||
trestle table, bench + longbench + park bench, market stall, food cart, streetlight, fridge.
|
||
|
||
## Step 3 — The manifest (`web/assets/manifest.json`)
|
||
|
||
The single contract file other lanes read:
|
||
|
||
```json
|
||
{
|
||
"version": 1,
|
||
"depot": "https://digalot.fyi/3god",
|
||
"fittings": { "record_bin": {"file":"procity_fit_record_bin_01.glb", "footprint":[1.2,0.8], "thumb":"…"}, … },
|
||
"furniture": { "bench": {…}, "streetlight": {…}, … },
|
||
"skins": {
|
||
"facade": {"weatherboard":{"file":"gen/facade-weatherboard.jpg","types":["opshop"]}, …},
|
||
"sky": [...], "ground": {...}, "wall": [...], "interior": {...}
|
||
}
|
||
}
|
||
```
|
||
|
||
Catalogue the 69 skins already in `web/assets/gen/` (they came from thriftgod + 90sDJsim —
|
||
map them to shop types per the registry table). Add a `pipeline/validate_manifest.py`
|
||
(plain python3) that checks every referenced file exists locally or HEADs OK on the depot,
|
||
footprints are sane, and JSON parses — this runs in Lane F's gate.
|
||
|
||
## Step 4 — Facade skin expansion (prompt-pack pass)
|
||
|
||
The 18+7 existing facades are the style anchor. Gaps for a whole town: **toy shop, book shop,
|
||
video store, milk bar variants (2–3), arcade interior frontage, dept-store anchor (wide),
|
||
warehouse/roller-door, residential terrace/cottage fronts (3–4), corner-lot two-face,
|
||
market-square edge**. Two routes, in order:
|
||
|
||
1. Port thriftgod's `gen_assets.py` (OpenRouter `google/gemini-3.1-flash-image`, ~$0.004/img,
|
||
resumable `.genraw/` — see `thriftgod/gen_assets.py`) into `pipeline/gen_skins.py` with the
|
||
**same style bible prefix** and the **blank-signboard facade template** (`gen_assets.py:69-86`).
|
||
~30 images ≈ 12¢. Needs the OpenRouter key (`thriftgod/.env` pattern) — if absent, route 2.
|
||
2. Emit `pipeline/SKIN_PROMPTS.md` in the house FLOW_PROMPTS.md format (POLY lock, save-as
|
||
filenames) for John to run through the manual flow.
|
||
|
||
Also: **corner buildings need a second facade face** — add a `-side` variant convention
|
||
(`facade-X-side.jpg`) or document that Lane B reuses the front skin on corners (decide, write
|
||
it in the manifest README).
|
||
|
||
## Step 5 — Bespoke hero props (MeshGod, budget-gated)
|
||
|
||
Shortlist ONLY (≈10 solids ≈ $3): listening booth, till/cash register, VHS rewinder,
|
||
glass counter case (if audit finds none), spinner rack, milkshake mixer, arcade cabinet shell,
|
||
band-poster easel, giant novelty record (roof ornament), bus stop shelter. Write
|
||
`pipeline/MESHGOD_BATCH.md` (manifest-style, the `djsim_home.json` pattern) — **do not run the
|
||
batch without John's go**; everything has a primitive fallback anyway. Remember the MeshGod
|
||
gotcha: thin wires and flat discs reconstruct badly — those stay in-engine primitives.
|
||
|
||
## Acceptance
|
||
|
||
- `pipeline/AUDIT.md` complete; ≥15 normalized GLBs live on 3GOD with thumbnails.
|
||
- `web/assets/manifest.json` validates green; Lanes B/C load fittings from it untouched.
|
||
- Facade coverage: every shop type in the registry has ≥2 skins mapped; new skins
|
||
indistinguishable in style from the originals (side-by-side contact sheet in
|
||
`docs/shots/laneE/`).
|
||
- A one-page `pipeline/README.md`: how to re-run each step, what it costs, where creds live.
|