# HyperFrames 渲染后端 · 选型边界与操作手册 > 2026-07-17 实测验证通过后引入(工具链/中文字体/代理环境/迁移/3D 五项全过,关键数据已内嵌本文)。 > HyperFrames 是 HeyGen 开源的 HTML→视频框架(Apache 2.0):纯 HTML + 暂停的 GSAP timeline,headless 浏览器逐帧 seek 确定性渲染。 ## 选型边界(先看这张表再开工) | 场景 | 用哪条渲染路线 | |---|---| | 新动画项目(默认) | **HyperFrames**。审计套件白送、3D/GSAP/Lottie/shader 全解锁 | | 需要 3D / 粒子 / 物理惯性 / shader 转场 | HyperFrames(自研 Stage 做不到) | | 老 Stage demo 要复用/改版 | 顺手迁移(适配器配方见下,20-30 分钟/个);只重渲不改就仍用 render-video-seek.js | | 弱 runtime(无 npm / 无法装依赖 / 单文件交付给用户双击打开) | 自研 Stage(assets/animations.jsx),老流程不变 | | 交互演示(用户要在浏览器里玩,不导出视频) | 自研 Stage 或普通 HTML,HyperFrames 是渲染管线不是交互框架 | | 带解说长视频(Step 9.5,narration_stage 驱动) | **自研 narration 管线**(voiceover-pipeline.md + render-narration.sh),暂不走 HyperFrames——双时间源/字幕/TTS timeline 深度耦合自研 Stage;与「动画默认 HyperFrames」两行同时命中时按本行裁决 | | 批量参数化视频(千人千面/模板换字) | Remotion(见规划方向5,独立于本 skill 主流程) | **设计语言永远是甲方**:叙事结构、easing 体系、SFX/BGM 双轨制照旧全部生效(animation-best-practices.md / audio-design-rules.md),HyperFrames 只是实现和渲染工具。GSAP 实现配方见 `references/gsap-recipes.md`。 ## 项目脚手架 > ⚠️ 安装预警:`hyperframes init` 除了生成项目文件,还会把 **19 个 hyperframes skill 安装到 > `~/.claude/skills/`**(渲染后端的合成契约文档,纯文档无可执行 hook)。介意的话先跑 > `npx hyperframes docs` 看本地文档清单再决定是否 init。 ```bash npx -y hyperframes init 项目名 --example blank # 非交互必须带 --example cd 项目名 && npm install ``` 生成 index.html / hyperframes.json / meta.json / package.json(pin 了 CLI 版本)+ 项目级 CLAUDE.md。init 会把 19 个 hyperframes skill 装到 `~/.claude/skills/`(本机已装)。合成写法契约读 hyperframes-core skill 的 SKILL.md(init 装到各 runtime 的 skill 目录,Claude Code 默认 `~/.claude/skills/`;无 skill 机制的 runtime 直接读 `npx hyperframes docs` 本地文档替代),本地文档 `npx hyperframes docs `(data-attributes / gsap / rendering / troubleshooting)。 **版本策略**:项目 package.json 会 pin 精确版本(当前实测过的是 0.7.61)。它迭代极快(300+ releases),升级先 `npx hyperframes@latest upgrade --project . --check` 看 delta,跑一遍回归 demo 再动。 ## 合成契约速查(完整版读 hyperframes-core) - 根容器:`data-composition-id` + `data-start` + `data-duration` + `data-width/height` - 每个计时元素:`class="clip"` + `data-start` + `data-duration` + `data-track-index` - timeline 必须 paused 并注册:`window.__timelines["合成id"] = gsap.timeline({paused:true})` - 视频素材用 `muted`,音轨单独 `