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。