HyperFrames:Agent 写 HTML,怎样稳定渲染成视频
让 Agent 做一段产品介绍视频,难点通常不在“能不能生成一个画面”,而在生成之后还能不能改:标题要提前半秒出现、价格写错了、品牌色要替换、同一模板要批量导出十个版本。直接生成像素的视频很难精确返工,录制网页动画又可能因为机器卡顿而丢帧。
HyperFrames 选择了另一条路线:让 Agent 先生成可编辑的 HTML、CSS 和 JavaScript,再把网页时间轴逐帧渲染为视频。它在 2026 年 10 月 2 日发布的 v0.8.113 修复了 GSAP set 操作落在目标帧时的导出闪烁问题,也修正了首帧动画可能不显示等边界行为。这类修复看似细小,却正好触及代码视频最重要的承诺:第 N 帧应该由时间轴决定,而不是由浏览器当时跑得快不快决定。
截至 10 月 3 日早间,项目在 GitHub 上约有 5.59 万 Star,并出现在 GitHub Trending。这个数字只能说明开发者关注度,不能证明生产采用率、成片质量或性能;真正值得理解的是它怎样把 Agent 擅长的“写代码”变成一条可检查、可修改的视频生产链。
它生成的不是视频,而是一份视频工程
HyperFrames 中最基本的单位是 composition,可以把它理解为“一张带时间轴的网页”。元素仍然是熟悉的 <div>、<img>、<video> 和 <audio>,开始时间、持续时间等信息则写在 data-* 属性里:
<section
id="headline"
class="clip"
data-start="0"
data-duration="2"
data-track-index="0"
>
Launch day
</section>2
3
4
5
6
7
8
9
data-start="0" 表示从第 0 秒出现,data-duration="2" 表示持续 2 秒。data-track-index 只是 Studio 里的轨道位置,不决定画面前后层级;真正的叠放顺序仍由 CSS z-index 控制。一个片段还可以写成 data-start="intro - 0.5",表示在 intro 结束前半秒进入,适合做交叠和转场。
因此,Agent 交付的不是一个只能播放的 MP4,而是一个普通项目目录。文案、样式、素材路径和时间点都能继续修改,也可以把变量接到批量渲染流程中。对产品演示、数据卡片、字幕、版本化营销素材,这比重新提示模型“再生成一遍”更容易控制。
逐帧寻址,和录屏有什么区别
普通录屏依赖真实时间:浏览器播放 1 秒,录制器就等待 1 秒。如果某一刻主线程阻塞,动画可能跳过中间状态,录下来的结果也跟着抖动。
HyperFrames 的渲染器不让动画自由播放,而是像摄影棚逐张拍定格动画:
- 用
frame / fps算出当前帧对应的时间。 - 让 GSAP、CSS、Web Animations、Lottie、Three.js 等动画跳到这个时间点。
- 等 DOM、画布和媒体状态就绪后,捕获这一帧。
- 最后交给 FFmpeg 编码并混入音频。
以 30 fps 为例,第 90 帧对应 3 秒。机器即使花 200 毫秒才算完这一帧,渲染器也不会把视频时间偷偷推进到 3.2 秒。预览可能卡,但导出不必因此丢掉本该出现的画面。
这套机制依赖“同一帧能被任意次寻址”。HyperFrames 的 frame adapter 要求动画可以向前、向后或随机跳转,而且相同帧必须返回相同状态。Date.now()、未固定种子的 Math.random()、渲染中途才发起的网络请求,都会破坏这个条件。确定性不是框架替任意网页施加的魔法,作者仍要遵守时间轴契约。
v0.8.113 修复的 GSAP set 问题也说明边界有多具体:瞬时设置如果晚一帧生效,预览可能看不出异常,逐帧导出却会闪一下。项目当前仍处在 0.8.x,自定义 FrameAdapter 接口也被官方标为实验性,因此不宜把“设计目标是确定性”理解成“所有复杂组合已经没有渲染缺陷”。
跑一个不依赖外部素材的最小项目
下面的例子只生成一段 2 秒静态标题,目的是验证从 HTML 到 MP4 的完整链路。HyperFrames 文档要求 Node.js 22 或更高版本,并需要 FFmpeg。
先创建项目:
npx --yes hyperframes@0.8.113 init hf-demo \
--example blank \
--non-interactive
cd hf-demo2
3
4
把 index.html 改成下面的内容。因为没有动画时间轴,根节点要显式加上 data-no-timeline:
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=1920, height=1080" />
<style>
* { box-sizing: border-box; }
html, body {
margin: 0;
width: 1920px;
height: 1080px;
overflow: hidden;
background: #0a0a0a;
}
#root {
width: 100%;
height: 100%;
display: grid;
place-items: center;
font-family: sans-serif;
}
h1 { color: #f4f4f5; font-size: 72px; }
</style>
</head>
<body>
<div
id="root"
data-composition-id="main"
data-no-timeline
data-start="0"
data-duration="2"
data-width="1920"
data-height="1080"
>
<h1
id="title"
class="clip"
data-start="0"
data-duration="2"
data-track-index="0"
>HyperFrames</h1>
</div>
</body>
</html>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
然后依次检查和渲染:
npx --yes hyperframes@0.8.113 lint
npx --yes hyperframes@0.8.113 check
npx --yes hyperframes@0.8.113 render --output demo.mp42
3
我在 Node.js 24.19.0、FFmpeg 6.1.1 的 Linux 环境中实际执行了这组命令。lint 与浏览器运行检查均为 0 错误、0 警告,得到 1920×1080、30 fps、2 秒的 H.264 文件。随后再次渲染,并分别提取两个文件的第 30 帧,两张 PNG 的 SHA-256 相同。
这只能证明这个最小项目在同一环境中的目标帧可重复,不能外推为所有动画、字体、浏览器版本和操作系统都会得到逐像素一致的结果。官方文档也明确提醒,字体和 Chrome 版本可能造成跨机器的一像素偏移;对 CI 或批量生产,应考虑使用 render --docker 固定 Chromium、字体和 FFmpeg 环境。
Agent 在这条链路里负责什么
HyperFrames 给 Claude Code、Codex、Cursor、Gemini CLI 等编码 Agent 提供技能和工作流,覆盖产品介绍、无露脸讲解、字幕、口播重剪、动效、音乐视频和演示文稿等方向。Agent 可以根据提示生成 composition、寻找或引用素材、写动画代码,再调用 lint、check 和 render。
但模型并不因此获得“导演审美的确定性”。官方快速入门仍要求用户检查故事、事实、文字可读性和声音。更实际的分工是:
- Agent 负责把需求翻译成结构、样式、时间轴和可重复命令。
- 渲染器负责按帧执行这份工程,避免实时播放速度污染输出。
- 人负责核对事实、版权、节奏、品牌规范和最终成片。
这也解释了它与文生视频模型的差别。HyperFrames 擅长精确文字、图表、网页式布局和大量可替换版本,不负责凭一句话合成写实人物运动。与传统剪辑软件相比,它更适合代码审查、版本控制和自动化,却要求团队愿意维护 HTML、动画依赖与渲染环境。
上手前要看清的边界
第一,HTML 可编辑不等于天然安全。Agent 生成的 JavaScript 会在浏览器环境中运行,接入内部素材、自动抓取网页或放进 CI 时,仍要限制网络、凭据和文件访问。
第二,外部资源会把可重复性重新带回网络。字体、图片、脚本和 API 数据最好在首帧前准备完并锁定版本;否则今天能加载的 URL,明天可能返回不同内容或直接失效。
第三,复杂视频的成本只是从“生成模型算力”转移到浏览器渲染、素材处理和 FFmpeg 编码,并没有消失。高分辨率、60 fps、Three.js、长视频和多轨媒体都需要真实测量渲染时间与内存。
第四,Star 和 Trending 不能替代工程评估。先拿一条真实素材验证字体、字幕、转场、音画同步和目标播放器,再决定是否接入批量生产。尤其在当前 0.8.x 阶段,应固定版本、保留导出回归样例,并阅读每次 release 的渲染修复。
HyperFrames 值得关注的地方,不是“Agent 终于会做视频”这句口号,而是它给视频生成加了一层普通软件工程可以理解的中间表示:HTML 描述画面,属性描述时间,代码描述动画,渲染器按帧执行。只要你的内容更看重可改、可审查和可批量复现,这条路线就比一次性生成成片更有实际价值。
💬 评论