Communitygithub.com

无限人数

录制带有叙述的产品演示视频,无需屏幕录制软件——AI 代理控制浏览器,ElevenLabs 同步配音,生成带有字幕的精美 MP4 文件。包含核心引擎和开发者模式(您拥有代码库,应用在 localhost 运行)。适用于客户演示、配音演示、“视频笔记”等场景。触发关键词——“video note”、“record a walkthrough”、“narrated demo”、“client update video”、“auto loom”。

无限人数 是什么?

此技能将任意 Web 应用转化为自动导航、自动配音的 MP4 演示视频。核心流程是:先编写包含页面操作与旁白的故事板(beats.json),然后使用 ElevenLabs 生成每段旁白音频,利用 ffprobe 精确测量音频时长,Playwright 驱动浏览器同步执行页面滚动、元素高亮和路由跳转,最后通过 ffmpeg 合成带有字幕的最终视频。开发者模式下,您可以访问代码库,向 JSX 添加稳定的 data-vn 属性作为 Playwright 的选择器,并启用演示模式来抑制交互式弹窗,确保录制顺畅。该技能提供完整的验证与预览流程(preflight 和 script-only 模式可节省 API 费用),支持迭代编辑(仅重新生成变更的音频),并包含 doctor 脚本一键检查环境依赖。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MikeFishbeinAtherial/infinite-headcount/tree/HEAD/auto-loom

在你喜欢的 AI 中提问

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

文档

Auto-Loom

将任意 Web 应用转化为带有配音的、自动演示的 MP4 视频。页面会自动滚动、高亮元素并在路由间导航,AI 声音同步配音——时间精确到毫秒级。无需手动录屏,无需费时的 Loom 录制。只需编辑一行旁白,几分钟内即可重新渲染。

工作原理: ElevenLabs 为每个故事板节拍生成一个单独的音频片段。ffprobe 精确测量每个音频片段的时长。Playwright 在每个节拍的持续时间内驱动浏览器,同时录制窗口。ffmpeg 合成最终的 MP4 文件并添加字幕轨道。音频时长是基准,视觉效果与之同步,因此音画同步精确无误。

此文件夹是整个引擎。 兄弟节点是基于相同脚本的简化入口点:

  • auto-loom-proof — 软件工厂的验证视频:在摄像头前逐条演示构建的验收标准

此 SKILL.md 涵盖引擎以及开发者模式:您拥有代码库,应用在 localhost 上运行,并且可以向 JSX 添加稳定的选择器。


环境搭建(一次性,约 3 分钟)

cd <此技能文件夹>
bash scripts/setup.sh        # 安装 Playwright + Chromium,创建 .env.local
# 编辑 .env.local → 添加你的 ElevenLabs API 密钥
node scripts/doctor.mjs      # 验证 node、ffmpeg、playwright、密钥、语音

还没有 ElevenLabs 账户?使用维护者的推荐链接注册:https://try.elevenlabs.io/atherial。

doctor.mjs 会打印任何缺失组件的精确修复方法。要求:Node 18+、ffmpeg (brew install ffmpeg)、ElevenLabs API 密钥。语音选项:references/voices.md。

冒烟测试(30 秒,录制 example.com):

node scripts/run.mjs --beats examples/smoke-beats.json

第 0 步——先与用户沟通

不要立即开始构建。请先询问:

1. 我们要录制哪个 URL 或应用?它是本地运行的吗?
2. 收件人是谁——姓名和背景?
3. 要讲述什么故事?变更了什么内容,或者我们首次展示什么?
4. 应该重点介绍哪些具体功能、指标或部分?
5. 语气是什么?(客户更新、内部演示、潜在客户展示)
6. 应用是否需要登录?(参见 references/auth.md——切勿在聊天中索要密码)
7. 目标时长——30 秒、60 秒还是 75 秒?

如果时间紧迫:询问 1-3,其余内容从应用中推断。

第 1 步——编写故事板 (beats.json)

在触碰任何代码之前先编写旁白,并逐字获得批准。脚本规则和有效的故事板框架:references/tts-rules.md。

{
  "meta": {
    "title": "Acme 仪表盘演示",
    "slug": "acme-walkthrough",
    "cta": "请将您的反馈发送给我,我们进入下一阶段。",
    "targetLengthSec": 70
  },
  "baseUrl": "http://localhost:3000",
  "viewport": { "width": 1920, "height": 1080 },
  "beats": [
    {
      "id": 1,
      "page": "/dashboard/insights",
      "text": "嗨 Jim。我们为您的人工智能可见性追踪器推送了一些更新。",
      "actions": [
        { "fn": "waitFor",    "sel": "[data-vn=kpi-row]" },
        { "fn": "scrollToEl", "sel": "[data-vn=kpi-row]", "opts": { "instant": true } },
        { "fn": "hl",         "sel": "[data-vn=kpi-row]" }
      ]
    }
  ]
}

完整模式:schema/beats.schema.json。动作表和选择器指南:references/actions.md。登录选项(脚本化步骤或已保存的会话):references/auth.md。

在开始消耗资源之前检查:

node scripts/validate.mjs --beats <file>       # 结构 + TTS + 节奏检查
node scripts/run.mjs --beats <file> --script-only   # 打印旁白并停止

验证器可以捕获未知动作、缺失的选择器、TTS 问题(em 破折号、纯首字母缩写、长句)以及无法适应目标时长的节奏。

--script-only 是节省成本的审查关卡:它会打印每个节拍的旁白及其预估时长,并在任何 ElevenLabs 调用或录制之前退出。在此处获得脚本批准,然后不带该标志重新运行以消耗资源。

第 2 步——为页面添加标记(开发者模式)

Playwright 需要稳定的选择器。有权访问代码库时,向组件 JSX 添加 data-vn 属性:

<div data-vn="kpi-row" className="grid grid-cols-4 gap-4">
<Card data-vn="competitor-chart" ...>

然后引用它们:{ "fn": "hl", "sel": "[data-vn=kpi-row]" }。

录制时抑制交互式向下钻取。 带有 role="button" / tabIndex={0} 的可点击卡片可能会在高亮时自动聚焦,并在视频播放过程中打开一个抽屉。通过演示模式标志将其隐藏:{!isDemoMode() && <MetricBreakdownSheet ... />}。

如果应用需要在本地进行身份验证,则可以配置演示模式(跳过身份验证,使用与旁白数字完全匹配的固定数据),或者使用 references/auth.md 中的身份验证路径。

关于 CSP 的说明: 录制器启动 Chromium 时使用 bypassCSP: true,以便它可以向严格的 CSP 页面注入 presenter.js。如果您将其指向一个带有活跃会话的生产环境应用,请注意该自动化浏览器上下文中的内容安全策略已被禁用。

第 3 步——单个命令

node scripts/run.mjs --beats <file>

该命令会执行:验证 → 音频(按文本哈希缓存) → 预检(在录制任何内容之前,无头运行选择器检查) → 录制 → 字幕 → 合成 → 验证。输出位于 demo-video-out/<slug>/:

  • <slug>-demo.mp4 — 最终视频(H.264/AAC,软字幕轨道)
  • <slug>-demo-contact-sheet.png — 用于快速检查的采样帧
  • qa/beat-NN.png — 每个节拍保持点的精确截图
  • captions.srt、audio/、video/recording.webm

所有标志:--script-only(打印旁白脚本并在任何 ElevenLabs 调用或录制前退出——第 1 步的审查关卡)、--preflight-only(检查选择器,不消耗资源)、--skip-audio(仅视觉变更——重用音频)、--skip-preflight(跳过无头选择器检查——仅当预检刚刚通过且没有任何更改时使用)、--burn-captions(将字幕硬编码到像素中,适用于剔除音轨的平台)、--no-captions、--out <dir>、--env <envfile>。

第 4 步——发送前验证

run.mjs 会检查时长(MP4 = 音频总和在 0.5 秒内)、音频电平(静音轨道检测),并生成 QA 截图。您仍需人工检查:

  • 联系表 + qa/beat-NN.png:每个帧显示其节拍所叙述的内容——无登录页面、错误状态或意外的模态框。
  • 第一个节拍命名收件人;最后一个节拍逐字呈现行动号召(CTA)。

迭代

  • 旁白编辑 → 重新运行;仅重新生成已更改节拍的音频。
  • 视觉/节奏编辑 → --skip-audio。
  • 选择器失效 → --preflight-only 会精确显示哪个节拍和选择器有问题。

已知问题

  • 热重载会清除注入的 presenter。 已处理——在录制每个节拍之前会重新注入 presenter。但请避免在录制时编辑应用。
  • 端口漂移。 如果 3000 端口被占用,yarn dev 会使用 3001 端口——更新 baseUrl。
  • 免费与付费语音。 在免费套餐上,克隆/库语音会抛出 payment_required 错误。doctor.mjs 会在渲染前捕获此问题。
  • i18n 重定向。 /en/dashboard → /dashboard 这样的重定向会被正确跟随;同一页面的节拍不会重新导航。
  • 交付。 MP4 是自包含的——可通过电子邮件、Slack、LinkedIn 私信、Notion 嵌入发送,或导入 Descript 以在顶部添加个人介绍。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能