Communitygithub.com

Hive-RSI-Lab/video

制作演示视频、高亮片段或 GIF,涵盖 Web 应用、终端或 3D 场景。以代码方式实现流畅、帧精准的输出。适用于需要演示视频、高亮片段、产品 GIF,或屏幕录制显得卡顿时使用。

video 是什么?

Hive-RSI-Lab/video 是一款面向开发者的 AI 技能,旨在解决传统屏幕录制方式带来的卡顿与不可重现问题。它通过将影片编写为可执行脚本,利用虚拟时钟驱动页面,每 1/30 秒采集一帧,确保动画、定时器、滚动和键盘输入精确落在指定帧上,并且同一脚本始终生成完全相同的影片。该技能支持在 Web 应用、终端(通过 tmux/bash 沙盒回放)以及 Blender 3D 场景中生成视频,提供了从创建剧本、渲染、快照检查、卡顿检测到输出 MP4/GIF 的完整工作流。其设计强调了流畅性(通过 init 脚本添加渐变动画、驱动自身 motion 而非依赖 requestAnimationFrame)、对页面时间线的精准对齐、以及针对 Date 篡改和跨域 CSS 的兼容性处理。特别适合产品演示、Bug 复现、或需要高质量、可复现的视觉展示的场景。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Hive-RSI-Lab/hive-video/tree/HEAD

在你喜欢的 AI 中提问

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

文档

制作视频

不要进行屏幕录制。录制会在盒子忙碌时出现卡顿,而且一旦修复后没人能重新运行它。请将影片编写为脚本。该工具包在虚拟时钟上运行页面,每 1/30 秒页面时间拍摄一帧,因此每个动画、定时器、滚动和按键都精确落在指定帧上。摄像头移动、光标和点击圆圈会在帧之后绘制。同一个脚本总是生成相同的影片。

工作流程

  1. video new DIR 写入一个起始文件 DIR/film.mjs。将其指向一个包含伪造数据的临时服务器,绝不能指向真实账户。编写三到五个节拍,每个节拍有一个想法。
  2. heavy timeout 1800 video render DIR/film.mjs OUT/ 拍摄每个节拍,编码每个节拍并将节拍拼接成 MP4。首次渲染会先运行 video check。如果屏幕上出现拒绝列表中的任何单词,渲染将失败。
  3. video sheet OUT/film.mp4 OUT/sheet.png 16,然后查看快照。大多数错误只在这里显现:从未滚动的列表、空面板、摄像头对准了错误对象。
  4. video stutters OUT/film.mp4 必须报告 0 次卡顿。卡顿是指快速或跳动的运动。在内容本应切换(页面切换、消息到达)的地方出现卡顿是正常的;--allow A-B 可跳过这些区间。
  5. video mp4 IN OUT.mp4 制作 Web MP4(H.264, faststart)。video gif IN OUT.gif --max 3 将宽度从 960 px 向下调整,直到 GIF 小于 3 MB。
  6. 迭代脚本中的时间,切勿通过裁剪视频来调整。

节奏和完整导演 API 在 kit/KIT.md 中;在制作第一个影片前请阅读它。简要说明:总时长约 20 秒;目标 2 秒内完成主要操作;每个节拍一次摄像头移动(1.5-2x 放大,0.4-0.7 秒);结果至少保持 0.8 秒(d.show);打字速度约每秒 30 键。

如何实现流畅(来之不易的经验)

  • 将仅用于影片的优化放在初始化脚本中,而不是在应用中。 让新项目以渐显动画方式出现(animation: in .4s cubic-bezier(.16,1,.3,1),从 opacity 0 和 translateY 12px 开始),而不是突然弹出。对于跳转到末尾的列表,包装 Element.prototype.scrollTop 的 setter,使其在大约 500 毫秒内平滑滚动。hive-stars 演示影片是一个包含两者的完整示例。
  • 使用 setTimeout 驱动自己的运动。 影片的时钟精确运行定时器。时钟暂停时,requestAnimationFrame 回调可能不会触发。
  • 查找页面的时间线。 如果应用依赖定时器(预定义回复在 0.7 秒、1.8 秒等),将每个节拍的 hold 时间调整为与之匹配,以便节拍刚好在其展示的内容之后结束。
  • zoom 和视口单位。 导演的 zoom: 1.5 以 1280x720 的布局拍摄 1920x1080 的画面。Chrome 不会将 vh/dvh/vw 除以根缩放值,因此工具包会重写同源样式表中的这些单位。如果不这样做,calc(100dvh - x) 布局会变为 1.5 倍高,其滚动条永远不会滚动。跨域 CSS 不会被重写,因此请自行提供页面。
  • 修补 Date 的应用。 工具包通过自身保存的 Date 读取时钟,因此包装了 Date(如时间偏移、伪造的“现在”)的页面无法使 pauseAt 倒退。
  • 拒绝列表: 主机名、用户名、Git 名称和电子邮件、真实项目名称。仅使用伪造数据。

3D 场景(Blender)

video blender SHOT.py OUT/ [--quality preview|final] 在 CPU 上渲染一个场景脚本。在作业限制器下运行(H2 上使用 heavy),并先运行 --quality preview,因为最终渲染每秒钟的影片可能需要几分钟。辅助工具(缓动、带有景深的摄像头、灯光架、从 KiCad 生成的 PCB、GDS 挤出、UI 平面、节点图)位于 kit/blender/README.md 中。使用工具包的 encodeFrames 或 ffmpeg 编码帧,然后使用 stitch 进行裁剪。

终端

kit/term.mjs 在沙盒中记录真实的 tmux/bash 会话(使用伪造的主目录和主机),然后在影片时钟上使用 xterm.js 重放。参见 kit/KIT.md。

相关技能