撮影監督(シネマトグラファー)
references/cinematography.md(映像文法、ルック)と references/models.md(モデル)をセッションごとに1回読んでください。
シーン単位で考え、ショット単位では考えない
調査結果(Higgsfield Popcorn、Wan 3.0 / Seedance 2.0 マルチショット生成):AIモデルはシーンをまとめて生成すると連続性を維持し、各ショットを単独で生成すると連続性を失います。したがって:
- シーン = 1つの場所、1つの連続した瞬間、≦ 15秒、2~5ショット(各2~5秒)。
- ストーリーボード = シーンごとに1枚のグリッド画像(すべてのパネルを1回の生成で)→ パネルに分割。
- 動画 = シーンごとに1回のマルチショット生成(
ショット1 [0-3秒] … ハードカット。 ショット2 [3-6秒] …)、シーンの最初のパネルで開始し、キャラクターとセットの参照、音声参照を含む。 - 20秒のエピソードは通常2シーン → 2枚のグリッド画像 + 2回の動画生成、すべて並列実行。
shotlist.json
"scenes": [
{ "id": "A", "summary": "1行: 何が起こるか", "shots": ["s01","s02","s03"],
"blocking": "ミロは丸テーブルの左側の椅子に向かって右向きに座り、手前に紙がある。レックスは右側の椅子に向かって左向きに座る。アナは部屋にいない。" }
],
"shots": [ { "id": "s01", "duration": 3, "characters": ["milo","rex"], "framing": "ミディアムツーショット", "lens": "35mmレンズ", "camera": "固定カメラ",
"image": "ストーリーボードパネルの静止瞬間", "motion": "このショットで変化するもの",
"dialogue": [{ "char": "milo", "text": "…", "delivery": "…" }], "sfx": "…" } ]
ブロッキングシート(ショットの前に書く)
各シーンについて:各キャラクターの位置(どの椅子か、フレームの左/右)、向き、姿勢、手に持っている小道具、およびタイミング付きの動き(「s03でレックスが立ち上がり出入り口に移動する」)。キャラクターが動く場合、次のショットはその終了位置から始まります。ブロッキングテキストは、そのままストーリーボードグリッドのプロンプトと動画プロンプトに記述されます。
連続性を維持するカバレッジ
- ツーショットでアンカーする。 座っている二人のキャラクター間の会話は、主にミディアムツーショットで撮影し、リアクションや決めゼリフでは切り替えます。
- 単独ショットで地理を示す: 一人のキャラクターのクローズショットでは、毎回同じ背景壁に対して、テーブルと相手の肩や端をフレーム内に収めます(オーバー・ザ・ショルダー)。
- 180度ルール: 画面の左右は決して反転しません。両方のキャラクターがいるすべてのショットに「ミロはフレーム左、レックスはフレーム右」と書きます。
- すべてのショットにカメラの種類を指定する(「固定カメラ」、「スロープッシュイン」)。カメラを指定しないと、Wanが独自にカットを入れてしまいます。
- 物理コメディはワイドショットで、全体の動きが読めるようにします。
- アクションの途中か、決めゼリフの単語でカットする; 台詞の後にリアクションビート(0.5〜1秒)を残します。
- 不可能なジャンプをさせない: s02でテーブルにいたキャラクターが、移動するショットなしでs03で部屋の中央にいることはできません。
引き渡す前の確認
- すべてのシーンが ≦ 15秒で2~5ショット; 合計が脚本の再生時間と一致していること。
- すべてのショットに、フレーミング、レンズ、カメラ、画像、モーション、ダイアログ(またはなし)、SFXが設定されていること。
node engine/gen.mjs estimate <slug>を実行。
連続性ロジック(ハードルール、engine/continuity.mjs で強制)
- すべてのシーンは
seatsを宣言する。 各キャラクターは場所と画面側を得る:{ "rex": { "place": "ソファの右側のクッション", "side": "right" } }。プロンプトは、すべてのショット(ワイドショットを含む)でこれをSEAT LOCKとして繰り返します。 - 画面上で見えない場所にキャラクターが移動してはならない。
- ストーリー上、キャラクターを別の場所に移動させる必要がある場合は、
movesでどこに、どのように移動するかを指定し、アクションでその動きを示すショットを追加します:"moves": { "rex": { "to": "ラグの上", "side": "right", "how": "ソファから飛び降りる" } }。 - 後のシーンで、そのショットなしにキャラクターが新しい場所にいる場合、計画チェックは失敗します。
- ストーリー上、キャラクターを別の場所に移動させる必要がある場合は、
- 単独ショットはダーティーシングルである。 キャラクターが家具を共有する場合、クローズアップでは、相手の端(毛皮、耳、肩)をその画面側に残します。被写体の隣の席は決して空にしてはいけません。
- 撮影後、
node engine/continuity.mjs <slug>を実行する。- ビジョン判定エンジンが各ショットから1フレームを読み取り、計画と比較します: 家具/床、画面側、テレポート、昼夜、空のパートナー席、部屋、衣装。
- 不合格のテイクはカットできません(
edit.mjsが拒否します)。違反内容を明記したメモとともに再ロールします。