mcpField
P
product-launch-video

product-launch-video

github.com/heygen-com营销与增长74.7k538.8k 次安装今天更新
代码仓库

关于 product-launch-video

product-launch-video 是用于制作产品宣传视频的 HyperFrames 技能,也适用于网站导览和展示。它将素材采集、品牌设计、分镜规划、逐帧构建和最终渲染组织为带检查点的流程。

主要功能

  1. 01面向产品的视频流程
  2. 02网站与素材采集
  3. 03基于品牌设置设计系统
  4. 04分镜与脚本规划
  5. 05逐帧构建画面
  6. 06渲染最终视频

适用场景

  1. 01制作产品发布宣传视频
  2. 02将网站导览制作成视频展示
  3. 03根据提供的脚本或简报制作发布视频

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/heygen-com/hyperframes --skill product-launch-video

安装后在 Claude Code 中输入/product-launch-video确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
cut-catalog.md
motion-language.md
story-design.md
visual-design.md
scripts/
assemble-index.mjs
assemble-index.test.mjs
audio.mjs
audio.test.mjs
build-frame-colors.test.mjs
build-frame-subsets.test.mjs
build-frame.mjs
captions.mjs
captions.test.mjs
capture-skill-guardrails.test.mjs
frame-packets.mjs
frame-packets.test.mjs
scripts/lib/
assets.mjs
bgm-volume.mjs
captured-fonts.mjs
dimensions.mjs
frame-packets-core.mjs
host-audio.mjs
main-module.mjs
pad-frame-duration.mjs
pad-frame-duration.test.mjs
storyboard.mjs
tokens.mjs
tokens.test.mjs
transition-registry.mjs
transitions.json

详细介绍

插件安装: 在此技能位于 HyperFrames 插件中时,执行设置或检查是否为最新版本的命令前,请遵循插件执行规则。独立安装请遵循下方的更新说明。

首先,保持此技能为最新版本——运行前请先向用户确认: npx hyperframes skills update product-launch-video。如果所有内容均为最新版本,此命令会快速执行并且不做任何更改;否则,它会刷新此技能及其依赖的核心领域技能,然后你再依赖它们。

media-use:在获取音频/图像/徽标前,调用 /media-use,从 HeyGen 目录查找背景音乐和图像,从 Openverse 查找音效,并从官方来源获取品牌徽标。先运行 --adopt,以登记现有素材。请参阅 /media-use 技能。如果宿主应用提供自己的音乐或音效工具,请使用这些工具处理音乐和音效。

figma source:如果来源是 figma.com URL,请先运行 /figma,按需导出素材、提取品牌令牌,并重建组件/故事板,然后根据其输出构建此工作流。不要直接通过原始 MCP 工具操作 Figma:这样会跳过 SVG 清理、.media/manifest.jsonl 来源记录和品牌令牌的 var() 绑定,导致之后更改品牌时无法传播更新,除非完整重新导入。

将产品发布制作成 HyperFrames 视频

使用此技能拍摄产品、了解其品牌、规划发布视频,并在 HyperFrames 中逐帧构建视频。

入口是 /hyperframes。 你是编排者。运行每个步骤,确认通过相应关卡后,再继续下一步。此技能适用于正在营销、发布、推广或揭晓的产品,包括“为我们的网站制作宣传视频”这类目的为宣传的请求。网站导览/展示类请求也适用此技能:BRIEF.md 会保留按原样展示的意图,捕获的屏幕会成为视频展示的素材。其他任何意图、单纯的“制作一个视频”,或任何不确定的情况 → 先阅读 /hyperframes——意图层负责所有路由决策,而新建项目若未提供 BRIEF.md,无论如何都会进入该流程(设置步骤的首条规则)。

你是编排者。在 videos/<project>/ 中工作。按顺序运行各步骤,并通过每个关卡后再继续。需要用户确认的步骤为步骤 0、步骤 3 和步骤 6。阅读 ../hyperframes/references/brief-contract.md,再执行步骤 0——该文件定义了关卡类型,以及 BRIEF.md 中的 flow/storyboard 如何决定模式,并据此确定步骤 3/4/6 的关卡要求。除步骤 5 外,所有步骤都由你亲自完成;步骤 5 则为每一帧分派一个子 Agent。不要在此处编写设计或动效规则;这些规则位于帧处理子 Agent、本技能本地的 ../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 项目,并确保需求说明持久保存。

需求说明由意图层确认,而不是通过在此处提问来确认。 按以下顺序执行启动规则:(1) BRIEF.md 已存在 → 阅读它,不要提问——需求说明已确定,模式由其中的 flow/storyboard 推导(需求说明契约 § 1)。(2) 没有 BRIEF.md,但项目已存在(磁盘上有 hyperframes.json / STORYBOARD.md)→ 根据故事板的 frontmatter 和记录的偏好继续;不要重新盘问一个尚未完成的项目。(3) 两者都不存在——这是直接来到此处的新建请求 → 阅读 /hyperframes 并运行其意图层(references/intent-interview.md):它会检查配方和记忆的默认设置,提出此路线的问题(../hyperframes/references/routes/product-launch-video.md),并返回已锁定的需求说明。编辑请求跳过以上所有步骤——直接进行编辑。

仅当缺少 hyperframes.json 时才初始化。根据品牌或域名,以 kebab-case 命名 <project>,例如 acme-promo;不要使用工作区名称或时间戳。

npx hyperframes init "videos/<project>" --non-interactive --example=blank --skill=product-launch-video — init 会将已安装的技能与 GitHub 上的最新版本进行比对,如果有任何技能过时,就更新全局技能集。

初始化后,将 videos/<project> 设为 <PROJECT_ROOT>,并在后续所有相对路径命令中将该目录用作工作目录。以下命令中的 . 表示 <PROJECT_ROOT>;绝不要在调用方目录中写入 .media、capture 或输出文件。

初始化后立即写入 BRIEF.md(绝不要在初始化前写入——init 不接受非空目录):意图层锁定的需求说明,格式参照 ../hyperframes/references/brief-format.md。将 <MEDIA_DIR> 解析为已安装的 /media-use 技能目录。然后使用 node <MEDIA_DIR>/scripts/prefs.mjs record --hyperframes . 记录每个由偏好支持的答案(brief-format.md 列出了相应子集)。如果意图层采用了配方,运行 node <MEDIA_DIR>/scripts/recipe.mjs use --hyperframes . --name <name>;它会将 frame.md 复制到项目中(随后跳过步骤 2),并返回步骤 3 起草所依据的框架。配方会补全答案,但不会代替批准;审核关卡仍然适用。

继续执行设置之后的步骤前,先显示登录状态——运行 npx hyperframes auth status 并逐字转达其输出。该命令会报告语音/BGM 将使用 HeyGen 还是本地引擎,以及在未登录时如何登录。请注意退出码约定:未登录时(以及存储的凭据被拒绝时),auth status 以 1 退出——这个非零退出状态表示正常的未登录状态,并非命令失败;不要将其视为错误,不要重试,也不要以会中止工作流的方式将其与 &&/set -e 串联。按以下一种分支处理:

  • 协作模式: 等待用户登录,或明确选择 offline / go。
  • 自主模式: 说明当前状态,并使用可用的本地引擎继续。

如果没有离线服务提供方,不要默默省略必需的能力;应明确指出阻碍因素。不要将此决定并入其他问题,也不要把密钥写入仓库专属的 .env。身份验证管理和离线回退方案:/media-use references/setup-providers.md § Providers。

关卡: hyperframes.json 和 BRIEF.md 均已存在;由偏好支持的答案已记录(需求说明契约 § 2);已显示登录状态(已登录,或选择离线继续)。

第 1 步:收集素材

目标:收集视频所需的源材料、品牌信息和可用素材。

对输入进行分类并选择路径。提供了明确的 URL → 抓取该 URL,并使用网站内容进行旁白和素材制作。粘贴了脚本/简报 → 将其原样保存为 user_script.txt;VO_MODE(逐字照读或重新编排)由 BRIEF.md 提供——收到脚本时,意图层会询问此项(只有当简报中缺少此项时,才在这里询问一次)。然后确定抓取目标:文本中有 URL → 使用该 URL;只有品牌名称 → 使用 WebSearch,用一句话确认 URL,然后抓取;没有 URL/网站(或简报要求不要抓取)→ 走不抓取路径。

使用以下命令执行抓取:npx hyperframes capture "<URL>" -o ./capture --json。除非调用方有更短的截止时间,否则保留默认的导航后预算;若调用方有更短的截止时间,则传入一个正数 --capture-budget <milliseconds>,并为后续工作留出时间。--timeout 仅控制页面导航。只有在有意禁用可选的图像说明生成时,才使用 --skip-vision。

立即检查命令结果和输出目录。非零退出码、JSON 中的 ok: false 或 capture/BLOCKED.md 都意味着抓取路径必须停止:报告记录的原因,不要使用不完整的截图、DOM、令牌或素材。URL 抓取失败后,不要捏造一个模拟的不抓取备用方案。只有原始简报提供了源材料,或用户在失败后明确改为使用提供的截图或简报时,才继续走不抓取路径。

very little text content 之类的警告,加上空的素材目录,并不能证明页面可用。对于网站导览或原样展示的简报,必须有可信的抓取结构或用户提供的截图;两者都没有时,停止。不要仅仅因为抓取结果不可用,就凭空构建或重建页面。

对于网站导览或原样展示的简报,抓取的页面是视觉事实来源。使用真实截图,而不是用 HTML 重建整个网站。如果镜头需要内部动态效果,保留截图作为底图,并在测量好的位置叠加真实抓取的素材,或者只重建会动的那个组件。对于滚动镜头,在 capture/screenshots/full-page.png 上为视口添加动画——这是整篇文档的 1x 底图,适用于沿页面向下移动的 1920 宽视口。如果页面太高,无法一次性完整抓取,则不会生成该文件;此时改用同一目录中的重叠滚动位置截图。若要放大到超过 1:1,则应单独抓取该区域的 2x 图像,因为底图在 1x 之上没有余量。只有用户明确要求采用风格化诠释时,才重建整个页面;仅仅抓取结果不可用,并不构成授权。

如果存在 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 应说明未抓取任何素材。

**门槛:**抓取 JSON 报告 ok: true;capture/BLOCKED.md 不存在; capture/extracted/tokens.json、capture/extracted/visible-text.txt、 capture/extracted/asset-descriptions.md 和 capture/assets/ 均存在;并且你能用一句清晰的话说明品牌。将 asset-descriptions.md 视为主要素材清单。如果真实抓取后该文件缺失,则停止并报告抓取未完成。只有在此结构性门槛仍通过时,才可接受可选阶段降级的警告。


步骤 2:设计系统

目标:选择一个已发布的画面预设;脚本会将其转换为本视频的 frame.md 和字幕样式。

当 BRIEF.md 指定了 style_preset 时——用户已在意图层通过展示案例选定了它——就使用该预设;只有当简报未指定时,才由你自行判断。接下来只需做一个决定——选择哪个预设:阅读 ../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 也已作为字幕样式源文件生成;已将所选预设记录为偏好设置(--key style_preset --workflow <this workflow>,简报约定 § 2)。


步骤 3:分镜和脚本

目标:将简报和采集的素材转化为逐帧故事方案,并获得批准。

阅读 ../hyperframes-creative/references/story-spine.md(钩子语言、先价值后证据、分镜作为提案、视觉内容可追溯至来源)、references/story-design.md、../hyperframes-animation/blueprints-index.md、../hyperframes/references/storyboard-format.md 和 ../hyperframes/references/script-format.md。使用这些资料编写 STORYBOARD.md;需要旁白时,再编写 SCRIPT.md。根据简报中的 length 设置 frontmatter 中的 duration:——它只是粗略预期;组装结果会报告最终剪辑时长与预期的差距。

使用 story-design.md 确定故事蓝图、钩子、说服逻辑、节拍、VO_MODE 和素材选择。作为非强制参考,查看 ../hyperframes-animation/blueprints-index.md 中的角色→蓝图菜单:对于每个节拍,在有合适选项时注明一个候选蓝图 ID。故事本身决定包含哪些节拍——绝不要为了适配蓝图而强加节拍,也不要仅仅因为有成熟的形式可用就凭空编造节拍。根据 capture/extracted/asset-descriptions.md(权威素材清单)为每个视觉画面选择 asset_candidates——不要浏览原始的 capture/assets/。除非清单缺失或无法使用,否则不要让用户挑选素材。使用分镜和脚本参考文档中规定的确切字段。

起草后,运行评审循环的方案审阅环节——../hyperframes/references/review-loop.md § 1:将方案作为提案展示,并询问两个问题——是批准还是修改,以及选择先看草图(推荐)还是跳过。用户会通过聊天回复反馈;反复修改,直到获得批准。这是一个检查点关卡(简报约定 § 1):在自主模式下无需询问——发布相同摘要作为提示,然后继续;草图并入构建环节,最终预览及其唯一的问题将在步骤 6 中给出。

关卡:STORYBOARD.md 已创建,每个视觉画面都有 asset_candidates;需要旁白时,SCRIPT.md 也已创建;用户已批准逐帧方案(自主模式:已发布摘要作为提示)。


步骤 3.1:音频

目标:根据已批准的脚本生成旁白、词语时间点、音乐和音频元数据。

步骤 3 获批后开始处理音频。在后台运行,然后继续步骤 4。

调用前,根据用户的要求选择旁白服务提供商和声音。 使用步骤 0 中选定的服务提供商,并传入 --provider <provider>(或设置 HF_TTS_PROVIDER)。如果用户指定了声音、性别或语气,请选择匹配的声音 ID,并通过 --voice <id> 传入。否则,管线默认使用 HeyGen 上的 Marcia(女性),或 Kokoro 上的 am_michael——因此,除非传入该标志,否则类似“男性声音”的要求会被悄然忽略。声音 ID 因服务提供商而异;请根据步骤 0 选定的服务提供商(由登录状态决定)解析:已登录时使用 HeyGen,通过 node <MEDIA_DIR>/audio/scripts/heygen-tts.mjs --list(或 GET /v3/voices?engine=starfish);离线时使用 Kokoro,查阅 <MEDIA_DIR>/audio/references/tts.md 中的声音表(am_/bm_ 前缀为男性,af_/bf_ 前缀为女性)。如果用户没有表达偏好,请先使用记忆中的声音(简要约定 § 2),再考虑管线默认声音,并说明使用了哪种声音;只有两者都未指定声音时,才省略 --voice。如果用户本次明确指定了声音,请记录下来(prefs.mjs record --key voice)。

node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json --provider <provider> --voice <voice-id> &

音频脚本负责旁白、词语时间点、从 HeyGen 音乐库查找背景音乐(BGM)以及时间元数据。BGM 氛围取自分镜脚本中的 music: 字段;music: none 会关闭 BGM。此处使用 HeyGen Audio API 获取音乐,而非生成音乐;TTS 使用相同的 ~/.heygen 凭据。服务提供商详情请参阅 ../media-use/audio/references/tts.md。如果宿主应用使用自身的工具制作音乐或音效,请将文件放在 assets/ 下,并在 audio_meta.json 文件中将其标记为 "source": "host":音乐使用 bgm { "path": "assets/…", "source": "host" },并在分镜脚本中设置 music: none;音效使用 sfx 条目 { "frame": <n>, "file": "assets/…", "offset_s": 0, "duration_s": <its length>, "source": "host" }。每次处理音频时都要保留这些条目;带有宿主音效的帧不应添加查找得到的音效提示。

如果没有旁白且没有 SCRIPT.md,请跳过语音生成。如果分镜脚本设置了音乐氛围,仍可播放 BGM。

规范的完全静音标记: STORYBOARD.md 顶部 YAML 块中设置 music: none,没有 SCRIPT.md,并且没有 sfx: 提示或宿主音频。这些条件同时满足时,项目即标记为静音——没有旁白、BGM 或 SFX。audio.mjs 会识别这一状态并且不生成任何内容(它会移除过期的 audio_meta.json;assemble 将缺少 audio_meta.json 视为静音),因此步骤 3.1 可直接跳过。如果没有旁白,但有 sfx: 提示或宿主音频,则影片并非静音:audio.mjs 会写入 audio_meta.json 文件,供 fetch-sfx 填充。用户要求制作静音或无音乐视频时,请使用此标记——不要自行采用其他写法。

检查条件: 音频任务已启动,或项目已标记为静音(music: none、没有 SCRIPT.md,且没有 sfx: 提示或宿主音频)。


步骤 4:画面视觉设计

目标:为每个分镜帧添加视觉方向、布局意图和动态效果选择。 先绘制故事板画面草图(仅协作模式)。 方案获批后,立即进行草图绘制——../hyperframes/references/review-loop.md § 2(不要等到第 3.1 步;静帧不使用时间安排):亲自按构图摆好每一帧,在 index.html 中将每帧放置在计划的起始位置,一次性为所有静帧拍摄快照,并编写故事板 boards/storyboard.html(../hyperframes-creative/references/storyboard-recipe.md);将每帧标记为 built;所有帧都变为 built 后,暂停并提出唯一的布局问题;然后仅修改被点名的帧,直到故事板得到确认。占位素材:用带标签的纯色块代替捕获的素材——实际文件会由第 5 步的工作者提供。只有此后,才能将下方的视觉设计应用到已确认的布局上。在自主模式下,或用户在第 3 步选择跳过草图时,跳过这一环节——第 5 步中,帧会直接从 outline 变为 animated。

在原处编辑 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(有效规则名称)描述动作——不要自行创造动作名称。

在设计任何具名视觉效果前,先搜索实时目录。 对于简报中点名的每种视觉风格、效果、处理方式或转场——例如“CRT 扫描线”“故障效果”“胶片颗粒”“微光扫过”“彩纸爆发”——运行 npx hyperframes catalog --query "<the look, in plain English>" --json,并在将该效果写入 STORYBOARD.md 前阅读排名靠前的结果。搜索无需安装任何内容:无需项目、无需先执行 add,也无需账户。无论当前位于哪个目录,都能搜索整个托管注册表(约 400 个区块和组件)。已有区块若能满足需求,就将其设为该帧的 focal——在此处写明名称;第 5 步会在分派任务前安装一次,工作者会对其进行定制,而不是从头重建。只有搜索后发现没有合适结果时,才能手动制作视觉效果。

对于每个视觉帧,按照 visual-design.md 中的方法,在 STORYBOARD.md 中编写带时间码的镜头序列:选择该帧的蓝图(或进行组合),用本产品的内容实例化,并让每个 Scene 的内容揭示节奏配合配音,使画面在整个时长内逐步展开,而不是一开始全部呈现后便停滞不变。按照每个 Scene 内嵌的方式说明布局和动作(使用 visual-design.md 和 motion-language.md 中的词汇)。添加一个适用于整个视频的 ## Video direction 区块。

当某个元素在视觉上跨帧延续时,在 STORYBOARD.md 中为两个工作者提供相同的数值交接信息:在前一帧中添加 handoff_out:,并在后一帧中添加匹配的 handoff_in:。写明元素名称及其在切点处的精确 x/y 位置、缩放、透明度和运动方向/速度——即使某个字段的值不变,也必须明确写出;例如,不变时应写 opacity: 1,而不是省略。只有明确采用直接切换时,才省略整个交接区块。目标很简单:并行工作的工作者不能为同一处衔接各自创造不同的版本。

不要更改故事、脚本、素材选择、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 .

时长同步是机械操作:以实际配音时长为准;静音帧保留估算时长;绝不要手动编辑已同步的时长。

组装前,检查音乐是否适合最终剪辑。曲库曲目可能符合指定氛围,但开头可能是平缓渐进段,消耗短篇发布视频最初几秒的时间。将开头与后续每段五秒的部分进行比较;如果后续某段有更有力且音乐衔接自然的起始点,就从那里开始剪辑,并保留较短的淡入和较长的淡出。如果帧或旁白时序有变化,请根据新的最终时长重新检查,确保音乐不会提前结束,也不会在片尾留下静音。

调度前,先一次性预安装 STORYBOARD.md 中提到的注册表区块,避免并行工作进程争用注册表:

for b in <each registry block named in the storyboard>; do npx hyperframes add "$b"; done

调度前,阅读 ../hyperframes/references/subagent-dispatch.md。构建每帧数据包和工作进程角色说明:

node <SKILL_DIR>/scripts/frame-packets.mjs --project "$PROJECT_DIR" --storyboard "$PROJECT_DIR/STORYBOARD.md"

构建器会在 .hyperframes/frame-packets/ 下为每帧写入一个范围明确的数据包(该帧的完整分镜区块 + 蓝图正文 + 所有引用的规则配方,均内联),并生成 _role.md(../hyperframes/references/frame-worker-core.md + 本技能的 sub-agents/frame-worker.md,逐字拼接而成——即完整的工作进程角色说明)。每帧分派一个子 Agent,尽可能并行;否则分批运行工作进程。每个工作进程只负责一帧:其提示词中包含 _role.md 和该帧的数据包——完整粘贴两者,或提供两个文件路径让工作进程先读取(两种方式等效;无论哪种,工作进程都只会基于这两份文档开始工作)——以及调度上下文,其中包括 PROJECT_DIR、frame_id、磁盘上该帧是否有已确认的草图(有的话,工作进程会基于该布局进行设计,而不是重新绘制——参见 frame-worker core § When a confirmed sketch exists)、画布尺寸,以及字幕状态和字幕启用时的避让区域。

工作进程只读取自己的数据包和 frame.md;绝不打开 STORYBOARD.md 或技能文档(数据包已内联上游选定的内容)。每个工作进程只能写入 compositions/frames/NN-*.html。工作进程绝不能编辑 STORYBOARD.md。

**全出血背景必须放在 class="clip" 图层上,绝不能放在 #root 上。**帧的底色(色块/渐变/网格)应作为贯穿整个帧时长的独立背景片段——设置在 #root/data-composition-id 元素上的 background 受帧时间窗口限制,不能可靠地作为底色;深色内容可能会落在黑色宿主 body 上,导致无法显示。视频的基础底色由组装器根据 frame.md 中的 canvas 颜色绘制到 index 的 #root 上。(完整规则和自检:../hyperframes/references/frame-worker-core.md。)

每个工作进程返回结果后,编排器会在 STORYBOARD.md 中将对应帧标记为 animated。

音频时序就绪后,在后台构建字幕并组装 index:

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(协作模式:在第 4 步中已确认草图表)、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

当任何语音轨道下方播放音乐时,须在组装和添加转场后、运行检查前对音乐底轨进行频谱削减。 组装器的 data-volume(语音下方默认为 0.12)是整条底轨的固定增益,并非所需的频谱削减;削减会保留该设置,因此两者都会生效。阅读 /hyperframes-audio → 语音削减。

组装器会输出单独的旁白片段,且不带音频组。削减前,在 index.html 中为每个旁白 <audio id="el-<frame_id>-voice"> 添加 data-audio-group="voiceover",也包括其他应加入同一旁白组的语音片段。音乐底轨和音效应留在该组之外。多个语音片段必须针对其语音组进行削减,这样重新运行分析时,后续片段也会得到处理。然后从合成项目运行:

node <HYPERFRAMES_AUDIO_SKILL_DIR>/scripts/carve.mjs --comp ./index.html

<HYPERFRAMES_AUDIO_SKILL_DIR> 是已安装的 hyperframes-audio 技能目录。该脚本需要 PATH 中有 ffmpeg,且合成项目中已安装 @hyperframes/core(在项目中运行 npm i -D @hyperframes/core,或在 Bun 项目中运行 bun add -D @hyperframes/core)。脚本会检测底轨和重叠的语音轨道;若检测时需要明确指定,请使用 --bed el-bgm,并重复指定 --voice <voice-element-id>。确认底轨带有 data-fx-carve、data-fx-chain 和 data-automation;当多个旁白片段与底轨重叠时,data-fx-carve.sources 应指定 voiceover 组,而不是单个片段的 id。仅当语音下方没有播放音乐时,才跳过此步骤。重新组装会替换 index.html,因此每次重新组装后都要恢复旁白组并重新运行削减。

npx hyperframes lint

npx hyperframes check

npx hyperframes snapshot --at <frame-midpoints-and-each-cut-minus-0.1s-and-plus-0.2s>

snapshot 会将捕获的帧拼接成一张联系表(.hyperframes/artifacts/snapshots/<id>/contact-sheet.jpg;命令会打印路径)。检查中点帧是否存在布局问题,然后比较每个切点前后的两张图。持续出现的元素必须保持约定的位置、缩放、透明度和方向;渲染前修复任何明显的跳变。

如果命令失败,显示 stderr 并停止,不要堆叠执行恢复命令。自行修复:优先对 compositions/frames/NN-*.html 做最小且安全的编辑,然后重新运行失败的检查。

检查通过后,暂停以供用户审核——按照审核循环的最终查看步骤(../hyperframes/references/review-loop.md § 4):只提一个问题,并在 Studio 最终预览中询问——现在渲染,还是需要修改?(自主模式:同样只保留这一个问题——即使用户没有要求,也要打开预览。)然后交付 MP4、联系表和帧 id,以便修改时可以针对单帧进行。

预览:npx hyperframes preview --background

仅在用户批准后渲染(自主模式:在提出“渲染还是修改?”的问题后):

npx hyperframes render --skill=product-launch-video --quality high --output renders/video.mp4

除非用户要求,否则渲染后不要重新运行 lint、check 或 snapshot。

关卡: 渲染前已通过 lint 和 check 并检查快照;用户已在审核暂停时批准(自主模式:检查已通过,交付内容包含联系表);renders/video.mp4 已存在。最终回复须注明 MP4 路径和最终时长。


快速参考

格式: 横向 1920x1080;纵向 1080x1920;正方形 1080x1080——根据目标平台确定(简报约定 § 2)。在故事板 frontmatter 中设置一次格式。 **背景脚本:**该工作流在 scripts/ 下仅提供以下脚本:build-frame,用于将帧预设应用于项目并重新设计品牌风格,生成 frame.md(以及字幕样式);audio,用于 TTS、转录、BGM、SFX 和时长同步;captions;transitions,用于注入和验证;stage-assets,用于将以帧命名的资源复制到 assets/;以及 assemble-index。其他所有工作均由 hyperframes CLI 处理。

可复用、与产品无关的镜头形状位于 ../hyperframes-animation/blueprints/(索引见 ../hyperframes-animation/blueprints-index.md)。

阅读何时阅读
[../hyperframes/references/brief-contract.md](../hyperframes/references/brief-contract.md)门禁类型、从 BRIEF.md 推导模式、字段语义。
[../hyperframes-creative/references/story-spine.md](../hyperframes-creative/references/story-spine.md)第 3 步:故事准则——开场钩子措辞、证据先行前的价值呈现、提案形式、可追溯至来源的视觉内容。
[../hyperframes-creative/frame-presets/](../hyperframes-creative/frame-presets/)第 2 步:选择并采用画面预设。
[../hyperframes-creative/references/design-spec.md](../hyperframes-creative/references/design-spec.md)第 2 步:正确应用品牌令牌。
[references/story-design.md](references/story-design.md)第 3 步:规划产品发布故事。
[../hyperframes-animation/blueprints-index.md](../hyperframes-animation/blueprints-index.md)第 3 步:角色→蓝图菜单。第 4 步:选择镜头形式。
[../hyperframes/references/storyboard-format.md](../hyperframes/references/storyboard-format.md)第 3 步:编写 STORYBOARD.md。
[../hyperframes/references/script-format.md](../hyperframes/references/script-format.md)第 3 步:编写 SCRIPT.md。
[../media-use/audio/references/tts.md](../media-use/audio/references/tts.md)第 3.1 步:选择或了解 TTS 提供商和语音。
[references/visual-design.md](references/visual-design.md)第 4 步:编写画面的镜头序列(及布局词汇)。
[references/motion-language.md](references/motion-language.md)第 4 步:运动词汇及运动准则。
[references/cut-catalog.md](references/cut-catalog.md)第 4-5 步:剪辑目录(工作器构建画面内的衔接)。
[../hyperframes-animation/rules-index.md](../hyperframes-animation/rules-index.md) + [../hyperframes-animation/rules/](../hyperframes-animation/rules/)第 5 步:所引用运动对应的本地规则配方正文。
[../hyperframes/references/frame-worker-core.md](../hyperframes/references/frame-worker-core.md)第 5 步:共享工作器契约(数据包构建器会将其添加到增量内容前)。
[sub-agents/frame-worker.md](sub-agents/frame-worker.md)第 5 步:此工作流的画面工作器增量内容。
[../hyperframes/references/subagent-dispatch.md](../hyperframes/references/subagent-dispatch.md)第 5 步:安全地调度子 Agent。

评论

支持 Markdown