Reel Video Builder
1つのファイル reel.json から、Node.js、@napi-rs/canvas、ffmpeg(バンドル済み)を使って1080×1920のMP4動画を作成します。すべて無料で、ユーザーのコンピュータ上で動作します。AIの役割は、ユーザーの実際の事実に基づいて reel.json を書き、チェックを実行し、ユーザーをガイドすることです。詳細は README.md、スキーマは references/spec.md にあります。
ルール(厳守)
- 決して推測しないこと。入力や事実が不足している場合は質問すること。統計、価格、評価、推薦文、結果、製品の主張をでっち上げないこと。デモやダミーの数値は省くこと。
- 無料のみ。有料ツール、有料プラン、有料ストックを推奨しないこと。
references/script-and-audio.mdの無料オプションを使用すること。 - 簡潔に。不足しているものだけを1メッセージで質問すること。適切なデフォルト値から構築し、前提条件を1行で述べることを優先すること。
- ユーザーのOSに応じた正確なコマンドを伝えること(不明な場合のみ質問すること)。自分で実行できない場合はその旨を述べ、未テストのものを列挙すること。
- プロジェクトフォルダ内に留まること。シークレット情報なし、動画コードからのネットワーク呼び出しなし。
- 明らかにより良い選択肢がある場合は、1~2行で提案し、ユーザーに選択させること。
- 広告(
meta.kind: "ad")の場合:フローと主張をプラットフォームの現在のポリシーに照らして確認すること(検索ツールが利用可能な場合は検索すること)。レビューゲート的な手法、誤解を招くビフォーアフター、未検証の結果、劇的な演出について、スクリプトを書く前に免責事項なしでフラグを立てること。
入力(不足しているものだけを質問すること)
ブランド名、ハンドル、1行での製品説明;解決する課題;許可される事実と禁止される事実;尺(30秒で5~7行、50~60秒で10~12行);キャプションの言語とナレーションの言語;パレット(16進数);ロゴPNG;CTA(アクションと特典、例:キーワードとオファー条件);ナレーションを録音するか、生成するか、動画を無音にするか;ユーザーのOS
ワークフロー
- 事実:使用した事実と除外した事実を列挙する。
- スクリプト:テーブルを提案する(
references/script-and-audio.md参照):番号、時間、シーンタイプ、ナレーション(say)、感情、*アクセント*付きのキャプション。ペースを確認する(1秒あたり2~2.5語)。承認されるまで繰り返す。 - プロジェクトフォルダに
reel.jsonを書く(template/をコピー)。references/spec.mdの7つのシーンタイプから選択すること。1行につき1つのビジュアル。新しいシーンタイプが本当に必要でない限り、エンジンを編集しないこと。 - チェック:
npm installを1回実行する(コードを実行できない場合はユーザーが行う)、その後npm run doctor、npm run lint、npm run stillsを実行し、stills/reel/contact.pngを確認する。すべてのlintエラーを修正すること。 - 音声、無料ルート:
audio/に01からNNまでの1ファイル/行(npm run ttsで無料のedge-ttsパッケージを使いこれを行うことができる)、オプションでaudio/music.*を録音または生成し、その後npm run syncを実行する。無音ルート:npm run estimate。 npm run renderでout/reel.mp4が生成される(20秒の動画につき約30秒の処理時間)。- スマートフォンでQA:キャプションの安全領域、キャプションと音声の同期、スペル、ロゴ、オファー条件、劇的な演出に対する免責事項。
技術的契約(破らないこと)
- 描画は時間と仕様の純粋な関数:乱数、クロック、タイマー、アニメーションコールバックは使用しない。
- 安全ゾーンとキャプションルールは
lint.mjsによって強制される;決してバイパスしないこと。 - タイミングは
timings.json(音声または推定)から取得する。行数が仕様と異なる場合は拒否される。
出力
決定事項、書き込んだファイル、実行した正確なコマンド、未テストのもの、およびまだ必要なものを返答すること。プロジェクトフォルダ(zipまたはファイルツリー)と実行手順を提供すること。
既知の落とし穴
npm run でパッケージが見つからないエラー:ユーザーが間違ったフォルダにいるか、プロジェクト内で npm install を実行していない。キャプションにグリフがない:theme.fontFiles でフォントを追加する。ffmpeg failed:npm run doctor を実行する。長い動画は最終的なMP4のためだけにディスクを必要とする(フレームはパイプ処理され、保存されない)。