media-use:在获取音频/图片之前,先调用
/media-use从 HeyGen 目录中解析 BGM/SFX/图片。首先运行--adopt注册现有资产。参见/media-use技能。
产品发布到 HyperFrames
使用此技能捕获产品,理解其品牌,规划发布视频,并在 HyperFrames 中逐帧构建它。
在步骤 0 之前确认路线。 你是编排者。运行每个步骤,验证其门控,然后才继续下一步。此技能适用于正在被营销、发布、推广或展示的产品,包括诸如“为我们网站做推广”等推广目的的请求。将其他意图路由到别处:一般的非发布网站导览 ->
/general-video;无产品的主题讲解 ->/faceless-explainer;GitHub PR ->/pr-to-video;现有视频配字幕 ->/embedded-captions;简短无旁白的动态图形 ->/motion-graphics。如果用户只说“制作视频”或路线不明确,请先阅读/hyperframes。
你是编排者。在 videos/<project>/ 目录下工作。按顺序运行步骤,并在继续之前通过每个门控。用户门控步骤包括步骤 0、步骤 3 和步骤 6。除步骤 5(你为每个帧分派一个子代理)外,每个步骤都自行完成。不要在此处放置设计或运动规则;这些规则存在于帧工作子代理、此技能的本地 ../hyperframes-animation/rules/ + ../hyperframes-animation/blueprints/ 以及 hyperframes-creative 中。
工作流:步骤 0 设置 -> hyperframes.json;步骤 1 捕获 -> capture/;步骤 2 设计系统 -> frame.md;步骤 3 分镜/脚本 -> STORYBOARD.md 和 SCRIPT.md;步骤 3.1 音频 -> audio_meta.json;步骤 4 视觉设计 -> 增强的 STORYBOARD.md;步骤 5 帧 -> compositions/frames/NN-*.html 和 index.html;步骤 6 最终渲染 -> renders/video.mp4。
步骤 0:设置和简报
目标:锁定核心视频简报,并根据需要创建 HyperFrames 项目。
仅在 hyperframes.json 缺失时初始化。使用品牌或域名的 kebab-case 命名 <project>,例如 acme-promo;切勿使用工作区名称或时间戳。
npx hyperframes init "videos/<project>" --non-interactive --example=blank — init 会检查安装的技能是否与 GitHub 上的最新版本一致,并更新全局集(如有过时)。
在简报之前显示登录状态 — 运行 npx hyperframes auth status,并逐字输出其内容(不要转述或重新编写)。 它会报告语音/BGM 是使用 HeyGen 还是本地引擎,以及未登录时如何登录。如果未登录,请停止并等待用户选择 — 登录,或说“go”/“offline”以继续使用本地引擎 — 然后再询问简报或任何其他内容。 将其视为一个真正的决策点,而不是一个过场便签;不要将选择合并到简报问题中,也不要将密钥写入每个仓库的 .env 文件中。(在自主模式下,记下状态并继续离线。)参见 ../hyperframes-media → Preflight 以获取标准指导。
门控: hyperframes.json 存在,并且视角、时长、宽高比和语言已锁定;登录状态已显示(已登录,或继续离线)。
步骤 1:捕获资产
目标:收集源材料、品牌信号和可用的视频资产。
对输入进行分类并选择路径。显式 URL -> 捕获它,并使用网站进行旁白和资产。粘贴的脚本/简报 -> 逐字保存为 user_script.txt,询问一次“逐字使用还是重构?”,将答案存储为 VO_MODE,然后解析捕获目标:文本中的 URL -> 使用它;仅品牌名称 -> WebSearch,在一行中确认 URL,然后爬取;无 URL/网站 -> 无捕获路径。
使用以下命令运行捕获:npx hyperframes capture "<URL>" -o ./capture
如果存在 GEMINI_API_KEY、GOOGLE_API_KEY 或 OpenRouter 密钥,捕获会自动将资产注释到 capture/extracted/asset-descriptions.md 中。这不是一个审查门控。如果没有视觉密钥,请使用 DOM 上下文并继续。
无捕获路径:手动创建 capture/extracted/tokens.json、capture/extracted/visible-text.txt、capture/extracted/asset-descriptions.md 和 capture/assets/。tokens.json 应为 { "title": "", "description": "", "colors": [], "fonts": [] };尽可能从简报中填写标题/描述。visible-text.txt 包含完整的简报或脚本。asset-descriptions.md 应说明未捕获任何资产,除非用户提供了资产说明。
门控: capture/extracted/tokens.json、capture/extracted/visible-text.txt、capture/extracted/asset-descriptions.md 和 capture/assets/ 存在;你可以用一句清晰的话陈述品牌。将 asset-descriptions.md 视为主资产清单。如果实际捕获后该文件缺失,请停止并报告捕获不完整。如果存在 capture/BLOCKED.md,请遵循它。
步骤 2:设计系统
目标:选择一个已发布的帧预设;一个脚本将其转换为该视频的 frame.md + 字幕皮肤。
你需要做一个判断决策 — 选择哪个预设。阅读 ../hyperframes-creative/references/design-spec.md,选择外观最符合品牌和简报的预设。然后运行:
node <SKILL_DIR>/scripts/build-frame.mjs --preset <name> --hyperframes .
脚本将确定性地完成其余部分:将预设的 FRAME.md 复制到 frame.md,并混音到 capture/extracted/tokens.json 中的品牌令牌上(品牌颜色按角色映射到预设的颜色键上 — 墨水、画布、强调色 — 保持键/结构/组件;预设的显示字体和正文字体替换为品牌的字体),将预设的字幕皮肤复制到 .hyperframes/caption-skin.html,并自我验证(映射损坏时退出代码 1)。脚本退出代码 0 后立即进入下一步 — 无需手动编辑规范。
没有品牌颜色/字体的 tokens.json(例如无捕获时) -> 脚本保留预设自己的调色板,即一个完整的可发布设计。如果简报中提到了捕获遗漏的品牌颜色/字体,请在运行前将它们添加到 capture/extracted/tokens.json 中(或使用用户的 design.md 来填充它);仅在映射确实需要时才手动调整 frame.md。
门控: build-frame.mjs 退出代码 0 — 从命名预设生成的 frame.md 存在,并且(当预设包含时).hyperframes/caption-skin.html 作为字幕皮肤源存在。
步骤 3:分镜和脚本
目标:将简报和捕获的材料转化为经批准的逐帧故事计划。
阅读 references/story-design.md、../hyperframes-animation/blueprints-index.md、../hyperframes-core/references/storyboard-format.md 和 ../hyperframes-core/references/script-format.md。使用它们编写 STORYBOARD.md,并在需要旁白时编写 SCRIPT.md。
使用 story-design.md 获取故事蓝图、钩子、说服逻辑、节拍、VO_MODE 和资产选择。作为软指南,查阅 ../hyperframes-animation/blueprints-index.md 中的角色→蓝图菜单:对于每个节拍,当某个蓝图合适时,记下一个候选蓝图 ID。故事真实性仍然决定哪些节拍存在 — 切勿强行让节拍适应蓝图,也切勿仅仅因为有可用形状就发明节拍。从 capture/extracted/asset-descriptions.md(规范清单)中选择每个视觉帧的 asset_candidates — 不要浏览原始的 capture/assets/。除非该清单缺失或不可用,否则不要让用户选择资产。使用分镜和脚本参考中的确切必填字段。
草稿完成后,展示逐帧摘要。在同一消息中询问用户两件事:(a)批准或请求更改,以及(b)是否需要分镜草稿的实时预览(npx hyperframes preview) — 仅在用户同意时打开它。迭代直到获得批准,并将预览选择带到步骤 6。
门控: STORYBOARD.md 存在,每个视觉帧都有 asset_candidates,需要旁白时 SCRIPT.md 存在,并且用户批准了逐帧计划。
步骤 3.1:音频
目标:从已批准的脚本生成旁白、单词时间、音乐和音频元数据。
在步骤 3 批准后开始音频处理。在后台运行它,然后继续步骤 4。
node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json &
音频脚本处理旁白、单词时间、从 HeyGen 音乐库查找 BGM 以及时间元数据。BGM 情绪来自分镜的 music: 字段。这使用 HeyGen 音频 API 进行检索,而非生成,并且使用与 TTS 相同的 ~/.heygen 凭据。有关提供商详细信息,请阅读 ../hyperframes-media/references/tts.md。
如果没有旁白且没有 SCRIPT.md,则跳过语音生成。如果分镜有音乐情绪,BGM 可能仍会运行。
门控: 音频作业已启动,或者项目标记为静音。
步骤 4:帧视觉设计
目标:为每个分镜帧添加视觉方向、布局意图和运动选择。
就地编辑 STORYBOARD.md。不要创建另一个分镜。将 frame.md 作为颜色、字体、布局感觉和风格的真理源。
阅读 references/visual-design.md、../hyperframes-animation/blueprints-index.md、references/motion-language.md 和 ../hyperframes-animation/rules-index.md。使用 visual-design.md 获取方法(时码化镜头序列、内联布局词汇表以及所需的 ## Video direction 块)。使用 ../hyperframes-animation/blueprints-index.md 选择每个帧的镜头形状。使用 motion-language.md(运动词汇 + 运动准则)和 ../hyperframes-animation/rules-index.md(有效规则名称)进行运动 — 不要发明运动名称。
对于每个视觉帧,按照 visual-design.md 的方法在 STORYBOARD.md 中编写一个时码化镜头序列:选择帧的蓝图(或组合),用此产品的内容实例化它,并将每个场景的揭示节奏与配音对齐,使帧在其整个持续时间内展开,而不是前部加载然后冻结。每个场景内联说明布局和运动(词汇见 visual-design.md 和 motion-language.md)。添加一个视频级别的 ## Video direction 块。
不要更改故事、脚本、资产选择、asset_candidates、transition_in 或已捕获的源材料。不要在此步骤中编写 HTML。
在视觉设计锁定后暂存命名资产:
node <SKILL_DIR>/scripts/stage-assets.mjs --storyboard ./STORYBOARD.md --hyperframes .
门控: 每个视觉帧都有一个时码化镜头序列,其揭示节奏与配音对齐(无前部加载);## Video direction 存在;assets/ 包含命名的资产。
步骤 5:构建帧
目标:将每个分镜帧构建为 HTML 合成,并组装可播放的视频。
如果音频已启动,请等待步骤 3.1 的音频完成。然后同步时长并获取 SFX;如果静音,则跳过两者。
node <SKILL_DIR>/scripts/audio.mjs sync-durations --audio-meta ./audio_meta.json --storyboard ./STORYBOARD.md
node <SKILL_DIR>/scripts/audio.mjs fetch-sfx --storyboard ./STORYBOARD.md --hyperframes .
时长同步是机械性的:真实配音时长优先;静音帧保留估计值;切勿手动编辑同步后的时长。
在分派之前,阅读 sub-agents/frame-worker.md 和 ../hyperframes-core/references/subagent-dispatch.md。为每个帧分派一个子代理,如果可能则并行;否则,以波次运行工作器。每个工作器只处理一个帧。
每个工作器上下文必须包含 PROJECT_DIR、frame_id、画布大小、字幕状态和启用字幕时的保持带,以及 RULES_DIR(此技能的 ../hyperframes-animation/rules/ 的绝对路径)。每个工作器读取 frame.md、来自 STORYBOARD.md 的其自己的 ## Frame N 块、每个引用的运动的本地规则配方(../hyperframes-animation/rules/<id>.md)以及帧的蓝图模板(../hyperframes-animation/blueprints/<id>.md)。每个工作器只写入 compositions/frames/NN-*.html。工作器绝不能编辑 STORYBOARD.md。
每个工作器返回时,编排者在 STORYBOARD.md 中将该帧标记为 animated。
在音频时间存在后,在后台构建字幕并组装索引:
node <SKILL_DIR>/scripts/captions.mjs build --storyboard ./STORYBOARD.md --audio-meta ./audio_meta.json --hyperframes . --out ./caption_groups.json &
node <SKILL_DIR>/scripts/assemble-index.mjs --storyboard ./STORYBOARD.md --hyperframes .
captions.mjs 使用项目的 .hyperframes/caption-skin.html(在步骤 2 中复制)作为字幕外观,注入来自 frame.md 的品牌令牌;如果没有皮肤,则渲染内置的默认药丸样式。captions: skipped (<reason>) 是有效的。当显式跳过时,继续处理而不带字幕。
门控: 每个帧都被标记为 animated,index.html 存在,并且字幕已构建或显式跳过。
步骤 6:最终确定
目标:验证组装的视频,获得用户批准,并渲染最终的 MP4。
注入转场,运行检查,暂停供审查,然后渲染。
node <SKILL_DIR>/scripts/transitions.mjs inject --storyboard ./STORYBOARD.md --hyperframes .
node <SKILL_DIR>/scripts/transitions.mjs verify --storyboard ./STORYBOARD.md --index ./index.html
npx hyperframes lint
npx hyperframes validate
npx hyperframes inspect
npx hyperframes snapshot --at <frame-midpoints>
snapshot 将捕获的帧拼接成一个联系表(snapshots/contact-sheet.jpg)。快速浏览一下;如果没有明显损坏,就继续 — 不要在此处停留。
如果某个命令失败,请显示 stderr 并停止 — 不要堆积恢复命令。自行修复:对 compositions/frames/NN-*.html 进行最安全的编辑,然后重新运行失败的检查。
检查通过后,暂停以供用户审查。视频已组装、可查看,并可在 Studio 中编辑。在步骤 3 和步骤 6 之间只管理一次预览:如果用户之前要求过,则打开它;如果他们之前拒绝过,则提供它;如果他们已经在 Studio 中审查,则不再询问。
预览:npx hyperframes preview
渲染只有在用户指定时才会发生。如果用户请求渲染,使用:
npx hyperframes render
门控: 所有检查通过,用户已经审查,以及(用户请求时)视频已渲染。