Cutaway
Your coding agent records a polished MP4 demo of what it just built — animated zoom, human cursor, motion blur, all local.
- Source repo
- half144/cutaway
- Stars
- ★ 45
- Last updated
- 10d ago
- License
- MIT
- Primary language
- JavaScript
- FA score
- 47/100 · Major gaps
At a glance
- Works with
- Universal · cross-platformCodex · Claude Code
- You'll need
- Typical use
- Attach a PR demo: record a UI change and export with --width 1280 --height 720 --quality standard to stay under GitHub's 10 MB attachment limit.
- Main limitation
- One Chromium tab only: no popups, native windows, drag-and-drop, audio or webcam, and custom canvas/iframe cursors are not captured.
- Source review
- 47/100 · Major gaps
What does this agent do, and when should you use it?
Cutaway turns a JSON plan into a finished screen recording: Playwright drives Chromium through click, type, upload, scroll and press steps, Skia composes the scene, and FFmpeg encodes an MP4 — no AI model, cloud service or upload involved. The installer drops the repo at ~/.cutaway and links the skill into Claude Code and Codex, so you can just ask your agent for a recording (/cutaway record the checkout flow, $cutaway in Codex). Each session writes video.mp4, poster.png, lossless frames/*.png plus timeline.json, camera.json, render.json and workflow.json. The CLI has three subcommands: record (capture and export), render (re-export a saved capture with different look options) and frame (wrap a plain screenshot in the same browser or phone chrome). Desktop browser and portrait Playwright phone devices are both supported, and every step really executes against the target page.
src/cli.mjs exposes record, render and frame. record reads a JSON plan with url, viewport (default 1440×810), device, captureScale, hide, timeout, colorScheme, then launches Chromium via Playwright and executes steps in order: click, type, upload, focus, scroll, press, wait on desktop, plus tap and swipe on phones. Steps accept expect (a selector that must become visible or the recording stops), pause and hold (0.05–5s long press). The camera auto-zooms on typing, menus and small results; the cursor uses arcs, Fitts' law timing and a press-in click; dead time is sped up while clicks, typing and results play at real speed. render re-exports a saved capture and takes --width/--height (320–3840, even), --fps (24–60), --quality, --zoom (1–3), --blur, --cursor-size, --padding, --preset, --window, --keys and --pacing. frame takes an external screenshot and adds the Safari-style window on the wallpaper or a drawn phone frame. Recording writes timeline.json, camera.json and workflow.json; export writes video.mp4, poster.png and frames/*.png alongside render.json.
- Attach a PR demo: record a UI change and export with --width 1280 --height 720 --quality standard to stay under GitHub's 10 MB attachment limit.
- Reproduce a bug for review with an expect selector so the recording stops at the exact failing step instead of silently skipping it.
- Show a mobile layout: set device to "iPhone 15 Pro" and write tap/swipe steps to get 1080×1920 with touch indicators and an iOS keyboard.
- Let Claude Code or Codex demo its own work by asking /cutaway record the checkout flow or $cutaway.
- Produce still evidence for a design review: screenshot a viewport, then run the frame subcommand to add the browser window and wallpaper.
- Validate the toolchain offline against the bundled mock apps in examples/demo.json or examples/mobile-demo.json.
How do you install or deploy this agent?
Requires Node.js 22+. FFmpeg and Chromium come with the install.
curl -fsSL https://raw.githubusercontent.com/half144/cutaway/master/install.sh | bashThe installer downloads Cutaway into ~/.cutaway, installs dependencies and Chromium, and links the skill into Claude Code (~/.claude/skills) and Codex (~/.codex/skills) when they are installed. Set CUTAWAY_HOME to change the folder. Updates are automatic once a day; CUTAWAY_NO_UPDATE=1 turns that off.
From a clone:
git clone https://github.com/half144/cutaway.git && cd cutaway
npm ci
npx playwright install chromium
npm run demo
node scripts/install-skill.mjs
ln -s "$PWD/skills/cutaway" ~/.claude/skills/cutawayUninstall:
rm -rf ~/.cutaway ~/.claude/skills/cutaway ~/.codex/skills/cutawayHow do you use this agent?
Write a plan as JSON — a URL plus the steps a person would take:
{
"url": "http://localhost:3000",
"hide": ["nextjs-portal"],
"steps": [
{ "action": "click", "selector": "#edit" },
{ "action": "type", "selector": "role=textbox[name=\"Title\"]", "text": "New title" },
{ "action": "upload", "selector": "button:has-text(\"Choose cover\")", "file": "cover.jpg" },
{ "action": "click", "selector": "#save", "expect": "#saved-message" },
{ "action": "focus", "selector": "#updated-title", "duration": 1.5 }
]
}Selectors are Playwright locators; each must match exactly one element. For an app behind a login, pass --storage-state /path/session.auth.json.
Run the whole thing:
node ~/.cutaway/src/cli.mjs record ~/.cutaway/examples/demo.json --out /tmp/cutaway-demoCapture only, or re-export a saved session with a different look:
node src/cli.mjs record plan.json --out recordings/take --capture-only
node src/cli.mjs render recordings/take --width 1280 --height 720
node src/cli.mjs render recordings/take --preset midnight --zoom 2Frame a still screenshot:
agent-browser set viewport 1440 810 2
agent-browser open https://app.example.com/reports
agent-browser screenshot /tmp/reports.png
node src/cli.mjs frame /tmp/reports.png --url https://app.example.com/reportsWhat are this agent's strengths and limitations?
- Entirely local pipeline — Playwright for capture, Skia for composition, FFmpeg for encoding: no AI model, no cloud upload, artifacts stay on your machine.
- One JSON plan covers desktop and phone: add a device field and swap click/scroll for tap/swipe to get a vertical 1080×1920 recording.
- Fails fast: ambiguous selectors, missing elements or an unmet expect stop the recording, and export refuses incomplete sessions.
- record and render are decoupled, so you can capture once with --capture-only and re-export repeatedly with different --preset, --zoom or --width values.
- The installer links the skill into both Claude Code and Codex and self-updates daily (CUTAWAY_NO_UPDATE=1 disables it).
- One Chromium tab only: no popups, native windows, drag-and-drop, audio or webcam, and custom canvas/iframe cursors are not captured.
- Page animations are captured at the browser's pace, so 60 fps output does not mean 60 distinct app frames; scrolls rely on slow-motion capture to compensate.
- Composition and encoding run on the CPU — GPU composition and hardware encoding are not implemented, so long recordings export slowly.
- Steps really execute, and the README warns a local frontend can still point at a production API or database; check where save, pay or send steps write.
- Phone mode is Chromium emulation of portrait devices only: no Safari/WebKit rendering quirks and no tablets.
How does this agent compare with similar options?
The README names Screen Studio as the visual reference and explicitly states Cutaway is not affiliated with it and does not match its editor: Screen Studio is a commercial desktop editor, while Cutaway is a JSON-plan-driven, agent-triggered CLI that renders locally with no editor UI.
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| Cutaway This agent | 47 · Major gaps | — | ★ 45 | 10d ago | JavaScript | Codex · Claude Code |
| MCO | 73 · Some gaps | CLIFree + model costs | ★ 531 | 2d ago | Python | Codex · Claude Code |
| NTM (Named Tmux Manager) | 73 · Some gaps | CLIFree + model costs | ★ 454 | 2d ago | Go | Codex · Claude Code |
| Puppetmaster | 68 · Some gaps | CLIFree + model costs | ★ 467 | today | Python | Codex · Claude Code |
How does FollowAgents rate this agent?
Why each dimension lost points
README states everything runs locally with no cloud upload and warns that recording really performs save/pay actions, so data_flow_transparency scores 2. However the installer uses curl | bash from master with daily auto fast-forward updates, an implicit remote-code-execution and supply-chain risk, so least_privilege and user_confirmation score 1. Dependencies list only playwright, @napi-rs/canvas and ffmpeg-static with no lockfile or audit evidence, so dependency_security scores 1. Recording writes to the target app with no documented undo, so external_effects and rollback score 1. sensitive_data_handling only mentions password fields for keyboard characters and does not cover storage-state session files, scoring 1. source_attribution clearly credits Screen Studio, shadcn, agent-browser and Apple wallpapers, scoring 2.
Actions, options and defaults are described consistently, so self_consistency scores 2. Chromium and FFmpeg are downloaded at install, so offline or mirror failures block use, scoring dependency_availability 1. Failure messages are only described generically (ambiguous selectors/missing elements stop recording) with no concrete error format, scoring failure_messages 1.
Aimed at coding agents recording demos and PR evidence with clear scenarios (2). The Limits section explicitly lists popups, audio, GPU, iframe cursors and other boundaries (2). Triggering relies on /cutaway or $cutaway skill links without precise trigger conditions or conflict handling, so trigger_precision scores 1. Only Node 22+ and Chromium are supported with no Windows/Linux differences documented, so environment_fit scores 1.
README is well structured with a full table of contents (2). Install, clone and uninstall steps are complete (2). Version is 0.2.0 but there is no CHANGELOG, so naming_stability and versioning_changelog score 1 each. Examples and FAQ are rich (2). Limits are explicit (2). MIT license is complete (2). Maintenance responsibility points only to the unverified publisher half144, scoring 1.
Outputs MP4, poster and timeline files usable directly for demos and evidence (2). Compared with manual screen recording it adds human-like cursor, camera and phone emulation, a clear marginal value (2). But CPU-only composition/encoding and Chromium/FFmpeg downloads limit cost_benefit to 1.
README references examples and docs files, but only README, LICENSE and package.json were provided, so claim_traceability and cross_source_corroboration score 1 each. Factual and promotional statements (e.g. 'polished') are mixed, so fact_inference_separation scores 1.
- The installer uses curl | bash from master with daily auto-updates, an implicit remote-code-execution risk; pin a version or verify hashes.
- Recording really performs save, pay and send actions with no documented rollback; validate the target app in an isolated environment first.
- storage-state session files and recorded frames may contain sensitive data, and the README does not describe their protection.
- Chromium and FFmpeg are downloaded at install, so offline or mirror failures block use.
- Publisher identity is unverified and maintenance responsibility and update path are unclear.