Communitygithub.com

Video by Code スキル

Canvas 2D、プロシージャルWeb Audio、Playwright、FFmpeg を使用して、決定論的なコード駆動動画(ナレーション解説、縦型9:16ショート、歌詞ミュージックビデオ、データストーリー、オーディオビジュアライザー)を構築、レンダリング、検証します。86のビジュアルスタイル仕様、オーディオタイミング分析ツール、およびシーク決定論、セーフエリアテキスト境界、カットの急峻さ、色忠実度、ラウドネスをチェックする自動検証ゲートを含みます。コードで動画を作成するよう依頼された場合、プログラムによるアニメーション、顔出しなし解説、縦型ショート、または歌詞ビジュアライザーとして使用します。

Video by Code スキル とは?

Video by Code スキルは、人間とAIエージェントが協力して、完全にコードで制御された決定論的な動画を制作するための、実行可能なツールキットと本番ワークフローを提供します。このスキルは、Claude Code, Cursor, Codex などのエージェント環境で使用することを想定して設計されており、開発者は Playwright を用いたブラウザベースのレンダリング、FFmpeg を使ったビデオエンコード、そして Web Audio API によるプロシージャルなサウンド生成といった技術を駆使して、顔出し不要の解説動画から音楽に合わせたリリックビデオ、データ可視化ストーリーまで、多様な動画コンテンツを作成できます。ワークフローは「企画 → 音声 & タイミング分析 → スタイル選択 → デザインスチル生成 → シーンコーディング → 決定論 & テキスト境界チェック → フルレンダリング → 検証 & コンタクトシート生成 → 納品」という明確な工程で構成され、各段階で専用のツール(Pythonスクリプト)が用意されています。特に、オーディオファイルから正確なタイムスタンプを抽出し、それに基づいてアニメーションを同期させる点や、すべてのフレームが決定論的に生成されることを確認する「シーク決定論ゲート」、テキストが安全領域に収まっているかを全フレームで検証する「テキスト境界監査」など、品質保証のための厳格な自動検証機構が組み込まれているのが最大の特徴です。これにより、手動での調整なしに、毎回同じ結果が得られる信頼性の高い動画制作パイプラインを実現します。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Holodeck23/video-by-code/tree/HEAD

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

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

ドキュメント

Video by Code スキル は何をしますか?

人間とAIエージェントのチームが、コードで決定論的な動画を作成するための実行可能なツールキットと本番ワークフローです。すべてのシーンコードはリポジトリまたはプロジェクトのワークスペース内に保持し、生成されたメディア、オーディオテイク、静止画、検証レシートは、明示的に指定された外部の $PROD ディレクトリに配置します。

作業の順序: ブリーフ → オーディオ & タイミング → スタイル & プロンプト → 3枚のデザインスチル → シーンコード → 決定論 & テキストバウンドゲート → フルレンダリング → 検証 & コンタクトシート → 納品レシート


1. 環境とスモークテスト

新しい動画を制作する前に、スターターの依存関係がインストールされ、リポジトリルートから4秒のスモークテストが成功することを確認してください。

cd starter && npm ci && cd ..
node tests/runtime-contract.mjs

2. プロダクションディレクトリと意図 (RUNBOOK.md §1–2)

  1. コードチェックアウトディレクトリの外部に絶対パスのプロダクションディレクトリを選択します。
    PROD="/absolute/path/to/video-outputs/<project-slug>"
    mkdir -p "$PROD"/{audio,analysis,stills,renders,checks}
    
  2. templates/brief.md を "$PROD/brief.md" にコピーし、視聴者、核となるメッセージ、アスペクト比 (1920x1080 横向き または 1080x1920 縦向き)、長さ、音声/音楽ソース、セーフエリアマージンを記入します。

3. オーディオの識別とタイミング (docs/04-music-audio-and-timing.md、docs/05-narration-and-captions.md)

推測したタイムスタンプでアニメーションを行わないでください。まず実際のオーディオファイルを測定し、そのSHA-256ハッシュを記録します。

uv run tools/timing/audio-identity.py "$PROD/audio/source.wav" \
  --out "$PROD/analysis/identity.json" --copy-wav "$PROD/analysis/analysis.wav"
  • ナレーション:
    • ローカルのKokoro ONNX TTSで合成(単語断片マージは < 4、音声辞書は --say say.json を使用): uv run tools/timing/kokoro-narrate.py script.txt --out-dir "$PROD/audio" --voice af_heart --say say.json
    • ローカルの whisper-cli で音声のラウンドトリップを検証: uv run tools/verify/verify-narration.py "$PROD/audio/narration.wav" "$PROD/audio/timing.json"
    • スクリプト/歌詞の n-gram が参照テキストと完全一致しているかチェック: python3 tools/verify/check-lift.py candidate.txt reference.txt
  • 音楽 / 歌詞 / ステム反応型トラック:
    • Demucs で6ステム(vocals, drums, bass, guitar, piano, other)に分離し、44.1kHz WAVに正規化: uv run --python 3.12 tools/timing/separate-stems.py "$PROD/audio/song.mp3" --out-dir "$PROD/analysis"
    • 120Hz のステムエンベロープ、単調な音楽時間 tau、拍/小節位相、無音、features.f32、および100fpsのギターピッチ/ビブラートを抽出: uv run --python 3.12 tools/timing/analyze-stems.py "$PROD/analysis" --fps 120 --stem-pitch
    • 単語レベルの歌詞をアライン(whisper-cli、mlx-whisper、faster-whisper、または acoustic ボーカルバンドエネルギーワーピング): uv run tools/timing/align-words.py "$PROD/analysis/stems/vocals.wav" --script lyrics.txt --backend whisper-cli --out "$PROD/analysis/words.json"
    • 軽量な単一ファイルキュー / ビートグリッド / ビジュアライザーエンベロープ:
      • uv run tools/timing/cue-extract.py "$PROD/audio/song.mp3" --out "$PROD/analysis/cues.json"
      • uv run --python 3.12 tools/timing/beat-grid.py "$PROD/analysis/analysis.wav" --out "$PROD/analysis/beats.json"
      • python3 tools/build-visualizer.py "$PROD/analysis/analysis.wav" --out "$PROD/analysis/features.js"

4. スタイル選択とプロンプトアセンブリ (prompts/README.md)

prompts/styles/INDEX.md(13ファミリーにわたる86のオーサリング済みビジュアルスタイルカード)と prompts/briefs/(5つのフォーマットブリーフ:explainer-voiceover、vertical-short、lyric-video、instrumental-visualizer、data-story)を参照してください。

選択したスタイルとブリーフの組み合わせ仕様をアセンブルします:

python3 tools/build-prompt.py <style-id> --brief <brief-id> --out "$PROD/style-prompt.md"

5. シーンオーサリングコントラクト (lib/API.md、docs/06-building-scenes.md、docs/12-advanced-engines-and-benchmarks.md)

すべてのシーンHTMLページは lib/harness.js(window.H)をロードし、必要に応じて以下もロードします:

  • lib/sound.js(window.SOUND)— プロシージャルWeb Audio合成
  • lib/features.js(window.FEATURES)— 120Hz バイナリ features.f32 ステムカーソル、不応性オンセットパルス、単調な tau(t)、words.json 歌詞ルックアップ
  • lib/ink-doodle.js(window.INK)— 8fps 決定論的ラインボイル、ぐらついたドゥードゥルプリミティブ、左揃えの大文字書き込み marker、Ken Burns plate カメラ
  • lib/webgl-post.js(createPost)— 4ステージのThree.jsポストプロセッシング(FxOverShader、UnrealBloomPass、FinalGradeShader(ACES / paperMode)、輝度のみのインパクト反転、グリッチ、シェイク、グレイン、鮮明なUIオーバーレイ)

すべてのページは以下を公開します:

  • <canvas id="c" width="1920" height="1080"></canvas>(または縦向きの場合は 1080 × 1920)
  • window.DURATION(秒)と window.FPS(デフォルト 30)
  • window.__ready(フォントとキャッシュされたオフスクリーンプレートの準備ができた後に解決されるPromise)
  • window.__renderFrame = (t) => { ... } — 秒単位の t の純粋関数
    • すべてのフレームを ctx.reset()(またはバランスの取れた save()/restore())で開始します。
    • フレームループの外で H.rng(seed) と H.noise(seed) を使用します。フレーム間で可変状態を決して進めないでください。
    • ペーパー/サーフェステクスチャは H.paperTexture(...) または H.offscreen(key, w, h, fn) を使用して一度だけキャッシュします。
    • ストーリー上重要なテキスト({text, critical: true, left, right, top, bottom})に対して window.__textBounds = () => [...] を公開し、自動化されたセーフエリアチェックがすべてのフレームを検証できるようにします。
  • window.scoreSound = (k) => { ... } — 固定タイムラインタイムスタンプでプロシージャルサウンドイベントをスケジュールします(--voice が指定された場合、自動的にBGM/音楽を抑制します)。

テストからの主要なプロダクションルール

  • セーフエリアマージンとフォントウェイト: macOS Chromeでは、Arial はウェイト 400 と 700 のみを提供します(600 は 700 のボールドにスナップされ、行幅が約9%広がります)。すべてのフレームで measureText(s).actualBoundingBox* を常に監査してください(1080x1920 縦型ショートの場合、x: 80..960, y: 190..1640)。
  • 連続カメラスタイル(transit-map、パンアンドズーム): カメラ補間は beat[i].start で開始します(i が beat[i].start で切り替わる場合、beat[i].start - preRoll では開始しないでください。1フレームのジャンプが発生します)。ビートローカルオーバーレイは 0.20 s でフェードし、ワールド空間ラベルはクリップされたマップビューポート内にある場合にのみ描画されるようにガードします。

6. 静止画のレンダリング、決定論のチェック、マスターレンダリング (docs/07-rendering.md)

  1. シーク決定論ゲート:
    node starter/determinism.mjs path/to/film.html
    
  2. デザインスチルゲート(フルレンダリング前に、開始、中盤、終盤のフレームを検査):
    node starter/render.mjs path/to/film.html --stills 1.5,12.0,24.0 --outdir "$PROD/stills"
    
  3. フルMP4レンダリング:
    • リファレンスシングルワーカー Playwright レンダラー(デフォルト 30fps Canvas2D + プロシージャルオーディオ):
      node starter/render.mjs path/to/film.html \
        --out "$PROD/renders/master.mp4" --fps 30 --audio page \
        --voice "$PROD/audio/narration.wav"
      
    • マルチワーカー GPU WebSocket レンダラー(60fps Three.js / WebGL / キネティックタイポグラフィ):
      node tools/render/parallel-ws-render.mjs \
        --url "http://127.0.0.1:5173/?capture=1" --duration <DURATION> --fps 60 --workers 4 \
        --audio "$PROD/analysis/analysis.wav" --out "$PROD/renders/master.mp4"
      
    • ブラウザレス Python + Pillow rawvideo レンダラー(キャプション付きワークブック & チュートリアル):
      uv run tools/render/workbook-render.py \
        --spec workbook.json --audio "$PROD/audio/narration.wav" --out-dir "$PROD/renders"
      

7. 必須検証ゲート (docs/08-verification.md)

すべてのプロダクションは、引き渡し前にこれらのチェックを実行し、結果を "$PROD/checks/" に記録する必要があります:

  1. ストリーム、デコード、同期、ラウドネスゲート:
    uv run tools/verify/verify-video.py "$PROD/renders/master.mp4" \
      --expect-seconds <DURATION> --fps 30 --width <W> --height <H> \
      --json "$PROD/checks/verify-video.json"
    
  2. コンタクトシートによる目視検査:
    uv run tools/verify/contact-sheet.py "$PROD/renders/master.mp4" \
      "$PROD/checks/contact-sheet.jpg" --n 16 --cols 4 --tile-width 270
    
    contact-sheet.jpg とシーンスチルを目視で検査し、テキストのクリッピング、ラベルの衝突、意図しない空白/フリーズフレームがないか確認します。
  3. トランジション & カットの急峻さ監査:
    uv run tools/verify/cut-harshness.py "$PROD/renders/master.mp4" \
      --top 15 --json "$PROD/checks/cut-harshness.json"
    
  4. ルック & パレット診断:
    uv run tools/verify/measure-look.py "$PROD/renders/master.mp4" \
      --samples 16 --json "$PROD/checks/measure-look.json"
    
  5. 全フレームテキストバウンド監査: tests/layout.mjs のパターンに従い、すべてのフレーム 0 .. frames-1 にわたって fillText インク境界と window.__textBounds() を検証します。

8. パッケージングと納品 (RUNBOOK.md §12)

"$PROD/qa.md"(templates/qa.md から)と "$PROD/delivery.md"(templates/delivery.md から)を完成させます。機械検証(PASS/WARN の状態)は、人間によるクリエイティブな視聴および聴覚承認とは別に報告します。

主要な参照

  • README.md — クイックスタートと章のインデックス
  • RUNBOOK.md — 12ステップの人間-AIエージェント制作チェックリスト
  • lib/API.md — 正確な H グラフィックスおよび SOUND プロシージャルオーディオコントラクト
  • examples/README.md — 実践的な横向き、縦向き、スタイルスタディの例
  • docs/10-pitfalls.md — 症状 → 原因 → 修復テーブル

関連スキル