PROCITY/docs/LANES/LANE_E_ASSETS.md
2026-07-14 10:46:40 +10:00

5.7 KiB
Raw Permalink Blame History

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:

{
  "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 (23), arcade interior frontage, dept-store anchor (wide), warehouse/roller-door, residential terrace/cottage fronts (34), 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.