Agent skill

Product Demo Video Recorder

by ooiyeefei in ooiyeefei/ccc

Records a sharp product demo video by driving the real app with a browser agent, from storyboard to Xvfb capture and a narration script synced to the frames.

MITAuto-check passedMedia & Creative

Install Product Demo Video Recorder

skills CLI
$ npx skills add ooiyeefei/ccc --skill demo-video -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ooiyeefei/ccc demo-video --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ooiyeefei/ccc.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/demo-video .claude/skills/demo-video && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
demo-video
GitHub stars
495
Token cost
~2.8k tokens
SKILL.md length
1,562 words
Files
8 (incl. scripts, references)
Skills in repo
22
Repo updated
First seen
Licence
MIT

At a glance

Records a sharp product demo video by driving the real app with a browser agent, from storyboard to Xvfb capture and a narration script synced to the frames.

  • Works in 8 steps: Preflight → Storyboard - GATE 1: approval before any… → Stage the app → …
  • Recording a product walkthrough for a launch or hackathon submission
  • SKILL.md covers The recording contract, Steps and References
  • Runs JavaScript and Python scripts from its folder; calls ffmpeg and apt-get

What it does

A demo is treated as an argument in which every beat proves a claim, and narration is written to what is on screen at that second. The recording contract bans posters: every frame must be real browser state from the running app, though callouts, a drawn cursor and spotlights over live state are fine. It also requires the whole journey, from entry and setup through the core loop to the payoff, rather than opening on the final feature.

The pipeline runs from storyboard approval to a staged app, a smoke take and the full recording in an Xvfb framebuffer, then derives timestamps from the resulting MP4 so the narration script lands on the right frames. Reference notes cover storyboarding, driving the app, recording and motion, and scripts include cinema.js and record_template.py. It is not for live pitching, deck building, one-off screenshots or editing footage that already exists.

When your agent uses it

  • Recording a product walkthrough for a launch or hackathon submission
  • Redoing a demo recording that came out blurry, pixelated or soft
  • Syncing narration to what is actually on screen

Example prompts

  • “Record a demo video of our scheduling app, starting with the storyboard for my approval.”
  • “The last recording looked like a slideshow and the narration was off. Redo it from the real app.”
  • “Make a walkthrough video of the checkout flow with a narration script timed to the frames.”

Requirements

  • A runnable app and a browser agent to drive it
  • Xvfb for framebuffer recording

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Preflight
  2. Storyboard - GATE 1: approval before any capture
  3. Stage the app
  4. Smoke take - GATE 2: inspect before the full capture
  5. Full take - real frames, not upscaled
  6. Verify the film and derive timestamps - GATE 3: the MP4 is the arbiter, not the clock
  7. Narrate to the frame
  8. Re-records

What it can do on your machine

Read from SKILL.md and the folder at commit c0fd926. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (JavaScript and Python), which the agent can run.

    Shell commands in SKILL.md call:

    • ffmpeg
    • apt-get

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Product Demo Video Recorder loads about 2.8k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 224 tokens; SKILL.md has 1,562 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~224
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~10k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from ooiyeefei/ccc at commit c0fd926, republished under its MIT licence (© ooiyeefei). 1,562 words, ~2,782 tokens.

Download SKILL.mdSave it as .claude/skills/demo-video/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
demo-video
description
Record a crisp, high-resolution product demo video by driving the real app with a browser agent - the full pipeline from storyboard approval to staged app, smoke take, Xvfb framebuffer recording, MP4-derived timestamps, and a narration script synced to the frames. Use whenever the user wants a demo video, a product walkthrough recording, a screen capture of an app for a hackathon / launch / submission, or complains that a recording came out pixelated, blurry, blocky or soft, showed title cards instead of the product, jumped straight to the final feature, had narration landing on the wrong frame, or looks static / like a slideshow when the capture is genuine. Also the home of the recording harness that pitch-deck reuses for slide walkthroughs. Not for - live pitching or deck building (pitch-deck, pitch-package), one-off screenshots, or editing footage that already exists.

Demo Video - film the real product, crisply

A demo is an argument: every beat on camera proves a claim, and the narration is written to the frame - describing what is actually on screen at that second.

Boundary - this recording has no substitute. The video-shotcraft motion library captures STILL screenshots and glides a fake camera over them; it CANNOT record interaction. Never let it stand in for a tutorial, walkthrough, or any real-product film. It decorates RENDERED scenes in motion-video; the live recording, the DOM motion, and the timestamp-synced script stay here, always. (Standing owner rule, 2026-07-23; see motion-video/references/shotcraft-bridge.md.)

The recording contract

This fires automatically on every demo film, whether or not the user asks for it. These are the rules an agent under time pressure skips first, which is exactly why they are not optional. Rules 1-4: references/storyboard.md. Rules 5-6: references/recording.md.

  1. Film the product, not a poster - annotate, never substitute. Every frame is real browser state from the running app, changing because the driver acted on it.

    Annotation drawn over live state is standard practice: callouts, the drawn cursor, spotlight, the terminal panel. A film that explains itself on mute is doing its job. The test is whether the overlay is load-bearing: remove it, and does the frame still show the product doing the thing? If yes it is annotation, use it freely. If no it is a poster - a title card, slide interstitial, mocked screen, static hero image - and it stays banned.

    If a beat can't be staged, cut the beat or fix the app. Never substitute a picture of the claim for the claim. (Slides are legitimate in pitch-deck's deck take, stitched around the demo film, never inside it.) Motion and annotation: references/motion.md.

  2. Show the whole journey, not just the money shot. The film covers entry -> setup -> the core loop -> the payoff. A viewer who has never seen the product must be able to follow how a real user gets from opening it to the result. Opening on the final feature reads as a mockup and answers none of "what is this, who uses it, how do you get there".

  3. Every claim gets a frame. The storyboard runs both directions: each beat names what it proves, and each claim the narration will make names the beat that shows it. This binds hardest on agent actions - "the agent searched", "it updated memory", "it chose the cheaper route" all need visible on-screen evidence (the tool log, the memory panel, the route badge). A claim with no frame is cut from the narration or earns a beat that shows it. Invisible work is not proof.

  4. Storyboard approved before capture - Gate 1 below. Blocking.

  5. Smoke take inspected before the full capture - Gate 2 below. Blocking: any failed check means fix the staging and re-smoke, never start the full capture on a known-bad frame.

  6. Timestamps derived from the delivered MP4 - Gate 3 below. Never from planned waits, never from the storyboard's estimated holds.

Steps

0. Preflight

Check the machine can do this before promising it: ffmpeg and Xvfb installed (apt-get install -y xvfb on Linux; this recipe is Linux-first - on macOS capture the retina display with ffmpeg -f avfoundation or the built-in screen recorder, same principles: physical pixels, controlled bitrate). Confirm the app runs with demo data and demo credentials, and that credentials stay OUT of the repo (scratchpad only).

1. Storyboard - GATE 1: approval before any capture

Write the visual storyboard before recording anything. One row per beat:

phase | screen | action | proof | narration | duration

Read references/storyboard.md for the format, the journey-coverage checklist, and the claim-to-frame audit. Then show it to the user and stop. Do not stage, do not smoke-test, do not record until they approve or amend it.

A blanket "just make it, I trust you" issued before the storyboard existed is not approval of it - the user has not seen the plan yet. Show the table and wait.

The harness enforces this too: a full take requires --storyboard <path>, and stamps its hash into the sidecar.

This gate is not politeness - it is the cheapest point to change the film. After capture, every edit re-shoots footage and re-syncs narration against new timestamps.

2. Stage the app

Deterministic demo data, seeded to make the beats true. Log in OFF camera. Kill anything that can interrupt the frame: notifications, password-manager bubbles (pre-write Chrome preferences - see recording.md), first-run dialogs. Never trigger JS alerts mid-take; they freeze the driver.

3. Smoke take - GATE 2: inspect before the full capture

Run record_template.py <name> --smoke. It records through the first beat that actually drives something - rendering beat 1 alone cannot catch a dead selector, which is half of what this gate is for - then extracts frames and prints a contact sheet. Read it as an image.

Checking: right app, right screen, right framing, text crisp at full scale, no cursor, no dialog or bubble in frame, chrome hidden, seeded data actually present. Full checklist in references/recording.md.

Any unchecked box means the take is not ready: fix the staging and re-smoke. Never start the full capture on a known-bad frame - that is the whole point of the gate.

A smoke take costs ~30 seconds and catches the failures that otherwise surface after a full take plus a written narration: wrong scale factor, unstaged data, a dead selector, a login bubble covering the money shot.

The harness enforces this: a full take refuses to run until a smoke take exists for that name. --no-smoke overrides it and is stamped into the sidecar - use it only when this app was already captured at this config.

Show full SKILL.md (630 more words)Show less
4. Full take - real frames, not upscaled

Xvfb at physical 2560x1600, Chrome in app mode with --force-device-scale-factor=2 over a 1280x800 CSS viewport, ffmpeg x11grab with -draw_mouse 0 at CRF 16-18, driven over CDP.

Read references/recording.md before changing ANY parameter - every flag in that recipe exists because the obvious capture paths produce macroblocked or soft footage at high resolution.

Camera move, not a cut. Genuine footage still reads as a slideshow when the driver teleports: scrollIntoView() jumps and setting .value inserts a whole string in one frame. Beats therefore carry a motion field (an awaited camera move or annotation) and use click / type, which drive a drawn cursor to the target and then dispatch real CDP input events, so the app receives genuine events while the frame shows the movement. Motion costs real seconds, so budget it in the storyboard's dur column. Primitives, their costs, the annotate-never-substitute test, and proof-frame timing: references/motion.md.

5. Verify the film and derive timestamps - GATE 3: the MP4 is the arbiter, not the clock

The harness records wall-clock marks during the drive. Those are a hypothesis; the delivered file is the fact. (Why they drift, and the reconciliation arithmetic, are in references/recording.md.)

A full take already reconciles and extracts on the way out - read the contact sheet it printed. Use record_template.py <name> --verify to re-check, or after a re-encode. (After a trim, prefer re-cutting from the original: the reconcile assumes missing time is at the front, so a tail cut shifts every mark early - the harness flags it, but flagged is not fixed.) (Manual ffprobe/ffmpeg -ss procedure in references/recording.md, including what to do for footage with no sidecar.)

Extract a frame per milestone and look at every one. Each frame must show the screen its beat claims.

Each beat gets two timestamps, and using the wrong one breaks the gate: t_video is the narration cue (beat start), t_proof is where the claim is actually visible (after the async result renders). Verify against t_proof; sync narration to t_video. On a live-backend beat these are seconds apart, and checking at the cue fails a correct take.

Ship nothing whose frames you have not seen. If a proof frame shows the wrong screen, the timestamp is wrong - fix it before narration, not after voicing.

6. Narrate to the frame

Hand the verified milestone JSON and the storyboard to the pitch-craft skill. The narration describes what IS on screen at each timestamp, in the recorded register, chunked to the milestone windows. Every claim traces to a beat per contract rule 3.

7. Re-records

A new take shifts every milestone (live backends vary by seconds). Re-verify against the new MP4, then re-align the narration per pitch-craft's timing.md re-sync procedure. Treat take + script as one versioned pair.

If the beat list changed, Gate 1 reopens. Dropping beats that wouldn't stage, merging two, or reordering the journey all change the film the user approved - re-show the storyboard and get sign-off before re-shooting. Silently shipping four of six approved beats is the most likely way this pipeline fails in practice, because unstageable beats only reveal themselves once you try.

References

  • references/motion.md - the motion and annotation layer: primitives, the substitution test, beat wiring, what motion costs. Read before writing beats that move.
  • references/storyboard.md - the storyboard format, journey coverage, the claim-to-frame audit, and how to run the approval gate. Read before writing the storyboard.
  • references/recording.md - the framebuffer recipe and why each flag exists; the smoke-take and timestamp-verification checklists; process gotchas. Read before recording or debugging quality.
  • references/driving.md - CDP driving patterns: clicks, variable-latency waits, milestone marking, staying dialog-safe.
  • scripts/record_template.py - the harness. Edit the CONFIG and BEATS sections; the plumbing is done. Supports --smoke and --verify.
  • scripts/cinema.js - the in-page motion layer, injected automatically. Read it before changing a primitive's defaults; they were arrived at by fixing real defects.

© ooiyeefei, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (scripts, references) in skills/demo-video of ooiyeefei/ccc.

  • SKILL.md
  • README.md
  • references/driving.md
  • references/motion.md
  • references/recording.md
  • references/storyboard.md
  • scripts/cinema.js
  • scripts/record_template.py

Open the folder on GitHubat commit c0fd926

Compare with similar skills

Product Demo Video Recorder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Product Demo Video Recorder compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Product Demo Video Recorder this skillooiyeefei/ccc495—~2.8kAutomated safety check: PassMIT
Weekly Changelog Videoheygen-com/hyperframes60k—~3.3kAutomated safety check: PassApache-2.0
Faceless Explainer Videoheygen-com/hyperframes60k3 repos~7.7kAutomated safety check: NotesApache-2.0
ShortsAgriciDaniel/claude-shorts219—~3.2kAutomated safety check: NotesMIT
Taisly Social Media Postingtaisly/agent2171 repos~1.5kAutomated safety check: PassMIT
Viral Captions And Ctasvyralcontent/content-skills1341 repos~2.8kAutomated safety check: PassMIT

Similar skills

  • Weekly Changelog Video

    heygen-com/hyperframes

    Turns a weekly changelog markdown file into a branded HyperFrames video with voiceover, animated mock-UI scenes and captions, using fonts, background and scripts bundled in the skill.

    60k GitHub stars~3.3k tokensUpdated today
    Media & CreativeAuto-check passed
  • Faceless Explainer Video

    heygen-com/hyperframes

    Turns an article, notes or a topic brief into an explainer video whose visuals are invented per scene, built frame by frame in HyperFrames with no footage.

    60k GitHub starsUsed in 3 repos~7.7k tokens
    Media & CreativeAuto-check: notes
  • Shorts

    AgriciDaniel/claude-shorts

    Interactive longform-to-shortform video creator. An agent skill from AgriciDaniel/claude-shorts.

    219 GitHub stars~3.2k tokensUpdated 3 mo ago
    Media & CreativeAuto-check: notes
  • Free AI-first short-form video publishing to TikTok, Instagram Reels, YouTube Shorts, X, and Facebook from AI agents through Taisly.

    217 GitHub starsUsed in 1 repo~1.5k tokens
    Media & CreativeAuto-check passed
  • Viral Captions And Ctas

    vyralcontent/content-skills

    Write captions, on-screen text, hashtags, and CTAs for short-form video that earn saves and sends without tripping engagement-bait penalties.

    134 GitHub starsUsed in 1 repo~2.8k tokens
    Media & CreativeAuto-check passed
  • Showtime

    FavioVazquez/showtime

    A skill your agent uses when the user wants a video made, edited or finished: a launch or promo, product demo, explainer, trailer or teaser, tutorial or walkthrough, a screen recording turned into a…

    220 GitHub stars~3k tokensUpdated 2 days ago
    Media & CreativeAuto-check passed

More from ooiyeefei/ccc

All 22 skills in this repo
  • Turns meeting recordings into notes with a chain of custody from audio to claim, auditing transcripts for gaps and low-confidence numbers and names.

    495 GitHub stars~876 tokensUpdated 2 mo ago
    Auto-check passed
  • Builds marketing and explainer videos in Remotion from rendered scenes, with one real product capture as proof, and cuts them for each platform's formats.

    495 GitHub stars~2.9k tokensUpdated 2 mo ago
    Auto-check passed
  • Generates architecture diagrams as .excalidraw files by analyzing a codebase, with optional PNG or SVG export through Playwright.

    495 GitHub stars~2k tokensUpdated 2 mo ago
    Auto-check passed
  • Sets up GA4 on a website and wires one real conversion event end to end, verified in DebugView before any money goes into ads.

    495 GitHub stars~2.2k tokensUpdated 2 mo ago
    Auto-check passed
  • Builds or rewrites SaaS landing pages by researching the real product, positioning it against alternatives and writing buyer-focused copy, then implementing it in the codebase.

    495 GitHub stars~1.8k tokensUpdated 2 mo ago
    Auto-check passed
  • Meta Pixel Setup

    ooiyeefei/ccc

    Walks a site owner through installing the Meta Pixel, firing one conversion event and verifying it with the Pixel Helper before any ads run.

    495 GitHub stars~2.4k tokensUpdated 2 mo ago
    Auto-check passed

Questions about Product Demo Video Recorder

What does Product Demo Video Recorder do?

Records a sharp product demo video by driving the real app with a browser agent, from storyboard to Xvfb capture and a narration script synced to the frames. A demo is treated as an argument in which every beat proves a claim, and narration is written to what is on screen at that second. The recording contract bans posters: every frame must be real browser state from the running app, though callouts, a drawn cursor and spotlights over live state are fine.

When should I use Product Demo Video Recorder?

Product Demo Video Recorder fits situations like: recording a product walkthrough for a launch or hackathon submission; redoing a demo recording that came out blurry, pixelated or soft; syncing narration to what is actually on screen.

How do I install Product Demo Video Recorder in Claude Code?

Run `npx skills add ooiyeefei/ccc --skill demo-video -a claude-code`. Or copy the skill folder (skills/demo-video in ooiyeefei/ccc) into .claude/skills/demo-video in your project. Claude Code loads it when a task matches its description.

How do I install Product Demo Video Recorder in Codex?

Run `npx skills add ooiyeefei/ccc --skill demo-video -a codex`. Or copy the skill folder (skills/demo-video in ooiyeefei/ccc) into .agents/skills/demo-video in your project. Codex loads it when a task matches its description.

Can I use Product Demo Video Recorder in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ooiyeefei/ccc --skill demo-video -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/demo-video, .gemini/skills/demo-video, .github/skills/demo-video and .opencode/skills/demo-video in your project.

What does Product Demo Video Recorder need to run?

Going by SKILL.md and its folder, Product Demo Video Recorder needs JavaScript and Python for the scripts in its folder and the command-line tools its instructions call (ffmpeg and apt-get). Our summary lists: A runnable app and a browser agent to drive it; Xvfb for framebuffer recording.

Does Product Demo Video Recorder access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Product Demo Video Recorder safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Product Demo Video Recorder use?

Product Demo Video Recorder is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Product Demo Video Recorder use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.3k tokens, read only when the agent opens those files.

What are the alternatives to Product Demo Video Recorder?

Skills that share tags, products or a category with Product Demo Video Recorder: Weekly Changelog Video (heygen-com/hyperframes, 60k stars), Faceless Explainer Video (heygen-com/hyperframes, 60k stars), Shorts (AgriciDaniel/claude-shorts, 219 stars) and Taisly Social Media Posting (taisly/agent, 217 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Product Demo Video Recorder?

ooiyeefei (a GitHub user) maintains it in ooiyeefei/ccc, which has 495 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on July 29, 2026.

Source: ooiyeefei/ccc on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.