motion-graphics — 调度入口
在步骤 0 之前确认路线。 本技能用于制作简短、以设计为主导、无旁白的动态图形(以动效为核心;时长约 10 秒内,无画外音)。若需更长、多场景或有旁白的影片 →
/general-video;有旁白的网站视频 →/general-video;主题讲解 →/faceless-explainer;产品宣传 →/product-launch-video;为现有视频添加字幕 →/embedded-captions。超出范围:实时渲染的数据或无法捕获的素材。不确定是动态优先还是叙事优先?请先阅读/hyperframes。
一种简短、以设计为主导的动态图形。资产优先:在着手设计镜头之前,先确定资产策略并获取真实素材;然后根据已有素材设计镜头,最后通过复用现有组件库进行合成。所有产物存放于 PROJECT_DIR = videos/<项目名称>/(在步骤 0 中创建);以下所有路径均相对于此目录。
| 阶段 | 执行方式 | 主要产物 | 详细流程 |
|---|---|---|---|
| 初始化 | Bash | hyperframes.json | 步骤 0 |
| 规划 | 子代理 — 判断是否需要搜索? + 分类 + 资产策略 | shot-plan.json(草稿:分类、asset_needs 查询、简介) | agents/director.md(第1部分) |
| 获取 ◇ | Bash — 媒体使用解析(若 asset_needs 为空则跳过) | assets/ + assets/index.md | phases/source/guide.md |
| 设计 | 子代理 — 围绕已获取资产进行镜头设计 | shot-plan.json(最终版:区块 + 布局 + 动效 + 位置) | agents/director.md(第2部分) |
| 构建 | 子代理 — 复用优先的合成 | compositions/index.html | agents/builder.md |
| 渲染 | Bash — hyperframes render(MP4,或 --format webm/mov 用于透明叠加) | renders/video.mp4 | 步骤 5 |
| 验证 | Bash — lint / inspect -> 失败时由修复子代理处理 | (原地修复) | agents/finalize.md |
◇ 获取阶段仅在所选分类声明了资产时运行。纯代码/文本分类(例如 kinetic-type、大多数 charts/stat)的 asset_needs: [],直接从规划阶段跳到设计阶段。
分类 — 根据搜索决策划分
规划阶段的首要决策是:是否需要搜索? 该分支将分类分为两组;然后选择具体的分类——对于搜索驱动的分类,根据搜索返回的内容类型选择。每个分类是一个 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-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。
可选密钥(若未设置则使用本地回退)——仅当分类需要通过媒体使用获取/生成资产时才需要:
| Key | 用途 | 回退策略 |
|---|---|---|
GEMINI_API_KEY / GOOGLE_API_KEY | 图像生成(媒体使用解析) | 跳过生成 / 仅搜索 |
| (asset_scout / 搜索提供商) | webpage/news/tweet + asset-fusion 的真实资产搜索 | 分类降级为无资产模式 |
流程
步骤 0 — 初始化
当前工作目录为代理工作区根目录;所有产物均写入 PROJECT_DIR = videos/<项目名称>/。<项目名称>:使用用户提供的目录名称,否则根据意图使用短横线分隔的简短名称(<主题>-motion)。不要使用工作区基名或时间戳。
仅当 $PROJECT_DIR/hyperframes.json 不存在时:
PROJECT_DIR="${MOTION_GRAPHICS_DIR:-videos/<项目名称>}"
mkdir -p "$(dirname "$PROJECT_DIR")"
npx hyperframes init "$PROJECT_DIR" --non-interactive --example=blank
init 会检查已安装的技能与 GitHub 上的最新版本,如果任何技能已过时,则更新全局技能集。
约束: 切勿在工作区根目录执行 hyperframes init;切勿在 PROJECT_DIR 内嵌套另一个 hyperframes/;所有 Bash 命令(主代理 + 子代理)都必须放在 (cd "$PROJECT_DIR" && ...) 子 shell 中——切勿裸用 cd。
步骤 1 — 规划(子代理:Director 第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+ 一段镜头简介)。模式:references/shot-plan-ir.md。
验证:[ -s "$PROJECT_DIR/shot-plan.json" ] && echo ok || echo missing。
步骤 2 — 获取 ◇(Bash:媒体使用,条件执行)
如果 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 — 设计(子代理:Director 第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 — 构建(子代理:Builder,复用优先)
调度一个子代理。提示词 = 完整的 agents/builder.md + 调度上下文(shot-plan.json、catalog-map.md、分类的 module.md、references/motion-vocabulary.md、references/builder-contract.md)。复用优先:npx hyperframes add <block> + 原地定制;仅手写填补空白 + 资产融合的简便操作。输出 compositions/index.html,遵循 HF 契约(暂停的 GSAP 时间线在 window.__timelines 上、class="clip" + 稳定的 ID、tl.seek(0)、确定性)。
步骤 5 — 渲染(Bash)
(cd "$PROJECT_DIR" && npx hyperframes render . --skill=motion-graphics -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都依赖媒体使用搜索(新闻/网页/推文/图像),这是媒体使用已记录的 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(Director 输出) assets/ assets/index.md # 媒体使用输出(如果已获取) compositions/index.html # Builder 输出 renders/video.mp4 - 注册: 在
hyperframes路由器中 — 添加“以设计为主导的简短动态图形”意图 + 工作流描述;从/general-video中划分出动态图形触发器;添加反向的“请勿使用”边。参见motion-graphics-genre.md§5-7。