smithery/neversight

demo

Automatically generate screen recordings with AI narration to demonstrate PR changes. Use this skill when you need to create a demo video showing UI changes from a pull request.

Installation

$ npx skills add smithery/neversight --skill demo

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/neversight · top by installs.

npx skills add smithery/neversight

Browse all from smithery/neversight

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,289 B
  • docs SUMMARY.md 276 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

/demo - PR Demo Video Generator

Generate screen recordings with AI narration to demonstrate your PR changes.

How to Execute /demo

Follow these steps in order. You (Claude) generate the test and narration directly - no templates needed.

Step 1: Check Prerequisites

npx tsx lib/cli.ts check-prereqs

Returns JSON with status for:

  • devServer: Whether the dev server is responding
  • ffmpeg: Whether ffmpeg is installed (needed for video composition)
  • elevenLabsKey: Whether ELEVENLABSAPI_KEY is set (optional, for narration)

If devServer is false, ask the user to start their dev server first.

Step 2: Analyze the Diff

npx tsx lib/cli.ts analyze-diff --staged

Or for specific commits:

npx tsx lib/cli.ts analyze-diff --commits=HEAD~3..HEAD

Returns JSON with:

  • uiRelevant: Whether changes affect UI
  • suggestedRoute: Route to navigate to
  • changedComponents: Component names that changed
  • suggestedActions: What to demonstrate

If uiRelevant is false, inform the user and stop.

Step 3: Discover Playwright Setup (For Monorepos)

For monorepos or projects with non-root Playwright configs:

Glob("**/playwright.config.ts")

Note the paths for Step 5.

Step 4: Generate Playwright Test (YOU WRITE THIS)

Based on the analysis, write a Playwright test that demonstrates the UI changes.

Use vanilla Playwright only - import from @playwright/test, not custom fixtures.

Save to temp/demo-recording.spec.ts:

import { test } from "@playwright/test";

test("demo: updated modal copy", async ({ page }) => {
  await page.goto("http://localhost:3000/home");
  await page.waitForLoadState("networkidle");
  await page.waitForTimeout(1500);

  await page.click('[data-testid="add-repo-button"]');
  await page.waitForTimeout(800);

  await page.waitForSelector('[role="dialog"]');
  await page.waitForTimeout(3000); // Let viewers see the changes
});

Guidelines:

  • Navigate to the affected route
  • Include realistic timing with page.waitForTimeout() (1-3 seconds between actions)
  • Use robust selectors: data-testid > ARIA roles > text content

Step 5: Generate Narration Script (YOU WRITE THIS)

Write natural narration as a JSON array. Save to temp/narration-script.json:

[
  { "text": "This pull request updates the copy in our add repository modal.", "startTimeMs": 0 },
  { "text": "Let me show you - I'll click the add button here.", "startTimeMs": 2500 },
  { "text": "And here's the modal with our updated messaging.", "startTimeMs": 5500 }
]

Guidelines:

  • Brief intro explaining the PR changes
  • Commentary synced to test actions
  • Conversational tone
  • ~150 words per minute for timing

Step 6: Run the Recording

npx tsx lib/cli.ts cleanup
npx tsx lib/cli.ts record temp/demo-recording.spec.ts

For monorepos, pass discovered config:

npx tsx lib/cli.ts record temp/demo-recording.spec.ts --config=apps/web/playwright.config.ts --test-dir=apps/web/tests

Look for videoPath in the JSON output under --- RESULT ---.

Step 7: Generate Narration Audio (Optional)

If ELEVENLABSAPI_KEY is set:

npx tsx lib/cli.ts narrate temp/narration-script.json

Look for audioPath in the JSON output.

Step 8: Composite Final Video

npx tsx lib/cli.ts composite <video-path> [audio-path]

Example:

npx tsx lib/cli.ts composite temp/test-results/video.webm temp/narration.mp3

Or without audio:

npx tsx lib/cli.ts composite temp/test-results/video.webm

Look for outputPath - this is the final MP4 in output/.


Configuration

Edit config.json in the skill directory:

{
  "baseUrl": "http://localhost:3000",
  "voiceId": "21m00Tcm4TlvDq8ikWAM",
  "videoDimensions": { "width": 1280, "height": 720 },
  "outputDir": "output",
  "tempDir": "temp",
  "recordingTimeout": 60000
}

ElevenLabs Voice IDs

  • 21m00Tcm4TlvDq8ikWAM - Rachel (default, conversational)
  • EXAVITQu4vr4xnSDxMaL - Bella (warm, friendly)
  • ErXwobaYiN019PkySvjV - Antoni (professional)

Troubleshooting

"Dev server not responding"

Start your dev server: pnpm dev or npm run dev

"ffmpeg not found"

  • macOS: brew install ffmpeg
  • Linux: sudo apt install ffmpeg
  • Windows: choco install ffmpeg

"ElevenLabs API error"

Check your API key: echo $ELEVENLABSAPI_KEY Video will work without it (just no narration).

Video file not found

Check temp/playwright-output.log for errors.


MCP Server (Advanced)

For tighter Claude integration, an MCP server is available with typed tools:

pnpm run mcp-server

Tools: democheckprerequisites, demoanalyzechanges, demodiscovertestenvironment, demosavetestfile, demosavenarrationscript, demorecordvideo, demogenerateaudio, democompositefinalvideo, demo_cleanup

Configure in your MCP settings to use these instead of CLI commands.