From ui-recorder
Record a web UI and produce a branded, narrated 16:9 MP4 demo. Use when the user asks to "record a demo of {url}", "make a video of {site}", "screen demo", "ui recorder", "marketing clip", or similar. v0.1 supports local-headless recorder + Piper offline TTS + 16:9 output.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ui-recorder:ui-recorderThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Orchestrates the 5-stage pipeline: plan → record → narrate → edit → render.
Orchestrates the 5-stage pipeline: plan → record → narrate → edit → render.
node "${CLAUDE_PLUGIN_ROOT}/scripts/plan-build.mjs" <slug> -- <user-prompt>BYPASS → user already placed browse-plan.json (e.g. from test-fixtures/). A synthetic plan-report.json was written with source: "user-provided" for all actions. Skip to Stage 1.NEEDS_AGENT → workspace is empty. Dispatch the plan-builder agent (Task tool, subagent_type plan-builder). Pass it the workspace path, user prompt, viewport, and playbackRate. The agent writes browse-plan.json, plan-report.json, and narration.txt into the workspace.code + hint. If it reports PLAN_CHROMIUM_MISSING and no browser MCP was available, offer the user: (a) run setup.sh to install chromium, (b) proceed with the agent's partial plan, marking unverified actions as blind manually, (c) edit plan manually.workspace/{slug}/browse-plan.json and plan-report.json. Present to the user:
playbackRate.#N <action> <label> — selector: <sel> [confidence: <level>, source: <tier>] + short rationale.source: "blind", flag with a warning icon and show the warning field.browse-plan.json and the matching action in plan-report.json (change source to "user-provided"), then re-prompt.node "${CLAUDE_PLUGIN_ROOT}/scripts/record.mjs" <plan.json> <slug>.code + hint from UIRecorderError. Suggest the fix verbatim.recording.mp4 path, moments.json summary (N actions captured, total duration).workspace/{slug}/narration.txt — Stage 0's plan-builder agent writes a draft when it runs. Present the draft (if present) alongside the prompt: "Narration? (a) use agent draft, (b) write me a script, (c) auto from action labels, (d) silent". If no draft exists, offer (b)/(c)/(d) only.narration.txt. For (b): prompt for the script. For (c): join all label fields into a neutral sentence per action. For (d): delete narration.txt and skip to Stage 4.workspace/{slug}/narration.txt (unless (a) kept it as-is or (d) deleted it).node "${CLAUDE_PLUGIN_ROOT}/scripts/narrate.mjs" <slug>.TTS_OVERFLOW: auto-rewrite was already tried. Ask user to shorten manually.edit-planner agent with the workspace path. It reads moments/alignment and writes camera-config.json.camera-config.json manually → proceed.node "${CLAUDE_PLUGIN_ROOT}/scripts/render.mjs" <slug>.demo.mp4 path, file size, duration.Recognize phrases like:
config.json tts_voicebrowse-plan.json playbackRate (default 2)Write config via loadConfig/updateConfig from scripts/lib/config.mjs.
Never invoke an earlier stage if its cache sidecar is valid. The scripts handle this internally via .sha256 sidecars. If the user says "re-record", delete ${workspace}/recording.mp4.sha256.
When a script exits non-zero, read ${CLAUDE_PLUGIN_DATA}/logs/last-error.log via Read, extract the UIRecorderError code + hint, and present to the user. Do NOT auto-retry without asking (policy set in design §6.3).
local-headed, steel — redirect to local-headlesselevenlabs — redirect to piperCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub procoders/claude-ui-recorder --plugin ui-recorder