Demo Video Creator
by @0xs4m1337
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 a web application. Supports Playwright CDP screencast for high-quality capture and FFmpeg for video encoding.
clawhub install demo-videoπ About This Skill
name: demo-video description: 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 a web application. Supports Playwright CDP screencast for high-quality capture and FFmpeg for video encoding.
Demo Video Creator
Create polished product demo videos by automating browser interactions.
Overview
1. Plan the demo sequence (pages, interactions, timing) 2. Record frames using Playwright CDP screencast 3. Encode to video with FFmpeg
Quick Start
Prerequisites
browser action=start profile=clawd)Recording Workflow
1. Start the Clawdbot browser if not running
2. Navigate to the app manually or via browser action=open
3. Customize scripts/record-demo.js for the target app
4. Run: node scripts/record-demo.js
5. Encode: bash scripts/frames-to-video.sh
Planning a Demo
See references/demo-planning.md for guidance on:
Scripts
scripts/record-demo.js
Template Playwright script that:
Customize for each demo:
DEMO_SEQUENCES array - 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 filesUsage: ./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
π‘ Examples
Prerequisites
browser action=start profile=clawd)Recording Workflow
1. Start the Clawdbot browser if not running
2. Navigate to the app manually or via browser action=open
3. Customize scripts/record-demo.js for the target app
4. Run: node scripts/record-demo.js
5. Encode: bash scripts/frames-to-video.sh
βοΈ Configuration
browser action=start profile=clawd)Recording Workflow
1. Start the Clawdbot browser if not running
2. Navigate to the app manually or via browser action=open
3. Customize scripts/record-demo.js for the target app
4. Run: node scripts/record-demo.js
5. Encode: bash scripts/frames-to-video.sh