demo-recorder
Installation
SKILL.md
Drives headless Chromium through a scripted walkthrough, encodes a silent 3K 60fps demo.mp4, then optionally voices the narration with Cloney and dubs it on. Below, $M means make -f <this-skill-dir>/Makefile; run it from the directory holding demos/; output goes to ~/Downloads/demo-recorder/<demo>/ unless OUT= says otherwise. $M help lists the targets; each script in scripts/ takes --help.
Workflow
- Create a task per step below, phrased with its completion criterion, then work them to completion.
- Write
demos/<demo>.mjsexportingoptions,setup(),run(h, ctx)andteardown(ctx), modelled onassets/examples/openspeccer.mjs; thehhelpers are inscripts/lib/recorder.mjs. - In
setup(), record against a throwaway copy of the target so on-camera edits leave the user's repo untouched. - Call
h.scene("<name>")at the start of each narrated section. - Write
demos/<demo>.md: one## N. Titlesection per scene in recording order, an_On screen: ..._note, then the spoken text at about 2.2 words per second of scene (example:assets/examples/openspeccer.md). - Run
$M record encode DEMO=demos/<demo>.mjs. Done when~/Downloads/demo-recorder/<demo>/timings.tsvlists every scene and you have viewed every image in~/Downloads/demo-recorder/<demo>/stills/. - Fix what the stills show (missed click, wrong tab, personal paths via
options.hide), then repeat step 6. - Ask which Cloney character and engine to use (offer
$M voices; defaults are inscripts/narrate.sh --help), unless the user records clips themselves asN.wavin~/Downloads/demo-recorder/<demo>/audio/. If acloneyskill is available, activate it first; otherwisecloney --helpcovers the CLI. - Run
$M narrate DEMO=demos/<demo>.mjs VOICE=<character> ENGINE=<engine>. Done when no row says FAILED or "runs past scene". Re-run for a take that said the wrong words (a fresh seed usually fixes it); trim the text of a clip that runs past its scene. - Run
$M dub DEMO=demos/<demo>.mjs. Done when its table has no(no clip)row; then report~/Downloads/demo-recorder/<demo>/demo-dubbed.mp4.