SuperAPI AI 工具集

synthetic-screen-recording

设计与创作

查看项目

更新于 11-08 16:04

技能介绍

该技能解决一个具体决策:当用户需要终端、CLI 工具或编程工作流的“看起来像屏幕录制”的演示时,是采集真实桌面(通过 screen_recorder、Windows-MCP、Cap 或 Playwright),还是用 Remotion 的 TerminalScene 组件合成?

启发式规则:如果 Agent 能提前写好精确的命令/输出序列,就合成;只有当真实行为不可预测、需要真实应用界面,或用户明确要求真实录制时,才采集真实屏幕。

为什么存在

OpenMontage 展示 v3 曾尝试用 Windows-MCP + screen_recorder 驱动 Git-Bash 窗口做安装演示,但在窗口定位、焦点竞争和任务栏隐私问题上受阻。后来转向纯 Remotion 渲染——一个名为 TerminalScene 的 React 组件绘制假终端并逐字符键入命令。输出与真实屏幕录制在视觉上难以区分(同样的红绿灯窗口边框、闪烁光标、滚动输出),但确定性、隐私安全、1080p 像素完美、可逐帧控制节奏。

何时使用合成(TerminalScene)

适合合成的情况:演示是终端/CLI/编程会话,且命令和输出可预测;需要精致的教程感(干净字体、浮动胶囊、光标闪烁);安装走查、设置演示、API 密钥配置、make 目标、git clone 流程;需要与旁白紧密同步,每条命令落在特定节拍上;希望结果可重复(重新渲染得到相同像素);用户实际桌面有隐私应用/窗口需要裁剪。

不适合合成、应采集真实屏幕的情况:演示的是无法伪造的真实应用 UI(Figma、Photoshop、有实时状态的 Web 应用、浏览器流程);用户明确要求录制其实际屏幕;行为依赖无法脚本化的时机(流式 LLM 输出、真实网络延迟);存在仅在实时环境出现的视觉怪癖(光标效果、插件弹窗)。浏览器演示应使用 playwright-recording 技能;真实桌面应使用 screen_recorder 工具或通过 cap_recorder 使用 Cap。

组件 TerminalScene

位置:remotion-composer/src/components/TerminalScene.tsx;导出:remotion-composer/src/components/index.ts;在 dispatch 中接入:remotion-composer/src/Explainer.tsx(if (cut.type === "terminal_scene"))。

Props 包括 title(窗口标题栏)、steps(时间线)、prompt(如 "$")、accentColor(胶囊+提示符光晕)、backgroundColor。

步骤类型:cmd(打印提示符,逐字符键入文本,typeSpeed 为每字符秒数,默认 0.035,然后保持 holdSeconds 默认 0.3);out(一行程序输出,立即显示并短暂淡入);pause(死时间,终端保持最后可见状态,用于与旁白同步);pill(非阻塞浮动徽章,右上角,弹入、保持、弹出,不推进光标,下一步并行运行)。

编排模式

通过向 build_composition.py(或等价 props 构建器)添加 cut 来编写新场景。示例步骤包含 pause、cmd、out、pill 等。核心规则:按旁白节奏走,绝不超前。常见失败模式是步骤连续运行,在前 40% 场景内烧完所有内容,剩余 60% 终端冻结。应了解旁白提示点,以 pause 到达第一个旁白提示,每条命令在旁白念出时开始键入,命令组之间用 pause 桥接到下一个旁白提示,结尾用足够长的 pause 让最终状态可读。渲染前用提供的 trace 脚本求和步骤时长,验证等于场景时长,并检查每个旁白提示的视频时间是否紧邻其宣布的命令/输出。

设计规则:每个终端场景开头至少 2 秒空终端+闪烁光标;胶囊应在命名事件完成时精确触发;每个 cmd 之后保持 holdSeconds ≥ 0.3;输出行 holdSeconds 间隔在 0.4 到 1.0 之间;终端保留最近 18 行自动滚动;光标仅在最新命令行键入时及键入完成后约 0.2 秒闪烁。

ProviderChip 配套组件

该技能模式还包含 ProviderChip——一个旋转徽章覆盖层,按固定节奏循环显示提供商名称列表。在 v3 展示中用于在“生成运动”部分循环全部 11 个 AI 视频生成提供商。通过 overlays.append 添加,参数包括 providers、cycleSeconds、position、accentColor、label、in_seconds、out_seconds。在 Explainer.tsx 的 overlay 渲染器中接入(overlay.type === "provider_chip")。

添加新的合成 UI 组件

模式可推广。需要伪造其他 UI 表面(Claude Code 聊天气泡、Jira 工单视图、GitHub PR diff、Slack 消息、VS Code 状态栏)时:复制 TerminalScene.tsx 作为模板;为相关时间线原语定义 steps 接口;通过插值帧与累计开始/结束时间渲染每个步骤;在 Explainer.tsx 的 SceneRenderer dispatch 中用新 cut.type 接入;将类型添加到 Explainer.tsx 的 Cut 接口和 components/index.ts;在本技能中添加一节文档;更新 remotion-composer/SCENE_TYPES.md。

相关技能:.agents/skills/remotion(通用 Remotion 编排)、.agents/skills/playwright-recording(真实浏览器流程采集)、tools/capture/screen_recorder(基于 ffmpeg 的桌面采集)、tools/capture/cap_recorder(Cap.so 精致桌面采集)、skills/pipelines/screen-demo/asset-director.md(为屏幕演示项目选择合成或真实)。

起源:引入于 OpenMontage 展示 v3 渲染(2026-04-16)。原始动机是 v3 设置走查部分需要 60 秒安装演示,每条命令与 Chirp 3 HD 旁白提示对齐,而 Windows-MCP 驱动的真实采集在实践中太不稳定。参考实现见 projects/openmontage-showcase/build_composition.py。