The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Aidemo listing page.
aidemo.top · watch a real 51s output ▶ · authoring guide · render in CI
Tell your coding agent "record a 45s demo of the checkout flow" — get back a
polished MP4 with voiceover, synced captions, and auto-zoom. Any MCP-capable
agent (Claude Code, Codex CLI, Gemini CLI) writes one storyboard.json; the
headless engine drives a real Chrome, records a deterministic replay, voices
it, captions it, and trims the dead time. Because the replay is deterministic,
the demo re-renders itself in CI when the product changes — no re-recording,
no API key, about $0 a render. An open-source (MIT) alternative to Screen
Studio, Clueso, or Demosmith for when you'd rather your coding agent make the
demo.
Install: Claude Code /plugin marketplace add tandryukha/aidemo · CI uses: tandryukha/aidemo@stable · CLI npx -y @tandryukha/aidemo · Homebrew brew install tandryukha/aidemo/aidemo
Published on the GitHub Marketplace, npm, a Homebrew tap, and the MCP Registry.
Real output — a ~51 s self-narrated tour of Wikipedia (portal search →
Ada Lovelace → focus-zoom → click through to the Analytical Engine → glide
scroll), authored by Claude from one storyboard.json and recorded as a
deterministic replay. The preview GIF is silent;
watch the full version with narration ▶.
/plugin marketplace add tandryukha/aidemo then
/plugin install record-demo@aidemo (bundles the skill and the MCP
server). In Codex / Gemini / any MCP agent:
npx -y github:tandryukha/aidemo#stable repo-init. Then just say
"record a 45s demo of <flow>" and the agent authors + renders it.AIDEMO_TTS_PROVIDER=local aidemo render <dir> --headless. An in-process
voice model + script-timed captions mean no API key, ~$0, fully offline.
See docs/LOCAL_MODELS.md.uses: tandryukha/aidemo@stable into a
workflow. When the product changes, it replays the committed storyboard and
commits fresh media — no key, no LLM tokens, ~$0 on free runner minutes.
See docs/CI.md.Free & open source. MIT-licensed. Runs on GitHub's free Actions tier, or fully local at $0 with the in-process voice — no API key, no cloud upload, no telemetry. Works against localhost and auth-walled apps (your own Chrome).
You type a sentence, the agent writes an artifact you can read and edit, the engine records and cuts it:
1 · What you type — one line to any MCP-capable agent (Claude Code here):
2 · What the agent authors — a plain, editable storyboard.json (excerpt:
narration + a fixed browser action-spec, side by side — no generated code):
3 · How it's recorded + cut — aidemo render drives a real Chrome (smooth
animated cursor, human-cadence typing, auto-zoom), then trims the dead time and
syncs to the narration:
4 · What you get — output/final-demo.mp4, plus a README-ready GIF
(aidemo gif) and named stills (aidemo stills) from the same take. UI changed?
Re-run against the same storyboard — no re-recording by hand.
The design goal: demos that look human-made and snappy, not like an AI clicking around and waiting between screenshots — by separating authoring (slow, one-time — figure out the flow) from recording (a fast deterministic replay with a smooth animated cursor).
aidemo gif demos/onboarding, drop the autoplaying
GIF into the readme (the GIFs on this page are exactly that).gh release upload v1.4.0 demos/whats-new/output/final-demo.mp4.Commit a storyboard and the aidemo GitHub Action keeps its demo media in sync — a fresh narrated, captioned MP4 (and GIF) on every relevant change. Deterministic replay + a local voice mean no API key, no LLM tokens, about $0 (just free runner minutes). It's the loop a screen recorder can't run: your demo maintains itself.
Full recipe, templates (auto-commit / PR-comment / cron-refresh), and the always-fresh-embeds trick: docs/CI.md, docs/EMBEDS.md, docs/recipes/.
A bundled fixture store (search → results → cart → checkout) that renders a finished demo with zero external dependencies:
Voice/captions need OPENAI_API_KEY in .env — or AIDEMO_TTS_PROVIDER=local
(no key, offline), or OPENAI_BASE_URL at a local server. See
docs/LOCAL_MODELS.md. No Playwright browser download is
needed — the engine uses your system Chrome (channel: "chrome").
The bundled fixture rendered end-to-end — narrated, captioned, auto-trimmed. Silent preview; full version ▶.
Each step is independently runnable and re-runnable — regenerate voice without re-recording, recompose without re-transcribing, etc.
Add --headless for CI/fixtures; omit it for real sites that need your
logged-in session. --profile <dir> picks the Chrome user-data dir;
--capture native|obs switches to high-fidelity screen capture. voice/render
skip TTS for unchanged scenes, and record salvages a failed take (keeps
the footage + drops a screenshot/frame-dump in logs/).
aidemo mcp runs a stdio MCP server (no network listener) exposing the engine
to any MCP client. The Claude Code plugin bundles it; aidemo repo-init registers
it agent-neutrally (.mcp.json for Claude Code, .gemini/settings.json for
Gemini; codex mcp add aidemo -- npx -y github:tandryukha/aidemo#stable mcp for
Codex).
get_authoring_guide serves
docs/AUTHORING.md version-matched from the engine (can't go
stale); get_storyboard_schema, validate_storyboard, init_demo, doctor.probe/record/render/voice/captions/
compose/gif return a jobId immediately; job_status reports stage,
per-scene progress, and (on failure) the screenshot/frame-dump paths.spec.ts). Safer,
editable, and it emits a timeline for free — compose fits each scene's video
to its narration by trimming/speeding only the idle parts, freeze-holding a
static page for any remainder instead of ugly slow-motion.subtitles/drawtext; aidemo rasterizes each caption with headless Chrome and
overlays it with time-gated enable — works on any ffmpeg with overlay.waitForWidget).Prereqs: Node 20+, Google Chrome, ffmpeg + ffprobe on PATH.
Developed and tested on macOS; Linux works for the default (Playwright) capture
and --capture obs. Run aidemo doctor to check your setup.
package.json has no
postinstall/preinstall).api.openai.com (only voice/captions,
your key — or a local server via OPENAI_BASE_URL), api.elevenlabs.io (opt-in),
huggingface.co (download-only, once, for AIDEMO_TTS_PROVIDER=local), and
github.com (your own gh, for aidemo feedback). Recording/composing are
fully local. The MCP server is stdio-only — no listener.#stable tag:
npx -y github:tandryukha/aidemo#v0.8.0.aidemo voice --scene <id> + compose regenerates only the delta.Shipped: the GitHub Action (CI re-render), cinematic polish (auto-zoom, scroll easing, music ducking, intro/outro cards, motion blur, post-hoc cursor control), native/OBS capture, the agent-neutral MCP server + authoring guide, ElevenLabs and in-process local voice providers, and the Claude Code plugin.
Issues and PRs welcome — see CONTRIBUTING.md for dev setup, the
smoke test, and the DCO sign-off requirement. Recording-session feedback has a fast
path: aidemo feedback demos/<name> pre-fills a structured issue.
MIT © Andrii Taran