connect-decoder, add-drivers-cars, create-race, and run-a-session join the 3 existing
tab-focused clips, so the video guides now cover the actual first-run path a new user
hits, not just this session's UI restructuring.
record-video-guides.mjs gained a prepare() hook (for clips needing a live dependency,
like a fake decoder socket, before the app is seeded) and a clickNav() helper that
exercises the app's real client-side navigation instead of a full page reload, so
switching views in a clip looks like the smooth transition a real user sees.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
espeak-ng's formant synthesis was reported as barely intelligible. Piper is a small
local neural TTS with the same offline, no-cloud-service properties but far more
natural speech; its default WAV output format already matched what the sync pipeline
assumed, so only the synthesis call itself needed to change.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The clips were silent screen captures - the user's actual ask was for someone talking
through what's happening. Each clip step now carries a narration line synthesized
offline via espeak-ng; the recording paces itself to each line's real spoken duration,
and the final audio track is built from the real measured per-line start times (adelay +
amix) so narration and on-screen action stay in sync over a 30+ second clip instead of
drifting against an idealized schedule.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CDP screencast -> ffmpeg -> MKV, driven against the same isolated server/browser pattern
the test suite already uses. Recorded three short clips demonstrating this session's tab
and schedule features; output goes to the gitignored video-guides/ folder rather than the
repo since these are sizeable binaries.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>