Cutaway 演示录制器
让你的编码代理把刚做完的界面录成带缩放、光标和 MP4 成片的精致演示。
- Star 数
- ★ 45
- 最近更新
- 10 天前
- License
- MIT
- 主语言
- JavaScript
- FA 评分
- 47/100 · 缺口较多
30 秒速览
- 可在哪里用
- 通用 · 跨平台Codex · Claude Code
- 开始前需要
- 典型场景
- 开发者提交 PR 前需要一段能直接贴进 GitHub 的界面改动录屏,可用 --width 1280 --height 720 --quality standard 压到 10MB 以内。
- 主要局限
- 仅一个 Chromium 标签页:不支持弹窗、原生窗口、拖放、音频和摄像头,自定义 canvas/iframe 光标也不会被捕获。
- 源码审查
- 47/100 · 缺口较多
这个 Agent 能做什么,适合哪些场景?
Cutaway 是一个本地运行的演示录制工具:你写一份 JSON 计划,它用 Playwright 驱动 Chromium 执行点击、输入、上传、滚动等步骤,再用 Skia 合成画面、FFmpeg 编码成 MP4。安装脚本会把仓库放到 ~/.cutaway,并把技能链接进 Claude Code 与 Codex,因此你可以直接对代理说 /cutaway record the checkout flow。产物包括 video.mp4、poster.png、无损帧 frames/*.png,以及 timeline.json、render.json、camera.json、workflow.json 等过程文件。它支持桌面浏览器和 Playwright 设备列表中的竖屏手机(含触摸指示、状态栏和 iOS 键盘),还能用 frame 子命令给单张截图套上同样的窗口或手机外框。整个流程不需要任何 AI 模型或云端服务,但每一步都是真实执行的。
CLI 入口是 src/cli.mjs,有三个子命令:record 读取 JSON 计划(url、viewport、device、captureScale、hide、colorScheme 等字段)后启动 Playwright Chromium,按 steps 依次执行 click、type、upload、focus、scroll、press、wait(手机上为 tap、swipe),每步可用 expect 断言成功元素、pause 控制停留、hold 控制长按时长;render 对已保存的录制重新导出,可调 --width/--height、--fps、--quality、--zoom、--blur、--cursor-size、--padding、--preset、--window、--keys、--pacing;frame 给外部截图(如 agent-browser screenshot 的产物)加上浏览器窗口或手机外框。录制阶段会同时写出 timeline.json、camera.json、workflow.json,导出阶段写 render.json 和 video.mp4、poster.png、frames/*.png。相机按 Screen Studio 风格自动推近正在操作的小控件,光标带弧线轨迹、Fitts 定律时长和按下反馈,无操作的等待时间会被加速。
- 开发者提交 PR 前需要一段能直接贴进 GitHub 的界面改动录屏,可用 --width 1280 --height 720 --quality standard 压到 10MB 以内。
- 复现一个 bug 并希望评审者看到真实操作路径时,用 expect 断言成功状态,录制会在步骤失败处中止。
- 移动端适配完成后,用 device: "iPhone 15 Pro" 加 tap/swipe 步骤录出竖屏 1080×1920 演示,含触摸指示和 iOS 键盘。
- 在 Claude Code 或 Codex 中让代理演示它刚写完的功能:/cutaway record the checkout flow 或 $cutaway。
- 只做设计评审时,用 frame 子命令把一张 viewport 截图包装成带 Safari 窗口和壁纸的静态图。
- 需要在无网络的本地 mock 应用上验证录制效果时,直接跑 examples/demo.json 或 examples/mobile-demo.json。
如何安装或部署这个 Agent?
需要 Node.js 22+,其余依赖(FFmpeg、Chromium)随安装脚本一起装好。
curl -fsSL https://raw.githubusercontent.com/half144/cutaway/master/install.sh | bash安装脚本会把 Cutaway 放到 ~/.cutaway,安装依赖和 Chromium,并在检测到 Claude Code(~/.claude/skills)或 Codex(~/.codex/skills)时把技能链接进去。用 CUTAWAY_HOME 可改安装目录;安装后每天首次运行时会自动快进到 master 最新版。
从克隆安装:
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卸载:
rm -rf ~/.cutaway ~/.claude/skills/cutaway ~/.codex/skills/cutaway如何使用这个 Agent?
写一份 JSON 计划,描述一个人会怎么操作:
{
"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 }
]
}选择器使用 Playwright locator,每个必须唯一匹配一个元素,模糊或缺失都会中止录制。登录后的应用可用 --storage-state /path/session.auth.json 复用已保存的 Playwright 会话。
跑完整流程:
node ~/.cutaway/src/cli.mjs record ~/.cutaway/examples/demo.json --out /tmp/cutaway-demo只采集或重新导出:
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给截图加外框:
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这个 Agent 有哪些优点和局限?
- 全程本地:Playwright + Skia + FFmpeg 三步链路,无云端上传、无 AI 模型,源码和产物都在自己机器上。
- 同一份 JSON 计划可同时用于桌面和手机:加 device 字段并改用 tap/swipe 即可得到 1080×1920 竖屏演示。
- 失败即停:expect 断言未满足、选择器模糊或元素缺失都会终止录制,导出会拒绝不完整的会话。
- record 与 render 解耦:可以先 --capture-only 采集,再反复以不同 --preset/--zoom/--width 重导出,不必重跑步骤。
- 安装脚本会自动把技能链接进 Claude Code 和 Codex,并每天自动快进更新(CUTAWAY_NO_UPDATE=1 可关闭)。
- 仅一个 Chromium 标签页:不支持弹窗、原生窗口、拖放、音频和摄像头,自定义 canvas/iframe 光标也不会被捕获。
- 页面动画按浏览器节奏采集,60fps 输出不等于 60 个不同应用帧;滚动只能靠慢放补偿。
- 合成与编码都在 CPU 上完成,没有 GPU 合成和硬件编码,长录制导出耗时明显。
- 录制会真实执行每一步操作,README 明确警告本地前端仍可能指向生产 API 或数据库,保存/支付/发送类步骤需自行确认落点。
- 移动端只覆盖 Chromium 模拟的竖屏手机,不含 Safari/WebKit 渲染差异,也不支持平板。
这个 Agent 与同类方案有什么区别?
README 明确把 Screen Studio 作为视觉参考,并声明 Cutaway 与其无关联、也不试图对标它的编辑器:Screen Studio 是带编辑界面的商业桌面应用,Cutaway 则是从 JSON 计划出发、由代理触发、纯命令行本地导出的工作流。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Cutaway 演示录制器 当前 | 47 · 缺口较多 | — | ★ 45 | 10 天前 | JavaScript | Codex · Claude Code |
| MCO | 73 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 531 | 2 天前 | Python | Codex · Claude Code |
| NTM(Named Tmux Manager) | 73 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 454 | 2 天前 | Go | Codex · Claude Code |
| Puppetmaster | 68 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 467 | 今天 | Python | Codex · Claude Code |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
README 明确说明全部本地运行、无云端上传,且警告录制会真实执行保存/支付等操作,数据流透明度较好(2)。但安装脚本以 curl | bash 方式从 master 拉取并每日自动 fast-forward 更新,属于隐式远程代码执行与供应链风险,least_privilege 与 user_confirmation 仅得 1;依赖仅列出 playwright、@napi-rs/canvas 与 ffmpeg-static,未见锁文件或审计证据,dependency_security 得 1;录制会真实写入目标应用,external_effects 与 rollback 缺少撤销机制说明,各得 1;sensitive_data_handling 仅提到密码字段不记录键盘字符,未覆盖 storage-state 会话文件保护,得 1;source_attribution 对 Screen Studio、shadcn、agent-browser、Apple 壁纸等来源标注清楚,得 2。
README 对动作、选项、默认值描述一致,self_consistency 得 2;依赖依赖安装时下载 Chromium 与 FFmpeg,离线或镜像不可用时不可用,dependency_availability 得 1;失败信息仅笼统说明选择器歧义/元素缺失会中止录制,未给出具体错误格式,failure_messages 得 1。
面向编码 agent 录制演示与 PR 证据,场景描述充分(2);Limits 章节明确列出弹窗、音频、GPU、iframe 光标等边界(2);触发方式依赖 /cutaway 或 $cutaway 技能链接,缺少精确触发条件与冲突处理说明,trigger_precision 得 1;仅支持 Node 22+ 与 Chromium,未说明 Windows/Linux 差异,environment_fit 得 1。
README 结构清晰、目录与章节完整(2);安装、克隆、卸载步骤齐全(2);版本号 0.2.0 但无 CHANGELOG,naming_stability 与 versioning_changelog 各得 1;示例与 FAQ 丰富(2);Limits 明确(2);MIT 许可证完整(2);维护责任仅指向未验证发布者 half144,得 1。
输出为 MP4、poster、timeline 等,可直接用于演示与证据(2);相比手工录屏提供拟人光标、镜头与手机模拟,边际价值明确(2);但 CPU 合成编码、依赖 Chromium/FFmpeg 下载,成本收益仅得 1。
README 引用 examples 与 docs 文件,但本次仅提供 README、LICENSE、package.json,无法交叉核对,claim_traceability 与 cross_source_corroboration 各得 1;文档中事实与宣传性描述(如“polished”)混排,fact_inference_separation 得 1。
- 安装脚本通过 curl | bash 从 master 拉取并每日自动更新,属于隐式远程代码执行,建议固定版本或校验哈希。
- 录制会真实执行保存、支付、发送等操作,且未提供回滚机制,请先在隔离环境验证目标应用。
- storage-state 会话文件与录制帧可能包含敏感信息,README 未说明其保护措施。
- 依赖 Chromium 与 FFmpeg 在安装时下载,离线或镜像不可用时无法运行。
- 发布者身份未经验证,维护责任与更新路径不明确。