motion-graphics — 调度入口
在步骤0之前确认路由。 此技能制作短小、设计驱动、无旁白的动态图形(动效即是信息;~10秒以内,无画外音)。较长、多场景或有旁白的处理 →
/general-video;网站旁白视频 →/website-to-video;主题解说 →/faceless-explainer;产品推广 →/product-launch-video;为现有素材添加字幕 →/embedded-captions。不涉及:实时/渲染时数据,或无法捕获的素材。不确定是动效优先还是有旁白?请先阅读/hyperframes。
一个短小的设计驱动动态图形。资产优先:在设计镜头之前,先确定资产策略并获取真实素材,然后围绕已有素材设计镜头,最后通过复用目录能力进行合成。所有产物均存放在 PROJECT_DIR = videos/<项目名>/ 中(在步骤0创建);以下所有路径均相对于此目录。
| 阶段 | 执行方式 | 主要产物 | 详细流程 |
|---|---|---|---|
| init | Bash | hyperframes.json | 步骤0 |
| plan | 子代理 — 决定是否搜索? + 分类 + 资产策略 | shot-plan.json(草稿:类别、asset_needs 查询、简案) | agents/director.md(第1部分) |
| source ◇ | Bash — media-use resolve(若 asset_needs 为空则跳过) | assets/ + assets/index.md | phases/source/guide.md |
| design | 子代理 — 围绕已解析资产进行镜头设计 | shot-plan.json(最终版:区块+布局+动效+位置) | agents/director.md(第2部分) |
| build | 子代理 — 复用优先的合成 | compositions/index.html | agents/builder.md |
| render | Bash — hyperframes render(MP4,或 --format webm/mov 用于叠加) | renders/video.mp4 | 步骤5 |
| verify | Bash — lint / inspect -> 失败时修复子代理 | (原地修复) | agents/finalize.md |
◇ source 仅在所选类别声明有资产时运行。纯代码/文本类别(如 kinetic-type、大多数 charts/stat)的 asset_needs: [],直接从规划跳到设计。
类别 — 按搜索决策划分
plan 的首要决策是:是否需要搜索? 这个分叉将类别分为两组;然后选择具体类别 —— 对于搜索驱动型,根据搜索返回的内容类型选择。每个类别对应一个 categories/<id>/module.md(其规划+构建规则);共享的动效词汇表位于 references/motion-vocabulary.md(→ hyperframes-animation 规则/蓝图 + 注册表区块)。
表单类别 — 无需搜索;用户提供内容:
| 类别 | 意图 | 依赖 |
|---|---|---|
kinetic-type | 有力的台词/引用/标题,动效优先的文字 | caption-* 区块 + 动效规则 |
stat | 单个英雄数字/计数+圆环 | apple-money-count / rules/{counting-dynamic-scale, stat-bars-and-fills} |
charts | 从数据生成柱状/折线/饼图/竞赛/百分比 | data-chart 区块 |
logo-reveal | Logo 呈现/品牌组合(用户Logo) | logo-outro / rules/svg-path-draw |
lower-thirds | 姓名/标题栏、标注、社交覆盖 | caption-* + 注册表叠加区块 |
搜索驱动类别 — 先搜索,再按内容类型动效(RWA 路径):
| 返回内容 | 类别 | 动效 |
|---|---|---|
| 网页/链接 | webpage | 网页/UI 动效(滚动、显示、光标、标注) |
| 新闻文章 | news | 标题显示 + 来源卡片 + 关键事实标注 |
| 推文 | tweet | 动效推文卡片 |
| 图片/实体 | asset-fusion | 资产的几何形态_成为_图表(RWA 叙事融合) |
构建顺序:一次一个,覆盖优先(粗糙即可)。kinetic-type 从原型移植而来;其余遵循。
前提条件
macOS Apple Silicon 或 Linux x64。系统工具:brew install node ffmpeg。运行一次 npx hyperframes doctor。macOS GPU 渲染:export PRODUCER_BROWSER_GPU_MODE=hardware。
可选密钥(未设置时使用本地后备)—— 仅由需要通过 media-use 获取/生成资产的类别使用:
| 密钥 | 用途 | 后备 |
|---|---|---|
GEMINI_API_KEY / GOOGLE_API_KEY | 图片生成(media-use 解析) | 跳过生成 / 仅搜索 |
| (asset_scout / 搜索提供商) | webpage/news/tweet + asset-fusion 真实资产搜索 | 类别降级为无资产 |
流程
步骤0 — 初始化
当前工作目录为代理工作空间根目录;将所有产物写入 PROJECT_DIR = videos/<项目名>/ 下。<项目名>:使用用户指定的目录,否则从意图中取一个短的 kebab-case 名称(<主题>-motion)。不要使用工作空间基名称或时间戳。
仅当 $PROJECT_DIR/hyperframes.json 不存在时:
PROJECT_DIR="${MOTION_GRAPHICS_DIR:-videos/<项目名>}"
mkdir -p "$(dirname "$PROJECT_DIR")"
npx hyperframes init "$PROJECT_DIR" --non-interactive --skip-skills --example=blank
约束: 切勿在工作空间根目录执行 hyperframes init;切勿在 PROJECT_DIR 内嵌套另一个 hyperframes/ 目录;每个 Bash 命令(主代理+子代理)都必须使用 (cd "$PROJECT_DIR" && ...) 子 shell — 绝不使用裸的 cd。
步骤1 — 规划(子代理:导演第1部分)
调度一个子代理。提示 = 完整的 agents/director.md + ## 调度上下文(SKILL_DIR / PROJECT_DIR / 用户请求 / Schema: <SKILL_DIR>/references/shot-plan-ir.md)。它必须:
- 决定:是否需要搜索?(第一个分叉)
- 否 → 选择一个表单类别(kinetic-type / stat / charts / logo-reveal / lower-thirds);内容由用户提供;
asset_needs: []。 - 是 → 生成一个搜索计划写入
asset_needs[](新闻/网页/推文/图片;两极查询)。具体的搜索驱动类别(webpage / news / tweet / asset-fusion)将在步骤2中根据返回的内容类型确定,并在步骤3中最终确定。
- 否 → 选择一个表单类别(kinetic-type / stat / charts / logo-reveal / lower-thirds);内容由用户提供;
- 编写一份草稿
shot-plan.json(信封 + 所选表单类别 或 搜索意图 +asset_needs+ 一段镜头简介)。Schema:references/shot-plan-ir.md。
验证:[ -s "$PROJECT_DIR/shot-plan.json" ] && echo ok || echo missing。
步骤2 — 获取素材 ◇(Bash:media-use,条件执行)
如果 shot-plan.json.asset_needs 非空,则解析资产(搜索/生成/获取 → 冻结的项目本地路径+台账)。参见 phases/source/guide.md(封装了 media-use resolve;搜索驱动类别使用新闻/网页/推文/图片搜索)。如果 asset_needs 为空,则跳至步骤3。
# 说明性 — 请参见 phases/source/guide.md
(cd "$PROJECT_DIR" && node <SKILL_DIR>/phases/source/resolve.mjs --plan ./shot-plan.json --out ./assets)
优雅降级:如果搜索/提供商不可用,类别退回到无资产状态(在 context.log 中注明)。
步骤3 — 设计(子代理:导演第2部分)
调度一个子代理(提示 = agents/director.md 第2部分 + 调度上下文,包含解析后的 assets/index.md(如果步骤2运行了)+ catalog-map.md)。它围绕可用资产设计镜头:选取目录区块 + hyperframes-animation 规则/蓝图、布局、动效、节奏,以及(对于 asset-fusion)element_positions + 取色板。最终确定 shot-plan.json(content.block + content.customize + 各类别内容)。
步骤4 — 构建(子代理:构建器,复用优先)
调度一个子代理。提示 = 完整的 agents/builder.md + 调度上下文(shot-plan.json、catalog-map.md、该类别的 module.md、references/motion-vocabulary.md、references/builder-contract.md)。复用优先:npx hyperframes add <block> + 原地自定义;仅手动编写缺口 + asset-fusion 适配器。输出 compositions/index.html,遵循 HF 契约(暂停的 GSAP 时间线在 window.__timelines 上、class="clip" + 稳定 id、tl.seek(0)、确定性)。
步骤5 — 渲染(Bash)
(cd "$PROJECT_DIR" && npx hyperframes render . -q draft -o ./renders/video.mp4)
# 透明叠加变体:--format webm(或 mov)
步骤6 — 验证(Bash → 失败时修复子代理)
(cd "$PROJECT_DIR" && npx hyperframes lint . && npx hyperframes inspect .)
exit 0 → 完成。如果 lint/inspect 出错,调度修复子代理(agents/finalize.md:快照QA + 一次原地修复 + 重新渲染)。修复过程中绝不改变固定时长。
报告 + 可选预览
报告最终输出(renders/video.mp4,或 .webm / .mov 叠加变体)+ 时长。运行时不要打开预览。 仅在请求时提供,且在渲染之后启动,以便提供最终文件:
(cd "$PROJECT_DIR" && npx hyperframes preview) # Studio UI;或 `npx hyperframes play` 获取可分享链接
标志位位于 hyperframes-cli 技能中(references/preview-render.md)。
恢复表
| 状态 | 从中继续 |
|---|---|
无 shot-plan.json | 步骤1(规划) |
shot-plan.json 有 asset_needs,无 assets/ | 步骤2(获取素材) |
shot-plan.json 最终版,无 compositions/index.html | 步骤3/4(设计+构建) |
compositions/index.html 存在,无 renders/video.mp4 | 步骤5(渲染)+ 步骤6 |
renders/video.mp4 存在 | 报告 + 停止 |
设计说明(维护者 — 执行时不读取此内容)
- 资产优先理由: 素材获取前置且为镜头设计提供信息(RWA 流程:分析→搜索→审查→合成)。搜索驱动类别(
webpage/news/tweet)和asset-fusion都依赖 media-use 搜索(新闻/网页/推文/图片),这是 media-use 有文档记录的 RWA 血统。 - 复用优先: 生态系统中与 LLM 生成模板类似的做法是“合成目录区块 +
hyperframes-animation规则”。HF 暂停的 GSAP 时间线 ≙ Remotion 的useCurrentFrame。 - 类别模块契约: 一个
categories/<id>/module.md(规划+构建),共享references/motion-vocabulary.md(+ 可选评估)。添加一个类别 = 放入文件夹 + 在agents/director.md中注册其分类行 + 在catalog-map.md中注册其行;阶段管道保持不变。 - 目录结构:
videos/<项目名>/ hyperframes.json context.log shot-plan.json # IR(导演输出) assets/ assets/index.md # media-use 输出(如果获取了素材) compositions/index.html # 构建器输出 renders/video.mp4 - 注册: 在
hyperframes路由中 — 添加“设计驱动的短动态图形”意图 + 工作流描述;将 motion-graphics 触发器从/general-video中划出;添加反向“请勿使用”边。参见motion-graphics-genre.md§5-7。