A. PIPELINE FIX: gen_props.py trellis_mac -> trellis2_mlx, contract read from its
manifest.json. The two operators are NOT drop-in on output — trellis2_mlx writes
BOTH candidate.glb (raw) and candidate_pbr.glb (baked), so the old
sorted(rglob('*.glb'))[0] would have silently shipped untextured meshes. Added
_pick_glb() (result.json first) + the bg_remove_local cutout stage, fail-soft.
MEASURED: median 128.0s vs trellis_mac's 245.4s p50 = 1.92x. 5/5 first attempt,
0 retries against the 4-5% budget. One 489s tail outlier, no error — named.
B. AUDIO (1.1) — six PACK entries, +0.86MB, ZERO draws/tris, all originalby
construction: dog-bark-fence, mower-distant, radio-through-window, sprinkler,
roller-door, magpie-carol. Seeded via crc32(name); beds fold seamlessly
(wrap-jump <=0.18x internal step). Verified by spectrogram + band-energy, and
one defect found by LOOKING: the sprinkler's spray masked its own ticks and read
as a hose — rebalanced and re-rendered. Distance is spent in the SPECTRUM, not
the level, because encode()'s loudnorm undoes a quiet render.
C. GROUNDS (1.2) — gen_skins.py had NO ground template; added one with its own
outdoor style prefix (the house STYLE says "warm fluorescent", an interior cue).
4 new 512^2 square tiles. Review's 5.7s is 9.7s here — same per-pixel, mine are
1.78x the pixels. Found: gravel/reddust are selected by nothing partly because
their `use` values name no slot ground.js:177 has.
D. MESHES — 3 shipped (magpie 894 tris, paling_fence 1121, water_tank 500), all
GLB-law clean. 2 FAILED and were DELETED: hills_hoist + tv_aerial. Thin wire
returns as thousands of disconnected fragments, so collapse floors at 250k/89k
AND a remesh coarse enough for 600 tris erases the pole. Lane B's boxMats
primitives cost +0 draws and are strictly better. The magpie's geometry passes
but TRELLIS crushed its white nape/wing to black — traced to the operator's bake
(the cutout and our decimation are both exonerated); flagged, not hidden.
E. REUSE — all 9 idle assets re-measured; the review's "one line each" holds for
only 5. furniture.js's extractGLB keeps only the FIRST material, so park_bench/
coffee_table/box_crate render in material #1 and bench_wood (0 materials) falls
to grey. Nothing was regenerated that already existed.
The 3 GLBs are staged, NOT published: a depot push is outward-facing and had no
in-session authorization. Held at _r38_results.PENDING_PUBLISH.json; publish +
rename + rebuild lands them. Gate green: validate_manifest 0 errors / 0 warnings.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| before | ||
| laneA | ||
| laneB | ||
| laneB_r4 | ||
| laneB_r37_kerb | ||
| laneC | ||
| laneD | ||
| laneE | ||
| laneF | ||
| references | ||
| release_v3 | ||
| release_v3_1 | ||
| release_v4 | ||
| release_v5 | ||
| v1_tour | ||
| v2_tour | ||
| v4_alpha | ||
| v4_beta | ||
| v7_alpha | ||
| v7_beta | ||
| v7_tour | ||
| contact.html | ||
| README.md | ||
| v2_contact.html | ||
docs/shots — visual regression + devlog reference tree
Owned by Lane F (each lane also drops its own acceptance screenshots here).
docs/shots/
laneA/ … laneE/ … per-lane acceptance screenshots (each lane owns its dir)
v1_tour/ … F: the v1 beauty shots (tools/shots.py) — frozen devlog set
v2_tour/ … F: the v2 tour (tools/v2_tour.py) — the CURRENT canonical set (see below)
before/ … F: last known-good capture, for side-by-side regression
references/ … real-world reference photos named per shot
v2_contact.html … generated contact sheet for the v2 tour
v2 tour — stable filenames (do not rename; the v3 site links these)
cd web && python3 -m http.server 8130 then tools/.venv/bin/python tools/v2_tour.py
→ 1280×720 PNGs in v2_tour/ + docs/shots/v2_contact.html.
| file | what it documents |
|---|---|
street_noon.png |
main strip at midday |
crossroads_busy.png |
busiest intersection, peds about |
shopfront_detail.png |
verandah + sign + window up close |
patronage_door.png |
streamed peds at an open shop's door (Lane D patronage) |
rain_verandah.png |
rain outside a lit ?winmap video-shop window |
rain_street.png |
wet strip, rain down the street |
tram_stop.png |
the v2 tram paused at a shelter (?tram=1) |
night_crowd.png |
VIDEO REGAL glowing amid CLOSED neighbours at night — the §3.5 hours story (clean-night boot). NB: no visible street crowd — see the note below. |
browsers.png |
an occupied shop's interior life — a browser at the rack + the keeper at the counter, both human-sized (R10 giant-rig fix). figures human-sized vs door/fittings: yes. |
dig_real.png |
riffling a real-cover record bin (?dig=1&stock=real) |
katoomba_main.png |
plan-agnostic main strip (?plansrc=osm&town=katoomba) |
Note on night_crowd (Lane F, R10)
Re-framed to the tighter, readable "one lit shop in a closed town" composition. It does not show a
standing street crowd, and that is not a framing bug: Lane D's night patronage parks ducked-in patrons
hidden inside the shop (they become the interior browsers seen in browsers.png), and seed 20261990's
video shop sits on a low-traffic corner, so none gather visibly outside (tested: 0 patronage / 0 visible
at night). The town's night life is the interior presence + the neon-vs-CLOSED mood. A visible outdoor
night queue would need a new Lane-D mechanic (loiter-outside-the-openLate-shop) — parked for v3. The
~20 fps in night captures is a headless-chromium software-GL artifact (the scene is light, ~128
draws / 65k tris); on real hardware the night scene is not a perf concern.
Regression workflow
Before a risky change, snapshot the good state into before/, then re-run v2_tour.py and eyeball
v2_contact.html. Process rule (R10): any shot containing a humanoid gets an explicit
"figures human-sized relative to doors/fittings: yes" line in the progress note — actually look.