synthetic-screen-recording: fake a terminal demo in Remotion instead of recording one
An Agent Skill inside the OpenMontage repo that decides whether a terminal demo should be recorded or synthesized: scriptable output gets typed out by Remotion.
Skill details
npx skills add calesthio/OpenMontage --skill synthetic-screen-recording
Recording an install walkthrough is where terminal demos usually go wrong: the window lands in the wrong place, another app steals focus, and the taskbar shows things you did not mean to publish. synthetic-screen-recording is an Agent Skill bundled with OpenMontage, calesthio’s open-source video production system (AGPL-3.0), and it answers one question: should this terminal demo be a real screen capture, or a fake terminal drawn by Remotion’s TerminalScene component that types the commands out? Per the SKILL.md, the author switched to the second route on April 16, 2026, while building the third version of the OpenMontage showcase, after driving Git Bash through Windows-MCP proved too flaky.
The call it makes
The skill’s rule of thumb is simple. If the agent can write the exact command and output sequence in advance, synthesize it. Capture a real screen only when the behavior is unpredictable, the demo needs a real app UI, or the user explicitly asked to see their own desktop.
On the synthetic route the agent writes a list of steps in the composition script and TerminalScene renders them. There are four step kinds:
- cmd: prints the prompt, then types the command at
typeSpeedseconds per character (default 0.035) and holds forholdSeconds(default 0.3). - out: one line of program output, fading in.
- pause: dead time, used to line up with narration.
- pill: a floating badge in the top-right corner that does not advance the timeline; the next step runs in parallel.
The rule the skill repeats most is never to run ahead of the narration. Its own failure story: the steps burned through the content in the first 40% of the scene, the terminal froze on its last state, and the capability menu appeared at 80 seconds while the narrator only reached it at 92. So the agent writes down each narration cue first, opens the scene with a pause up to the first cue, starts each command when the narrator says its line, and ends on a hold long enough to read the final state. lib/verify_scene_pacing.py prints the running time of every step before you spend render minutes.
What it constrains
- Opening pause: at least 2 seconds of an empty terminal with a blinking cursor before anything types.
- Command hold:
holdSecondsof at least 0.3 on everycmd, so viewers register the command before output scrolls in. - Output cadence: 0.4 to 1.0 seconds between output lines; faster looks like a bug, slower drags.
- Pill timing: a pill fires the moment its event finishes on screen, such as “repo cloned” right after the last
Receiving objectsline. - Scope: browser flows go to
playwright-recording, and a real desktop goes to the repo’sscreen_recorderorcap_recordertools.
The SKILL.md also explains how to extend the pattern. To fake a Claude Code chat bubble, a GitHub PR diff or a Slack message, copy TerminalScene.tsx as a template, define a steps interface, and wire a new cut.type into Explainer.tsx.
Who it’s for
It fits people making install tutorials or CLI explainers where narration and commands must land on the same beat: a re-render gives identical pixels, and no private window ends up in frame. If you already run OpenMontage, it is part of that pipeline anyway.
Three catches. First, the skill does not work alone. TerminalScene.tsx, Explainer.tsx and build_composition.py live under OpenMontage’s remotion-composer, so installing the skill into another project gives you the reasoning and the step format, but you have to copy the component yourself. Second, OpenMontage’s operating rules live in AGENT_GUIDE.md and plain Markdown under skills/, with no SKILL.md, so npx skills add calesthio/OpenMontage pulls in the roughly 91 folders under .agents/skills, most of them third-party references for GSAP, Three.js or ElevenLabs. Third, the repo is AGPL-3.0 while this skill’s header declares MIT, so read both before commercial use. As of 2026-10-08 the repo has about 65.0k stars and its last push was 2026-10-03.