PROCITY/docs/shots
m3ultra be9f967d19 Lane E R11 (audio): procedural audio pack — 23 assets, free/on-device
gen_audio.py: a numpy synthesis engine (osc / ADSR / filters / reverb /
seamless-loop crossfade + note sequencer + drum synth). Renders 6 ambience
beds (street day/night, rain, 3 interior roomtones) + 13 sfx (doorbell,
door, till, record-riffle, toast, tram bell/rumble, 6 footsteps) + 4
instrumental 90s music loops (record-shop, milkbar, video-synth, arcade)
-> web/assets/audio/ as OGG/Opus + M4A/AAC. 8.1 MB of the 25 MB budget.

Tool = 100% procedural synthesis (not a neural model): $0, deterministic/
seeded, perfectly loopable, parody-safe by construction. Documented in
README (§ audio) + AUDIT.md provenance.

manifest audio:{ambience,sfx,music} — file + m4a fallback + loop + gain;
interior roomtone/music carry types[] (seed-pick per shop, like facades);
footstep is {surface:[variants]}. build_manifest.py builds it,
validate_manifest.py checks it. qa.sh --strict green (audio 23, 0 err).

Verified technically (peaks <= -0.4 dBFS, all loops seamless, durations)
via spectrogram sheet + numeric — subjective ear-check is John's/F's.

E leads the audio round; F owns the v2.1 tag + push. Not pushed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 14:50:15 +10:00
..
before Lane F: integration — interiors + keepers + street peds + QA harness 2026-07-14 14:29:03 +10:00
laneA Lane A round 8: OSM to parity + a second town (Katoomba) — carried R7 brief, full 2026-07-15 04:15:12 +10:00
laneB Lane B round-9: v2 tram (?tram=1) + tour bookmarks + rain-drop polish 2026-07-15 11:09:41 +10:00
laneB_r4 Lane B round-4: closed facades (§3.5) + shot poses/letterbox + furniture GLB + novelty_record 2026-07-14 19:59:27 +10:00
laneC Lane C round-9 C2: buy-anywhere — pull-and-buy on book spines + toy boxes 2026-07-15 09:56:21 +10:00
laneD Lane D round 10: fix interior giant rigs + no-giants QA gate 2026-07-15 13:01:54 +10:00
laneE Lane E R11 (audio): procedural audio pack — 23 assets, free/on-device 2026-07-15 14:50:15 +10:00
laneF Lane F R8: wire town/weather/patronage/buy + graduate harness + new smokes 2026-07-15 09:09:11 +10:00
references Lane F: integration — interiors + keepers + street peds + QA harness 2026-07-14 14:29:03 +10:00
v1_tour Lane F R5 F1: v1.1 — re-capture interior shots on C1 re-map + E1 bake 2026-07-14 21:05:11 +10:00
v2_tour Lane F R10: verify giant-rig fix + re-shoot tour + re-frame night_crowd 2026-07-15 13:56:23 +10:00
contact.html Lane F R3: hours/closed-shops + manifest/rig-fleet/?noassets + --depot + QA harness fixes 2026-07-14 17:19:11 +10:00
README.md Lane F R10: verify giant-rig fix + re-shoot tour + re-frame night_crowd 2026-07-15 13:56:23 +10:00
v2_contact.html Lane F R10: verify giant-rig fix + re-shoot tour + re-frame night_crowd 2026-07-15 13:56:23 +10:00

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

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.