{"_id":"@alaarab/video-recorder-mcp","_rev":"6-753b8c016785290a1aecffc4d1b8109f","name":"@alaarab/video-recorder-mcp","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@alaarab/video-recorder-mcp","version":"0.1.0","author":{"name":"alaarab"},"license":"MIT","_id":"@alaarab/video-recorder-mcp@0.1.0","maintainers":[{"name":"alaarab","email":"alaarab@gmail.com"}],"homepage":"https://github.com/alaarab/video-recorder-mcp","bugs":{"url":"https://github.com/alaarab/video-recorder-mcp/issues"},"bin":{"video-recorder-mcp":"src/index.mjs"},"dist":{"shasum":"55ef3b2a3c25469dad5d2a329116c542cbddad4b","tarball":"https://registry.npmjs.org/@alaarab/video-recorder-mcp/-/video-recorder-mcp-0.1.0.tgz","fileCount":4,"integrity":"sha512-uPULXAVYGEhPceLVJVbmmYCDJrDk7i0fMl1ZXqjGyB4bkV3Lv6gi7w8zXqf7oQfjHofNXFfGGwQ2ahMNCL3V5w==","signatures":[{"sig":"MEUCIHOy/BUnEUefNQF8e10Z52yBNO8Xx/NASOm0bzREMJ7SAiEA/g1r5Z1U5Ua1rJH6DROXW6OsUqxieXeKAJMLDsG8Ie8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20155},"type":"module","gitHead":"929aea856caed8ad8e21df5380c21a0baad0e80f","scripts":{"start":"node ./src/index.mjs"},"_npmUser":{"name":"alaarab","email":"alaarab@gmail.com"},"repository":{"url":"git+https://github.com/alaarab/video-recorder-mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for browser video recording and macOS screen capture","directories":{},"_nodeVersion":"25.5.0","dependencies":{"playwright":"^1.54.2","@modelcontextprotocol/sdk":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/video-recorder-mcp_0.1.0_1773304092686_0.3773476418739905","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alaarab/video-recorder-mcp","version":"0.1.1","author":{"name":"alaarab"},"license":"MIT","_id":"@alaarab/video-recorder-mcp@0.1.1","maintainers":[{"name":"alaarab","email":"alaarab@gmail.com"}],"homepage":"https://github.com/alaarab/video-recorder-mcp","bugs":{"url":"https://github.com/alaarab/video-recorder-mcp/issues"},"bin":{"video-recorder-mcp":"src/index.mjs"},"dist":{"shasum":"b2b4a53f336497fee8c66b050113400166d92e61","tarball":"https://registry.npmjs.org/@alaarab/video-recorder-mcp/-/video-recorder-mcp-0.1.1.tgz","fileCount":4,"integrity":"sha512-cHTP/AtinTh3y3+gulsMxzSlE12RB379FWmfZPp9ruIW8i9146/ie3nlynjZzQjGQ64e+M2PkFVR3BRYAwBsDA==","signatures":[{"sig":"MEQCIGgbHG8klM0xia1e5g8gja6vZ05qq5ca12fOaTGbaD3kAiAmx4bvGd36DvM6ZXFx30B6HuAWT6qF/ZR9y8DMpWl+1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20181},"type":"module","gitHead":"9e510fcd6f9301a41e695e0bcc27a9ee46bf55e3","scripts":{"start":"node ./src/index.mjs"},"_npmUser":{"name":"alaarab","email":"alaarab@gmail.com"},"repository":{"url":"git+https://github.com/alaarab/video-recorder-mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for browser video recording and macOS screen capture","directories":{},"_nodeVersion":"25.5.0","dependencies":{"playwright":"^1.54.2","@modelcontextprotocol/sdk":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/video-recorder-mcp_0.1.1_1773304117344_0.4804067925967448","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alaarab/video-recorder-mcp","version":"0.1.2","author":{"name":"alaarab"},"license":"MIT","_id":"@alaarab/video-recorder-mcp@0.1.2","maintainers":[{"name":"alaarab","email":"alaarab@gmail.com"}],"homepage":"https://github.com/alaarab/video-recorder-mcp","bugs":{"url":"https://github.com/alaarab/video-recorder-mcp/issues"},"bin":{"video-recorder-mcp":"bin/video-recorder-mcp"},"dist":{"shasum":"287e92793550b5b90cee3990993e7bdd335838c3","tarball":"https://registry.npmjs.org/@alaarab/video-recorder-mcp/-/video-recorder-mcp-0.1.2.tgz","fileCount":5,"integrity":"sha512-8NVurUHw4yKHpKCvLqb8Oxp+X7KVAYKO2iQoBSr3OOoGEnI52S7j4fd3TlYBL5iqgEcQTrIYFRd1e+Ed31rVBg==","signatures":[{"sig":"MEYCIQCBQDz5MllZYJKt+rISCWsBuD0NC7kRBzs2/R6dpQFmAAIhALPtj4FTSXFivcGJ0cN+A6o17QML+vxPx7sjhGb99fPR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20280},"type":"module","gitHead":"006948badeb812c3cc862e1a15faffabd43e483b","scripts":{"start":"node ./src/index.mjs"},"_npmUser":{"name":"alaarab","email":"alaarab@gmail.com"},"repository":{"url":"git+https://github.com/alaarab/video-recorder-mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for browser video recording and macOS screen capture","directories":{},"_nodeVersion":"25.5.0","dependencies":{"playwright":"^1.54.2","@modelcontextprotocol/sdk":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/video-recorder-mcp_0.1.2_1773304146871_0.06091604429522546","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@alaarab/video-recorder-mcp","version":"0.2.0","author":{"name":"alaarab"},"license":"MIT","_id":"@alaarab/video-recorder-mcp@0.2.0","maintainers":[{"name":"alaarab","email":"alaarab@gmail.com"}],"homepage":"https://github.com/alaarab/video-recorder-mcp","bugs":{"url":"https://github.com/alaarab/video-recorder-mcp/issues"},"bin":{"video-recorder-mcp":"bin/video-recorder-mcp"},"dist":{"shasum":"7b205f8d78eb7064438a96248e91cd91d9a74a76","tarball":"https://registry.npmjs.org/@alaarab/video-recorder-mcp/-/video-recorder-mcp-0.2.0.tgz","fileCount":5,"integrity":"sha512-k9EHpCulvhLctD5K+iaMq5lA65j4VdTpA/OWpsAEGbcRZxgdxQ+g8q5mKm8oojZL7dSjqsZ/dJcQ0VpAzHYxOA==","signatures":[{"sig":"MEYCIQDA1TMkohmY+xtavqEnAAQy4TscjQYLIzrhZxQrKj5gEwIhAKkZ9sgTBPqDwvL2rYJTvWV+BFyMmY8JdBQafF9pAQvu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29341},"type":"module","gitHead":"bcb8d50f204b7a09eae6ab56e08f54b5ba171289","scripts":{"start":"node ./src/index.mjs"},"_npmUser":{"name":"alaarab","email":"alaarab@gmail.com"},"repository":{"url":"git+https://github.com/alaarab/video-recorder-mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for browser video recording and macOS screen capture","directories":{},"_nodeVersion":"25.5.0","dependencies":{"playwright":"^1.54.2","@modelcontextprotocol/sdk":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/video-recorder-mcp_0.2.0_1773305746847_0.7509718903282527","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@alaarab/video-recorder-mcp","version":"0.3.0","keywords":["mcp","video","demo","screen-recording","playwright","ffmpeg"],"author":{"name":"alaarab"},"license":"MIT","_id":"@alaarab/video-recorder-mcp@0.3.0","maintainers":[{"name":"alaarab","email":"alaarab@gmail.com"}],"homepage":"https://github.com/alaarab/video-recorder-mcp","bugs":{"url":"https://github.com/alaarab/video-recorder-mcp/issues"},"bin":{"video-recorder-mcp":"bin/video-recorder-mcp"},"dist":{"shasum":"57ee57d573fa720f4aa8b08d816030a787121447","tarball":"https://registry.npmjs.org/@alaarab/video-recorder-mcp/-/video-recorder-mcp-0.3.0.tgz","fileCount":5,"integrity":"sha512-qBAnmnpHEHAktDW52v1eqcKca3j5PY/mSNGT/qjvZkLiJw8obT1gZJP0v2dJrCEj157suAO1Ot9f+Wd9S8USrA==","signatures":[{"sig":"MEUCIBQfMxKdzkpcayR+RAA+Hv2y2ckrLeIX7oCBQ7TCuuqMAiEA9sAWJGMW8ac8w7OydTI+jX0hGArciov9w5wQpLfHNEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46155},"type":"module","gitHead":"01e77fd2dc50a18d7b06e7920ccf67da13ae3043","scripts":{"start":"node ./src/index.mjs"},"_npmUser":{"name":"alaarab","email":"alaarab@gmail.com"},"repository":{"url":"git+https://github.com/alaarab/video-recorder-mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for recording, analyzing, and editing demo videos","directories":{},"_nodeVersion":"25.5.0","dependencies":{"playwright":"^1.54.2","@modelcontextprotocol/sdk":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/video-recorder-mcp_0.3.0_1773306602697_0.9651253725548767","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@alaarab/video-recorder-mcp","version":"0.4.0","description":"MCP server for recording, analyzing, and editing demo videos","type":"module","license":"MIT","author":{"name":"alaarab"},"keywords":["mcp","video","demo","screen-recording","playwright","ffmpeg"],"repository":{"type":"git","url":"git+https://github.com/alaarab/video-recorder-mcp.git"},"homepage":"https://github.com/alaarab/video-recorder-mcp","bugs":{"url":"https://github.com/alaarab/video-recorder-mcp/issues"},"bin":{"video-recorder-mcp":"bin/video-recorder-mcp"},"scripts":{"start":"node ./src/index.mjs"},"dependencies":{"@modelcontextprotocol/sdk":"^1.18.1","playwright":"^1.54.2"},"gitHead":"21cc59206427705efc4b379cc19159b658d82126","_id":"@alaarab/video-recorder-mcp@0.4.0","_nodeVersion":"25.5.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-vl6hqF2FEONVqDWCyTzO54hOOca/eCOC2GKBSy9odjgQmA6ASfrTvriwkFb3ZsrTZWKSoXt2r//gwjQQkuivVg==","shasum":"cc03aa7c89d7c32ba335ac31753d76921eb50fd0","tarball":"https://registry.npmjs.org/@alaarab/video-recorder-mcp/-/video-recorder-mcp-0.4.0.tgz","fileCount":5,"unpackedSize":67427,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGctqvTP3+Le3jqGbq6PTD9e0xC4dVapZBogZD0xKvK9AiEA+fIlj1SUql8v7GAGAXHbYaJq7+L5Qux6e91qczi73/w="}]},"_npmUser":{"name":"alaarab","email":"alaarab@gmail.com"},"directories":{},"maintainers":[{"name":"alaarab","email":"alaarab@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/video-recorder-mcp_0.4.0_1773307699679_0.8225054776500358"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-12T08:28:12.552Z","modified":"2026-03-12T09:28:19.938Z","0.1.0":"2026-03-12T08:28:12.827Z","0.1.1":"2026-03-12T08:28:37.483Z","0.1.2":"2026-03-12T08:29:07.020Z","0.2.0":"2026-03-12T08:55:46.982Z","0.3.0":"2026-03-12T09:10:02.851Z","0.4.0":"2026-03-12T09:28:19.837Z"},"bugs":{"url":"https://github.com/alaarab/video-recorder-mcp/issues"},"author":{"name":"alaarab"},"license":"MIT","homepage":"https://github.com/alaarab/video-recorder-mcp","keywords":["mcp","video","demo","screen-recording","playwright","ffmpeg"],"repository":{"type":"git","url":"git+https://github.com/alaarab/video-recorder-mcp.git"},"description":"MCP server for recording, analyzing, and editing demo videos","maintainers":[{"name":"alaarab","email":"alaarab@gmail.com"}],"readme":"# Video Recorder MCP\n\nRecord product demos without rebuilding the same automation stack in every repo.\n\n`@alaarab/video-recorder-mcp` is a Model Context Protocol server for two kinds of capture:\n\n- browser demo recording with Playwright\n- desktop screen capture on macOS with `ffmpeg`\n- video analysis with `ffprobe` and frame extraction\n- demo editing with trims, title cards, and transitions\n\nIt is designed for Codex-style workflows where an agent can drive a browser, interact with an app, and leave behind a real video artifact instead of a pile of screenshots.\n\n## Why This Exists\n\nMost agent tooling is good at:\n\n- browsing pages\n- clicking buttons\n- taking screenshots\n- reading logs\n\nMost agent tooling is bad at:\n\n- producing a usable feature demo\n- capturing a local desktop app\n- leaving behind a normal video file that opens in QuickTime\n- cutting the dead air out after the recording is done\n\nThis server closes that gap.\n\n## Good Fits\n\n- record a browser login flow and save it as `.mp4`\n- capture a local feature walkthrough for QA or design review\n- pair screen recording with Ableton automation through `LiveMCP`\n- generate repeatable demo videos across multiple projects from one Codex install\n- cut a long raw capture into a tighter highlight reel with chapter cards\n\n## Core Features\n\n- starts Playwright browser sessions with recording enabled\n- exposes browser actions with visible cursor treatment, slower pacing, and optional annotation overlays\n- closes browser sessions and exports a final video\n- transcodes browser recordings to `.mp4` when the output path ends in `.mp4`\n- starts and stops macOS screen recording through `ffmpeg`\n- analyzes recorded videos into metadata, sampled frames, scene cuts, contact sheets, and audio waveforms\n- composes polished demo videos from trimmed segments with intro cards, label cards, outros, and transitions\n- deletes temporary edit assets by default while keeping the final render\n- defaults output to `~/Movies/Codex Recordings`\n\n## Requirements\n\n- Node.js 20+\n- `ffmpeg` on `PATH` for MP4 export, analysis, and composition\n- macOS for screen recording\n- Chromium installed for Playwright-based browser capture and title-card rendering\n- OS-level screen recording permission if you want desktop capture\n\nBrowser demos work on any machine Playwright supports.\n\nDesktop capture currently targets macOS through AVFoundation.\n\nPlaywright browser recording also needs browser binaries:\n\n```bash\nnpx playwright install chromium\n```\n\n## Install\n\nInstall from npm:\n\n```bash\nnpm install -g @alaarab/video-recorder-mcp\nnpx playwright install chromium\n```\n\nInstall directly from GitHub:\n\n```bash\nnpm install -g github:alaarab/video-recorder-mcp\nnpx playwright install chromium\n```\n\nLocal development:\n\n```bash\nnpm install\nnpx playwright install chromium\n```\n\n## Codex Setup\n\nAdd this to `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.videoRecorder]\ncommand = \"node\"\nargs = [\"/absolute/path/to/video-recorder-mcp/src/index.mjs\"]\n```\n\nIf you installed it globally through npm, point `args` to the installed entrypoint on your machine instead.\n\n## Tools\n\n- `list_screen_capture_devices`\n- `start_screen_recording`\n- `stop_screen_recording`\n- `start_browser_session`\n- `browser_navigate`\n- `browser_click`\n- `browser_fill`\n- `browser_press`\n- `browser_annotate`\n- `browser_clear_annotations`\n- `browser_wait_for`\n- `browser_screenshot`\n- `close_browser_session`\n- `analyze_video`\n- `compose_demo_video`\n\n## Typical Workflows\n\n### Browser Demo\n\n1. Start a browser session with recording enabled.\n2. Navigate to your app.\n3. Fill login fields, click through the flow, create/update something.\n4. Use `browser_annotate` only when you need to focus the viewer on one thing.\n5. Close the session with:\n\n```text\nsaveAs: \"~/Movies/Codex Recordings/demo.mp4\"\n```\n\nIf `saveAs` ends in `.mp4`, the server will transcode the Playwright WebM output to H.264 MP4 through `ffmpeg`.\n\nBrowser sessions default to demo-oriented behavior:\n\n- visible synthetic cursor in the recorded page\n- slower click and typing pacing\n- short post-action settling time so pages can breathe\n- annotation overlays for spotlight or outline moments\n\nIf you want a faster or more mechanical pass, set `demoMode: false` when starting the browser session.\n\n### Desktop App Demo\n\n1. Call `start_screen_recording`\n2. Drive the app with your existing tooling\n3. Call `stop_screen_recording`\n\nThis is especially useful when paired with tools like `LiveMCP` for Ableton Live demos.\n\n### Video Analysis\n\n1. Point `analyze_video` at a local `.mp4`, `.mov`, or `.webm`\n2. The tool writes an analysis bundle to disk\n3. Review:\n\n- `analysis.json` for metadata and timestamps\n- `frames/` for evenly sampled stills\n- `scene-cuts/` for scene-change frames\n- `contact-sheet.png` for a quick visual overview\n- `waveform.png` when the file contains audio\n\n### Demo Editing\n\n1. Record a long browser or screen demo first\n2. Call `compose_demo_video` with the useful clip ranges\n3. Add intro/outro cards or per-section labels\n4. Pick a transition style\n5. Keep the final `.mp4` and let the server clean up the temporary segment renders\n\nThe composer is built for the practical cleanup pass after recording:\n\n- trim by `startTime` and `endTime`\n- keep a little comprehension room with `preRoll` and `postRoll`\n- zoom a clip toward the important area with `zoomScale`, `focusX`, and `focusY`\n- add `label` and `subtitle` cards before important sections\n- add `introTitle` and `outroTitle`\n- use `cardStyle: \"minimal\"` when you want calm black-and-white cards\n- choose transitions like `fade`, `slideleft`, `slideright`, `wipeleft`, or `circleopen`\n- keep temp assets only when `keepAssets` is explicitly set to `true`\n\nOriginal input recordings are never deleted by the server.\n\n## Quality Notes\n\n- Leave viewers enough time to understand a page before jumping to the next action.\n- Show the cursor when the recording needs to feel human and traceable.\n- Use annotations sparingly. They work best for one point of emphasis, not for every click.\n- Short overlays read better than dense commentary.\n- The default `minimal` card style is intentionally plain because readable black-and-white cards often cut better into product footage than glossy presentation slides.\n\n## Example Use Cases\n\n- “Open the staging site, log in, create a project, and save a 20-second demo MP4.”\n- “Start screen capture, tweak the plugin in Ableton, and save the recording to Movies.”\n- “Take a screenshot halfway through the flow, then continue and export the final browser video.”\n- “Analyze a recorded demo and show me where dead time, scene changes, or sensitive screens appear.”\n- “Cut this 2-minute raw walkthrough into a 20-second demo with title cards and keep only the best moments.”\n\n## Output\n\nBy default, recordings land in:\n\n```text\n~/Movies/Codex Recordings\n```\n\nYou can override output paths per tool call.\n\nVideo analysis bundles land under:\n\n```text\n~/Movies/Codex Recordings/video-analysis\n```\n\nComposed demo videos default to:\n\n```text\n~/Movies/Codex Recordings/demo-<timestamp>.mp4\n```\n\n## Current Limits\n\n- macOS screen capture is full-display capture right now, not single-window crop\n- browser automation is intentionally low-level and generic\n- screen recording depends on `ffmpeg` and OS-level capture permissions\n- title cards are rendered through Playwright, so Chromium needs to be installed\n- browser cursor and annotations are synthetic overlays inside the captured page, not the operating system cursor\n\n## Development Notes\n\nThe server is intentionally small:\n\n- MCP transport: `@modelcontextprotocol/sdk`\n- browser automation: `playwright`\n- desktop capture: `ffmpeg`\n\nThat keeps it easy to patch for project-specific workflows without dragging in a large framework.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}