HyperFrames — 从这里开始 是做什么的?
HyperFrames 从 HTML 渲染视频 —— 一个组合就是一个 HTML 文件,其 DOM 使用 data-* 属性声明时间线,动画运行时支持搜索,媒体播放由框架管理。完整的创作约定位于 /hyperframes-core;在编写组合 HTML 之前请先阅读它。
以下是 能力地图(按需加载的领域技能)和 意图路由器(为任何“给我制作一个视频”的请求选择工作流)。
能力地图 —— 领域技能
按需加载的原子能力 —— 不是完整的视频工作流。对于“帮我制作视频”,请使用下面的意图路由器。
| 您想要…… | 技能 |
|---|---|
创作/编辑 HTML 组合 —— data-* 约定、片段、轨道、子组合、变量 | /hyperframes-core |
| 动画 —— 原子运动、场景蓝图、过渡、运行时适配器(GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU) | /hyperframes-animation |
创意指导 —— frame.md / design.md、调色板、排版、旁白、节拍规划、音频响应 | /hyperframes-creative |
| 媒体 —— TTS 画外音、背景音乐、转录、背景移除、字幕 | /hyperframes-media |
媒体解析 —— 从 HeyGen 目录查找并冻结 BGM、SFX、图像、图标到 .media/,附带清单跟踪 | /media-use |
| CLI 开发循环 —— 初始化、代码检查、验证、检查、预览、渲染、发布、诊断 | /hyperframes-cli |
安装注册表块/组件(hyperframes add) | /hyperframes-registry |
意图路由 —— 选择工作流
此部分仅知道顶层工作流;它不加载其内部引用或上述领域技能。
路由前 —— 确认输入,而不是规格
路由需要知道视频是关于什么的 —— 其输入和主题。如果未指定(“制作一个关于我们产品的视频”但没有 URL、产品、主题或素材),请在进入任何工作流之前提问 —— 提交工作流本身就是路由决策。最多两个问题:
- 输入 —— 产品(URL / 简报)、普通网站、GitHub PR、要解释的主题,或现有的讲话者视频?
规格默认值 —— 声明,不要问(它们从不更改路由):宽高比 16:9(仅当有命名的垂直目的地(TikTok / Reels / Shorts)时使用 9:16);旁白/字幕语言=用户的语言。所选工作流将在其第一步中重新确认自己的具体细节。
工作流速查表
| 工作流 | 使用场景 |
|---|---|
/product-launch-video | 营销/发布/推广产品 —— 来自其 URL、简报或脚本(即使只提到网站名称) |
/faceless-explainer | 从文本解释主题/概念 —— 没有产品、没有 URL;每个视觉元素都由 LLM 生成 |
/pr-to-video | GitHub PR / 代码变更 → 变更日志 / 功能展示 / 修复 / 重构解释器 |
/embedded-captions | 向现有讲话者视频添加字幕(原样保留) |
/talking-head-recut | 为现有讲话者视频包装设计好的图形叠加 —— 下方三分之一、数据标注、动态标题、引文 |
/motion-graphics | 短小、无旁白、设计主导的动态图形 —— 动态文字、统计数据/图表动画、标志动画、下方三分之一叠加 |
/music-to-video | 音乐曲目 → 节奏同步视频 —— 歌词视频、幻灯片或动态推广;音乐驱动节奏(可选用户图像/视频按节拍网格剪切) |
/slideshow | 演示文稿/推介/互动演示 —— 离散幻灯片、片段、分支、热点;输出为可导航的演示,而非渲染的视频 |
/general-video | 其他任何内容 —— 较长或多场景作品、静态循环/海报、自定义组合,或没有合适专门工作流时的常规网站导览 |
/remotion-to-hyperframes | 将现有 Remotion (React) 组合移植到 HyperFrames(迁移,而非创作) |
消歧(仅当可能混淆时):
- 运动优先且无旁白(约 <10 秒,运动本身就是信息)→
/motion-graphics,无论输入是什么。 - URL 或脚本 —— 推广特定产品(即使仅提到网站名称)→
/product-launch-video;普通非产品网站 →/general-video;GitHub PR 链接 →/pr-to-video;解释概念且没有产品/网站 →/faceless-explainer。如果产品与主题或发布与普通网站确实不清楚 → 询问一个问题。 - 现有素材 —— 简单口语字幕 →
/embedded-captions;设计叠加卡 →/talking-head-recut。两者都不编辑素材本身(重新定时/重新着色/重新构图/重新排序/音频属于 NLE 编辑 —— 超出范围)。 - 音乐曲目是输入(音频文件,或要从中提取音频的视频)且无旁白 →
/music-to-video—— 音乐的节拍/能量驱动节奏。(有旁白的作品停留在上述输入匹配的工作流中;/motion-graphics用于不是由音乐驱动的短小无旁白运动。) - 演示文稿/推介/互动演示(离散幻灯片、导航、演示者模式)→
/slideshow—— 输出是可导航的演示,而非渲染的视频。明确的“幻灯片”请求直接进行;相邻触发词(“演示/幻灯片/呈现/转换此页面”)使/slideshow在创作前确认是否为幻灯片,如果不是则切换到适当的非幻灯片工作流。 - 长度是指导,不是门控 —— 意图选择工作流;仅当作品明显长于约 3 分钟,或是静态/循环/自定义格式时,才使用
/general-video。
如果匹配的工作流未安装
一旦选择了工作流,请检查它是否实际可用。如果匹配的工作流技能未安装,不要退而猜测 —— 告诉用户先安装它:
- 仅此工作流:
npx skills add heygen-com/hyperframes --skill <workflow-name>(例如--skill pr-to-video—— 裸名称,不带前导/)。 - 一次安装所有工作流:
npx skills add heygen-com/hyperframes --all(核心 + 每个工作流,跳过选择器)。
在他们运行后,重新读取工作流的技能并继续。
保持技能最新
HyperFrames 技能是版本化的。npx hyperframes init 检查已安装技能是否与 GitHub 上的最新版本一致,并在有任何内容过时或缺失时安装/刷新完整集合 —— 因此新初始化的项目始终拥有完整、最新的集合(在最新项目上重新运行 init 是无操作的)。检查是快速的 GitHub 往返;离线(或受限)时,它会在短暂超时后回退到安装,因此 init 从不会因网络问题而硬性失败。创作工作流会随 init 引导,因此启动新项目始终运行此检查并在技能过时时从 GitHub 拉取最新技能。--skip-skills 标志当前已失效(在 skills.sh 注册表追赶时采取的临时措施):传递它不再跳过检查,因此每次 init 都会检查 GitHub。CI/测试通过 HYPERFRAMES_SKIP_SKILLS=1 环境变量选择退出。
如果任务行为异常,或在长时间构建之前,确认已安装技能是否为最新:
- 检查:
npx hyperframes skills check(添加--json以获取机器可读的裁定;当任何内容过时或缺失时,以非零退出)。 - 更新:
npx hyperframes skills update—— 将完整集合拉取到最新版本,安装任何尚未存在的(与 init 的安装步骤相同)。
CLI 还会在 render / lint / validate 运行检测到过时技能时,显示一行提醒。
工作流详情
/product-launch-video
- 输入: 正在营销的产品 —— (a) 产品 URL(使用无头 Chrome 爬取素材 + 品牌标记),(b) 命名产品网站的脚本/简报,即使没有链接(PLV 解析并爬取它,除非用户选择退出),或 (c) 无法衍生网站/“不要抓取”的脚本(无捕获模式 —— 选择提供调色板 + 设计系统的样式预设)。提供的脚本可以是逐字画外音或按场景重新结构化 —— PLV 会询问。
- 输出: 产品发布 / SaaS 推广作为 HyperFrames 组合 → MP4(最佳时长 30–90 秒)。
- 触发词: “X 的发布视频”、“我们网站的推广”、“在一分钟内解释我的 SaaS”、“把我的脚本变成 60 秒推广”、“纯文本发布视频,不要抓取”。
/faceless-explainer
- 输入: 任意文本 —— 正在解释的主题、文章或笔记,没有产品在营销,也没有网站需要捕获。(从
/product-launch-video分支而来;无无头 Chrome。) - 输出: 面部无表情解说 → MP4,每个视觉元素由 LLM 按场景生成(排版/抽象/图表/数据可视化);附带
pin-and-paper预设(最佳时长 30–90 秒)。 - 触发词: “关于 X 的面部无表情解说”、“将 DNS 工作原理解释为视频”、“将这篇文章变成解说”、“从我的笔记制作解说”。
/pr-to-video
- 输入: GitHub 拉取请求 —— PR URL、
owner/repo#N引用或“此 PR”—— 通过ghCLI 读取(不是要抓取的网站)。 - 输出: 代码变更解释器(变更日志/功能展示/修复/重构)→ MP4 —— diff 高亮、前后对比、文件树 + 影响场景。≤(最佳时长 30–90 秒)。
- 触发词: “制作关于此 PR 的视频”、“将 PR #1187 变成变更日志视频”、“来自 github.com/org/repo/pull/123 的发布说明视频”。
/embedded-captions
- 输入: 要加字幕的现有讲话者视频(MP4)—— 实际素材,不是 URL 或简报。本地转录(Whisper,无需 API 密钥)并蒙版(RVM),使主体可以遮挡字幕。
- 输出: 原样保留的相同素材,带有字幕层 —— 标准(逐字下方三分之一轨道 + 主体后面的嵌入高潮)或电影级(每个字幕都合成到主体后面)。任何长度。
- 触发词: “为此视频添加字幕”、“主体后面的字幕”、“为我的片段添加电影级字幕”。
/talking-head-recut
- 输入: 要包装屏幕图形的现有讲话者/访谈/播客视频(MP4)—— 实际素材。本地转录(Whisper)。片段完整播放,原样保留。
- 输出: 相同素材,带有按时间同步的图形叠加卡 —— 动态标题、下方三分之一、数据标注、引文、侧面板、画中画 —— 与转录同步。任何长度。
- 触发词: “包装此视频”、“为我的演讲添加图形叠加/下方三分之一/数据标注”、“将此访谈变成图形包装的编辑”。
/motion-graphics
- 输入: 短小、设计主导的动态图形,其中运动本身就是信息 —— 通常约 <10 秒,无旁白。类型:动态排版、统计数据/数字计数、图表动画、标志动画、下方三分之一/叠加、或搜索驱动的页面/推文/标题镜头。
- 输出: 短动态图形 → MP4 或透明叠加(alpha WebM / MOV)用于下方三分之一/标注。
- 触发词: “8 秒标志动画”、“动画化此统计数据”、“动态类型介绍”、“将此推文变成动态图形”、“透明下方三分之一叠加”。
/music-to-video
- 输入: 音乐曲目 —— 音频文件,或要从中提取音频的视频 —— 无旁白且不抓取网站。可选用户提供的图像/视频以融入。曲目被一次性分析成确定性的节拍/能量图(
audiomap.json),整个视频基于此构建。 - 输出: 节拍同步的 HyperFrames 组合 → MP4,音乐驱动节奏。排版和模板是基础(完整的视频不需要任何素材);任何提供的媒体都按相同的节拍网格剪切(节拍剪切/肯·伯恩斯效果)。类型 —— 歌词视频、幻灯片、动态推广 —— 由逐帧选择决定;流水线从不分支。
- 触发词: “为这首歌制作视频”、“此曲目的节拍同步视频”、“歌词视频”、“将此音乐变成视频”、“音乐可视化器 / 跟随此节拍的动态推广”。
/slideshow
- 输入: 要创作的演示文稿/推介/互动演示 —— 简报、大纲或要转换为幻灯片的现有页面。不是渲染视频的请求;如果意图不明确,该技能会在创作前确认“您希望将其作为 HyperFrames 幻灯片吗?”。
- 输出: 可运行的 HyperFrames 组合 + 一个JSON 孤岛,播放器的
SlideshowController读取它来将组合变成可导航的演示。