
Aidemo
io.github.tandryukhaPublished by GitHub account tandryukhav0.20.6Updated Nov 7, 2026
Narrated, captioned product-demo MP4 from a storyboard.json; re-renders itself in CI at ~$0.
Overview
Turns a storyboard.json into a narrated, captioned product-demo MP4 by driving a real Chrome, with authoring, validation and job tools.
- What you can do
- Author and check storyboards: read the authoring guide and schema, validate and lint, scaffold a demo, import a Playwright trace, inspect a page's selectors, run setup checks
- Run the render pipeline as jobs: probe, record, voice, captions, compose, render, gif, and poll or cancel jobs
- Review output: post-render QA on the finished MP4, extract stills, dump frames, export a walkthrough page
- Produce embed snippets for the rendered media
- File feedback as a GitHub issue with environment and log context attached
- When to use it
- Useful when you want a coding agent to author and render a narrated, captioned demo video of a web flow, including localhost or logged-in apps, and to re-render it later from the same storyboard instead of re-recording by hand.
- Requirements
- Runs locally over stdio via npx. Needs Node 22.12+, Google Chrome, and ffmpeg plus ffprobe on PATH; the first take downloads Playwright's small ffmpeg helper unless AIDEMO_NO_AUTO_INSTALL=1. Voice and captions need OPENAI_API_KEY, or AIDEMO_TTS_PROVIDER=local for offline use, or OPENAI_BASE_URL. Optional AIDEMO_CHROME_EXECUTABLE or AIDEMO_CHROME_CHANNEL select the browser.
Installation
In SourceWeft
- Open Aidemo in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
aidemo — your coding agent makes the demo video
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.
[Website] [ci] [License: MIT] [npm] [Homebrew] [GitHub Marketplace] [MCP Registry] [Works with Claude Code] [OpenSSF Scorecard] [Glama]
Install: Claude Code /plugin marketplace add tandryukha/aidemo · any agent npx skills add tandryukha/aidemo (skill only; add the MCP server with repo-init) · 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.
[aidemo demoing itself on Wikipedia — recorded with aidemo]
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 ▶.
Three ways to use it
- From your coding agent — the fastest path. In Claude Code:
/plugin marketplace add tandryukha/aidemothen/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. - Locally, free & offline —
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. - In CI, self-maintaining — drop
uses: tandryukha/aidemo@stableinto 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).
From one sentence to a narrated MP4
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 with final-demo.srt/.vtt
captions beside it (timed to the video; captions.track also embeds them as a
subtitle track viewers can toggle), 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).
What teams render with it
- GitHub README demos —
aidemo gif demos/onboarding, drop the autoplaying GIF into the readme (the GIFs on this page are exactly that). - Landing-page hero videos — the muted-autoplay MP4 on aidemo.top is a rendered demo, poster frame and all.
- Release / what-shipped demos — narrate the new feature, then
gh release upload v1.4.0 demos/whats-new/output/final-demo.mp4. - Customer & prospect demos — personalized flows against your real app: localhost, auth walls, your own logged-in Chrome; nothing leaves the machine.
Render in CI (self-maintaining demos)
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/.
Quick start (self-contained smoke test)
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"; see
Setup to use a different browser). The one Playwright download is
its ~2 MB ffmpeg helper, which encodes the take: the first take installs it
automatically (AIDEMO_NO_AUTO_INSTALL=1 to manage it yourself with
npx playwright install ffmpeg).
[Quickstart output — the bundled fixture rendered end-to-end]
The bundled fixture rendered end-to-end — narrated, captioned, auto-trimmed. Silent preview; full version ▶.
CLI
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; --fresh
records on a wiped one; --storage-state <file> / --cookie "name=value;domain=host"
seed a cookie-gated site before the first action (or declare setup in the
storyboard, which can also run a preflight script before every take);
--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/).
Agent interface (MCP)
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).
- Authoring tools —
get_authoring_guideserves docs/AUTHORING.md version-matched from the engine (can't go stale);get_storyboard_schema,validate_storyboard,init_demo,doctor. - Pipeline tools run as jobs —
probe/record/render/voice/captions/compose/gifreturn ajobIdimmediately;job_statusreports stage, per-scene progress, and (on failure) the screenshot/frame-dump paths. .envworks like the CLI — the server loads its cwd's and the engine's.envat startup, and since MCP clients often start it outside your repo, each tool given a demo dir also applies that repo's.env(nearest one walking up from the demo dir to the repo root).doctor {dir}shows the result.
Why it's built this way
- Deterministic replay, not an LLM in the loop. The recording runs a fixed action-spec at full speed, so the video is smooth. The agent only authors the storyboard (and confirms selectors once), never during capture.
- Declarative action-spec + fixed player (not generated
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. - Captions via overlaid PNGs, not libass. Many ffmpeg builds lack
subtitles/drawtext; aidemo rasterizes each caption with headless Chrome and overlays it with time-gatedenable— works on any ffmpeg withoverlay. - Cinematic polish is compose-time, not record-time — a bad zoom is a recompose, never a re-record. See docs/POLISH.md.
Deeper docs
- docs/AUTHORING.md — the canonical storyboard schema, action vocabulary, and demo-director principles (served by the engine).
- docs/LOCAL_MODELS.md — no-key rendering: in-process Kokoro voice, local speech servers (speaches), ElevenLabs, offline captions.
- docs/POLISH.md — auto-zoom, scroll easing, music ducking, intro/outro cards, motion blur, cursor control, native/OBS high-fidelity capture.
- docs/CHATGPT_APPS.md — recording ChatGPT Apps SDK
widgets (dedicated profile, nested iframes,
waitForWidget). - docs/CI.md · docs/EMBEDS.md · docs/recipes/ — CI rendering, always-fresh embeds, agent-in-CI recipes.
Setup
Prereqs: Node 22.12+, Google Chrome, ffmpeg + ffprobe on PATH. The
first take also fetches Playwright's ~2 MB ffmpeg helper, which encodes the
recording (once per Playwright version; AIDEMO_NO_AUTO_INSTALL=1 opts out).
Developed and tested on macOS; Linux works for the default (Playwright) capture
and --capture obs. Run aidemo doctor to check your setup.
Choosing the browser. Every launch (recording, inspect, caption/card
rasterizing) uses system Google Chrome by default. Two env vars (shell or
.env) override that, highest precedence first:
AIDEMO_CHROME_EXECUTABLE=/path/to/chrome— an explicit Chromium-based binary.AIDEMO_CHROME_CHANNEL=<channel>— a Playwright channel:chrome(default),chrome-beta,chrome-dev,chrome-canary,msedge,msedge-beta,msedge-dev,msedge-canary, orchromium.chromium(Chrome for Testing) is the fix when an enterprise-managed Chrome closes automated sessions after a few seconds ("Target page, context or browser has been closed"); it needs a one-timenpx playwright install chromium.
aidemo doctor reports which browser will be used and whether it was found.
aidemo login opens the same browser, so the profile you log into matches the
one you record with.
Project layout (per demo)
Security & trust
- No telemetry, no analytics, no install-time scripts (
package.jsonhas nopostinstall/preinstall). - Network is user-initiated only:
api.openai.com(onlyvoice/captions, your key — or a local server viaOPENAI_BASE_URL),api.elevenlabs.io(opt-in),huggingface.co(download-only, once, forAIDEMO_TTS_PROVIDER=local),cdn.playwright.dev(download-only, once per Playwright version: the ~2 MB ffmpeg helper that encodes the take; off withAIDEMO_NO_AUTO_INSTALL=1), andgithub.com(your owngh, foraidemo feedback). Recording/composing are otherwise fully local. The MCP server is stdio-only — no listener. - Small, auditable surface: ~50 source files, 7 runtime deps (11 packages
installed in all), MIT. Pin an immutable ref if you're wary of the moving
#stabletag:npx -y github:tandryukha/aidemo#v0.20.1(any released tag). - Full detail: docs/LOCAL_MODELS.md · report vulnerabilities privately per SECURITY.md.
Roadmap
- Comments on the video (pause & comment) and in-place transcript editing:
captions map to scenes, so editing a line marks that scene dirty and
aidemo voice --scene <id>+composeregenerates only the delta. - Web UI, project history, brand kits, changelog integrations.
- Hosted public MCP (see docs/plans/public-mcp.md).
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.
Contributing
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. Blocked in the
meantime? aidemo guide --topic troubleshooting covers the local workarounds
(per-stage re-runs, pinning a release, running a patched checkout).
License
MIT © Andrii Taran
Source: README.md at commit b1061e7
Tools
0Version history
6- v0.20.5Nov 6, 2026
- v0.20.4Nov 4, 2026
- v0.20.3Nov 3, 2026
- v0.15.2Sep 25, 2026
- v0.15.0Sep 21, 2026
- v0.8.0Sep 16, 2026
Score
90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listedRequired15 pts
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts