1仕組みと動作原理
「デザイン主導のショートクリップ」(motion is the message)を志向しているため、ワークフローは自律モードに設定されています。確認の質問は最大1回(ディレクターの第1パート)にとどめ、その後は中間レビューを挟まずにビルドから検証まで一気に進めます。ユーザーによる承認ゲートはレンダリング時のみです。
This workflow is **autonomous by design** — at most one clarifying question (`agents/director.md`), then build through verification without intermediate review.
アセット優先(asset-first): 先にアセット戦略を決定して実際の素材を取得し、その「手元にある素材」を軸にカットを設計した上で、最後にカタログの再利用可能なパーツを組み立てます。コードやテキストのみのカテゴリでは、素材取得ステップは完全にスキップされます。
**Asset-first**: decide the asset strategy and source real material _before_ designing the shot, then design the shot around what you have, then compose by reusing catalog capabilities.
「検索が必要かどうか」でカテゴリが分岐します。フォーマット系(kinetic-type / stat / charts / logo-reveal / lower-thirds / maps)のコンテンツはユーザーから提供され、検索系(webpage / news / tweet / asset-fusion)は先に検索を行い、取得できたコンテンツの種類に応じてアニメーションを決定します。
`plan`'s **first decision is: does this need a search?** That fork splits the categories into two groups; then the specific category is picked — for search-driven, **by the type of content the search returns**.
ビルドは「再利用優先」に従います。まず `npx hyperframes add <block>` でカタログのコンポーネントを取得してその場でカスタマイズし、不足しているパーツや asset-fusion の独自の表現手法のみを手作業でコーディングします。
**Reuse-first**: `npx hyperframes add <block>` + customize in place; hand-author only gaps + the asset-fusion affordance. Output `compositions/index.html` honoring the HF contract (paused GSAP timeline on `window.__timelines`, `class="clip"` + stable ids, `tl.seek(0)`, deterministic).
座標指定はモデルの推測に頼らず、locate プロトコルを採用します。まずグリッドストリップによる離散選択を行い(ピクセル座標を直接回帰させるより遥かに高精度)、環境内に有効な検出器キーが存在する場合にのみ、1回呼び出しの auto パスを利用します。
Author models are unreliable at **regressing pixel coordinates** on a cluttered full image (measured: weak vision models ~16–24% center error → rings land off-target) but reliable at **picking a numbered strip** (~3–4% with the loop below). So: never eyeball coordinates; localize by discrete choice.
マップカテゴリのベースマップは、ヘッドレスChrome内で事前にMP4へ「ベイク」する必要があります。これは滑らかさのためではなく、Hyperframesがレンダリング時の外部通信を禁止し、決定論的出力を要求するためです(オンラインチルはレンダリングごとに内容が変わる可能性があるため)。
// Why bake the imagery at all (this is the real reason, not "smoothness"): HF forbids render-time // network and requires deterministic output. Live raster tiles re-fetch every render and can change // → non-deterministic. Baking FREEZES the imagery into pixels = deterministic + offline-reproducible.
検証フェーズでは「開始状態、キーアクション、最終フレームのホールド」の3つの証明モーメントを選択し、人間がコンタクトシートを目視確認します。失敗時の修正は1回限りのインプレース修復(finalizeサブエージェント)とし、再生時間を調整して不具合をごまかすことは禁止されています。
Choose proof times that show the opening state, signature move, and final hold. Inspect the generated contact or snapshot sheet before continuing. On `lint`, `check`, or snapshot failure, dispatch the repair subagent (`agents/finalize.md`) for one in-place fix pass, then rerun the failed gate. Never change a fixed duration merely to hide a defect.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | hyperframes CLI(init / doctor / add / lint / check / snapshot / preview / render / skills update) |
| cli | ffmpeg / ffprobe(探帧率与时长、抽帧、编码) |
| api | Google Generative Language API(可选的视觉检测快路径,仅在环境存在 key 时使用) |
| api | 可选图像生成 key(media-use resolve 的生成分支;未设置则只搜索或不生成) |
| network | 底图瓦片与矢量数据(仅在 maps 分类烘焙底图时联网;烘焙后离线可复现) |
| package | puppeteer-core + 无头 Chrome(底图烘焙录制) |
| network | GSAP CDN(示例资产 _ref-circle-highlight.html 引用) |
| package | 兄弟 skill 依赖(/media-use 的 resolve 与 search 提供者、/hyperframes-animation 的 rules/blueprints、/hyperframes-core 的 brief-contract、/figma) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: node grounding/locate.mjs overlay|region|final|mark|auto <img> …(ffmpeg/ffprobe を含む)
- 网络端点: 外部ネットワークアクセスの宣言: https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent
- 本地工作目录: ファイルの読み書きと成果物の出力: videos/<project>/hyperframes.json、context.log、shot-plan.json(IR)、composition.html
5二重目の独立検証
- [ok] GEMINI_API_KEY 是否真的被读取并外发(橙档判定的关键证据) — locate.mjs:192 `const key = process.env.GEMINI_API_KEY;`;紧接着 key 缺失即报错退出('auto needs GEMINI_API_KEY; use the grid loop instead (overlay→region→final→mark)');存在时把 base64 图像与目标描述 POST 到 generativelanguage.googleapis.com(`?key=${key}`)。调用点真实存在,且仅在 `auto` 子命令触发。
- [ok] 『不假设有检测器』的守卫是否真的生效(避免第一遍误判为『总是联网』) — PROTOCOL.md 明写 '**Never assume the key exists.** No key → path 2.',且把网格循环列为『the normal case』;SKILL.md 的可选键表也把 GEMINI_API_KEY 标为 optional 并给出 fallback(skip generate / search-only)。因此网络外发是有条件、可预期的,而非默认路径。
- [discrepancy] Step 2 引用的 resolve.mjs 是否随包分发 — SKILL.md Step 2 给出 `(cd "$PROJECT_DIR" && node <SKILL_DIR>/phases/source/resolve.mjs --plan ./shot-plan.json --out ./assets)`,但 **phases/source/ 下只有 guide.md,没有 resolve.mjs**(全量文件清单已确认)。guide.md 末尾也标了 '> Illustrative: … — or drive media-use's `resolve` procedure directly.'。结论:该命令是示意而非可执行入口,实际取材须由 /media-use 的 resolve 流程驱动;SKILL.md 自身有 'illustrative' 标注,故不算虚假声明,但读者若照抄命令会直接失败——这是对 pin commit 有效的真实出入。
- [ok] 底图烘焙是否真是本地行为而非渲染期联网 — bake-basemap.mjs 头注释与实现一致:在无头 Chrome 内加载 MapLibre + 瓦片,录帧到 frames-<NAME>/,导出 coords.json;SKILL.md 只在该分类下引用它。渲染期(hyperframes render)不触发任何取瓦片行为,符合 HF 的『渲染期禁网』契约——这也是文档给出的烘焙理由,自洽。
- [ok] 『外部资源』逐条回查调用点 — hyperframes init/doctor/add/lint/check/snapshot/preview/render 均在 SKILL.md 出现;ffmpeg/ffprobe 在 locate.mjs 与 bake-basemap.mjs 的 execFileSync/spawnSync 可验;瓦片 URL 与 CDN 在 bake-basemap.mjs:106-119 与 :153 原文;gsap CDN 在 samples HTML 原文;media-use resolve 在 guide.md 原文。
- [unlocatable] 验证:视觉定位协议的准确率声明是否可在源码内定位 — PROTOCOL.md 给出的误差数字(弱模型 16–24%、网格循环 3–4%、'eyeballing 6.5% → this protocol 2.3%')引用的是一项测量结论,源码内无复现脚本或数据文件;本次为只读侦查且不得运行构建/渲染,故不验证这些数值,仅作为『文档声明』记录,不在结论中当作已核事实使用。
6結論
7966ceeccd29cbdd…