feat(tools): re-generatable intro-video infrastructure (tools/intro-video/)#339
Merged
Conversation
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Rivet Criterion Benchmarks'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: f0ad924 | Previous: 120431c | Ratio |
|---|---|---|---|
store_insert/10000 |
20315377 ns/iter (± 835746) |
15407880 ns/iter (± 422056) |
1.32 |
query/10000 |
136022 ns/iter (± 936) |
98172 ns/iter (± 701) |
1.39 |
This comment was automatically generated by workflow using github-action-benchmark.
4 tasks
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…s/intro-video/)
Reusable infrastructure to auto-generate a 30–60s rivet intro/quickstart
video: Playwright recordVideo (deterministic capture) → piper TTS (local,
MIT, no API key, CI-able) → ffmpeg mux. Single storyboard.json drives
scene actions + timing + narration so the clip regenerates after UI
changes rather than being hand-edited.
Files:
- storyboard.json — source of truth: 7 scenes, hold_ms timing, narration
(~39s nominal, ~135 words, PulseEngine voice)
- capture.spec.ts — Playwright spec; one continuous video; renders the
title / CLI-help / outro as in-browser panels so
there's one timeline to sync narration against
- playwright.config.ts — standalone (recordVideo, 1280x720, reuses
`rivet serve` :3003, outputs to out/)
- generate.sh — capture | tts | mux | all; piper default, macOS
`say` preview only; ffmpeg adelay/amix sync
- package.json — pins @playwright/test
- README.md — stack rationale, prerequisites, regenerate command,
voice guide, storyboard, a11y notes, gaps
- .gitignore — excludes out/, voices/, node_modules/
Voice guide derived from pulseengine.eu/blog: problem-first, evidence-/
falsification-minded, no marketing fluff, signature close ("agents don't
remember why — so the repository has to"). Reviewed by three personas
(DevRel, safety-critical engineer, a11y) before scaffolding.
HONEST STATUS — scaffold is NOT runtime-verified: structurally checked
(valid JSON, `bash -n` clean, 7 scenes, executable) but never executed.
First run needs a human + the piper binary and a .onnx voice model
(not bundled — license/size). Open gaps: caption (.vtt) generation
wired as TODO, voice selection + final timing fine-sync need a human pass.
No rivet source / Cargo / existing tests touched.
Refs: FEAT-001
f0ad924 to
5a81894
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Reusable infrastructure to auto-generate a 30–60s rivet intro/quickstart video, per request. Single
storyboard.jsondrives scene actions + timing + narration so the clip regenerates after UI changes instead of being hand-edited.Stack: Playwright
recordVideo(deterministic capture) → piper TTS (local, MIT, no API key, CI-able) → ffmpeg mux (adelay/amixsync). Rejected: OS screen-recorders (non-deterministic/headless-unfriendly), cloud TTS (proprietary lock-in + CI secret + per-render cost — only macOSsaykept as a no-install preview), asciinema (second capture + sync tool).Voice guide (from pulseengine.eu/blog): problem-first, evidence-/falsification-minded, no marketing fluff, concrete commands + artifact types, calm ~2.5 wps, signature close — "agents don't remember why — so the repository has to."
Storyboard (~39s, 7 scenes): title →
rivet --help→ dashboard home →/artifacts→REQ-001detail (link chain) →/coverage(gap fails the build) → outro.Persona reviews (done before scaffolding): DevRel (problem-first in first 5s — addressed), safety engineer (show the gate not a montage — coverage scene says "fails the build" + real link chain), a11y (captions/contrast — contrast ok, single calm voice; caption
.vttgeneration is a documented TODO — the main a11y gap).Files (all under
tools/intro-video/)storyboard.json·capture.spec.ts·playwright.config.ts·generate.sh(capture|tts|mux|all) ·package.json·README.md·.gitignore(excludes out/, voices/, node_modules/).Regenerate:
cd tools/intro-video && npm install && npx playwright install chromium && ./generate.sh→out/rivet-intro.mp4.Structurally checked (valid JSON,
bash -nclean, 7 scenes, executable) but never executed (the research agent had no shell). First run needs a human + the piper binary + a.onnxvoice model (not bundled — license/size).captureworks standalone;tts/muxstop with a clear error until piper is installed. Open gaps: caption generation (TODO), voice selection + final timing fine-sync.No rivet source / Cargo / existing Playwright tests touched.
Refs: FEAT-001
🤖 Generated with Claude Code