Communitygithub.com

ONIKOSIOLA/video-editing-kit

HyperFrames 合成やフレームサブコンポジションのビルド、編集、リタイミング、レンダリング時に使用します。特に複数フレームのプロモーション/ローンチビデオ、フレームが「チェックに合格した」がまだ確認されていない場合、GSAP トゥイーンのリタイミング時、または出力品質が以前の実行よりも低いと感じる場合に便利です。また、空白フレーム、無音ギャップ、埋もれた/重なったカード、タイムラインが登録されない場合のデバッグにも使用します。

video-editing-kit とは?

このスキルは、HyperFrames を使用した動画編集において、品質を担保するための厳格な検証プロセスを提供します。単にリントやチェックが通っただけでフレームを完了とせず、レンダリングされたピクセルを実際に目で確認することを重視します。ストーリーボードのビデオ方向に従う、フレームごとに1つの主要な動きに絞る、シークテストによる視覚確認、リタイミング後のクリップ属性更新など、具体的な非妥協ルールを順に実行することで、プロモーション動画やローンチ動画の品質低下を防ぎます。このスキルは Claude Code などの AI エージェント上で動作し、マルチフレームビルドのオーケストレーションや、機械的なトラップ(IDの接頭辞、CSSとGSAPの競合、フォントのCDN参照など)を事前にチェックすることで、デバッグ工数を大幅に削減します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ONIKOSIOLA/video-editing-kit/tree/HEAD/skills/hyperframes-quality-gates

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

HyperFrames 品質ゲート

概要

優れた HyperFrames の実行と平凡なものの差は創造性ではなく、検証の規律です。優れた実行は、すべてのフレームを、複数のシーク時点でピクセルが確認されるまで未証明として扱います。平凡な実行はチェッカーを信頼し、リントが最初に通ったものをそのまま出荷します。

核となる原則: リントは矩形と属性をチェックしますが、レンダリングされたピクセルだけが真実を語ります。確認せずにフレームを完了と宣言してはいけません。

不可欠なゲート

構築または編集するすべてのフレームに対して、これらの手順を順番に実行してください。「小さな変更だから」という理由でゲートをスキップすると、品質が低下します。

  1. ストーリーボード自体の ## Video direction ブロックを読み、プリセットのボイラープレートよりも優先します。 ストーリーボードが文の大文字小文字ルールを指定し、プリセットの frame.md が大文字を指定している場合、ストーリーボードが優先されます。プロジェクトの方向性 > プリセットのデフォルト。
  2. フレームごとに1つの主要な動き。 フレーム内で2つの要素が同時に解決しようとしている場合、1つを削除します。すべてを前倒ししてからフリーズする(「スライドショーモード」)と、すべてを浮かせる(「スクリーンセーバーモード」)は、どちらも失敗です。
  3. 機械的なトラップの自己チェック(下の表)を、完了と報告する前に自分のファイルでgrepして実行します。
  4. 完了と報告する前に、ブラウザでシークテストを実行します。 <template> をクローンし、タイムラインを登録し、timeline.seek(t, false) を次の時点で実行します: t=0、各シーン境界 ±0.05s、および最終フレーム。それぞれをスクリーンショットします。それらを確認します。 シークテストなしのフレーム報告は、未検証の主張です。
    • suppressEvents トラップ: 裸の .seek(t) は onUpdate コールバックを抑制します — カウンター/タイピングがハーネスでは壊れて見えても、レンダラーでは正常に見えます。常に false を渡します。
  5. リタイミング後は常に、影響を受けたクリップの data-start/data-duration を再導出します。 GSAP トゥイーン時間とクリップ表示ウィンドウは2つの独立したシステムです。一方だけをリタイミングすると、不可視要素や無音ギャップが発生します。これは最も多い回帰原因です。
  6. アセンブリ後、すべてのカット境界と各フレームの中間点でフルビデオのスナップショットを取得し、コンタクトシート画像を自分で読み取ります。 間違っている部分を修正し、再スナップショットし、その後にレンダリングします。

機械的トラップ表(自分のファイルでこれらをgrep)

トラップ症状修正方法
id が数字で始まり + querySelector("#...")SyntaxError がタイムライン登録を静かに失敗させる → 空白フレームid に文字を前置するか、または getElementById を先に使用する
GSAP アニメーション要素に対する CSS transform:最初のトゥイーンで GSAP が CSS オフセットを上書きするオフセットを left/top に焼き付ける; transform は GSAP のみに属する
パディングされたカードに box-sizing: border-box がない幅が膨張し、センタリングがずれ、カードが衝突するすべてのパディングされたカードに設定する
fonts.gstatic.com / 任意のCDN を指す @font-face非決定論的レンダリング; オフラインで壊れるassets/fonts/ 下のローカルファイル、プロジェクトルート相対パス
目視による重なり計算後のカードが前のカードのテキストを埋めるgetBoundingClientRect() でホールド時間の矩形を計算する; すべての重なり合う要素のキーテキストがスクリーンショットで見えることを確認する
クリップ/タイトな行送りのテキストに対するチェッカーの重なり検出誤検出(矩形は重なるがグリフは重ならない)最初にピクセルを確認し、その後 data-layout-allow-overlap を使用する — 決して盲目的に抑制しない
電話モックアップ内でのスクリーンショットの引き伸ばし/色の変更不自然なデバイス常にネイティブアスペクト比; overflow:hidden でトリミングし、均一でないスケーリングは行わない
外部ボリューム上の ._* AppleDouble ファイルビルド/レンダリングを壊すアセンブル/レンダリング前に find . -name '._*' -delete を実行する
Node < 22CLI が失敗する前置: export PATH="$HOME/.nvm/versions/node/v22*/bin:$PATH"(または nvm use 22)

オーケストレーションパターン(マルチフレームビルド)

  • フレームごとに1つのワーカー、ワーカーごとに1つのファイル。ワーカーは共有ファイルに触れません。
  • ワーカーをディスパッチする前に、共有アセット(フォント、ロゴ、スクリーンショット)をステージします。パケットは正確なパスを指定します。
  • すべてのパケットには以下が含まれます: そのフレームのストーリーボードブロックの原文、グローバルな Video direction ブロック、上記のトラップ表、およびシークテストの要件。
  • オーケストレーターは、ワーカーが報告した内容に関係なく、アセンブリ後に lint + check + コンタクトシート検査を再実行します。ワーカーの自己報告は主張であり、証拠ではありません。

危険信号 — 停止して確認

  • 「リントとチェックに合格したので、フレームは正しい」→ チェックは埋もれたテキストや無音を検出しません。ピクセルを見てください。
  • 「トゥイーンをリタイムしました。完了です」→ クリップの data-* ウィンドウもリタイムしましたか?
  • 「シークテストはスキップします。コードは簡単です」→ 空白フレームのバグ(数字idセレクター)は簡単なコードにあり、シークテストだけがそれを捕捉しました。
  • 「そのカードはおそらくもう一方を覆わないでしょう」→ 矩形を計算し、その後スクリーンショットを確認してください。
  • 「CDNフォントは今回だけは大丈夫です」→ 大丈夫ではありません。レンダリングはネットワークフリーでなければなりません。

これらすべては、スキップしようとしていたゲートを実行することを意味します。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル