{ "_comment": "PROCITY hero props — the gaps the sorted library CAN'T fill (see AUDIT.md coverage table). Text->3D via MeshGod. height_m = real-world height (1 unit = 1m). Run ONLY with John's go (≈30c/solid ≈ $2.70): python -m meshgod.batch manifest pipeline/meshgod_batch.json --out assets3d/procity . BEFORE generating, check the DealGod canon-3D cache / 3GOD /api/list for reuse (cash-register + glass-case likely already exist from thriftgod_hero.json). MeshGod gotcha: thin wires / flat discs reconstruct badly — those stay in-engine primitives and are NOT in this list.", "_round3_outcome": { "_comment": "Round 3 (Fable): these went through MODELBEAST (flux_local concept -> trellis_mac GLB) instead of fal.ai — free, on-device. Pipeline: pipeline/gen_props.py. Outcome below; see pipeline/gen_props.py + docs/shots/laneE/props_gen_local.png.", "generated_local": ["listening-booth", "drinks-fridge", "arcade-cabinet", "milkshake-mixer", "novelty-record"], "reused_from_depot": {"cash-register": "vintage-cash-register.glb (thriftgod_hero, already live on 3GOD)"}, "to_primitive": {"magazine-rack": "TRELLIS wire rack = shell-soup, floors ~112k tris (COLLAPSE + meshopt both fail on wire) — the classic thin-wire gotcha; use an in-engine wire primitive instead"}, "fal_fallback": {"_comment": "TRELLIS failed on these transparent-glass subjects (no GLB); sf3d gives a featureless blob. Local 2-attempt budget spent -> fal.ai, gated on John (<=$2.70). Both have in-engine primitive fallbacks so nothing blocks.", "glass-case": "transparent glass top defeats TRELLIS segmentation", "bus-shelter": "thin steel frame + perspex panels"}, "note_tris": "TRELLIS meshes are dense multi-shell scans; normalize.py decimate floors 25-77k tris (>library <=5k law). Accepted for focal/optional/LOD-able props (texture-intact); a texture-bake-to-lowpoly / gltfpack pass is a follow-up." }, "_round5_outcome": { "_comment": "Round 5 (Fable): fal.ai authorized ($22 balance). The R3 fal_fallback trio is now DONE + live on the depot. Pipeline: flux_local concept (frosted/opaque surfaces) -> pipeline/gen_props_fal.py (fal-ai/hunyuan3d/v2) -> normalize -> bake_lowpoly (<=8k, EMIT albedo bake). ALSO: all 6 R3/R4 TRELLIS hero props baked to <=8k (pipeline/bake_lowpoly.py). Costs logged in AUDIT.md R5.", "fal_done": {"glass-case": "1 attempt ~$0.16", "bus-shelter": "2 attempts ~$0.32 (att.2 opaque back wall)", "magazine-rack": "1 attempt ~$0.16 (optional, solid timber not wire)"}, "fal_total": "~$0.64 of $22; guardrail held (nothing else on fal)", "baked_to_8k": ["drinks_fridge", "milkshake_mixer", "arcade_cabinet", "listening_booth", "novelty_record", "counter_till", "glass_case", "bus_shelter", "magazine_rack"] }, "assets": [ {"name": "listening-booth", "prompt": "a record shop listening station booth, angled timber panel with a shelf and hanging headphones, single stool", "height_m": 1.6, "tris": 6000, "for": "record"}, {"name": "cash-register", "prompt": "an ornate antique brass cash register with round number keys and a bell", "height_m": 0.35, "tris": 6000, "for": "all", "reuse": "thriftgod_hero:vintage-cash-register — check depot first"}, {"name": "glass-case", "prompt": "a retail glass display case counter with a wooden base and glass top shelves", "height_m": 1.0, "tris": 6000, "for": "toy/pawn/milkbar", "reuse": "thriftgod_hero:glass-display-case — check depot first"}, {"name": "drinks-fridge", "prompt": "a round-shouldered vintage upright drinks fridge with a glass door and faded stickers", "height_m": 1.6, "tris": 5000, "for": "milkbar"}, {"name": "magazine-rack", "prompt": "a slanted timber and wire magazine display rack with tiered shelves", "height_m": 1.2, "tris": 4000, "for": "milkbar/pawn"}, {"name": "arcade-cabinet", "prompt": "a 1990s upright arcade machine cabinet shell, boxy body, sloped control panel, dark screen bezel", "height_m": 1.7, "tris": 6000, "for": "arcade/dept"}, {"name": "milkshake-mixer", "prompt": "a chrome twin-spindle milkshake mixer machine on a diner counter, solid body", "height_m": 0.5, "tris": 4000, "for": "milkbar"}, {"name": "novelty-record", "prompt": "an oversized thick vinyl record standing on edge as a roadside novelty ornament, solid chunky disc on a base", "height_m": 2.0, "tris": 4000, "for": "record roof-ornament"}, {"name": "bus-shelter", "prompt": "an Australian suburban bus stop shelter, steel frame with scratched perspex panels and a bench seat", "height_m": 2.4, "tris": 8000, "for": "street"} ], "_primitives_instead": { "_comment": "MeshGod gotcha assets — thin/flat geometry reconstructs badly. Lane B/C build these as in-engine primitives, NOT via MeshGod:", "spinner-rack": "thin wire book/card spinner — extruded-cylinder primitive", "band-poster-easel": "thin A-frame sidewalk sign — box primitive + canvas poster", "vhs-rewinder": "tiny box on the counter — box primitive", "returns-slot": "wall slot for the video returns — cut in the wall plane", "escalator-prop": "dept-store escalator — extruded ramp primitive", "pegboard-wall": "pawn/video wall — plane with tex-pegboard.jpg skin (already in gen/)" } }