zebra-report/web
Russell Ballestrini e0bf064629
zebra-spaces: speaker buffer 4s + HTTP /stream lip-sync override
Two changes:

1. SPEAKER_PLAYOUT_DELAY_SEC: 0.5 → 4.0.
   Cohost on Fedora Chrome was glitching during host's X11 wiggles
   because 0.5s mesh cushion was shorter than typical wiggle stalls.
   Fox 2026-06-04: "we needed 4 secs before for the wiggle. it was at
   least 4 secs for 20 sec wiggles; we didn't test less." Speaker
   conversation latency goes from ~500ms to ~4s round-trip — accepted
   trade for wiggle-immunity. Future twin-stream double-dragon
   controller (mesh + HTTP /stream parallel, adaptive switching based
   on observed loss/jitter + hardware/network/feed performance) will
   reclaim conversational latency while keeping the glitch floor.

2. HTTP /stream lip-sync override.
   When the per-speaker stream toggle is ON for a publisher, audio
   comes from an <audio> element with its own deep buffer (~2.5s),
   not the worklet. Previously the lip-sync algorithm kept driving
   from the (silent) worklet's measurement → video target stayed at
   the worklet's ~4s while audio actually was ~2.5s → 1.5s mouth-
   leads-voice. Now startStream sets httpLipSyncOverride[pubHex] =
   HTTP_STREAM_DELAY_SEC and forces an immediate retarget via
   applyLipSyncForPub. stopStream clears the override and the next
   worklet 'buffered' message restores worklet-driven targeting.

Constants kept conservative — HTTP delay is hardcoded at 2.5s; could
be made dynamic by reading audio.buffered.end(0) - audio.currentTime
plus an Ogg-granule offset, but the spread is small relative to the
80ms perception threshold.

Fox 2026-06-04 framing: "think of it like a CD that is literally
being skipped in a physical disc man and solve it with two lasers
one moving fast mesh as fast as possible and one for the broadcast
also as fast as possible dynamic based on not hardware fingerprint
but hardware performance and network performance and feed performance
double headed hydra! double dragon!" — Phase 2 lands the auto-engage
controller per that spec.
2026-06-04 18:21:49 -04:00
..
blog phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
fonts phase 2: gap analysis — cat>> append + binary asset recovery 2026-05-27 13:54:19 -04:00
chat.html zebra-spaces: listener mute button doubles as audio-unlock gesture 2026-06-03 20:57:09 -04:00
host-your-own.html zebra-spaces: listener mute button doubles as audio-unlock gesture 2026-06-03 20:57:09 -04:00
how-it-works.html zebra-spaces: listener mute button doubles as audio-unlock gesture 2026-06-03 20:57:09 -04:00
index.html web: bump mobile body padding from 1rem to 1.25rem so the right edge has visible breathing room 2026-05-31 14:13:25 -04:00
kernel.html web: bump mobile body padding from 1rem to 1.25rem so the right edge has visible breathing room 2026-05-31 14:13:25 -04:00
stamp.js web: stamp each zebra-report page with build date + md5/sha256 2026-05-28 17:50:12 -04:00
zebra-audio.html zebra-spaces: listener mute button doubles as audio-unlock gesture 2026-06-03 20:57:09 -04:00
zebra-spaces.html zebra-spaces: speaker buffer 4s + HTTP /stream lip-sync override 2026-06-04 18:21:49 -04:00