1仕組みと動作原理
「キャプチャすべき素材が存在しない」ことを前提とし、意図的にキャプチャを行わず、asset-descriptions.md を作成せず、capture/assets/ も配置しません。画面ビジュアルはすべて下流工程で新規作成されます(タイポグラフィ/抽象グラフィック/ダイアグラム/データ可視化)。
Do **not** run `npx hyperframes capture` (there is no URL). Do not create `asset-descriptions.md` or populate `capture/assets/` — faceless visuals are invented in Steps 4-5, not captured.
デザインシステムは手動での配色調整に依存しません。同梱のフレームプリセットを選択後、build-frame.mjs がプリセットの FRAME.md をプロジェクトの frame.md に再マッピングし、caption skin を生成します。ブランドカラーが未指定の場合はプリセット自体の配色を完全に維持します。
A faceless explainer usually has **no brand colors/fonts** (`tokens.json` colors/fonts empty) → the script keeps the preset's own palette, a complete shippable design.
ストーリー構成は入力テキストの段落順ではなくナラティブ設計に基づいて決定されます。明示的な並び替え/統合/省略/圧縮が求められ、「役割→ブループリント」メニューに従って各ビートの候補ショット形状を選択しますが、形状に合わせるためだけにビートを捏造することは禁止されています。
The video's sequence comes from **narrative design, not the input text's paragraph order** — reorder, merge, omit, compress.
ナレーションと音楽はメディア側スクリプトで処理されます。voice/provider の指定が可能で、デフォルト音声はワークフロー内に固定定義されており(HeyGen Marcia / Kokoro am_michael)、「完全ミュート」を表す正規のフラグ組み合わせも定義されています。
The pipeline default is otherwise **Marcia (female)** on HeyGen / `am_michael` on Kokoro — so a request like "a male voice" is silently ignored unless you pass the flag.
構築フェーズでは1フレームにつき1つのサブエージェントを割り当てます。packet ビルダーが「該当フレームの storyboard ブロック + blueprint 本文 + 参照ルール一式」をインライン化して境界付き packet を構築し、完全なワーカーロール定義 _role.md を生成します。ワーカーはこの2つのドキュメントのみを読み込みます。
Workers read only their packet and `frame.md`; they never open `STORYBOARD.md` or the skill documents (the packet inlines what was selected upstream). Each worker writes only `compositions/frames/NN-*.html`. Workers must never edit `STORYBOARD.md`.
完了ゲートと明示的に登録された既知の偽陽性:check コマンドがキャプション単語に対して 1〜4px の text_box_overflow を報告する場合がありますが、スキルはこれを深追いせず、line-height の拡大などの不適切な対症療法で覆い隠さないよう規定しています。
**Known false-positive — do not chase it.** `check` may report a handful of `text_box_overflow` findings of ~1–4px on the **caption** highlight words (selector `#caption-word-*` / `.caption-line`).
レビューおよびレンダリングゲート:トランジションの挿入/検証、lint、check、スナップショットコンタクトシートの作成を先に行い、Studio プレビューでユーザー確認のために一時停止してから、最後に MP4 レンダリングを実行します。レンダリング後は lint/check/snapshot を再実行しません。
**Gate:** `lint` and `check` passed and the snapshots were inspected before render; user approved at the review pause (autonomous: checks passed and the delivery includes the contact sheet); `renders/video.mp4` exists. Final reply states MP4 path and final duration.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | hyperframes CLI(init / lint / check / snapshot / preview / render / skills update;注意本 skill 不调用 capture) |
| api | HeyGen(TTS 与音乐库检索;凭证 ~/.heygen,由媒体侧脚本使用) |
| api | 本地离线 TTS(Kokoro)作为无登录态降级路径 |
| cli | ffprobe / ffmpeg(装配期音频探测与补齐,由 assemble-index.mjs 调用) |
| network | GSAP CDN(写进装配产物 HTML,带 SRI 完整性校验) |
| cli | media-use 侧脚本(prefs.mjs 记偏好、recipe.mjs 应用配方、heygen-tts.mjs 列语音) |
| package | 兄弟 skill 依赖(/hyperframes 路由、/hyperframes-core、/hyperframes-creative 的 frame-presets、/hyperframes-animation 的 blueprints+rules、/media-use) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: node scripts/build-frame.mjs --preset <name> --hyperframes .(step 2 デザインシステム、frame.md を出力)
- 网络端点: 外部ネットワークアクセスの宣言: HeyGen Audio API(media-side スクリプト/CLI経由でのTTS音声合成および音楽ライブラリ検索、認証情報は ~/.heygen)
- 本地工作目录: ファイル読み書きおよび成果物出力: videos/<project>/hyperframes.json、BRIEF.md、capture/extracted/visible-text.txt
5二重目の独立検証
- [ok] 『无抓取、无视觉 key』这一关键差异是否属实 — 整目录 grep GEMINI/GOOGLE_API_KEY/OpenRouter → 0 命中;SKILL.md 明确 'Do **not** run `npx hyperframes capture` (there is no URL).';URL 扫描仅 2 处(同一 gsap CDN 字符串出现在 assemble-index.mjs 与 captions.mjs)。差异成立。
- [discrepancy] 是否与 product-launch-video 真正共享脚本(第一遍的资产描述是否正确) — 第一遍初稿把本 skill 写成『无 build-frame』——复核发现**错误**:Step 2 原文就是 `node <SKILL_DIR>/scripts/build-frame.mjs --preset <name> --hyperframes .`,scripts/ 下确有 build-frame.mjs。真实差异是:本 skill 无 capture(Step 1 改为手造输入包)、无 stage-assets(SKILL.md 写明 'There is **no asset-staging step**'),而 build-frame / audio / captions / transitions / frame-packets / assemble-index 六个脚本两家都有。已按源码更正 analysis 与 internal_assets 的表述。
- [ok] 『外部资源』逐条回查调用点 — hyperframes init/lint/check/snapshot/preview/render 均在 SKILL.md 出现;HeyGen 与 ~/.heygen 在 Step 3.1 原文;Kokoro 离线降级与 am_/bm_ 前缀在 Step 3.1 原文;prefs.mjs/recipe.mjs 在 Step 0 原文并定义了 <MEDIA_DIR>;ffprobe/ffmpeg 在 assemble-index.mjs 的 spawnSync 可验。
- [ok] 静音标记的实现语义是否与文档一致 — SKILL.md 规定 `music: none` + 无 SCRIPT.md = 全静音,且『audio.mjs recognizes it and generates nothing (it removes any stale audio_meta.json; an absent audio_meta.json is what assemble treats as silent)』;Step 5 的 sync-durations / fetch-sfx 在静音时跳过。语义自洽(以「文件不存在」作为静音的真值载体)。
- [unlocatable] 正文自述的已知假阳性是否真实存在于工具链 — SKILL.md 声称 `check` 会在 caption 高亮词上报 1–4px 的 text_box_overflow(选择器 `#caption-word-*` / `.caption-line`),且该 pill 的 snug line-height 由 scripts/captions.mjs 设定。caption pill 的 line-height 设定可在本 skill 的 captions.mjs 中定位,但『该假阳性确实会出现』这一行为需要实际跑 `npx hyperframes check` 才能证实——本任务为只读侦查,未执行构建/渲染(亦被任务书禁止)。故记为无法在源码内定位,不做进一步断言。
6結論
2b565aaa0ac76062…