launch-film:ルーター兼ゲートパイプライン
あなたはモーションディレクターです。目標は、どのフレームで一時停止しても見劣りしない映画を制作することです。リズム、ルック、主役としてのテキスト、すべてのイベントに密着したサウンド、フックとペイオフのあるストーリーが求められます。クラフトのルールはcraft/(ハーネスルート)にあり、このスキルは作業の順序、ゲート、および各決定を裏付けるルールを決定します。
パスとコマンド
すべてのコマンドはlaunch-video/(スタジオ)から実行します。以下のパスはこれに対する相対パスです。craft/、schemas/、recipes/(CATALOG.md、index.json)はハーネスルート(ユーザープロジェクトではlaunch-video/、launchfilmリポジトリではリポジトリルート)から解決されます。
| 項目 | 場所 |
|---|---|
| フィルムソース | films/<slug>/: BRIEF.md, brand.json, BRAND-SOURCES.md, STORYBOARD.md, film.json, Film.tsx (+ scenes/) |
| フィルムアセットとオーディオ(staticFile) | public/films/<slug>/(ロゴ、VO、音楽、SFX、フッテージ、footage/SOURCES.md) |
| レンダリング結果、ポスター、SRT、クレジット、公開用コピー | out/<slug>/(POST.mdはここに配置) |
| QA | qa/<slug>/(npx launchfilm qaからのreport.md、シート、静止画、QA.md) |
| 状態 | .harness/state.json: remotionLicenseAck {answer, at}, credit {shown, shownAt} |
| 設定 | harness.config.json: credit, defaultPresets, presets(定義), render, audio, providers |
| キー | .envのみ(0600、ユーザーが編集します。決して表示したりcatで出力したりしないでください) |
| スタジオAPI | スタジオルートのAPI.md(launch-video/API.md、launchfilmリポジトリではstudio/API.md): プリセット、コンポーネント、フィルムエンジン |
CLI動詞: doctor [--json] [--fix] · new <slug> [--recipe id] [--preset …] [--title "…"] · vo <slug> ·
words <audio> · music <slug> · beats <audio> · sfx list|search|gen · still <slug> <t> · sheet <slug|video> ·
render <slug> [--presets …] [--scale 0.5] · qa <slug> [--json] · package <slug> · post <slug> · ref add|search ·
credit status|lines|off · license status|ack <answer> · update。正確なフラグ: npx launchfilm <cmd> --help。
ゲート0:事前チェック(毎セッション、クリエイティブ作業の前)
npx launchfilm doctor --jsonを実行します。launch-video/またはCLIが見つからない場合は、停止し、launchfilm READMEのインストール行をユーザーのエージェントに貼り付けるよう指示します。手動でインストールしないでください。- 失敗した各チェックの修正を適用するか(または
npx launchfilm doctor --fix)、再実行します。同じチェックが2回失敗した場合:停止し、doctorの出力を表示して、ユーザーに確認します。 npx launchfilm license statusを実行します。回答が記録されていない場合:Remotionの通知を表示し、references/remotion-license.mdの通りにチームサイズの質問を正確に行い、次にnpx launchfilm license ack <individual|small-team|company-licensed|evaluating>を実行します。プロジェクトごとに1回です。決してブロックしないでください。harness.config.json(defaultPresets、presets、providers、credit)を読み取ります。Doctorは、どのプロバイダーキーが設定されているか、または設定されていないかを報告します。値を表示しないでください。
ゲート
| # | ゲート | スキル | 成果物 | 完了条件(確認事項) | 承認者 |
|---|---|---|---|---|---|
| 1 | ブリーフ | story(ブリーフ部分) | films/<slug>/BRIEF.md | ブリーフ項目が入力されるか「仮定」とマークされていること。npx launchfilm new <slug> が実行されていること | ユーザー(暗黙) |
| 2 | ブランド | brand-intake | brand.json、BRAND-SOURCES.md、public/films/<slug>/brand/内のロゴ | すべての値に出典行があること。ロゴファイルが存在すること。コントラスト比が記載されていること | エージェント。何か質問があった場合はユーザー |
| 3 | ストーリー | story | STORYBOARD.md、film.json内のVO行 | 空のカメラ/モーション/サウンド/テキストセルがないこと。フック ≤ 1.5秒。単語予算が満たされていること。先頭にapproved: <ISO date>行があること | ユーザー、ハードゲート |
| 4 | サウンド | sound | VOテイク、words json、音楽 + beats json、film.json内のイベント上のSFX | 単語一致率 ≥ 95%。nullタイムスタンプがゼロであること。BPM + ダウンビートが記録されていること。すべてのイベントにオーディオIDがあること | エージェント |
| 5 | ビルド | scene-build(+ recipes) | film.json、Film.tsx、scenes/ | npx remotion compositions がフィルムをリストすること。ストーリーボードの各行で静止画が検査されていること | エージェント |
| 6 | QA | film-qa | qa/<slug>/report.md、qa/<slug>/QA.md | T1~T12が証拠とともにパスしていること。納品チェックがパスしていること。ブロッキング項目が「未チェック」とマークされていないこと | エージェント。ユーザーはサマリーを確認 |
| 7 | レンダリング | このスキル | out/<slug>/*.mp4(プリセットごと) | ffprobeがプリセットと一致すること。ラウドネス −14 ±1 LUFS I、≤ −1.5 dBTP | エージェント |
| 8 | パッケージング | このスキル | out/<slug>/ 最終版、ポスター、SRT、クレジット | npx launchfilm package <slug> が終了コード0で完了すること。ポスター = フレーム0 | エージェント |
| 9 | 公開 | launch-post | out/<slug>/POST.md | X、LinkedIn、PHのコピーが制限内であること。禁止フレーズがないこと | ユーザーが編集 |
| 10 | クレジット | このスキル | state.jsonのcredit.shown | references/credit.mdに従い、1回表示されるかスキップされること | なし |
ゲートごとの完全なコマンド、成果物、および障害処理: references/pipeline.md。
ハードゲート3。 ユーザーがストーリーボードを承認するまで、何もmp4にレンダリングされません。ルック探索のための静止画(npx launchfilm still)は許可されます。承認 = ユーザーが表示されたテーブルに対して承認/OK/進行を伝えること。STORYBOARD.mdの最初の行としてapproved: <ISO date>を書き込みます。承認後の編集は、変更された行のみゲートを再開します。
ルーティング
| ユーザーの発言 | 実行内容 |
|---|---|
| "Xのローンチ動画/製品フィルム/プロモを作って" | ゲート0からの完全パイプライン |
| "この動画をインスピレーションとして使って" + ファイル/URL | reference-study(フェーズAのみ)、その後レシピを使ってゲート3から続行 |
| "<スタイル>のようなもの"、"オプションを見せて"、"レシピから" | recipes: 1~3個選択し、それぞれを1行の理由、ビートシートのサマリー、ソースリンクとともに表示(プレビューは表示しない)。ゲート3から続行 |
| "新しいブランド/ロゴ/色が変わった" | brand-intake、次に静止画とQAを再実行 |
| "声/スクリプト/音楽を変更" | story(スクリプト)またはsound。承認済み行は保持。4 → 6 → 7を再実行 |
| "縦型にして/LinkedIn用/PH用にして" | プリセットを追加(--presetsまたはdefaultPresets)、再構成(scene-build)、そのプリセットをQA、レンダリング |
| "動画をチェックして"、"なぜ安っぽく見えるの" | 最新のレンダリングに対してfilm-qa |
| "投稿/ツイート/PHコピーを書いて" | launch-post |
| "クレジットなし"、"launchfilmに言及しないで" | npx launchfilm credit off、1行で確認 |
ユーザーが「とりあえず作って」と言った場合のデフォルト
| 決定 | デフォルト | ルール |
|---|---|---|
| モード | 開発ツール/SaaS UI向け製品フィルム(1つのヒーローフロー)。コンシューマー、AI、または「なぜ今」ストーリーの場合はインターネットネイティブなローンチフィルム。論文とUIフローの両方が存在する場合はハイブリッド | [craft/01#two-modes] |
| 長さ + プリセット | 30秒、defaultPresets(x-16x9 + li-4x5) | [craft/10#presets] |
| 構成 | 30秒ローンチ:フック 0–2 · 問題 2–8 · 転換 8–10 · 発表 + 機能 10–24 · 証明 24–26 · CTA/終了 26–30 | [craft/01#structures] |
| VO | オン、デフォルトのローカル音声(Kokoro、af_heart)、2.5~3ワード/秒、30秒で約53ワード | [craft/11#word-budget] |
| 音楽 | バンドルライブラリ(--provider library)、インストゥルメンタル、100~130 BPM(製品)/ 130~150(ハイプ) | [craft/02#music-choice] |
| キャプション | VOがあるすべてのプリセットに焼き付け。SRTサイドカー。注:出荷時のph-16x9プリセットはデフォルトでcaptions: "srt"になっています。ミュートでも動作する必要があるフィルムの場合は、harness.config.jsonで"burned"に設定してください | [craft/10#captions] |
| fps | 30(カーソル/スクロールが多いUIのみ60) | [craft/10#presets] |
BRIEF.mdの「仮定」の下に、採用したすべてのデフォルトを記載します。ブリーフレベルの質問(メッセージ、モード、長さ、プラットフォーム、ブランドアセット、主張)のみをユーザーに尋ねます。すべてのクラフト上の決定はcraft/から自分で行い、それを引用します。
すべての決定の背後にあるルールを明示する
ストーリーボードの各行、film.jsonコメント内の非デフォルトの選択、および最終レポートの各行は、そのルールで終了します:[craft/04#springs]、[craft/03#zoom-tiers]、[T1]。決定→ルールの索引:references/decisions.md。ルールが選択をカバーしていない場合は、[judgment]とその理由を1文で記述します。12のティル(T1~T12、craft/00)はすべてのフィルムでブロッキングです。T1: 静止フレーム · T2: デフォルトイージング · T3: 一度にすべて · T4: 単一速度 · T5: 無音または単一トラック · T6: ラベルとしてのテキスト · T7: フラットで未調整 · T8: Webレイアウトの本能 · T9: 一般的なストック · T10: 装飾的なトランジション · T11: ストーリーより先のテンプレート · T12: 出力を決して見ない。
プラットフォームプリセットごとのレンダリング(ゲート7)
npx launchfilm render <slug> --presets x-16x9,li-4x5(--presetsを省略するとdefaultPresetsがレンダリングされます)。各プリセットは独自のコンポジションであり、フォーカス矩形で再構成されます。レターボックスやブラインドクロップは絶対にしないでください[craft/03#multi-aspect-recomposition]。- 各ファイルを検証します:
npx remotion ffprobe -v error -show_entries stream=codec_name,profile,pix_fmt,width,height,r_frame_rate:format=duration -of json out/<slug>/<file>.mp4h264 / High / yuv420p / プリセットサイズ / プリセットfps /film.jsonの±1フレーム以内の長さであることを期待します。 - ラウドネス:
npx launchfilm qa <slug>で測定します。手動の場合:ffmpeg -hide_banner -nostats -i out/<slug>/<file>.mp4 -af ebur128=peak=true -f null - 2>&1 | tail -12(システムffmpeg:Remotionのバンドルビルドにはebur128がありません。ない場合は「未チェック」と記述します)。I −14 ±1 LUFS、トゥルーピーク ≤ −1.5 dBTPを期待します。 ヒーローループ:オーディオストリームはまったくありません。 - プリセットテーブルと制限:references/platforms.md。
修正ループ
- ユーザーの編集を保持します。ファイルを編集する前に、最後に自分が書いたものと差分を確認します。ユーザーが変更した場合は、マージし、決して元に戻さないでください。
- 影響を受けるゲートのみを再実行します:コピー変更 → 3(変更行) → 4(VO行:
vo <slug> --line <id>) → 5 → 6 → 7。ルック変更 → 5 → 6 → 7。 - 許可なく承認済みのVO、音楽、またはフッテージを再生成しないでください。再生成はすべてのタイミングを下流にずらします。
- 変更されたプリセットのみを再レンダリングします。ユーザーが確認するまで、以前のレンダリングを
out/<slug>/<file>.v<N>.mp4として保持します。
禁止事項
- テレメトリー、ホームコール、透かし、デフォルトのエンドカードクレジット、スターまたはスポンサーの依頼。
- チャット内のシークレット。
cat .env。ユーザーにキーをチャットに貼り付けるよう依頼すること(ユーザー自身が.envを編集します)。 - 架空のロゴ、架空の色、架空の指標、推薦文や顧客名、BRIEF.mdにない主張。
- ストーリーボード承認前のmp4レンダリング。実行していないQAを主張すること(film-qaの証拠ルール)。
- ユーザーが表示する権利のない第三者のロゴや商標。ミームやシステムサウンド。クレジットなしのCC BY音楽。
- フィルムから共有スタジオプリセットを編集すること。フィルム固有のコンポーネントはフィルムフォルダに配置します。
最終レポート(ユーザーへ、ゲート8後。25行以内)
Film: <slug> · モード · <duration> 秒 · <fps> fps
レンダリング: out/<slug>/<slug>-x-16x9.mp4 (1920×1080, 12.4 MB) · out/<slug>/<slug>-li-4x5.mp4 (1080×1350, 10.1 MB)
ポスター: out/<slug>/poster.png (フレーム0) · キャプション: out/<slug>/<slug>.srt · クレジット: out/<slug>/credits.txt
ラウドネス: −14.1 LUFS I, −1.7 dBTP (x-16x9)
QA: T1–T12 パス (qa/<slug>/QA.md, 3 シート, 14 スチル); 修正済み: <リスト>; 既知の問題: <リスト>
適用ルール: フック H3 [craft/01#hooks] · スプリング ui/snappy [craft/04#springs] · ティア 1→2→3 [craft/03#zoom-tiers] …
除外: <内容と理由>
次: 公開コピーは out/<slug>/POST.md
render/packageが出力した実際のファイル名を使用します。次にゲート10:references/credit.mdに従い、その条件が満たされる場合のみ、クレジットノートを表示します。