1仕組みと動作原理
「ポートフォリオ級のショーリール」を再現可能な構造に分解:カットごとにバラバラなエフェクトを盛るのではなく、HUDで命名された6〜7の制作工種チャプターを1つのモチーフが一貫して変化し、最後にモチーフへと回帰する構成をとる。
A showreel promises that every frame was a decision. … Hard cuts are reserved for the flurry.
HUDは常駐レイヤー:トリムマーク、タイトル行、スペック行(解像度/フレームレート/実測BPM)、タイムコード、チャプタールーラー、チャプター名を表示し、背景の明暗に応じて墨/紙の反転を行う。
**Persistent HUD.** Corner crop marks … It flips ink/paper with the background.
編集を120〜130 BPMグリッドに完全同期:ハードカット、白フラッシュ、階調反転はグリッド線の±2フレーム以内に収め、中間点直前に「ドロップ前のタメ(無音・休止)」を設ける。
**Cut on the beat, animate on the off-beats.** … comes before the midpoint hit.
拍数に基づく構成配分:展開約75% / flurry 13% / 結び12%の比率とし、加速させたのち維持する。密度にも呼吸(緩急)を持たせる(単一オブジェクト → タイポグラフィの壁 → 100分割グリッド → 数千のパーティクル → flurry → 単一の単語)。
**Accelerate, then hold.** … and 12% resolve.
スタイルは形容詞ではなく秒単位の定量的分解から導出:BPM、ビートアンカー、各ハードカットのタイミング、輝度リズム、オーディオレベル。
- **Tempo:** 128 BPM … Grid anchor about 0.51s. … - **Hard cuts land on beats:** 1.77 (flash) … within 2 frames of a grid line.
音楽はカット前に位相を測定:全帯域の位相ではなくKick帯域(120Hzローパス)の位相でアライメントを行い、スプライスごとの半拍のズレを防止する。
`music-grid` prints the period, the **kick-band phase** (use it) … the script warns when the two disagree.
アニメーションはフレームごとの純粋関数(時間 → 全状態)で駆動し、Canvasエフェクトはシード値から描画することでシークの決定論的再現性を担保。
Put a **per-frame driver** on the timeline … never from `Math.random()` at draw time.
検証は同一の物差しで行う:カットポイントの拍からのズレ≤35ms、チャプターごとの輝度交代、ドロップ前休止の有無、トランジションごとの10フレーム連続ストリップ抽出。HUDを隠してもブランドを認識できるかをブランドテスト基準とする。
- Run `analyze-reference.mjs` on your own render with `--bpm` and `--phase`: cut … luminance must alternate by chapter … Brand test: pick 6 random frames. … read as the brand with the HUD covered.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | FFmpeg / ffprobe(接触表、亮度/RMS 分析、音乐拼接、premix) |
| api | Kie.ai 任务 API(Suno 音乐 / Seedream 图 / Kling 视频;付费、消耗本人额度) |
| api | Kie.ai 文件上传(把本地参考图以 base64 上传换 downloadUrl) |
| api | ElevenLabs 音效生成(付费) |
| cli | HyperFrames CLI(lint / Studio 预览 / draft render / 最终 render) |
| package | 兄弟 skill 依赖:hyperframes、gsap,与仓库根 MOTION_PHILOSOPHY.md / video-storytelling |
| network | 字体:要求下载到项目 assets/fonts/ 用 @font-face(远端拉取发生在取材期,不在渲染期) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプト・コマンドの実行: node scripts/analyze-reference.mjs <video> <out>(ffmpeg/ffprobeのspawnSync呼び出し)
- 网络端点: 外部ネットワークアクセスの宣言: https://api.kie.ai/api/v1/jobs/createTask(生成タスクの作成)
- 本地工作目录: ファイル読み書きおよび成果物の出力: video-projects/<slug>/:BRAND.md、STORYBOARD.md、assets/{audio,img,video,fonts}
5二重目の独立検証
- [ok] KIE_API_KEY 是否真的被读取并外发(橙档关键证据) — kie.mjs:19 `if (process.env.KIE_API_KEY) return process.env.KIE_API_KEY;`,随即 loadKey() 向上 8 层找 .env 并抓 KIE_API_KEY,无 key 抛 'KIE_API_KEY is not set. Add it to .env (see docs/TOOLS-AND-API-KEYS.md).';带 Authorization: Bearer 调 createTask/recordInfo/credit。调用点真实存在。
- [ok] ELEVENLABS_API_KEY 读取与外发是否属实 — sfx.mjs:15 `if (process.env.ELEVENLABS_API_KEY) return process.env.ELEVENLABS_API_KEY;`(无 key 抛错);文件头注释声明 PAID 并要求先确认。
- [ok] 是否存在文档未提及的隐藏网络调用或脚本 — 全目录 URL/网络 token 扫描只命中上述网络点与 docs.kie.ai 文档链接;beatgrid.mjs 纯计算,其余 mjs 仅 ffmpeg 子进程。未发现混淆代码、动态 eval 或静默外发。
- [unlocatable] 参考片量化数字能否在源码内复现 — references/reference-breakdown.md 的 128 BPM、各切点时间、亮度序列与 RMS 值,是作者对一条私有样片(Opus 5.5 的 CLAUDE / MOTION REEL)跑 analyze-reference.mjs 的结果;pin 仓库内既无该样片也无原始报告输出,本次只读侦查不运行分析,故这些数值仅作「文档声明」记录,不当已核事实使用(分析器能力本身已可读验证)。
- [discrepancy] 「付费调用先确认」是技术门禁还是提示层约束 — [判定:提示层,非技术强制]脚本头注释显式声明 PAID,SKILL.md 在音乐与 SFX 两处也写 paid call / confirm before running;但脚本没有任何交互式确认开关或 --dry-run,门禁靠 agent 遵守。已在 risks 中如实标注。
- [ok] HUD 模板与 SKILL.md 的 HUD 规格是否一致(文档/资产是否脱节) — templates/hud.html 头注释要求把 <style> 粘进合成、#hud 作为 #root 最后子节点、由 hudFrame(t)(t 的纯函数)驱动,并提供 --hud-acc / .hud-tl / .hud-tr / #ptime / CH / SEGB / paperRanges 的品牌替换清单,与 SKILL.md 第 4 条规格一一对应。
6結論
cc870e83245405bd…