Product Demo Recording
Adapted from a contribution by @klepfish (PR #345).
How to record a scripted, repeatable demo of a web app feature (signup, onboarding, a settings flow, a dashboard interaction) by driving the app in headless Chromium with Playwright. The output is an MP4 with a title card, scene subtitles, a visible cursor, and optional TTS narration.
When to Use This Format
| Situation | Format |
|---|---|
| Feature flow you'll re-record every release | Scripted in-app recording (this guide) |
| Narrated walkthrough where personality matters | Live screen recording (Loom, Screen Studio, Tella) |
| Homepage hero or launch video with motion design | Programmatic (Hyperframes/Remotion) over screen captures |
| Talking-head explainer with UI cutaways | AI avatar plus screen recording |
| Sales demo tailored to one prospect | Live recording, or an interactive demo tool |
Scripted recording pays off when:
- The UI changes often and you need to regenerate the video in minutes
- You want pixel-identical runs (same data, same pacing, no mouse jitter)
- The demo must run against a local or staging build before launch
- Several flows need the same branded look
Skip it for a one-off video where a human recording would take ten minutes.
Reference Implementation
The contributor's working scripts (a recorder template and a narrator) live at a fixed commit in this repo's history:
https://github.com/coreyhaines31/marketingskills/tree/37cb655f4017ccec2680f9fa5f3c13e6eed36a7d/skills/feature-demo/scripts
They need Node 18+, Playwright, and ffmpeg. Treat them as a reference implementation to copy and adapt. The workflow below is written so you can rebuild it without them.
Before Recording
Gather:
- Audience and product — prospects, existing customers, developers, or internal QA. This sets caption tone (jargon-light for prospects, implementation detail for developers) and pacing.
- Entry URL and scene list — one line per scene. The scene list doubles as the subtitle captions, so write each line as the caption you want on screen.
- Auth state — does the demo start logged in? Plan a seeded user plus a programmatic login or injected cookies.
- Narration — default to silent with subtitles. Add voiceover only if asked.
- Brand — app name, demo domain for the fake URL bar, title-card background and accent colors, optional logo SVG. Pull these from product marketing context when it exists.
Recording Workflow
1. Bring the app up locally
Run the app at a stable URL (e.g. http://127.0.0.1:8000). Any stack works since the recorder only needs HTTP and a page that renders in headless Chromium. Open it in a real browser first and click through the flow once. Read the gotchas section below before your first run.