From walkr
Create product walkthrough demos with Walkr. Use when the user wants to build a product demo, walkthrough, tutorial video, or animated product tour. Guides through project setup, script authoring, preview, and export.
How this skill is triggered — by the user, by Claude, or both
Slash command
/walkr:create-walkthroughThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Walkr lets you script interactive product demos in TypeScript and export them as MP4, GIF, WebM, or self-contained HTML embeds. This skill guides you through the full workflow.
Walkr lets you script interactive product demos in TypeScript and export them as MP4, GIF, WebM, or self-contained HTML embeds. This skill guides you through the full workflow.
Follow these phases in order:
Ask the user these questions (one at a time, skip any they've already answered):
Use sensible defaults for everything else:
cursor-02 preset, cyan color (#22d3ee), size 24, with shadow. Three presets are available: cursor-01 (outlined tilted pointer), cursor-02 (filled pointer), cursor-03 (outlined pointer). Users can also use circle, arrow, dot, or a custom svg.Check if Walkr is already installed:
ls node_modules/@walkrstudio/core 2>/dev/null && echo "installed" || echo "not installed"
If not installed:
pnpm add @walkrstudio/core @walkrstudio/cli
If the user wants video export (mp4/gif/webm), also install the recorder:
pnpm add @walkrstudio/recorder
Verify the target app is accessible:
curl -s -o /dev/null -w "%{http_code}" <target-url>
Before writing any code, read the API reference file in this skill's directory:
api-reference.md (in the same directory as this SKILL.md)This contains the complete step builder API, all options, and examples.
Create a TypeScript file (default: demo.ts, or whatever name the user prefers):
import { walkr, moveTo, click, type, wait, highlight, ... } from "@walkrstudio/core";
export default walkr({
url: "<target-url>",
title: "<walkthrough-title>",
viewport: { width: 1920, height: 1080 },
steps: [
// Steps go here
],
});
Structure:
// ── Scene 1: Login ──clearCache() if the app uses cookies/auth statewait() between scenes for visual breathing room (300-800ms)Cursor movement pattern: For every interaction, move the cursor first, then act:
moveTo("#button", { duration: 600 }),
click("#button"),
Typing pattern: Move to the input, click to focus, then type:
moveTo("#email-input", { duration: 400 }),
click("#email-input"),
type("[email protected]", { selector: "#email-input", delay: 40 }),
Selector strategy:
data-testid attributes: [data-testid="login-btn"]#submit-button.nav-item, button[type="submit"]Timing defaults:
| Action | Duration |
|---|---|
moveTo | 400-700ms |
type delay | 35-50ms per character |
wait between scenes | 300-800ms |
wait for page loads | 1000-2000ms |
highlight | 800-2000ms |
Highlights and tooltips:
Use highlight() with spotlight: true to draw attention to key UI elements. Use tooltip() to add explanatory text.
Waiting for dynamic content:
waitForSelector() instead of wait() when waiting for elements to appearwaitForNavigation() after clicks that trigger page navigationStart the dev server:
npx walkr dev <script-file>
This opens Walkr Studio at http://localhost:5174 with live reload. Tell the user:
Help the user iterate:
When the user is happy with the preview, export:
npx walkr export <script-file> --format <format> --output <output-path>
Format options:
mp4 — H.264 video (best compatibility, default)webm — VP9 video (native browser support)gif — Animated GIF (auto-scaled, 15fps)embed — Self-contained HTML file (no dependencies, works offline)Custom resolution:
npx walkr export demo.ts --width 1280 --height 720 --output demo-720p.mp4
Report the output file path and size when done.
Quick reference (see api-reference.md for full details and all options):
| Builder | Purpose | Example |
|---|---|---|
moveTo(selector, opts?) | Move cursor to element | moveTo("#btn", { duration: 600 }) |
moveToCoords(x, y, opts?) | Move cursor to coordinates | moveToCoords(960, 540) |
click(selector, opts?) | Click an element | click("#btn") |
clickCoords(x, y, opts?) | Click at coordinates | clickCoords(100, 200) |
type(text, opts?) | Type text character by character | type("hello", { selector: "#input", delay: 40 }) |
scroll(x, y, opts?) | Scroll the page | scroll(0, 300, { smooth: true }) |
wait(ms) | Pause playback | wait(500) |
waitForSelector(sel, opts?) | Wait for element to exist | waitForSelector(".modal") |
waitForNavigation(opts?) | Wait for page navigation | waitForNavigation() |
highlight(selector, opts?) | Highlight an element | highlight("#card", { spotlight: true }) |
tooltip(selector, text, opts?) | Show a tooltip | tooltip("#btn", "Click here") |
narrate(src, opts?) | Play audio | narrate("/audio/intro.mp3") |
zoom(level, opts?) | Zoom the viewport | zoom(2, { x: 500, y: 300 }) |
pan(x, y, opts?) | Pan the viewport | pan(200, 100) |
drag(from, to, opts?) | Click-drag between locations | drag({ selector: "#a" }, { selector: "#b" }) |
clearCache() | Clear browser cache | clearCache() |
sequence(...steps) | Run steps sequentially | sequence(moveTo(...), click(...)) |
parallel(...steps) | Run steps simultaneously | parallel(moveTo(...), narrate(...)) |
npx claudepluginhub janhoon/walkr --plugin walkrGenerates MP4 walkthrough videos from app screenshots or live sites using Remotion. Adds smooth transitions, zoom effects, text overlays, progress bars, optional voiceover narration for demos, showcases, docs.
Records polished UI demo videos of web applications using Playwright, following a three-phase discover-rehearse-record process. Best for creating walkthroughs, tutorials, or feature showcase videos for documentation or presentations.
Generates timed, screen-by-screen walkthrough video scripts for app features with narration, screen directions, transitions, and shot lists using interactive agent workflow.