narrate-demo · git:20261020.25b6992 · 2026-10-20 · sha256 95cca58832ca2d3c
narrate-demo git:20261020.25b6992A
Immutable. This exact content never changes and is served at /api/v1/blob/95cca58832ca2d3c.
---
name: narrate-demo
description: Render the built-in Aurora demo to showcase the narrate plugin end-to-end (no project setup needed). Use when the user wants to try narrate or verify it works without their own site.
---
Render the plugin's **self-contained demo** so the user can see narrate working
without any project, dev server, or website of their own. The demo app and scene
ship inside the plugin. **This always runs out of the box** — no key, no setup:
the default config uses the OS's built-in voice.
## Steps
1. **Scaffold + validate (deterministic, no guessing).**
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/narrate.mjs" init
node "${CLAUDE_PLUGIN_ROOT}/bin/narrate.mjs" check
```
`init` creates an empty project override file `./.narrate/settings.local.json`
and gitignores `.narrate/`; settings come from the global
`~/.narrate/settings.json` (else defaults — the OS voice). `check` validates
ffmpeg + config and prints `RESULT: PASS|FAIL` (exit 0/1). Act on it:
- **ffmpeg MISSING** → tell the user how to install it, then stop (the one hard
dependency). On Linux the OS voice also needs `espeak`.
- **PASS** → proceed. With defaults this uses the OS voice — no key required.
Do **not** block on a key. If the user wants a higher-quality cloud voice, mention
they can run **`/narrate-setup`** (Gemini/ElevenLabs) first, but it's optional.
(Playwright + Chromium are auto-provisioned on first render — the first demo may
pause to fetch the browser.)
2. **Render the bundled demo** into a temp dir:
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/narrate.mjs" render \
--scene "${CLAUDE_PLUGIN_ROOT}/examples/demo.scene.json" --out ./.narrate/tmp
```
3. **Deliver.** Create `./docs/` if needed and copy
`./.narrate/tmp/narrate-demo.mp4` → `./docs/narrate-demo.mp4`. Ensure the
project's `.gitignore` contains `.narrate/`.
4. **Report audio, then clean up.** Read `./.narrate/tmp/narrate.log` and quote its
**"Final audio"** line (stream present? mean volume in dB) so the user knows the
muxed audio is real. If it reports the stream MISSING or silent, surface that and
keep `./.narrate/tmp` for debugging; otherwise **delete `./.narrate/tmp`**
automatically — the deliverable lives at `./docs/narrate-demo.mp4`.
(Note: VS Code's built-in preview can't decode the audio — verify in VLC or a browser.)
5. **Report** the path `./docs/narrate-demo.mp4` and explain that this same engine
powers `/narrate-video <prompt>` against the user's own running app.