Making a demo

A demo is two things: a take, recorded once, and what is drawn over it and cut from it, applied each time you render. That split decides what needs a new recording.

Changing Needs
What happens in the app: Click, Type, Key, Scroll, Wait, Launch, Set Size A new take: reel demo.reel
A Say line's text, or the voice A new take: the reel is timed by the narration
Which element a Zoom is on A new take: recording finds the element
Captions, badges, ripples, subtitles Only reel render demo.reel
Zooms on a point or the cursor, their scale and easing Only a render
Speed, Hide and Show Only a render
Intro, outro, backgrounds, framing Only a render
Every output setting: quality, size, shape, GIFs, profiles Only a render
On a code screen: Code, Go, Focus, Mark, Callout A new take, drawn in seconds without capturing anything
On a terminal: what is typed, the waits, Mark, Callout, Redact A new take: the commands run again

reel render refuses a take whose actions no longer match the reel, and says which line changed.

Driving apps Real clicks, typing, keys and scrolling, and keeping the window the right size.
Web pages Open a page in WebKit or Chromium instead of launching an app.
Code Walk through source in an editor of reel's own, with focus, marks and callouts.
Terminal A real shell in a terminal of reel's own: commands, waits on their output, redaction.
Reels together Name steps, and have one reel wait for another's: a reel run in a terminal, recorded.
Scenes Join reels into one video: an app, a page, code and the command line, with transitions.
Narration Say lines in a macOS or voicebox voice, timed to the clicks, with the app's sound ducked.
Captions, badges and ripples What is drawn over the recording.
Zoom, speed and trim Follow an element, speed through the boring part, cut what shouldn't be seen.
Intro and outro Title cards over a colour, an image or a video, and the transitions into the demo.