Clickable previews: exact app deep-links everywhere

Every rendered still links to the app frame that produced it (song + seed + frame + venue/viz pins + probe warm-up, new window), via shared src/ui/preview.js. Supporting work, each measured: app honors ?frame/?venueSel/?viz/?warm= with pre-build pins (Show.applyPins) and primes deep-link loads; shared pinViz/pinVenueShell paths for gallery, filmstrip and app; probes prime and carry their warm-up; bank probes analyse the bank PCM and file decode is fixed-rate with bit-exact WAV parsing so app and probes see identical samples; materials built mid-update compile synchronously (needsCompile). Round trip verified bit-identical gallery-versus-app.
This commit is contained in:
Dejvino
2026-09-20 18:42:53 +02:00
parent cc8888077f
commit 4d05250294
18 changed files with 377 additions and 96 deletions
+8
View File
@@ -29,6 +29,14 @@ references, `MIGRATION.md` is the shader→stage migration recipe.
is on. Section boundaries are NOT exact for free — the compositor's
feedback buffer is global and carries across them. Clearing it per
boundary would flash every transition; warm-up is the better trade.
- Previews link to their exact app frame (`src/ui/preview.js`: song + seed
+ frame + venue/viz pins + the probe's warm-up length, both sides primed).
Exactness takes four agreements: the bank probes analyse the bank PCM
(peak-normalised 16-bit mono — `audio/songbank.js bankPcm`), file decode
is fixed at 44.1 kHz with bit-exact WAV parsing (never the context rate),
pins run before any layer builds (rebuilding mid-context renders
differently), and materials built mid-update compile synchronously
(`needsCompile`) so no warm-up frame draws against an unlinked program.
## 2. Lookahead