5.7 KiB
LANE E — ASSETS (skins, GLBs, the depot manifest)
Prompt for Opus 4.8. You are working in
/Users/jing/Documents/PROCITYwith 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). Readdocs/CITY_SPEC.mdanddocs/RESEARCH.mdfirst. You ownpipeline/*,web/assets/*, andweb/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 onmain.
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 inventoryshop-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 asprocity_<category>_<name>_01.glb, render a 256px thumbnail per asset.- Upload to 3GOD (
POST /api/upload?name=<f>.glb), thumbnails intoweb/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:
{
"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:
- Port thriftgod's
gen_assets.py(OpenRoutergoogle/gemini-3.1-flash-image, ~$0.004/img, resumable.genraw/— seethriftgod/gen_assets.py) intopipeline/gen_skins.pywith the same style bible prefix and the blank-signboard facade template (gen_assets.py:69-86). ~30 images ≈ 12¢. Needs the OpenRouter key (thriftgod/.envpattern) — if absent, route 2. - Emit
pipeline/SKIN_PROMPTS.mdin 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.mdcomplete; ≥15 normalized GLBs live on 3GOD with thumbnails.web/assets/manifest.jsonvalidates 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.