Communitygithub.com

エージェントVFX

譜面で音楽反応VFXを演出する。WebGL2テンプレートを選び、ヘッドレスChromeで書き出し、点滅を検査し、無音ループかウェブ用ランタイムを出す。

エージェントVFX とは?

エージェントにシェーダーは書かせない。テンプレートとプリセットを選び、パラメータを低音、オンセット、ビートに結び、FX譜面を書くとエンジンが H.264 を出す。書き出しごとに点滅検査が付く。無音のピンポンループと自己完結のウェブ書き出しで、同じ譜面が舞台ループにもページ内エフェクトにもなる。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wjgoarxiv/agentvfx/tree/HEAD/skills/agentvfx

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

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

ドキュメント

agentvfx

あなたが指示し、エンジンがレンダリングします。クリップのためにシェーダーコードを書くことは一切ありません。テンプレート、プリセット、いくつかの型付きパラメータを選択し、それらをFXスコア(JSON)に記述するだけで、エンジンはヘッドレスChrome(WebGL2)でレンダリングし、ffmpegでH.264エンコードし、フラッシュ監査を実施します。

すべてのコマンドはこのフォルダ(スキルルート)から実行してください。スコア内のパスはカレントディレクトリからの相対パスで解決されます。

1. マシンの確認

node scripts/vfx.mjs doctor

ok: true はChromeがGPU WebGL2とffmpegを見つけたことを意味します。そうでない場合は blockers を読み、何をインストールすべきかユーザーに伝えてください(CHROME_PATH、FFMPEG_PATH)。Blender 5.xはプレートにのみ必要です(BLENDER_PATH)。

2. ルックの選択

node scripts/vfx.mjs list            # ファミリー、テンプレートID、入力種類、プリセット
node scripts/vfx.mjs list --json     # 説明付き

input はテンプレートが必要とするものを示します:generative(何も必要としない)、footage(input.video)、either(どちらでも可)。プリセットから始め、1ラウンドあたり最大2~3個のパラメータを変更します。さらに作成する前に、結果をユーザーに表示してください。

3. スコアの作成

スキーマ:schemas/fx-score.schema.json。最小限の例:

{ "version": 1, "template": "lattice", "preset": "vermilion-fine",
  "input": { "video": "test-media/clip-01.mp4", "audio": "test-media/beat-132.mp3" },
  "durationSec": 4, "seed": 47, "out": "my-lattice" }
  • durationSec は3~5。seed はレンダリングを再現可能にします。
  • params はプリセットを上書きします(名前と範囲はテンプレートの fx.json から取得)。
  • bindings はパラメータをオーディオフィーチャー(bass、onset、beat、bands.Nなど)に結び付け、gain、offset、attackMs、releaseMs を指定します。アタックはオンのフレームに、リリースは短く(約60ms)保ってください:スナップ感はプロフェッショナルに、強いスムージングはデモのように見えます。
  • hits はオンセットまたはビートで追加のテンプレートを発火し、cuts はビートでスタックをハードカットし、stack はベースの上に最大2つのテンプレートをレイヤーします。
  • labels と textStyle はエンジンのテキストレイヤーを設定します(インストールされたフォントを名前で指定、存在しない場合は汎用フォールバック)。

レンダリングせずにチェック:

node scripts/vfx.mjs validate my-score.json

4. レンダリングと確認

node scripts/vfx.mjs render my-score.json --out out/my-lattice --width 640 --height 360

最初は小さいサイズ(640x360)でプレビューし、最終版でサイズを上げてください。コマンドはフィルムパス、フラッシュ結果、スチルを含むJSONを出力します。クリップを誰かに説明する前に、stills/sheet.png とすべてのストリップを開いてください。確認していないレンダリングは完了していません。

5. フラッシュ安全性

すべてのレンダリングにはフラッシュ監査(一般および赤色フラッシュ/秒、WCAG 2.3.1スタイル)が含まれます。デフォルトモード stage はフル強度を維持し、制限を超えた場合に SAFETY.txt を書き込みます。"safety": { "mode": "broadcast-safe" } は制限を強制し、"safeVariant": true はフルバージョンと並べて film.safe.mp4 を追加します。クリップが制限を超えた場合は、ユーザーに明確に伝えてください。

6. 背景プレート(オプション、Blender)

node scripts/plate.mjs --scene terminalcore --shot gallery --out out/plate --width 640 --height 360 --seconds 4

プロシージャルシーンで、ダウンロードアセットは不要です。プレートの film.mp4 を input.video として使用します。--quality final は遅いです(1080pフレームあたり約2分);開始する前にユーザーに確認してください。詳細は references/plates.md を参照。

7. 無音ループ

node scripts/loop.mjs out/my-lattice/film.mp4 reels/my-lattice.mp4 --preview reels/preview/my-lattice.webp --audit out/my-lattice/loop-flash.json

クリップを前方に再生し、その後後方に再生します(継ぎ目なし、オーディオトラックなし)。ループを2回再生してフラッシュ監査します。終了コード3はループがフラッシュ制限を超えたことを意味します。逆再生によりターン付近でフラッシュが倍増する可能性があります;--hold 6 は各ターンで6フレーム一時停止し、これによりループが制限内に戻ることがよくあります。逆再生時に赤の変化が赤のフラッシュになる場合、この方法では修正できません — その旨を伝え、ユーザーに判断を委ねてください。

8. Webページでのライブ使用

node scripts/export-web.mjs lattice collage --out out/web

自己完結型ランタイム、選択したテンプレート、デモページを書き出します。prefers-reduced-motion を尊重します。詳細は references/web.md を参照。

ルール

  • 配布権限のない音楽を出荷またはコミットしないでください。レンダリングのモーションはトラック由来でも、公開ループは無音のままにできます。
  • 参考文献はインスピレーションを与えるものであり、コピーするものではありません。他者の作品からのフレーム、ロゴ、マーク、フォントファイルを複製しないでください。
  • フォントファイルをバンドルしないでください。インストールされたフォントを名前で指定し、不足時はフォールバックされます。

詳細

  • references/template-format.md — テンプレートの構築方法(fx.json、パス、プリセット、テキストレイヤー)。
  • references/plates.md — Blenderプレート。
  • references/web.md — WebランタイムAPI。

関連スキル