posit-dev/positron

positron-demo-video

Use when the user wants to create a demo video, record a feature walkthrough, or generate a video for a PR description. Triggers on "record a demo", "make a video", "demo video for PR", or "generate a walkthrough".

First seen Mar 29, 2026

Installation

$ npx skills add posit-dev/positron --skill positron-demo-video

Also in this package

Other skills from posit-dev/positron · top by installs.

npx skills add posit-dev/positron

Browse all from posit-dev/positron

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

Repository health

Stars 4.2K
License LICENSE.txt
Default branch main
Open issues 1,781
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,671 B
  • docs SUMMARY.md 241 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 2 installs

SKILL.md

Positron Demo Video Generator

Creates polished demo videos of Positron features through a collaborative script-then-record workflow.

When to Use

  • User asks to create a demo video for a PR
  • User wants to record a feature walkthrough
  • User says "generate a video", "record a demo", "make a video for the PR"

Prerequisites

  • Positron must be built (npm run build-ps to check)
  • ffmpeg installed for MP4 conversion (optional but recommended)

Workflow

This is a collaborative process. Do NOT jump straight to writing code.

Research -> Propose Script -> Iterate -> Record -> Review -> Iterate

Phase 1: Research

Understand what to demo by examining the current branch:

  1. Read recent commits (git log --oneline main..HEAD)
  2. Look at changed files to understand the feature
  3. Check for existing e2e tests that exercise the feature (may provide page object methods)
  4. If adapting an existing test, read it fully

Phase 2: Propose a Script

Present a plain-text "script" to the user -- a numbered list of what the video will show, step by step. Include:

  • What the viewer sees at each step
  • Overlay text for each section (the narration captions)
  • Estimated duration per section

Example format:

Demo Script: Notebook Cell Drag to Reorder

1. [2s] Notebook with 5 cells visible, clean layout
   Overlay: "Drag and drop: grab the handle to reorder cells"

2. [3s] Hover over Cell 0 to reveal drag handle, then drag it to position 2
   Overlay: (same, persists)

3. [4s] Select Cell 4, move it up 3 times with Alt+ArrowUp
   Overlay: "Keyboard: Alt+Arrow to move cells up/down"

4. [4s] Multi-select cells 1-3 with Shift+Arrow, drag to end
   Overlay: "Multi-select: Shift+Arrow to select, then drag together"

5. [3s] Undo 3 times to restore original order
   Overlay: "Undo: Ctrl/Cmd+Z restores previous order"

Total: ~16s of action (+ ~12s trimmed initialization)

Ask the user for feedback. Common adjustments:

  • Reorder steps for better narrative flow
  • Add/remove steps
  • Change overlay wording
  • Adjust which features to highlight

Phase 3: Iterate on Script

Revise the script based on feedback. Keep presenting the updated script until the user approves. Only then move to implementation.

Phase 4: Record

Once the script is approved:

  1. Write the demo test -- translate the script into a Playwright test at test/e2e/demos/<name>.demo.test.ts

- Use setupDemoLayout() to collapse panels and enable screencast mode - Include ...DEMOSCREENCASTSETTINGS in the test's settingsFile.append() - Use narrate() / showOverlay() for captions - Use pause() between actions for pacing - See references/demo-patterns.md for code patterns

  1. Run it:

``bash DEMORECORDVIDEO=1 npx playwright test test/e2e/demos/<name>.demo.test.ts \ --project e2e-electron --reporter list --timeout 300000 ``

  1. Trim and convert -- use a subagent to find the start trim point (where initialization ends) and end trim point (where cleanup begins), then:

``bash ffmpeg -ss <START_SECONDS> -t <DURATION> -i demo-videos/<hash>.webm \ -c:v libx264 -crf 20 -preset slow -an demo-videos/<name>.mp4 ` - -ss: skip initialization (typically ~10s) - -t`: duration to keep (cut before editor-close cleanup frames)

Phase 5: Verify and Deliver

After trimming/converting, delegate verification to a subagent to avoid polluting the main context window with large image data.

Launch a subagent (using the Agent tool) with a prompt like:

Verify the demo video at demo-videos/<name>.mp4.
Extract thumbnail frames at key moments and read them to confirm overlays are visible, layout looks correct, and pacing is reasonable.
Report back: duration, file size, and a brief description of what each section shows.
Flag any issues (missing overlays, bad cropping, blank frames, etc.).

Commands to use:
```bash
# Get duration and file size
ffprobe -v error -show_entries format=duration,size -of csv=p=0 demo-videos/<name>.mp4

# Extract frames at key moments
for t in 1 5 10 15 20; do
ffmpeg -y -ss $t -i demo-videos/<name>.mp4 -frames:v 1 /tmp/frame_${t}s.jpg 2>/dev/null
done
```
Then read each /tmp/frame_*.jpg to visually inspect the frames.

Once the subagent reports back, relay the results to the user:

  • The video file path (for drag-and-drop into PR)
  • Duration and file size
  • A brief summary of what each section shows
  • Any issues the subagent flagged

Ask the user to watch the video and let you know if they want changes.

Phase 6: Iterate

If the user wants changes, go back to the appropriate phase:

  • Script changes (different steps, reordering) -> Phase 2
  • Pacing/overlay tweaks (timing, wording) -> Phase 4
  • Approved -> done, user has the video path

Technical Reference

Demo test files live in test/e2e/demos/. See demo-utils.ts for available helper functions (overlay text, human-speed typing/clicking, zoom, pacing, etc.) and existing .demo.test.ts files for examples. See references/demo-patterns.md for common demo patterns.

Video Output

  • Records at 1920x1080 (1080p) for crisp output on retina displays
  • GitHub free: 10MB limit / paid: 100MB limit
  • First ~10-15s is initialization (always trimmed)
  • WebM works on GitHub; MP4 has better Safari compat