Communitygithub.com

nolan

将软件功能转化为叙事性演示视频,包含分镜脚本、真人级操作录制和后期精修,输出可直接用于产品展示的高质量视频片段。

nolan 是什么?

nolan 是一个专为软件演示设计的 AI Agent 技能,它遵循三步工作流:首先将功能需求转化为结构化的分镜脚本(JSON),然后基于 Playwright 驱动真实应用在屏幕上执行每一步操作,最终输出带字幕标题卡和 PM 旁白语气的 WebM 视频片段。该技能支持 Python + Playwright 环境,可录制本地或远程应用,并可选集成 ElevenLabs / OpenAI / Deepgram 等 TTS 服务生成语音旁白。nolan 强调四个核心原则:以产品经理口吻叙事(而非测试报告)、使用通俗易懂的界面内容、先显示标题卡再配合字幕旁白、在真实应用上完成完整操作录制。适用于发布视频、功能展示、着陆页宣传、入门引导和更新日志动效等场景。

兼容平台~Claude Code✓Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/pur4v/nolan/tree/main/skills/nolan

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

nolan 是做什么的?

导演不会按下录制键然后碰运气。他们会提前画好分镜、设计每一个画面,并完整地完成每一个镜头。 nolan 为软件演示做到了这一点:它将一个功能转化为可视化分镜脚本,驱动屏幕上真实的应用,像产品经理向用户展示产品一样旁白每一步操作,并为每个场景捕获一个清晰的视频片段。

输出的是一个演示视频,而非烟雾测试——这是那种你会放在产品着陆页或发送给客户、让第一次看到的人既能理解发生了什么,也能明白为什么重要的视频片段。

何时使用该技能

当实际任务是“为从未见过该产品的人制作一段可观看的产品操作视频”时,请使用此技能。包括:产品发布视频、功能展示、着陆页宣传视频、入门引导演示以及版本更新日志动效。

不要用它来测试流程——那是端到端测试,应该简洁且无头运行。nolan 优化的是相反的方向:可读性、节奏感和针对人类观众的旁白。

工作流程——三个阶段

阶段你问……nolan 输出参考文档
🎬 分镜“为功能 X 规划一个演示”场景逐一分镜脚本 (JSON):标题卡、字幕、精确的点击/输入操作及等待条件reference/storyboard.md
🎥 录制“开始录制”每个场景一个 .webm 文件,在正在运行的应用上实时驱动,并叠加标题卡 + 字幕旁白reference/recording.md
✨ 精修“让它更可观看”经过审查和重新拍摄的版本:调整了节奏、完整了操作、清晰了字幕、修正了画面reference/polish.md

阶段串联:分镜 → 录制 → 回看检查 → 精修 → 重新录制。分镜脚本是唯一事实来源;录制过程由其决定。

四大原则(不可妥协,每段视频都必须遵守)

这些原则将演示视频与简单录屏区分开来。它们不是可选项。

  1. 产品经理的口吻,而非测试报告。 向用户阐述价值——该功能让用户能做什么、为什么好——绝不提测试的机械过程。每条字幕看起来都像 PM 在带客户使用产品。参考 reference/pm-voice.md。

  2. 屏幕上的日常、易懂内容。 只使用普通用户能理解的输入内容——常规问题、现实示例(如“购买燕麦奶”、“给同事写感谢信”)。绝不使用生僻术语、内部代号或观众需要解码的“外星”概念。可读性优先。

  3. 先展示,再说明。 每个场景以全屏标题卡(产品名称 + 场景名称)开始,并持续显示嵌入式字幕旁白(顶部横幅),在每一步发生时解说相应内容,使观众永远不会迷失。参考 reference/captions.md。

  4. 在真实应用上完成完整操作。 驱动真实的产品——可见、类人速度的输入和真实的点击——在继续下一步前确保每个操作都已完全完成,然后保持画面稍作停留以便阅读。切勿中途截断回答或过渡。片段长度服务于完整性。

标准流程

  1. 明确演示范围。 确定产品、功能、服务 URL 以及目标观众。确认应用正在运行且可访问(nolan 录制真实的应用,不模拟)。
  2. 分镜。 编写 storyboard.json——每个想法对应一个场景,包含标题卡、有序步骤(输入/点击/选择/等待)以及按 PM 口吻编写的字幕。使用 assets/storyboard-template.json 作为模板。保持提示通用化(参见原则 §2)。
  3. 试运行选择器。 在正式录制前确认分镜中目标元素的选择器(占位符/角色/文本)在 DOM 中实际存在(错误的选择器会浪费整个拍摄)。reference/recording.md 涵盖了稳健的选择方法。
  4. 录制。 运行 scripts/record.py storyboard.json [scene ...]。它会注入字幕/标题卡覆盖层,驱动每个场景,等待完成,并将每个场景的 .webm 文件保存到分镜脚本指定的 out_dir 目录。
  5. 回看并精修。 对照 reference/polish.md 检查每个原则——是否有剪辑不当之处?字幕是否使用了术语?输入速度是否看起来自然?每个操作是否完整?修正分镜脚本,然后只重新拍摄受影响的场景。
  6. 交付。 报告文件存放位置、大小/时长,以及每个场景的一行描述。如果需要,可提供封面帧或 GIF。

nolan 期望的环境设置

  • Python + Playwright(pip install playwright && playwright install chromium)。scripts/record.py 使用同步 API 和 record_video_dir 来捕获 .webm 文件。
  • 一个正在运行的应用,其 URL 机器可访问(本地开发服务器或允许录制的已部署环境)。
  • 在应用中加载真实、非敏感的演示数据——参见原则 §2 和 SECURITY.md 中的数据说明。绝对不要录制真实的客户数据或机密信息。
  • 可选——语音旁白。 默认情况下演示视频是无声的(由字幕承担)。要添加类人语音旁白,请在分镜脚本中添加 voice 块,并在步骤中添加 vo 行;这需要 ffmpeg(brew install ffmpeg)以及一个 TTS 提供方——ElevenLabs / OpenAI / Deepgram(需要 API 密钥,效果最接近真人)、Piper(离线、开源)、macOS say(免费但机械感强),或者任何通过 command 模板自定义的工具。参见 reference/narration.md。

关于录制工具链细节、覆盖层技术以及分镜步骤的完整参考,请参阅 reference/recording.md。

添加旁白(可选)

除非分镜脚本包含 voice 块,否则旁白默认关闭。当有人要求添加音频/旁白/让它“听起来像真人”时:

  1. 询问使用哪个提供方。 如需真正的类人音频,请使用云端提供方,并确认用户已设置(或即将添加)相应的 API 密钥:ELEVENLABS_API_KEY、OPENAI_API_KEY 或 DEEPGRAM_API_KEY。用户也可以将 command 指向自己的 TTS 工具。
  2. 如果用户没有密钥,提供免费/离线备选方案(Piper 质量尚可,macOS say 零设置但机械感强)——或使用 "provider": "auto" 自动选择最佳可用方案。
  3. 如果用户两者都不想要,则不设置 voice(或设置 "provider": "none")——视频会像之前一样无声录制。

然后以与字幕相同的 PM 口吻编写 vo 行,并按常规流程录制;record.py 会合成音频并将其与视频混流。详细信息参见 reference/narration.md。

输出原则

  • 每个场景生成一个视频,命名格式为 NN-slug.webm,便于独立重新拍摄。
  • 交接时先说明可观看的结果(每个片段展示的内容),再说明技术细节(路径、大小、如何重新录制)。
  • 优先选择多个简短、完整的场景,而非一个长片段——便于重新拍摄和复用。
  • 如果某个镜头必须提前结束或字幕是占位符,请如实说明——诚实的“场景 3 仍需重新拍摄”比交付一个剪辑过的演示要好。

相关技能