コンテンツ制作 · heygen-com/hyperframes

changelog-video

週次の更新履歴 .md を、ブランド統一された完成版のチェンジログ動画(正方形 1080、約 45〜60 秒、Annie の VO、ブランド仕様のアニメーション背景、モック UI による視覚化、控えめなキャプション)に変換します。ユーザーがチェンジログやダイジェストのマークダウンを提供して週次動画を求めている場合、または「changelog video」と指示した場合に使用します。フォント、背景、発音辞書、スクリプトが本スキルに同梱された自己完結型(Self-contained)です。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author heygen-comGitHub heygen-com/hyperframes ↗Stars 44283License Apache-2.0(仓库根 LICENSE 为 Apache License Version 2.0)Commit d2f0bc7f34
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

入力はチェンジログのマークダウン(週次 HyperFrames ダイジェスト形式のトピックと項目)であり、出力は `projects/active/weekly-changelog-<range>/` 配下の lint クリーンかつ seam-gate がグリーンの HyperFrames プロジェクトです。レンダリングは明示的に要求された場合のみ実行されます。

.claude/skills/changelog-video/SKILL.md
Input: a changelog .md (themes + items, like the weekly HyperFrames digest). Output: a lint-clean, seam-gate-green HyperFrames project in `projects/active/weekly-changelog-<range>/`. Render only when asked.
ここでの目的:成果物を明確に定義し(プロジェクト ≠ 動画、レンダリングは後続処理)、検収基準を明示します(2 つのゲートがグリーンであること)。

ロード順序は交渉不可の厳格な要件です。本スキルを実行する前に、必ず `motion-doctrine`(カーソルが存在する場合は `cut-the-curve` / `oversized-cursor` / `seam-craft` を追加)および `captions-overlay` を読み込む必要があります。本スキルはチェンジログ専用のパイプラインのみを提供し、モーションの規約は Doctrine 側が担います。

.claude/skills/changelog-video/SKILL.md
**Load first, non-negotiable:** `motion-doctrine` (+ `cut-the-curve`, `oversized-cursor` if a cursor appears, `seam-craft`) and `captions-overlay`. This skill supplies the changelog-specific pipeline; the doctrine supplies the motion law.
ここでの目的:ドキュメントレベルで依存関係のロード順序を固定化します。changelog-video はパイプラインであり、モーションの規則はここで重複定義しません。

最重要原則は「箇条書きではなく視覚化」です。各トピックは実際の UI のアニメーションモック、または忠実なアナロジーを用いて変更の体験を演出する必要があり、テキストの箇条書きは禁止されています。また、原稿作成前に必ず `references/visualization-registry.md` のルーティングを通します(`ui-recreate` / `ui-analog` / `terminal` / `checklist` を決定)。テキストのチェックリストは最後の手段であり、真に視覚化が不可能な項目にのみ適用されます。

.claude/skills/changelog-video/SKILL.md
Every theme is illustrated by an **animated mock of the actual UI or a faithful analog** acting out the change in experience — never text bullets. Route every theme/item through `references/visualization-registry.md` BEFORE writing the script; the registry decides ui-recreate / ui-analog / terminal / checklist. Text checklist is the LAST resort, reserved for genuinely non-visual items (reliability fix lists).
ここでの目的:「チェンジログをいかに画面化するか」を優先順位表(`ui-recreate` > `ui-analog` > `terminal` > `checklist`)に委ね、スクリプト作成前のルーティングを義務付けます。モデルが先にナレーションを書いて後から画面を無理やり合わせるのを防ぐため、順序を固定しています。

ステップ 0 はブランドのブートストラップであり、必須工程です。本スキルに同梱されているフォント、BGM、スケルトンを最初にコピーし、付属の `bg-pattern.mp4` を `ffmpeg` で動画の正確な尺に合わせてループエンコードおよび減光処理し、`build-spec.md` の全文を読んでから制作に着手します。過去動画の `index.html` をコピーしたり、自前で `@font-face` を記述したり、WebGL 背景を設計しようとした場合は、直ちに中止(STOP)して現在の `index.html` を削除し、スケルトンからやり直す自己チェックルールが定められています。

.claude/skills/changelog-video/SKILL.md
**Do this before writing any composition HTML. Skipping it always produces a video that looks like a similar project you built before, NOT this skill's brand — that's the single most common way this skill goes off-brand.**
ここでの目的:本スキルの「ブランド」はプロンプト内ではなくアセット(5 種類の WOFF2 フォント + `bg-pattern.mp4` + `bgm.mp3` + `master-skeleton.html`)に存在するため、アセット複製を第 1 ステップとして設計しています。これが自己完結型(Self-contained)と標榜する根拠です。

再生時間と項目数のバジェットは厳格な数値目標です。全体で 45〜60 秒、オープニング ≤2 秒、エンディング ≤3.5 秒、4 つのトピックはそれぞれ約 9〜12 秒とします。各トピックで保持できる主役の視覚化は 1 つ、ナレーション項目は最大 3 つまでとし、残りはエンディングの「完全版ダイジェスト」への誘導に回します。30 項目のチェンジログであってもナレーションのビートは ≤14 に絞り込み、トピックはストーリー順(注目の新機能 → プロダクト面 → パフォーマンス → 信頼性)に配置します。

.claude/skills/changelog-video/SKILL.md
- **Budget: 45-60s total.** Title ≤2s, outro ≤3.5s, 4 themes ≈ 9-12s each. - Per theme keep ONE hero visualization + at most 3 spoken items. Everything else exists only as the outro's "full digest" pointer.
ここでの目的:「編集・取捨選択こそが業務の本質(Cutting is the job)」であることを明確にし、直接確認できるバジェット表を提供して再生時間の超過を防ぎます。

原稿は 2 層の契約(トークン行)で管理されます。ナレーションは `spoken` レイヤーを読み上げ、字幕は `display` レイヤーを描画します。すべての技術用語には `spoken` の読み方(`references/lexicon.json` 由来)を付与する必要があり、辞書に存在しない単語は推測せず、作業を止めてユーザーに発音を確認し、辞書に追加しなければなりません。

.claude/skills/changelog-video/SKILL.md
conversational register, every technical term carrying a `spoken` phonetic form from `references/lexicon.json` while `display` keeps standard spelling. Captions show `display`; the VO reads `spoken`. Any term not in the lexicon: STOP and ask the user how it's pronounced, then add it to the lexicon.
ここでの目的:「display / spoken の 2 系統 + 辞書」によって、TTS の読み間違い(JSON → 「juh-son」)と字幕の誤表記(「jay-sawn」)の両方の不具合を防止します。`lexicon.json` には現在 60 以上の登録(CLI → C L I、JSON → jay-sawn、GSAP → jee-sap、ffmpeg → ff-mpeg など)があり、トークン行のフォーマットは `{lines:[{id,tokens:["…"|{display,spoken}]}]}` です。

音声は Annie のボイス ID(`330290724a1b470fb63153f34d4c0183`、変更不可「do not substitute」と明記)に固定され、HeyGen CLI(0.3.0 以上、OAuth ログイン)経由で TTS を呼び出し、必ず `vo-words.json`(spoken テキストの単語レベルのタイムスタンプ)を出力する必要があります。その後、`align-captions.mjs` を使用して spoken のタイムスタンプを display トークンにマッピングし、`captions.json`(caption-rail への入力:display の表記 + spoken のタイミング)を生成します。

.claude/skills/changelog-video/SKILL.md
node skills/hyperframes-media/scripts/heygen-tts.mjs ./vo-spoken.txt \ -o voiceover.mp3 --words vo-words.json \ --voice 330290724a1b470fb63153f34d4c0183 # Annie — lifelike (do not substitute)
ここでの目的:「音声合成 + 字幕アライメント」の一連の処理フローを固定化します(固定ボイス + 固定アライナー)。1 つの display トークンが複数の spoken 単語に対応する場合(例:「C L I」は 3 単語)、アライナーは最初の spoken 単語の開始時刻を採用するように設計されています。

単語レベルのタイムスタンプは厳格なゲートです。ステップ 5 に進む前に、`vo-words.json` が空でなく、各単語に `start`/`end` を持つ `words[]` 配列が含まれていることを確認する必要があります。空または配列が欠落している場合(TTS が音声のみを返しタイムスタンプを返さない既知のエラーパターン)、タイムスタンプなしで続行することは禁止されています。フォールバックとして、ローカルの Whisper(`uvx --from openai-whisper`)で生成済み音声の強制アライメントを行い、その結果を `align-captions.mjs` に渡します。

.claude/skills/changelog-video/SKILL.md
**Word-timings are a hard gate.** Before moving on to step 5, verify `vo-words.json` is non-empty and has a `words: [...]` array with `start`/`end` per word. If it's empty (0 bytes) or missing the array — a known failure mode when the TTS provider returns audio but no timestamp payload — DO NOT proceed without them.
ここでの目的:既知のサイレント障害(音声はあるがタイムスタンプがない状態)をゲートとして識別し、唯一のフォールバック手段を提示します。また、Whisper は TTS の当て字表記を誤認識する可能性があるため(「gee-sap」→「gsap」)、字幕には必ず display 表記を用い、Whisper はタイムスタンプの取得にのみ利用するよう注意を促しています。

字幕は必須要件です。スケルトンには `LINES` 配列を読み込む字幕レール IIFE が組み込まれており、配列を空のままにする行為はスタイルの選択ではなく「未解決のバグの納品」とみなされます。ステップ 4 で `captions.json` を生成し、ステップ 5 でそれを IIFE に貼り付け、ステップ 6 の第 5 ゲートでレンダリングされたフレームに実際に文字が存在することを確認しなければなりません。

.claude/skills/changelog-video/SKILL.md
**Captions are non-optional.** The master-skeleton ships a caption-rail IIFE that reads a `LINES` array — leaving that array empty is a shipped bug, not a style choice.
ここでの目的:過去の実際のインシデント(Jul 13-20 v4 ビルドで字幕なしバージョンをリリースした事故)を教訓化し、3 段階の連動検証(生成 → 埋め込み → フレーム検査)を設けています。

ステップ 6 のゲートは必須です。① リポジトリ内の CLI(`npx hyperframes@latest` は禁止。リポジトリ内の CLI がコンポジション契約の信頼できる唯一の情報源であるため)で `caption-zone` を指定して 26 箇所のタイムスタンプをサンプリングし、エラー 0 件で `check` を通過させること。② `seam-gate verify` が失敗 0 件であること。③ プレビューサーバーを再起動(バンドルをキャッシュするため)した上で、`__player.seek` で 3〜4 つのビートを抜き取り確認すること。④ 明示的に要求されない限りレンダリングは行わない。レンダリングした場合はフレームを抜き出して検証すること(字幕が存在すること、背景動画が黒画面でないこと、フリーズや極小フレームがないこと)。⑤ 字幕存在のハードゲート:ナレーション区間全体から 3〜4 フレームをサンプリングし、1 フレームでも字幕が欠けていればレッドとみなし、ステップ 5 の `LINES` への流し込みに立ち戻って調査すること。

.claude/skills/changelog-video/SKILL.md
5. **Caption presence gate — hard fail.** Sample 3-4 frames spread across the VO's spoken window (e.g. `t=3`, `t=15`, `t=30`, `t=42` for a 48s VO) and confirm the caption rail at `top: 990` renders visible text on each.
ここでの目的:「字幕が存在するかどうか」を主観的な確認からフレーム単位のアサーションへと厳密化し、過去の失敗ビルドを明指して再発を防ぎます。`check` の `caption-zone` パラメータ自体がコントラストおよび遮蔽判定ゲートとして機能します(`x0=0;y0=.90;x1=1;y1=1;severity=error`、26 のシークポイント)。

プロジェクト構成とトランジション(Seam)の実装手法は厳格に固定されています(`build-spec.md` が正式な設計仕様書となります)。単一ドキュメント `index.html`(シーンはスライド形式、シームはスタンプ済み)+ `ledger.json` + `script-tokens.json` + `vo-spoken.txt`/`voiceover.mp3`/`vo-words.json`/`captions.json` + `bgm.mp3` + `assets/fonts` および `assets/bg-pattern-<dur>s.mp4`。通常のシームは例外なく `cut-the-curve LEFT` を使用し、退場・入場のセレクターは `#s-*` の clip 要素ではなく内側の `.swrap`(`#w-*`)を指定する必要があります(clip 要素のアニメーションはエラーレベルの lint 違反となります)。内部のビートは `vo-words.json` の単語タイムスタンプと一致させなければなりません。

.claude/skills/changelog-video/references/build-spec.md
- `ledger.json`: every ordinary seam `cut-the-curve LEFT` (x, dir −1), exit and entry selectors = the inner `.swrap` wrappers (`#w-*`), NEVER the `#s-*` clip element — `gsap_animates_clip_element` is an error-severity lint rule and every stamped seam writes `autoAlpha`.
ここでの目的:`SKILL.md` はルーティングに特化し、実際のブランドトークン(インク色 `#f5f6f4`、緑 `#5ef17c` は各シーン 1 回、背景色 `#0a0c0b`、グラスモーフィズムカード、セーフマージン `x/y ∈ [76,1004]`、シーン構造、背景エンコード、lint の落とし穴)はすべて `build-spec.md` に記載されています。仕様書には直感に反する注意点も記載されており、オープニングの入場には `immediateRender:false` が必須です。これを怠ると、スタンプされたデュレーション 0 の `tl.set` がビルド時に開始地点を 0 としてキャプチャし、`exit-vector` は PASS なのに `exit-visible op 0.00` となる不具合が発生します。

字幕レールの実装パラメータは `script-voice.md` と `build-spec.md` の双方で定義されています。1080 正方形画面において、`top:990` / `height:52` / TT Norms Pro 500 32px / ink .94 / 柔らかい暗色の `text-shadow`。単語は個々のタイムスタンプに基づき 0.12 秒でフェードインし、フレーズ単位で画面が切り替わります。重要な小さめの文字は、下部約 100px の中央エリア(`captions-overlay` のソフト回避帯)を避けて配置する必要があります。

.claude/skills/changelog-video/references/build-spec.md
Caption rail per `script-voice.md` (top: 990, font-size: 32px, height: 52). Mandatory — populate the master-skeleton's `LINES` array from `captions.json` before render; see SKILL.md step 5.
ここでの目的:字幕レールはオーバーレイ(専用の余白帯ではない)でありながら、固定のピクセル位置を持ちます。スケルトン HTML 内の CSS(`#cap-line` の `top:990`、`z-index:7`、`text-shadow`、`.cap-w` の単語単位 span)は本仕様と完全に一致しています。

視覚化ルーティングテーブルの判定基準:4 つのカテゴリを優先度順に配置(`ui-recreate` が最上位、次いで `ui-analog`、`terminal`、最後が `checklist`)し、「既知の画面(Known surfaces)」テーブル(Studio エディタ / タイムライン、Inspector、Canvas + 要素、バリアントレンダリング、Storyboard、ターミナル、レンダリングパネル)および「実績のある演出(proven choreography)」を提供します。アナロジーは存在しない製品画面を捏造するのではなく、振る舞い(速度、バッチ処理、キャッシュなど)を演出しなければなりません。エンディングのチェックリストに関しては、新しいテーブルを初回モック作成時に 1 行追加し、次回以降再利用できるようにします。

.claude/skills/changelog-video/references/visualization-registry.md
The routing table for "show, don't tell". Classes, strongest first: 1. **ui-recreate** — the change lives in a surface we can faithfully mock.
ここでの目的:「視覚化」を自由な発想の問題からテーブル参照の問題へと落とし込み、4 分類 + 既知の画面 + 実績ある演出の 3 要素によって、同じ変更に対して常に統一された演出がなされることを保証します。

リリース後の作業:S3 への配置後、指定された CloudFront ディストリビューションに対して必ず無効化(invalidation)を実行しなければなりません。これを怠ると CDN が古いファイルをキャッシュし続けます(この項目はアンチパターン表の「Don't」列に記載されており、無効化を行わないデリバリーはアンチパターンと定義されています)。

.claude/skills/changelog-video/SKILL.md
Run `aws cloudfront create-invalidation` on distribution `E2BSLVSZ7FG3U0` for the exact path after any S3 replace — CDN caches the old file otherwise
ここでの目的:成果物の受け渡しフローを CDN のキャッシュクリアまで拡張します。また、このコマンドがユーザー環境の AWS 認証情報を利用することが、セキュリティ判定で Amber となる根拠の 1 つです。

5 つのゲートの定義と実行順序は固定されています:`check`(エラー 0 件)→ `seam-gate`(失敗 0 件)→ プレビューのスポット確認 →(任意)レンダリング後のフレーム抜き取り確認 → 字幕存在のハードゲート。また、バンドルがキャッシュされるのを防ぎ、古いビルドで検証してしまう事態を避けるため、「プレビューサーバーの再起動」が明示的に義務付けられています。

.claude/skills/changelog-video/SKILL.md
3. Restart the preview server (it caches the bundle), spot-check 3-4 beats via `__player.seek` on the raw comp page.
ここでの目的:ドキュメント主体のワークフローでは見落とされがちな「どのビルドを検証しているのか」というランタイムのキャッシュ問題を手順として組み込んでいます。

2コア機能

01チェンジログマークダウンからブランド仕様の正方形(1080×1080)週次動画を生成する完全なパイプライン(解析 → ルーティング → 脚本 → 音声合成 → ビルド → ゲート検証)
02視覚化ルーティング(4 段階のレジストリ + 既知の画面と実績ある演出テーブル + 8 種類の UI アナロジー)
032 層スクリプト(display / spoken)+ 60 語以上の発音辞書 + 未知語に対するユーザー確認の必須化
04Annie 固定ボイスによる TTS + 単語レベルのタイムスタンプ検証ゲート + `align-captions.mjs` によるアライメント(MISMATCH 許容ゼロ)
05ブランドスケルトンおよびアセットのブートストラップ(フォント / BGM / `bg-pattern` のエンコード + `master-skeleton.html` のプレースホルダー流し込み)
06字幕レールの実装(オーバーレイ配置:`top:990` / 32px / 高さ 52px、単語単位の 0.12 秒フェードイン、フレーズ単位の切り替え)
075 段階のリリースゲート(`caption-zone check` エラー 0 件 / `seam-gate` 失敗 0 件 / プレビュー確認 / レンダリングフレーム検査 / 字幕存在のハードゲート)
08リリース後の処理:S3 更新後、固定の CloudFront ディストリビューションに対するキャッシュ無効化(invalidation)の実行

3外部依存関係

KindDependency / Endpoint
cliheygen CLI ≥0.3.0(OAuth 登录,用于 TTS;SKILL.md 以仓库内 heygen-tts.mjs 为调用封装)
cliffmpeg(背景 pattern 循环编码 + 时长压暗;渲染后抽帧核验)
cli仓库内 hyperframes CLI(check --caption-zone 与 preview;SKILL.md 明确禁止用 npx hyperframes@latest 代替)
cliseam-stamp.mjs / seam-gate.mjs(来自 motion-doctrine,作为构建与验证闸门)
cliaws CLI(交付后对固定 CloudFront distribution 做 invalidation)
packageuvx / openai-whisper(备用强制对齐:下载包与模型,仅当 TTS 未返回词级时间戳时)
network产物期 CDN 引用:骨架 HTML 引 jsdelivr 的 GSAP(浏览器端拉取,执行期不外发)
package上游/兄弟 skill 依赖(被指名加载):motion-doctrine / cut-the-curve / oversized-cursor / seam-craft / captions-overlay

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: `node <SKILL_DIR>/scripts/align-captions.mjs --tokens script-tokens.json --w`
  • 网络端点: 外部ネットワークへのアクセス宣言: HeyGen TTS サービス(`heygen` CLI 経由、OAuth 認証。`vo-spoken.txt` のテキストを送信して音声および単語レベルのタイムスタンプを取得し、クレジットを消費)
  • 本地工作目录: ファイルの読み書きと成果物出力: プロジェクトディレクトリ `projects/active/weekly-changelog-<range>/`: `index.html`、`ledger.json`、`scrip`
監査ノート: Amber 判定に該当する 2 つの条件を満たしています。① スキルが宣言した目的のために外部の生成バックエンドを呼び出し、アカウントクレジットを消費します。ナレーション生成には必ず `heygen` CLI(OAuth 認証、Annie 固定ボイス ID)を用いてテキストを HeyGen サービスに送信し、音声とタイムスタンプを取得する必要があり、これは本パイプラインで省略不可のステップです(特定の生成バックエンドを指定している場合は Amber とする判定基準に合致)。② デリバリー時にユーザーのクラウドアカウント認証情報にアクセスします。アンチパターン規定により、S3 への配置後に `aws cloudfront create-invalidation`(固定ディストリビューション `E2BSLVSZ7FG3U0`)を実行することが求められており、このコマンドはユーザー環境の AWS 認証情報を利用します(認証情報は `aws` CLI が読み込み、スキル自体のスクリプトは読み込みません)。また、PyPI から `uvx` 経由で `openai-whisper` とモデル(外部サードパーティ製パッケージ)を取得するフォールバックパスも存在します。Red には該当しません。サンドボックスの無効化、TLS のダウングレード、スクレイピング制限や自動化検知の回避処理、任意コード実行の余地はいずれも存在しません。スキルの付属スクリプト(`align-captions.mjs`)は純粋なローカル I/O であり、`ffmpeg` や CLI のサブプロセス引数も固定テンプレートと数値のみで構成されています。成果物における `cdn.jsdelivr.net` からの GSAP 読み込みはポリシー上判定対象外とし、参考情報として本理由欄に記載します。

5二重目の独立検証

  • [discrepancy] SKILL.md Step 4 点名的仓库内 TTS 封装路径在 pin 上是否存在(照抄会不会立刻失败) — 不存在。SKILL.md 写 `node skills/hyperframes-media/scripts/heygen-tts.mjs`,并在注释里说明「the changelog-video skill runs from the hyperframes repo root, so it uses the tracked hyperframes-media TTS helper directly」;但 pin 内 skills/ 下没有 hyperframes-media 目录,全仓 heygen-tts* 唯一命中是 `skills/media-use/audio/scripts/heygen-tts.mjs`。同一过期路径还出现在 `.claude/skills/README.md`(TTS uses the tracked …)。结论:Step 4 命令按字面执行会 ENOENT,需改用 media-use 侧脚本(SKILL.md 自己留了 swap in your own path 的余地,故不算虚假声明)。
  • [discrepancy] 自带 bg-pattern.mp4 / bgm.mp3 是否真的可用(Step 0 的 cp 与 ffmpeg 是否拿到媒体) — 在未拉 LFS 的检出里是 LFS 指针,不是媒体。实检:assets/bg-pattern.mp4 = 133 字节、assets/bgm.mp3 = 132 字节,内容为 `version https://git-lfs.github.com/spec/v1 / oid sha256:… / size 12817182`(mp4)与 `size 5318438`(mp3);仓库 .gitattributes 明写 `.claude/skills/**/*.mp4|*.mp3 filter=lfs`;`git cat-file -s HEAD:<path>` 亦返回 133(blob 即指针)。因此 Step 0 的 cp 与 `ffmpeg -i <SKILL_DIR>/assets/bg-pattern.mp4` 在未 git lfs pull / 未装 git-lfs 的环境会失败或产出坏文件(本工作副本的 git 甚至没有 lfs 子命令)。这是 pin 检出相关的真实差异,不是文档错误——但照本文档流程跑的人必须先确保 LFS 已拉取。
  • [ok] 「字幕非可选」是否真有连锁校验(是否只是口号) — 三处闭环可查:① 骨架 HTML 里确有读 LINES 的字幕 IIFE(`const LINES = /* paste captions.json lines … */ [];` 与 #cap-line 容器、tl.set/tl.to 逐词淡入);② SKILL.md Step 5 给出把 captions.json 贴进 IIFE 的具体写法;③ Step 6 第 5 道闸要求跨旁白采样 3-4 帧确认字幕可见,并点名 Jul 13-20 v4 的失败。口号有实现支撑。
  • [ok] align-captions.mjs 的行为是否与 script-voice.md 的描述一致 — 脚本注释与实现一致:tokens {lines:[{id,tokens:[str|{display,spoken}]}]} + words [{text,start,end}] → captions.json {lines:[{id,end,w:[[display,start],…]}]};贪婪 consume 支持「一个 display token 覆盖多个 spoken 词」;用 norm(去非字母数字)+ Levenshtein close 做模糊匹配;有 MISMATCH 计数并 `process.exit(mismatches ? 1 : 0)`。无网络、无子进程,只 readFileSync ×2 + writeFileSync ×1。
  • [ok] check 的 --caption-zone 与 preview 缓存提醒是否自洽(是否存在互相矛盾的验收) — Step 6 第 1 条用仓库内 CLI 跑 caption-zone(x0=0;y0=.90;x1=1;y1=1;severity=error,26 个 seek 点)拿 0 error;第 3 条要求重启预览服务后再用 __player.seek 抽查——两处不冲突(前者静态闸、后者运行期抽查),且都与 build-spec 的「字幕轨 top:990(=1080×0.9167,落在 .90–1 带内)」一致。
  • [discrepancy] Stage ground 与本 skill 骨架是否一致(跨 skill 一致性) — seam-craft / cut-the-curve 教义要求把不透明底色刷在 #root(`#root { background: var(--canvas-deep, var(--canvas, #000)) }`)。本 skill 的 master-skeleton.html 实测把底色放在 `html, body { background: #0a0c0b }`,#root 只有 data-* 属性、没有 background 声明;#root 内首个子元素是满幅 bg-video(track0)+ scrim。对本骨架而言白闪仍被 body 底色挡住(body 也是不透明深色),观感风险低;但与教义字面要求的形式不一致,且未用 --canvas-deep/--canvas 变量(该变量在 pin 内零命中)。记录为形式差异,不改档位。
  • [ok] CloudFront invalidation 是否只是可选建议(影响档位判断) — 它写在 Anti-patterns 表的「Don't」列:`Delivered without CloudFront invalidation` → `Run aws cloudfront create-invalidation on distribution E2BSLVSZ7FG3U0 …`。即「交付却不做 invalidation」被定义为反模式,属交付流程的必需步骤而非可选花絮——这是判橙(触碰用户云凭据)的依据。
  • [ok] 是否存在被忽略的其他外发(例如字体/CDN 在构建期拉取) — 字体是本地 woff2(5 个文件实检非 LFS 指针,约 488KB),build-spec 明确要求 `local @font-face with format('woff2') embeds at render`;唯一 CDN 引用是 master-skeleton 的 jsdelivr GSAP(产物期,浏览器端)。未发现构建期遥测、上报或未知端点。

6結論

  • 週次動画の制作を完全に再現可能なパイプラインに昇華:ブランドアセット、骨格、発音辞書、仕様書がすべてスキル内に完備され、`SKILL.md` はルーティングに徹しているため、担当者が変わっても同じ品質の動画を出力可能。
  • 「箇条書きではなく視覚化」の原則を段階的なルーティング表(`ui-recreate` > `ui-analog` > `terminal` > `checklist`)で担保し、脚本作成前の画面決定を義務化。
  • 過去の実事故(字幕なし版の誤配信)に直接対応した、厳格なゲートと 3 段階の連動検証による強固な字幕パイプライン。
  • 2 層スクリプト + 発音辞書 + 未知語のユーザー確認フローにより、TTS の読み間違いと字幕の誤字リスクを同時に排除。
  • アンチパターンとなる近道に対して、婉曲な推奨ではなく明確な中止(STOP)とリセット指示を規定。
  • 指示がない限りレンダリングを行わない保守的なデリバリー設計としつつ、レンダリング時はフレーム単位で監査し、主観に頼らない受け入れ基準を確立。
  • 最適な用途: HeyGen/HyperFrames チームによる週次チェンジログ動画制作(正方形 1080、約 45〜60 秒、Annie の VO、共通ブランド背景、モック UI 演出、控えめな字幕)に最適です。また、プラットフォームのアップデート情報をブランド化されたショート動画に変換する、再現性の高い完全なパイプライン(視覚化ルーティング表、発音辞書、字幕アライナー、フレーム単位の検収体制を含む)をテンプレートとして活用したいチームにも適しています。ただし、HeyGen TTS および AWS デプロイフローの利用が前提となります。
    不向きな用途: 以下のようなユースケースには適していません:① ナレーション原稿を HeyGen に送信したくない、またはアカウントクレジットを消費したくないユーザー(ローカルの音声合成代替手段はありません)。② CDN キャッシュ無効化のための AWS 認証情報の使用を許可できない環境。③ 正方形以外の画角や 45〜60 秒以外の一般的な動画制作(レイアウト、構成バジェット、フォント、背景のすべてが 1080×1080 週次ダイジェスト専用に設計されています)。④ 完全なオフライン環境を求める場合(LFS アセット、TTS、検証処理の多くがネットワークに依存します)。⑤ 多言語対応や英語以外のナレーションが必要な場合(発音辞書とボイスが英語の Annie に固定されています)。⑥ 本スキルを汎用的な「マークダウンから動画への変換ツール」として利用する場合(HyperFrames リポジトリおよび独自のブランドアセットに強く依存しています)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload changelog-video.tar.gz
    sha256: f474b43e1565756e…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d2f0bc7f34.