結論

LTX-2で「見れる」動画を安定して出すには、プロンプトの構造化が鍵になる。 単発のショットを綺麗に出す段階と、36シーンを繋いで一本の物語にする段階では、必要な設計が根本的に異なる。ここでは実運用で固まった3つの仕様を統合して記録する。

  1. 36シーン・ホラーシナリオ生成テンプレート — LLMにシナリオを書かせるためのシステムプロンプト
  2. シネマティック・プロンプト設計原則 — 個々のショットの品質を上げるための構造
  3. マルチシーン連結の継続性制御 — クリップ間の破綻を防ぐパイプライン設計

前提

  • 動画生成エンジン: LTX-2(5秒クリップ単位で生成)
  • 解像度: 3840x2160(4K)、24fps
  • シナリオ生成: ローカルLLM(Mixtral等)でSTORY→SCENES→LTX2_PROMPTSを一括生成
  • パイプライン: シーン単位で生成→ffmpegで連結→音声は後段で合成

1. 36シーン・ホラーシナリオ生成テンプレート

設計意図

Monstral-123B(NVFP4量子化)でホラーシナリオの生成を試みたとき、以下の問題が発生した。

  • シーン数が20〜50でばらつき、36固定が実現できない
  • ナラティブ構造が崩れ、序破急が不明確
  • 台詞が途中で消滅し、無音シーンが大量に出現
  • エンディングが曖昧か、唐突な「妄想落ち」に陥る

これらは単なるLLMの性能問題ではなく、出力フォーマットを明示的に制約しないことが原因だった。出力スキーマとルールを厳格に固定したシステムプロンプトを設計することで、中規模モデルでも安定した36シーン構成のシナリオを生成できるようにした。

出力スキーマ(固定)

LLMの出力は以下の5セクションのみ。余計な説明は禁止。

  1. STORY_PROMPT — 物語の骨格(1段落)
  2. LABELS — ジャンル、トーン、モチーフ
  3. OUTLINE — 5段階構成のあらすじ
  4. SCENES_36 — Scene 01〜Scene 36(各1〜3文)
  5. LTX2_PROMPTS_36 — Shot 01〜Shot 36(各ショットの生成プロンプト一式)

Scene 01 から Scene 36 まで欠番なし、過不足なし、前後の commentary なし。downstream の parser を書きやすくするためにここまで縛っている。

シーン配分

  Scenes 01–08 : 日常と小さな違和感(最初の囁き、微妙なズレ)
Scenes 09–20 : 異常の増幅と反復(声が繰り返す、反射が語りかける)
Scenes 21–28 : 調査と対峙(原因の手がかり、真相の明確化)
Scenes 29–36 : 解決と結末(原因特定→具体的行動→安全回復)
  

夢オチ、「全部妄想でした」、未解決の曖昧な結末は禁止。

各シーンの必須要素

  Scene 04:
Visual: 鏡の前に立つ女性。カメラは反射にゆっくりズームイン。
Whisper: 「あなたも、見えているんでしょ?」
Sound: 蛍光灯がチカチカと鳴り、低いハム音。
  
  • Visual: 画面に映るもの
  • Camera: フレーミングまたはカメラワーク
  • Dialogue: 最低1つの台詞(Dialogue / Whisper / Voice(V.O.) / Heard Voice / Inner Voice)

「台詞のないシーン」は存在しない。自然に台詞が入らない場面では、囁き、歪んだ声、内的独白、反射越しの声、記憶のフレーズを使う。36シーンで何らかの音声イベントがなければ rhythm が死ぬ。dialogue mandatory にすることで、映像だけでなく audio beat も強制的に設計に含めている。

舞台設定ルール

  • 舞台は日本(都市部または郊外)、具体的な実在地名は避ける
  • 使える文化要素:静かな住宅街、小さな家、鏡、神社、廊下、引き戸、夕方のテレビ音、蝉、風、蛍光灯
  • ゴア描写・過度な暴力は禁止。恐怖は心理的手段(囁き、影、反射、反復、孤立感)で構築する

固有地名を入れると連想の幅が狭くなるし、映像としても不必要に specific になる。欲しいのは location realism ではなく、psychological unease を支える文化的手触りだ。

ホラーの制約

使ってよい恐怖の源を限定している。

  • 囁き、影、反射、反復
  • 現実かどうか断定できない声
  • 感情的孤立

使ってはいけないもの: graphic gore、explicit violence、dream-only ending、“it was all imagination” ending、解決しない曖昧な終わり。

jump scare や残虐さを求めていない。繰り返しや音や鏡像のズレのような、動画で持続しやすい低振幅の不穏さを狙っている。LTX-2 で扱うなら、こうした low-amplitude な異常の方が clip を壊しにくい。

禁止事項ブロック

曖昧に書くと抜けやすいので blunt に宣言する。

  The ending must be resolved.
No dream ending.
No insanity-only explanation.
No ambiguity.
  

Story Flavors(プリセット)

ユーザー入力が曖昧な場合、LLMが自動選択するプリセット群。

Flavor概要
trapped_room_mummy夏休み前に閉じ込められ、痕跡だけが残る
water_reflection水面の反射が現実を少しずつ書き換える
station_beep_phrase駅の電子音が言葉になり、人を誘導する
fox_shrine_wrath小さな祠の撤去が静かな異変を呼ぶ

各 flavor は logline、key beats、resolution pattern を持つ。ユーザー入力が雑でも型に押し込める。「怖い話を作って」だけでは resolution pattern を保証できないが、flavor を前置すれば commitment が維持される。

story_core テンプレート

物語の骨格を固定するテンプレート。

  {SETTING}
{PROTAGONIST}
{HELPER}
{FLAVOR}
{RESOLUTION_PATTERN}
{MOTIFS}
  

使ってよい恐怖の要素: 心理、音、影、水、反復。過度な残虐描写は避ける。このレイヤーでは shot の話はしない。story engine として、ジャンルと物語進行だけを定義する。

LTX2_PROMPTS_36 のショット定義

  Shot 01:
  DURATION=5s FPS=24 RES=3840x2160
  PROMPT: <映像指示中心の具体的短文>
  NEGATIVE: low quality, blurry, distorted hands, deformed face, gore, blood
  CAMERA: handheld POV / slow push-in / over-the-shoulder
  LIGHTING: low-key, streetlight, fluorescent hum
  AUDIO_CUE: <環境音、台詞、沈黙>
  CONTINUITY: prev=none next=shared_object:mirror
  SEED_HINT: episode_seed+01
  

顔のアップは回避し、手・背中・シルエットを優先する。テロップは後段ffmpegで合成する前提。

prose paragraph で出させるより、後段での差し替え・自動検証・再試行がやりやすい。たとえば NEGATIVE だけ共通化したり、SEED_HINT だけ差し替えたり、CONTINUITY だけ自動生成することが容易になる。

LTX-2 Style Defaults

  DURATION  : 5 seconds
FPS       : 24
RESOLUTION: 3840x2160 (4K)
STYLE     : cinematic, realistic, subtle horror, Japanese suburban atmosphere
CAMERA    : handheld POV / slow push-in / over-the-shoulder (顔アップ回避)
LIGHTING  : low-key, streetlight, fluorescent hum, rainy reflections
  

共通 NEGATIVESEED_HINT の方針まで含めると、single creative prompt の話ではなく、実際の generation pipeline 設計書だ。


2. シネマティック・プロンプト設計原則

Shot-First Thinking(ショット優先思考)

プロンプトの最初に「カメラがどこにあるか」を確定させる。抽象的な「カメラが〜を表示する」は禁止。具体的な撮影用語で書く。

  • static camera / slow pan / close framing / wide interior shot / shallow depth
  • カメラの位置、視界、空間の圧縮感を明示する

モデルに「説明」を与えるより「レンズの立ち位置」を先に与えるほうが揺れが少ない。

環境のアンカリング(Visual Mood)

ライティング、カラーパレット、表面テクスチャを各プロンプトに共通パラメータとして埋め込む。

要素語彙例
Lightingwarm, cold, flickering, fluorescent, natural, overcast
Color palettemuted pastels, warm golds, sickly greens, neutral grays
Surface texturesfogged glass, worn metal, dust in light beams
Moodcozy, oppressive, sterile, playful

これにより拡散モデルの生成プロセスが安定(アンカー)し、シーン間での結果が一貫する。

アクションは連続する物理シーケンスとして記述

箇条書きではなく、動作の自然な推移として書く。

  Leaning into frame → Hesitating near the handle → Exhaling slowly to fog the glass
  

矢印(→)で段階的な動きを明示する。これがないとLTX-2は「瞬間移動(テレポート)」を起こす。身体がどのように空間を移動したかを執拗に書くことが、滑らかな映像化への有効なアプローチ。

振る舞いによるキャラクター定義

長い説明文ではなく、姿勢、微細な表情、タイミング、小さな癖で定義する。年齢、服装、動きに現れる感情状態を含める。Pixar-style acting を参考にする。動画生成では静止画的な属性列挙だけだと人物が「立っているだけ」で終わりやすい。

カメラワークはナラティブツール

  • スローパン: 観察と緊張の構築
  • 固定ショット: 緊張感やコメディの「間」
  • 意図のない突発的な動きは punchline をサポートする場合を除いて避ける
  • 連続クリップ間ではパンの方向と速度を一貫させる
  • 前シーンから継続する場合は Continue the same pan と明記

continue the same pan は、隣接クリップ間の運動連続性を制御する再利用可能なフレーズとして機能する。

オーディオは必須

音声は飾りではなく、タイミングを規定するツール。

  • Ambient Sound: オーブンのハミング、蒸気の音、遠くの騒音
  • Dialogue Beats: 引用符(" “)を用いたセリフ、[Beat] [Silence] による沈黙の挿入
  • 話し方: Whispering vs speaking vs muttering を明示
  • 音楽は明示的に含めるか除外するかを宣言する

動画 prompt を映像だけの指示として書くと、あとから足した音が scene のタイミングとズレやすい。最初から prompt に入れることで、画と時間設計を一体化できる。

プロンプト構造テンプレート

推奨順序は 7 段階で固定されている。

  1. Shot Establishment(ショットの確立)
  2. Environment & Lighting(環境と照明)
  3. Character Position & Emotion(キャラクターの配置と感情)
  4. Core Action Sequence(主要アクションシーケンス)
  5. Camera Movement(カメラワーク+タイミング)
  6. Audio & Dialogue(オーディオとセリフ)
  7. Ending Visual Beat(終わりの視覚的間)

まず frame を作り、次に scene の空気と人物の感情を置き、そのあとで動作と音を流し、最後に shot の終わり方を決める。動画 prompt は最後の数秒で印象が決まることが多いので、Ending visual beat を項目として独立させているのは実用的だ。

Example: Cinematic Prompt (≈600 words)

この 7 段階テンプレートが実際にどう使われるかを一つの shot で見せる。

  INT. OVEN – DAY.
Static camera positioned from inside the oven, looking outward through the slightly fogged glass door. The frame is tight and claustrophobic, bordered by dark metal edges. Warm golden light fills the interior, reflecting softly off the glass and illuminating a tray of freshly baked cookies resting just below frame center. Fine steam curls upward, leaving faint streaks across the glass.

The color palette is rich and inviting: honeyed browns, soft ambers, and glowing highlights. The air feels warm and dense, as if the oven itself is breathing.

A baker leans into frame from outside the oven door. His face slowly fills the glass, eyes narrowed in intense concentration. His breath fogs the glass further as he exhales, creating overlapping clouds that briefly obscure his features before clearing again. He doesn't blink. His posture is rigid, shoulders slightly hunched, as though this moment demands absolute precision.

The camera remains static as subtle reflections ripple across the glass from the rising heat.

Baker (whispering, reverent):
"Today… I achieve perfection."

He tilts his head slightly, adjusting his angle to catch the light just right. His eyes track the edges of the cookies, watching for the slightest change in color. One hand lifts slowly into frame, hovering near the oven door handle but not touching it yet.

The steam grows thicker for a moment, then thins.

Baker (still whispering, building intensity):
"Golden edges. Soft center."

He leans even closer, nose nearly pressing against the glass. The camera holds, letting the silence stretch just long enough to feel deliberate.

Baker (a hushed gasp):
"The gods themselves will smell these cookies… and weep."

A beat.
The baker's eyes widen slightly as a new thought intrudes. His hand freezes mid-air.

Baker:
"Wait—"

Silence. The hum of the oven is suddenly very noticeable.

Baker (uncertain, quieter):
"Did I… forget the chocolate chips?"

Another beat. Just long enough to be uncomfortable.

Cut to a side angle outside the oven. The camera now slowly pans from left to right, revealing a coworker casually stepping into frame. The coworker chews loudly, crumbs at the corner of his mouth, utterly unconcerned. The lighting here is flatter and cooler, contrasting the oven's warmth.

Coworker (mouth full, casual):
"Nope. You forgot the sugar."

The pan continues for a moment as the coworker shrugs and wanders off.

Cut back inside the oven.
A quick push-in as the baker's face slams back into frame, pressed against the glass. His expression is pure horror. His breath fogs the glass completely now, obscuring the cookies behind it.

Behind the fog, the cookies visibly sag and deflate in slow motion, their once-perfect shape collapsing inward. Steam rises dramatically, drifting upward like a defeated sigh.

No music. Only the oven's hum and the faint crackle of heat.

The baker stares, unmoving.

Baker (barely audible):
"...No."

The camera holds on the fogged glass as the steam slowly dissipates, revealing the ruined cookies one last time before the shot ends.
  

この例で確認できる点を整理する。

  • Shot establishment: oven 内部から外を見る static camera で始まる
  • Environment: warm golden lighthoneyed browns で固定される
  • Character: posture と表情で定義され、He doesn't blink がそのまま演技の芯になっている
  • Action: leaning、exhaling、hovering、freezing の連続で進む。teleporting がない
  • Camera: side angle への切り替えは情報を出すためだけに動き、無意味に振り回さない
  • Audio: whisper、silence、oven hum、heat crackle が scene の timing に一貫して組み込まれている

最後の No music. Only the oven's hum and the faint crackle of heat. が特に効いている。音楽を省くことで、オーブンの hum と気まずい沈黙がそのまま punchline になる。


3. マルチシーン連結の継続性制御

課題

単発のショットを美しく出す段階から、複数シーンを繋いで物語にする段階へ進むと、以下の問題が発生する。

  • ビジュアル・ドリフト: ショットが変わるたびにライティングやテクスチャが微変する
  • カメラの断絶: パンの速度や方向がクリップ間で一致しない
  • タイミングの喪失: 演技の「間」や「溜め」を制御できない

Last-frame Continuity(ラストフレーム連結)

  1. 継続指示: 次のシーンの冒頭で Continue the same pan と明記
  2. シード値のインクリメント: 同一シード値をベースにショットインデックスを加算(episode_seed + shot_idx)。微細な変動は許容しつつ大枠の一貫性を維持
  3. テクスチャの共有: 前のショットで発生した視覚的状態(ガラスの曇り等)を、次のショットの前提条件として引き継ぐ

CONTINUITY フィールドの運用

各ショットの CONTINUITYprev=next= を明記し、共有物・共有音・継続動作・場所遷移のいずれかで隣接シーンと接続する。

  CONTINUITY: prev=shared_sound:fluorescent_hum next=location_transition:hallway_to_kitchen
  

この明示的な接続指示がないと、LTX-2は各ショットを独立した画像として生成し、連結時に違和感が出る。

テレポート現象の回避

動作を端折ると、AIは中間フレームを予測できず「瞬間移動」を起こす。物理的な身体の動き(どのように空間を移動したか)を執拗に記述することが最も有効な対策。


サンプル出力の評価

OUTPUT 1(狐の祟り)

STORY_PROMPT, LABELS, OUTLINE, SCENES_36 の順でスキーマに従っており、story arc は成立している。ただし scene の camera 指示が平板で、LTX-2 に直接流すには shot grammar が粗い。これが後半テンプレート追加の理由になっている。

OUTPUT 2(Gon の熊への変異)

narrative arc が前者より見えやすい。復讐・変身・受容・妹との再会・安息まで進んでいるので、resolution requirement を満たそうとする意思が見える。ただし camera 指示は OUTPUT 1 と同様に平板で、映像仕様として未完成。


変数化の実験痕跡

ファイル内に MAIN_CHARCTER="Gon"SUB_CHARCTERS="Mosuke, Yayoi"FLAVOR=... という shell variable 風の記述が混ざっている。完成された schema というより実験ログだが、方向性は正しい。story flavor や登場人物名を variable 的に差し替えて、同じ scene skeleton を複数の物語に再利用したいわけだ。

durable なワークフローに変えるなら、次の整理が必要だと思う。

  • 重複する System Prompt SpecificationCopy-Paste System Prompt を canonical block 一つにまとめる
  • OUTPUT 1OUTPUT 2 を examples ディレクトリへ分離する
  • MAIN_CHARCTER のような変数を YAML か JSON に寄せて parser を安定させる
  • SCENES_36LTX2_PROMPTS_36 の整合性チェックを別スクリプトで自動化する

特に continuity の自動検証に価値がある。prevnext の hook が scene plan の内容と噛み合っているか、resolution scene に concrete action が含まれているか、silent scene が紛れ込んでいないかは、後工程で機械的にチェックできる。


感想

LTX-2のプロンプトエンジニアリングは、結局「映画の絵コンテを自然言語で書く」行為そのものだ。 ホラーシナリオのテンプレートは、LLMに構造化出力を強制するための仕様書であり、シネマティック原則は個々のショットの品質を上げるための知見であり、継続性制御は複数ショットを物語として繋ぐための実装ノウハウ。この3層が揃って初めて「使える」パイプラインになる。

動画生成AIの未来は、単発の美しさではなく、連続するショットの間に宿る知性の制御にかかっている。


再現方法

最小構成

  1. LTX-2の動画生成環境(ComfyUIまたはAPI)
  2. シナリオ生成用LLM(ローカルでもAPI経由でも可)
  3. ffmpeg(クリップ連結・テロップ合成)

ホラーシナリオ生成の手順

  1. Story Flavorを選択(または自由入力)
  2. システムプロンプト(本記事のテンプレート)をLLMに投入
  3. 出力のSCENES_36とLTX2_PROMPTS_36を取得
  4. 各ショットのPROMPTをLTX-2に順次投入
  5. 生成されたクリップをffmpegで連結
  6. 音声・テロップは後段で合成

シネマティック品質のチェックリスト

  • 各プロンプトの先頭にカメラ位置が明記されているか
  • ライティングとカラーパレットが一貫しているか
  • アクションが矢印(→)で段階的に記述されているか
  • 隣接ショット間でCONTINUITYが定義されているか
  • オーディオ指示が含まれているか
  • 顔のアップを避け、手・背中・シルエットを優先しているか