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

At a glance

Works with
Universal · cross-platformCodex · Claude Code
You'll need
Node.js 22+Chromium (installed via npx playwright install chromium)FFmpeg (bundled via ffmpeg-static)Shell / CLINetwork accessLocal filesystem
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.

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.

  1. 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.
  2. Reproduce a bug for review with an expect selector so the recording stops at the exact failing step instead of silently skipping it.
  3. 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.
  4. Let Claude Code or Codex demo its own work by asking /cutaway record the checkout flow or $cutaway.
  5. Produce still evidence for a design review: screenshot a viewport, then run the frame subcommand to add the browser window and wallpaper.
  6. 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 | bash

The 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/cutaway

Uninstall:

rm -rf ~/.cutaway ~/.claude/skills/cutaway ~/.codex/skills/cutaway

How 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-demo

Capture 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 2

Frame 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/reports

What are this agent's strengths and limitations?

Pros
  • 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).
Limitations
  • 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?

FollowAgents source review · FARS-2.1
Major gaps
47/ 100 5-point scale 2.4 / 5
Trust 12/29
Reliability 6/14
Adaptability 9/18
Convention 10/18
Effectiveness 7/13
Verifiability 3/8
Why each dimension lost points
Trust12 / 29 · 2.1/5

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.

Reliability6 / 14 · 2.1/5

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.

Adaptability9 / 18 · 2.5/5

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.

Convention10 / 18 · 2.8/5

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.

Effectiveness7 / 13 · 2.7/5

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.

Verifiability3 / 8 · 1.9/5

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.

Risks and how to mitigate them
  • 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.
Evidence confidence: Low Reviewed Oct 09, 2026 Reviewed revision 89b3f855d879
See the full review method →

FAQ

Does it need a paid subscription or API key?
No. It is MIT licensed, calls no AI model and no cloud service, and incurs no per-use fee. FFmpeg is downloaded at install by ffmpeg-static under its own GPL license, and macOS wallpapers imported by npm run wallpapers belong to Apple and are outside the MIT license.
Will it actually write data in my app?
Yes. The recorder really performs each step, and the README explicitly warns that a local frontend can still point at a production API or database. Confirm where a save, pay or send step lands before recording it.
Can it record Safari on a real iPhone?
No. Phone mode emulates portrait devices from Playwright's list (iPhone 15 Pro, Pixel 7, Galaxy S24, and others) in Chromium with touch input, a status bar and an iOS keyboard, but it does not reproduce Safari/WebKit rendering, and tablets are not covered.
What happens if a step does not take effect?
The recording stops. A selector matching multiple elements, a missing element, or an expect selector that never becomes visible ends the session, and export refuses incomplete sessions.
How heavy is the install, and does it need a GPU?
It needs Node.js 22+; the installer also brings Chromium and FFmpeg, and no GPU is required. Composition and encoding are CPU-only, so long videos take longer to export, although --quality standard is about 3× faster for PR-sized clips.
View on GitHub ↗ Install ↓

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents