Demo Video Creator
Create product demo videos by automating browser interactions and capturing frames. Use when the user wants to record a demo, walkthrough, product showcase, or interactive video of…
sam1337
@0xs4m1337
What This Skill Does
Automates browser interactions and captures frames via Playwright CDP screencast, then encodes them into a video file using FFmpeg. Supports navigation, clicks, hovers, typing, and scrolling to produce polished product demo videos.
Replaces manual screen recording and video editing by generating polished demo videos directly from automated browser scripts.
When to Use It
- Record a product walkthrough for a web application
- Create a tutorial video showing step-by-step browser interactions
- Generate an animated GIF of a UI feature for documentation
- Produce a showcase video for a new feature or release
- Automate demo video creation for recurring product demos
Install
$ openclaw skills install @0xs4m1337/demo-videoDemo Video Creator
Create polished product demo videos by automating browser interactions.
Overview
- Plan the demo sequence (pages, interactions, timing)
- Record frames using Playwright CDP screencast
- Encode to video with FFmpeg
Quick Start
Prerequisites
- Clawdbot browser running (
browser action=start profile=clawd) - App accessible via browser (localhost or remote)
- FFmpeg installed for encoding
Recording Workflow
- Start the Clawdbot browser if not running
- Navigate to the app manually or via
browser action=open - Customize
scripts/record-demo.jsfor the target app - Run:
node scripts/record-demo.js - Encode:
bash scripts/frames-to-video.sh
Planning a Demo
See references/demo-planning.md for guidance on:
- Structuring demo sequences
- Timing and pacing
- Interaction patterns
- What makes demos compelling
Scripts
scripts/record-demo.js
Template Playwright script that:
- Connects to Clawdbot browser via CDP
- Starts screencast capture (JPEG frames)
- Executes demo sequence (navigation, clicks, hovers, typing)
- Saves frames to output directory
Customize for each demo:
DEMO_SEQUENCESarray - define pages and interactionsOUTPUT_DIR- where to save framesFRAME_SKIP- skip every Nth frame (lower = more frames)
scripts/frames-to-video.sh
FFmpeg encoding script with presets:
mp4- H.264, good quality/size balance (default)gif- Animated GIF for embeddingwebm- VP9, smaller files
Usage: ./frames-to-video.sh [input_dir] [output_name] [format]
Interaction Patterns
// Navigation
await page.goto('http://localhost/dashboard');
await page.waitForTimeout(2000);
// Click element
await page.locator('button:has-text("Create")').click();
await page.waitForTimeout(500);
// Hover (show tooltips, hover states)
await page.locator('.card').first().hover();
await page.waitForTimeout(1000);
// Type text
await page.locator('input[placeholder="Search"]').fill('query');
await page.waitForTimeout(500);
// Press key
await page.keyboard.press('Enter');
await page.keyboard.press('Escape');
// Scroll
await page.evaluate(() => window.scrollBy(0, 300));
Tips
- Timing: 2s on page load, 0.5-1s between interactions, 1.5s to show results
- Frame skip: Use 3-5 for smooth video, 8-10 for smaller files
- Quality: 85-90 JPEG quality balances size and clarity
- Resolution: Browser window size determines output resolution
- Loops: GIFs should loop seamlessly - end where you started
Top skills in this category
Last30days Skill
@mvanhornResearch what people actually say about any topic in the last 30 days. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, G...
bb-browser
@yan5xuTurn any website into a CLI command. 36 platforms, 103 commands — Twitter, Reddit, GitHub, YouTube, Zhihu, Bilibili, Weibo, and more. Uses OpenClaw's browser...
SuperDesign
@mpociotExpert frontend design guidelines for creating beautiful, modern UIs. Use when building landing pages, dashboards, or any user interface.
Video Frames
@steipeteExtract frames or short clips from videos using ffmpeg.
Playwright (Automation + MCP + Scraper)
@ivangdavilaAutomates, tests, and debugs browsers with Playwright: locators, auto-waiting, traces, CI runs, and MCP browser control. Use when a test is flaky, times out, or fails only in CI or headless; when a locator matches multiple elements or the wrong one (strict mode violation); when clicks need force, waits become sleeps, or networkidle never settles; for storageState and login setup, request mocking and HAR replay, uploads and downloads, iframes and shadow DOM, popups and dialogs, screenshot diffs that change per machine, trace and report artifacts, sharding a slow suite, device and permission emulation, accessibility checks, driving a real browser through Playwright MCP, extracting data from JS-rendered pages, or porting a Cypress, Puppeteer, or Selenium suite to Playwright. Not for maintaining an existing Cypress or Puppeteer suite (cypress, puppeteer) or for work a plain HTTP request answers (http).