粘土の 3D レンダリングから実写アクション短編へ:完全制御可能な 3D から AI へのパイプライン
fal.ai は、3D ブロックアウトから最終映像までを完全制御可能なパイプラインとオープンソース化された「3DREAL Strong v2」アダプターを発表し、生成 AI の方向性に対する課題への具体的な解決策を示した。
キーポイント
完全制御型の 3D-to-AI パイプラインの確立
カメラパス、アクション、カットタイミングを 3D ブロックアウト(Blender via AI)で厳密に定義し、生成 AI の不確実性を排除する新しいワークフローを提案している。
オープンソースの 3DREAL Strong v2 アダプター
LTX 2.3 を基盤とした LoRA モデル「Strong v2」が Hugging Face で公開され、多シーン整合性、同期音声生成、より鮮明な出力を実現している。
段階的検証による品質担保
単一のプロンプトに依存するのではなく、3D 生成→画像生成→動画生成の各フェーズで人間が検証を行う「3 プロンプト・2 検証」プロセスを採用している。
AI生成の前提となる3Dブロッキングの重要性
動画モデルは各ショットの最初のフレームに依存するため、主要要素が最初から明確に表示され、物理法則(真のパラボラ運動など)に従った動きを設計する必要がある。
ClaudeとBlender MCPによる完全自動化
手動でのモデリングやカメラ配置を行わず、ClaudeがBlender MCPを通じて自律的にシーン構築・アニメーションを行い、各検証ステップで人間の承認を得て進行する。
段階的なプロンプトと検証の分離
1つの魔法のプロンプトではなく、3つのフェーズ(3D、画像生成、動画生成)ごとに個別のプロンプトを使用し、各工程間に人間による検証ステップを設けることで品質を担保する。
AI 生成向けセット設計の制約
テクスチャや細部を排除したブロックアウトスタイルとし、カメラがジオメトリ内に収まらないよう視線を確保することで、AI の誤認識を防ぐ。
重要な引用
The most recent video models are genuinely impressive... but they don't give you perfect control: the exact camera path, the exact cut point, the exact trajectory of a truck flying over a train.
This project is not an argument against those models. It's an answer to one specific need: total control — not just of the camera, but of the action itself.
The idea is to split the job: A 3D blockout owns the geometry... Image models own the look... render-to-real owns the final pixels.
The video model is driven by each shot's first-frame image. If the car only enters at second 2, the keyframe never contains a car, and the model has to invent one mid-shot — it will drift.
Nobody modeled, animated or placed a single camera by hand. The whole scene was built by Claude (Fable, in ultra-thinking mode) connected to Blender through the Blender MCP.
"Never retime the train to fix a shot — retime cameras or the truck."
影響分析・編集コメントを表示
影響分析
この記事は、生成 AI ビデオ制作における「制御不能性」という最大のボトルネックに対し、3D データベースと生成モデルを組み合わせた実用的な解決策を示した点で業界に大きな影響を与える。特に、重要な技術要素をオープンソースとして公開し、コミュニティによる検証と改良を促す姿勢は、生産ワークフローの標準化に向けた重要な一歩となる。
編集コメント
生成 AI ビデオの「制御性」を巡る議論において、単なるモデル発表ではなく、具体的な制作パイプラインとオープンソースツールを提供した点は非常に示唆に富んでいます。
image私たちは、1930 年代のピックアップトラックが砂漠の町を走る蒸気貨物列車と競走し、それを飛び越える短編アクション映画を制作しました。この作品では、アクション、アニメーション、カメラアングル、タイミング、カット割りに至るまで、すべてが設計段階から一貫して制御されています。この記事では、このフルパイプラインの仕組みを率直に解説します。何がうまくいき、何が失敗し、実際にどれほどの試行錯誤が必要だったのか。また、最終的な映像を生成するオープンソースの「3DREAL Strong v2 アダプター」に関するリリースノートとしても機能しています。
更新情報:3DREAL Strong v2 が公開され、オープンソース化されました。この映画の最終画質を支える LoRA に、新しい Strong v2 アダプターが追加されています。カット間でのシーン一貫性の向上、同期された音声生成、より自然なキャラクターの会話表現、そして全体的な出力の鮮明さなどが改善されています。重みファイル(Light, Strong, Strong v2)は Hugging Face で入手可能で、ホストされた「レンダリングからリアル化」エンドポイントでもすでに動作しています。
10 秒間、12 シーン、高速カット——各ショットの下部には白黒の 3D ブロックアウトが表示されています。音声をオンにしてご覧ください。
10 seconds, 12 shots, fast cuts — the 3D blockout below each shot, in black & white. Sound on.
imageなぜこのパイプラインが必要なのか
最新の動画生成モデルは、確かに驚異的な性能を誇っています。画像から動画を生成する技術を使えば、単一のフレームから美しい動きを引き出せますが、その動きを細かく制御することはできません。参照画像を使って動画を生成するモデルも進化しており非常に優秀ですが、依然としてコストが高くつくうえ、完璧な制御を提供できるわけではありません。例えば、カメラの移動経路を正確に指定したり、カットのタイミングを厳密に決めたり、列車の上をトラックが飛ぶ際の軌道を完全にコントロールしたりすることは、現状では難しいのです。
このプロジェクトは、既存のモデルを否定するものではありません。特定のニーズに応えるための解決策です。それが「完全な制御」です。カメラだけでなく、アクションそのものの制御も目指します。「何が」「どこで」「いつ」「どのように」動き、「どうフレームされ」「どうカットされるか」まで、すべてを支配できることが目標です。現在では、多くのツールがオープンソース化されており、これらを活用して実現可能です。
このアプローチの核心は、作業を分割することにあります。
まず「3D ブロックアウト」がジオメトリ(形状)を担当します。カメラ、動き、タイミング、カットを管理する領域です。ここではグレーの箱と物理演算のみを使用し、詳細な描写は一切行いません。Blender を使用しますが、手動でのモデリングはせず、AI が Blender MCP を介して完全に制御します。
次に「画像モデル」がビジュアル(外観)を担当します。検証済みの参照画像セットに加え、各ショットごとに 1 つの「キーフレーム」を用意します。
最後に「レンダリングから実写へ」が最終的なピクセルを担当します。これは、Hugging Face でオープンソース化された LTX 2.3 用の 3DREAL LoRA(私たちが開発し公開したものです)によって駆動されます。現在は新しい Strong v2 アダプターも含まれています。この in-context LoRA の特長は、グレーの 3D ブロックアウトをフォトリアリスティックな映像に変換しつつ、入力画像の構成、カメラ移動、レイアウトを正確に維持できる点にあります。
ホストエンドポイント:fal-ai/ltx-2.3-quality/render-to-real
まず正直にお断りしておきます。これは「プロンプト一つで魔法のように完成する」話ではありません。このパイプラインは 3 つのプロンプト(各フェーズごとに 1 つ)と、その間に挟む人間による検証ステップによって成り立っています。この分離は意図的なものです。画像生成の前に 3D データを確認し、動画生成の前に画像を確認するのです。すべてのフェーズで反復作業が必要でした。最初の結果が間違っていることも珍しくなく、それは手法の失敗ではなく、プロセスの一部です。
Hugging Face で公開されている「3DREAL LoRA」には、軽量版(Light)、標準版(Strong)、そして新しい Strong v2 アダプターがあります。
ステップ 0 — 制作しながら再構築を想定する
最終的に完成させるのは実写のショートフィルムです。ゴールは、AI で再現可能な「3D デザインのアクション短編」を視聴者に届けることであり、単なる技術デモではありません。ただし、制作中は少し発想を変えておく必要があります。なぜなら、ここで下書きしたすべての要素が、後で AI によって再構築されるからです。
各ショットの最初のフレームには、重要な要素をすべて明確に映し出す必要があります。動画生成モデルは、各ショットの初回フレーム画像に基づいて動作します。もし車が 2 秒目になってから登場するよう設定すると、キーフレームには車が含まれないため、モデルがその場で車を創作せざるを得なくなります。そうなると映像がブレてしまいます。実際にこの問題に直面した際、プロンプトを強化するのではなく、3D シーン内のカメラ位置を変更することで解決しました。
各ショットには「1 つの明確なカメラワーク」を定義してください。複雑すぎたり過激すぎる動きは、リスタイリング(再構築)の過程で破綻する原因になります。具体的なアクションと、明確なアングルを選ぶことが重要です。
各カットで主人公の姿を必ず映し出してください。カット間での一貫性は、モデルが同じ要素を繰り返し認識することによって保たれます。
物理的な動きも重要です。一定の速度や、ジャンプ時の真のパラボラ曲線を描く必要があります。フォトリアルな映像において、不自然に調整されたような弧は違和感として映ります。
もしこれらのルールを守らないカットが出てきた場合、後で編集して切り取るか、あるいはカット自体を削除することも可能です。ただし、ブロック(構成)の段階で考慮しておく方が、はるかにコストを抑えられます。
フェーズ 1 — 3D シーン全体を統括するプロンプト
誰かが手動でモデルを作成したり、アニメーションをつけたり、カメラを配置したわけではありません。シーン全体は、Claude(Fable の超思考モード)が Blender MCP を介して Blender に接続されることで構築されました。この接続こそが、モデルに単なる会話ではなく、実際に Blender を制御させる鍵となります。
以下がフェーズ 1 のプロンプト全文です。あえて長めに設定しています。ここで組み込む制約が多ければ多いほど、その後の工程での予期せぬトラブルを減らせます。(列車と車の物語は一例に過ぎず、登場人物や舞台設定は自由に置き換え可能です。)
ultrathink. You are connected to a running Blender instance through the Blender MCP — use it to build, animate, verify and render a complete blocky 3D action scene. Work autonomously; stop and show me your results at the checkpoints marked VALIDATION. Do not move past a checkpoint without my explicit OK.
映画の例(物語・時代・舞台は自由に変更可能):
1930 年代のピックアップトラックが、単一の鉄道沿いに広がる廃墟となった砂漠の町を、蒸気機関貨物列車と競走する。中盤でトラックは巨大な土のジャンプロープに突入し、走行中の列車の上を飛び越える。対岸に着地した後は脱出する。登場人物は一切映さず、純粋なアクションシーンのみ。尺は約 17 秒、24fps、アスペクト比 2.39:1(解像度 1920x804)、6〜8カットで構成。
シーン構築のポイント:
- ブロックアウトスタイル:角を少し落とした単純な箱形状のみ使用(面取り幅は約 0.03)。物体ごとにフラットなグレー値を使い、トーン差で要素を区別する(車両は明るく、セットは暗く)。テクスチャやキャラクター、AI のリスタイラーが誤認識する恐れのある細かな小物は一切含めない。
- 地理構成:直線の鉄道線路と並行した土の道が、大きな建物ブロックに挟まれた回廊を走る。電柱は一定間隔で配置し、遠景には峡谷の壁が地平線を閉じるように描く。
- カメラワーク:カメラがジオメトリ(立体物)内部に入らないようセットを設計し、道路と線路の両方から明確な視界を確保する。
アニメーションのポイント:
- 列車は映画全体を通して一定の物理速度で走行させる(例:+Y 軸方向に 20m/s)。カットの調整のために列車の再生速度を変えるのではなく、カメラやトラックの動きを調整すること。
- トラックは列車と並走した後、ジャンプロープへと進路を変え、その跳躍は真のパラボラ軌道を描く。発射点・頂点・着地点はフレームスケジュールに基づいて計算し、Z 軸位置は 2 フレームごとにサンプリングする。手動で調整したような弧線は使わない。着地時のサスペンションのバウンドと、復旧時のわずかなスリップ(フィッシュテール)も追加する。
- トラックに微細な速度ノイズを加える(F カーブのノイズ修飾子を使用)。これにより、レールに固定されたような不自然さを排除し、リアルな走行感を演出する。
カメラ(本作の真の主役):
- ショットごとに 1 台ずつのカメラを設定し、タイムライン上のマーカーで各カメラの開始フレームを紐付けて編集します。 eased motion(緩やかな動き)は被写体ではなく、すべてカメラ側に実装されます。
- すべてのカメラに、手ブレを意識した軽微な揺れを加えます。これはチャンネルごとの f カーブノイズとして実装され、各チャンネルで固有の位相を持たせつつ、そのショットのフレーム範囲内に制限します。
- ショットリストは以下のように構成し、状況に応じて調整可能です:サイドトラッキングによるオープニング、後方からの低角度追跡、正面での対決(トラックがレンズに向かって突進する様子や、並走する列車)、二人組が到着した際の静的なランプの構図、トラックと列車を同時に捉えるフォローカメラ(トラックと共に飛行する瞬間)、飛行中のトラックの下から見た低アングル、そして着地・脱出シーンです。
- AI 向け設計ルール(厳格な制約事項。必ずチェックされます):
- ショットの最初のフレームでは、そのショットに登場するすべての主要要素(トラックと列車、およびランプなどのセットピース)が明確に確認できること。
- すべてのショットで、2 つの主人公となる被写体が同時に映っていること。
- ショットごとに 1 つだけ明確なカメラワークの意図を持つこと。ホイップパンや複合的な動きは禁止です。
- カメラが動く被写体を追跡する場合、カメラと被写体のキーフレームを同じフレームに設定し、線形補間(リニア・インターポレーション)を使用すること。イージング(緩急処理)の不一致は衝突の原因となります。
検証(エンジニアが先、ディレクターが後):
- サイトラインガードを実装して実行する。数フレームごとにアクティブなカメラから各ヒーロー役の被写体へレイキャストを行い、遮蔽がないか報告させる。
- クリアランスガードも同様に実装・実行する。各アクティブカメラから 6 方向に短いレイキャストを飛ばし、0.5m より手前にある物体があれば報告させる。
レイガードだけでは構図の良し悪しは判断できないため、カット地点と各ショットの中間点で静止画をレンダリングし、私に見せる前に必ず自分で確認すること。
- 映画をエンコードし、フレーム間のポップ(ffmpeg のシーン変更スコア)を検出する。スパイクが現れるのはカット部分のみであるべきだ。
検証:各ショットの確認フレームと、エンコード済みのブロック状の映像を見せろ。編集が適切に感じるまで私と一緒に反復して調整すること。
納品物(検証完了後):
- 最終的な .blend ファイル、24 fps の完全な JPEG/PNG シーケンス、エンコード済み映画、ショットごとのクリップ(フレーム数は 8k+1 を満たす必要がある:17, 33, 81, 97...)、各ショットの最初のフレームを PNG でエクスポートしたもの。
- ループ内のすべてのスクリプト化された ffmpeg コールでは -nostdin オプションを使用すること。
このフェーズの結果はあえて不格好にする。それが狙いなのだ。平坦で曖昧さのない「クレイ(粘土)」映画、つまり純粋なモーション情報のみを抽出するのだ。
image実際の Blender セッション — 全体シーンが構築され、Blender MCP を通じてアニメーション化されており、カメラはタイムラインマーカーに紐付けられている。クレイ映画 — あえて不格好で、純粋なモーション情報のみを表現したもの。
Blender を使った実際の制作セッションでは、MCP(Model Context Protocol)を通じてシーン全体を構築・アニメーション化し、カメラをタイムラインのマーカに紐付けました。
この粘土映画は、意図的に純粋な動きの情報だけを抽出したものです。
フェーズ 2:全画像共通のプロンプト
検証ゲート:ブロック状のフィルムが、目指す通りの映像になったと確信できるまで、このフェーズを開始してはいけません。
このフェーズには 2 つのサブステップがあり、順序は重要です。まず参照画像を準備し、次にキーフレームを作成します。
なぜ先に参照画像なのか?30 枚以上の生成画像で一貫性を保つのは運任せではありません。それは(a)プロンプトに毎回そのままコピー&ペーストする「標準的なスタイル記述」を使い、(b)各キーフレーム生成時に同じく検証済みの参照画像を挿入することで実現されます。
ultrathink。ブロック状のフィルムと、ショットごとのクリップ、そして各ショットの最初のフレームが手元にあります。ここで画像モデル(fal 上)を用いて、視覚的なアイデンティティを定義し、ショットごとに 1 枚ずつフォトリアルなキーフレームを生成してください。各 VALIDATION(検証ポイント)で停止します。
STYLE BLOCK(スタイル記述ブロック):
時代、場所、照明、フィルム種別、カラーパレットなどを含む「標準的なスタイル段落」を 1 つだけ記述してください(例:"1930 年代のアメリカ南西部砂漠。日差しに焼かれた峡谷にある廃墟となった土壁の町。夕暮れ時の黄金色の光、舞う塵、35mm アナモフィック時代のフィルム、温かみのあるコダックカラー、微細な粒状感")。この記述はプロジェクト内のすべての画像プロンプトで、一字一句変えずに再利用してください。言い換えたりしてはいけません。
必ず JSON 形式で返してください。translation フィールドのみ。他のフィールドは一切追加しないこと — 余計なフィールドを書こうとして本文がトークン上限で打ち切られる事故を防ぐため:
{"translation": "リライト全文"}
ヒーローリファレンスの作成
- 車、列車、環境のそれぞれについて、約 10 候補を生成します(テキストから画像への変換。nano-banana-pro がよく機能します)。どこでも統一されたスタイルブロックを使用してください。
- 番号付きグリッド形式のシンプルなローカル選定ページを作成してください。
- バリデーション:私の選択を待ってから、勝者となった素材の小さな欠陥(誤って含まれたテキストの除去など)は、再生成ではなく編集コマンドで修正します。
- 3 つの検証済みリファレンスを、映画の正確なアスペクト比に合わせてトリミングしてください。これは単なる見た目の問題ではありません。編集モデルは入力素材の「大多数」のアスペクト比に合わせるため、ワイドスクリーンのリファレンスと粘土フレームを組み合わせると、16:9 の出力として再構成されてしまいます。
キーフレーム(ショットごとに 1 枚ずつ。最も重要な工程):
- ショットごとに画像編集 API を 1 回呼び出します (nano-banana-pro/edit が推奨です。gpt-image-2 や flux-2-klein-9b も選択肢としてあります)。生成する画像は、1 番目が粘土モデルの最初のフレーム、2〜4 番目が検証済みの 3 つのリファレンス画像となります。
- プロンプト構造は自分で作成し、極めて精密に記述してください:
- "IMAGE 1 が幾何学形状と構図における唯一の正解です。これを EXACTLY(正確に)再現してください。カメラアングル、フレーム構成、各オブジェクトの位置・サイズ・シルエットはすべて同じままにします。表面の質感のみを塗り替えてください。リフレーミングや再センターリング、ズームイン/アウトは行わないでください。"
- "IMAGES 2-4 はスタイルのみを指すものであり、構図については完全に無視してください。"
- IMAGE 1 に対する数値的な空間分析:フレーム幅と高さに対する各要素の占有率(%)を記述し、フレーム端で切り取られている部分も含めて明記します。これは極端なクローズアップショットにおいて必須です。編集モデルが勝手にズームアウトして「改善」しようとするのを防ぐためです。
- 標準的なスタイルブロックは、原文通りそのまま記述してください。
- 自己チェック項目:"IMAGE 1 に 50% の透明度で重ねた際、二重のエッジが発生しないこと。"
- ショットごとに 20〜40 候補を生成します(バッチ数は 4 枚ずつ)。緊密なクローズアップショットでは API から拒否される場合があるため、その場合は再試行してください。
- 各候補のスコアリングは自動で行います。ffmpeg の edgedetect を使用して候補画像と粘土モデルの両方のエッジを検出し、PSNR(ピーク信号対雑音比)を計算してランク付けします。17 以上であれば合格ラインです。
- 確認用ページを作成してください。各候補画像について、隣に粘土フレームの画像を配置し、その下に 50% の透明度で重ね合わせた合成画像を表示させます。スコアも併記します。
- VALIDATION(検証):ショットごとの選定は私が行います。すべての候補を却下した場合は、何が問題かを聞き出し、空間分析の記述をより明確にしてからそのショットを再生成してください。
image fal 上で使用する画像モデルの選定
このフェーズは設計上モデル非依存であり、Fal 上で動作する強力なマルチ画像編集モデルであれば、どのモデルでもキーフレームを生成可能です。本パイプラインで検証済みの 4 つの選択肢をご紹介します。
Nano Banana Pro — edit:本作におけるデフォルトの選択です。このグループの中で最も指示に従う能力に優れており、「画像 1 が唯一の真実である」という契約を真摯に守ります。粘土フレームと 3 つのリファレンス画像を組み合わせたマルチ画像条件付けは、まさに本作業に必要な形状そのものです。また、外科的な修正ツールとしても機能します。例えば、受賞候補となったキーフレームで歪んでしまった車を置き換える際でも、他のピクセルは一切変更せずに済みます。
Seedream 5.0 Pro — edit:測定した中では最も強力な写実性を実現するモデルです。ブロック状の幾何学形状を「時代考証された写真」に近づける能力が突出しています。2 つの実用的なポイントがあります。まず、明示的に画像サイズ(image_size)を指定することです。自動プリセットを使用するとフレーム構成が崩れる可能性があるためです。次に、視点の説明は数値座標ではなく自然言語の文で記述することです。このモデルは自然言語の方が数値よりも理解度が高いことが確認されています。
GPT Image 2 — edit:世界知識とシーンロジックに優れており、時代考証に基づいた小道具や素材、看板などの描写が正確です。厳密な幾何学形状よりも、意味的な推論が必要なキーフレームを生成する際に最適な選択肢です。
FLUX.2 [klein] 9B — edit:オープンウェイトで高速処理が可能です。1 ショットあたり 20〜40 候補を生成するボリューム生産に適しており、幾何学形状の維持能力も堅実です。
いずれのモデルを選んでも、リファレンス画像、統一されたスタイルブロック、そしてオーバーレイによる品質管理(QC)は同じ手順で行います。パイプラインが重要視するのは筆の選び方ではなく、検証プロセスの有無です。
キーフレームのプロンプトは実際どのように記述するのか
本プロジェクトにおけるすべてのキーフレームプロンプトは、以下の 5 つの要素を指定された順序で組み合わせて作成されます。
- コントラクト(契約条項):最初の一行で明確に宣言します。「画像 1 が幾何学構造と構図に関する唯一の真実です。表面の塗り直しのみを行い、フレーム構成の変更や中心位置の移動、ズーム操作は禁止します」
- 各入力データの役割定義:「画像 2〜4 はスタイル情報のみであり、その構図は一切無視してください」。編集モデルはデフォルトで複数の入力をブレンドするよう設計されているため、これを明示的に禁止する必要があります。
- 画像 1 の空間的調査:フレーム内の各要素を特定するための数文です。「どの部分が大きく切り取られ、どの端に位置するか」「中心にあるものは何か」「すべての動きの方向はどちらか」、そして「絶対に含めてはいけないもの(例:『列車はカメラから遠ざかるため、機関車の前面やヘッドライト、レンズに向かう物体は一切描かない』)」を記述します。極端なクローズアップショットではこの部分が必須となり、モデルが安易にズームアウトしてしまうのを防ぐ唯一の手段となります。座標値よりも平易な自然言語が効果的です。「ピックアップトラックは中心からやや左寄りの後方から捉えられ、遠近法の消失点に向かって疾走している」といった表現が有効です。
- 標準的なスタイルブロック:プロジェクト内のすべてのプロンプトに、時代・場所・照明・フィルムストックに関する記述をそのままコピー&ペーストします。ショット間の一貫性はここでのみ保証され、他の箇所では維持されません。
- 自己チェック条項:「画像 1 に 50% の不透明度で重ね合わせ、道路や線路、建物、車両の二重輪郭が生じないようにする」。この条項は遵守率を数値的に向上させ、最終的な評価基準と完全に一致させる役割を果たします。
ショットが失敗し続ける場合、解決策は「プロンプトを強くする」ことではありません。重要なのは、より鋭い調査(要素 3)の実施か、映画の正確なアスペクト比に合わせて切り抜かれたリファレンス画像の使用です。あるいは、最初のフレームで重要な要素がすべて表示されていない場合は、Blender でカメラを動かすことです。
ここでの教訓を、あなたが苦労しないように共有します。
モデルは編集すると再構成されます。彼らの本能はより美しい画像を作ること——ズームアウト、再中心化、美しさを強調することです。それを防ぐのは、ジオメトリロックの言語と調査のパーセンテージです。これに収束するまでに数回の失敗を繰り返しましたが、オーバーレイツールが各失敗を即座に可視化したおかげでした。
アスペクト比の罠により、1 世代分の生成時間を無駄にしてしまいました。16:9 のリファレンスが、静かに 2.39:1 のクレイフレームを上書きしてしまったのです。リファレンスは必ず切り抜いてください。
ボリュームは機能です。ショットごとに 20〜40 件の候補がある中で、完璧な描画が存在します。あなたの仕事は期待するのではなく、選別することです。
勘や雰囲気ではなく、オーバーレイで検証してください。50% のブレンド時にエッジが二重になっている場合、透視図法がずれています——動画モデルはそのズレを忠実にアニメーション化してしまいます。

imageキーフレームレビューツール——各候補をクレイフレームの隣に配置し、その下に 50% ブレンドを重ねてアライメントスコアを確認します。
キーフレームレビューツール——各候補をクレイフレームの隣に配置し、その下に 50% ブレンドを重ねてアライメントスコアを確認します。
私たちはプロンプトを手書きしません。Fable に作成させ、その結果を確認して指示を出します(例:「車は正面から描く」「ズームアウトしない」など)。この反復作業こそが私たちの仕事です。
フェーズ 3:全動画共通のプロンプト
検証ゲート:すべてのキーフレームが粘土のフレームときれいに重なるまで、処理を開始してはいけません。
ultrathink。各ショットに粘土クリップがあり、各ショットごとに検証済みのキーフレームが 1 つあります。
これらを用いて、fal-ai/ltx-2.3-quality/render-to-real で最終映像を生成します。
ジョブごとの設定:
- video_url: ショットの粘土クリップ(動き)、image_url: 検証済みキーフレーム(外観)、num_frames: クリップに合わせた枚数(8001 枚以上)、24 fps。
- 設定:解像度 720p、強度 strong-v2、詳細リファイン ON(強さ 0.9)、音声生成 ON。
- ショットごとに「記述的なアクションプロンプト」を作成します。何の動きを、どの方向に、カメラはどのように動くか、そして音のヒント(エンジンの轟音、蒸気ピストン、着地時の衝撃など)を含めます。漠然とした雰囲気のプロンプトはこのモデルには不向きです。具体的なアクションが必要です。
実行手順:
- キーフレームごとに 3〜4 シードをレンダリングします(選択は容易で、品質は無料です)。
- 並列ジョブのローリングウィンドウ(約 10 本)を運用します。1 つが完了したら即座にダウンロードし、次のジョブを開始します。中断された場合でも再開できるよう、ジョブの状態はディスクに保存してください。
- 各動画については、生成結果を上段、粘土素材を下段にした垂直比較画像を作成します。
検証プロセス:各ショットから1本ずつ動画を選定し、それらを順序通りに編集して完成作品を納品します。
なぜこのモデルを採用したのか?「レンダリング映像から実写へ」の変換は、入力されたレンダリングの動きを正確に再現することに特化しています。そのため、前述の検証プロセスが極めて重要なのです。視点のズレを含むキーフレームを与えれば、そのズレも美しくアニメーション化します。一方、クリーンなフレームを与えれば、そこには厳密に追従します。なお、このステップはオープンソースです。LTX 2.3向けに訓練した「3DREAL LoRA」を Hugging Face で公開しており(Light と Strong の両バリエーションあり)、今回使用した fal エンドポイントでも同じパイプラインが動作しています。
3DREAL の内部仕組み
ここからは技術的な解説に移ります。この部分はオープンソース化されたものです。
ベースモデルは動画拡散トランスフォーマーの「LTX 2.3」です。3DREAL はこれの上に重ねた、コンテキスト内学習型の LoRA です。単なるテキスト条件付けではなく、CG クリップそのものを動き・レイアウト・カメラワークといった高密度な条件ストリームとして受け取り、さらに1枚のキーフレームを外観のアンカー(基準点)として利用します。
LoRA の訓練には、同じ構図を持つ 3D/CG レンダリングと実写映像のペアデータを使用しました。これにより学習されるのは、まさに必要なマッピングです。「表面は描き換えるが、幾何学的形状は維持する」という変換を習得します。これを発動させるトリガーワードは「3DREAL」です。
3 つのアダプターは、忠実度と変換強度のトレードオフを調整します:
- Light(軽量):穏やかな変換で、構造的な忠実度を最大化し、幻覚現象を最小限に抑えます。まずはここから始めるのがおすすめです。
- Strong(強力):複雑なシーン向けに、大胆な写実化を実現します。
Strong v2(新バージョン)は、マルチショットシーケンスと連動音声を用いて再学習されました。これにより、1 クリップ内のカット間でも一貫性が保たれ、同期された音声を生成できるようになり、話しているキャラクターの顔や唇の動きの表現も格段に向上しました。また、全体的な画質もシャープになっています。
知っておくべきエンドポイントの仕組み(fal-ai/ltx-2.3-quality/render-to-real):
video_url が動きを制御し、image_url が外観を決定します。この分離こそが、パイプライン全体を細かくコントロール可能にする鍵です。
num_frames は 8k+1 の条件を満たす必要があります(17, 33, 41, 81, 97 など)。これは時間軸の自動
原文を表示
imageWe built a short action film — a 1930s pickup racing a steam freight train through a desert town, and jumping over it — where everything is exactly what was designed upstream: the action, the animation, the camera placement, the timing, the cuts. This post explains the full pipeline, honestly: what worked, what failed, and how much iteration it actually took — and it doubles as the release notes for the new open-source 3DREAL Strong v2 adapter that renders the final pixels.
Update — 3DREAL Strong v2 is out and open source. The LoRA that powers the final pixels of this film now has a new Strong v2 adapter: multi-scene coherence across cuts, synced audio generation, much better talking characters, and sharper output overall. Weights (Light, Strong, Strong v2) are on Hugging Face, and the hosted render-to-real endpoint already runs it.
10 seconds, 12 shots, fast cuts — the 3D blockout below each shot, in black & white. Sound on.
10 seconds, 12 shots, fast cuts — the 3D blockout below each shot, in black & white. Sound on.
imageWhy this pipeline exists
The most recent video models are genuinely impressive. Image-to-video gets you beautiful motion from a single frame — but you can't direct it precisely. Reference-to-video models go further and are getting very good — but they remain expensive, and even the best of them don't give you perfect control: the exact camera path, the exact cut point, the exact trajectory of a truck flying over a train.
This project is not an argument against those models. It's an answer to one specific need: total control — not just of the camera, but of the action itself: what moves, where, when, and how it's framed and cut. With today's tools, most of them open.
The idea is to split the job:
A 3D blockout owns the geometry — cameras, motion, timing, cuts. Grey boxes, real physics, zero detail. (Blender, driven entirely by the AI through the Blender MCP — no hand modeling.)
Image models own the look — a set of validated reference images plus one "keyframe" per shot.
render-to-real owns the final pixels — powered by the 3DREAL LoRA for LTX 2.3, which we built and open-sourced on Hugging Face (now including the new Strong v2 adapter): an in-context LoRA whose specialty is turning a grey 3D blockout into photoreal footage while keeping the exact composition, camera move and layout of the input. Hosted endpoint: fal-ai/ltx-2.3-quality/render-to-real.
And one honest disclaimer up front: this is not a one-prompt magic trick. The pipeline runs on three prompts — one per phase — with a human validation step between each. That separation is deliberate: you check the 3D before generating images, you check the images before generating videos. Every phase involved iteration; first results were often wrong, and that's part of the method, not a failure of it.
The 3DREAL LoRA on Hugging Face — Light, Strong and the new Strong v2 adapters.
The 3DREAL LoRA on Hugging Face — Light, Strong and the new Strong v2 adapters.
Step 0 — Think about the recreation while you create
You're still making a real short film — the goal is a finished, watchable 3D-designed action short, not a tech demo. But during creation, you have to think a little differently, because everything you block out will later be recreated by AI:
The first frame of every shot must clearly show every key element. The video model is driven by each shot's first-frame image. If the car only enters at second 2, the keyframe never contains a car, and the model has to invent one mid-shot — it will drift. We hit exactly this: one shot opened on an empty ramp, and the fix was moving the camera in the 3D scene, not prompting harder.
One readable camera idea per shot. Overly complex or brutal moves can break the restyling. Concrete action, clear angles.
Keep the hero subjects visible in every shot. Cross-shot consistency comes from the model seeing the same elements again and again.
Physical motion. Constant speeds, true parabolas for jumps. Fake eased arcs read wrong once photoreal.
If a shot doesn't respect these rules, you can also simply cut it differently or drop it later — but it's much cheaper to think about it at blocking time.
Phase 1 — One prompt for the whole 3D scene
Nobody modeled, animated or placed a single camera by hand. The whole scene was built by Claude (Fable, in ultra-thinking mode) connected to Blender through the Blender MCP — that connection is what lets the model actually control Blender rather than just talk about it.
Here is the Phase-1 prompt, in full. It's long on purpose: the more constraints you encode here, the fewer surprises downstream. (The train/car story is an example — subjects and setting are fully swappable.)
ultrathink. You are connected to a running Blender instance through the Blender
MCP — use it to build, animate, verify and render a complete blocky 3D action
scene. Work autonomously; stop and show me your results at the checkpoints
marked VALIDATION. Do not move past a checkpoint without my explicit OK.
THE FILM (example — story, era and set are swappable):
A lone 1930s pickup truck races a steam freight train through an abandoned
desert town built along a single rail line. Mid-film, the truck hits a huge
packed-earth ramp, JUMPS OVER the moving train, lands on the far side and
escapes. Pure action, no characters visible. ~17 seconds, 24 fps, 2.39:1
(1920x804), 6-8 shots.
SCENE CONSTRUCTION:
- Blockout style: simple beveled boxes only (bevel ~0.03), per-object flat grey
values to separate elements by tone (vehicles lighter, set darker). No
textures, no characters, no small clutter that could be misread by an AI
restyler later.
- Geography: a straight rail line with a parallel dirt road through a corridor
of large building blocks; telegraph poles at regular intervals; distant
canyon walls closing the horizon.
- The set must be carved so cameras never sit inside geometry, with clear
sight-lines along both the road and the track.
ANIMATION:
- The train moves at a constant physical speed the entire film (e.g. 20 m/s on
+Y). Never retime the train to fix a shot — retime cameras or the truck.
- The truck races parallel to the train, veers onto the ramp, and its jump is
a TRUE PARABOLA: compute launch/apex/landing from the frame schedule and
sample z every 2 frames — no hand-eased arcs. Add landing suspension bounce
and a small fishtail on recovery.
- Add subtle speed noise to the truck (f-curve noise modifiers) so it never
looks rail-mounted.
CAMERAS (the star of the film):
- One camera per shot, cut together with timeline markers binding each camera
at its start frame. All easing lives in the cameras, not the subjects.
- Every camera gets light handheld tremble: per-channel f-curve noise with a
unique phase per channel, restricted to its shot's frame range.
- Shot list to adapt: side tracking opener, low rear chase, frontal duel (the
truck charging at the lens, the train alongside), static ramp profile as
the duo arrives, a follow-cam that launches WITH the truck over the train,
a low frontal under the flying truck, and a landing/escape shot.
- DESIGN-FOR-AI RULES (hard constraints, will be checked):
- The FIRST frame of every shot clearly shows every key element of that
shot (truck AND train AND any set piece like the ramp).
- Both hero subjects visible in every shot.
- One readable camera idea per shot; no whip pans, no compound moves.
- When a camera tracks a moving subject, key camera and subject on the SAME
frames with LINEAR interpolation — mismatched easing causes collisions.
VERIFICATION (engineer first, director second):
- Write and run a sightline guard: every few frames, ray-cast from the active
camera to each hero subject; report any occlusion.
- Write and run a clearance guard: 6-direction short ray-casts from each
active camera; report anything closer than 0.5 m.
- Ray guards can't judge framing: render still checks at every cut point and
at each shot's midpoint, and inspect them yourself before showing me.
- Encode the film and scan it for frame-to-frame pops (ffmpeg scene-change
scores): only the cuts should spike.
VALIDATION: show me the check frames per shot and the encoded blocky film.
Iterate with me until the edit feels right.
DELIVERABLES (once validated):
- The final .blend, the full JPEG/PNG sequence at 24 fps, the encoded film,
one clip per shot (frame counts must satisfy 8k+1: 17, 33, 81, 97...), and
each shot's FIRST frame exported as PNG. Use -nostdin in every scripted
ffmpeg call inside loops.
The result of this phase is deliberately ugly and that's the point: a flat, unambiguous "clay" film — pure motion information.
imageThe real Blender session — the whole scene built and animated through the Blender MCP, cameras bound to timeline markers.The clay film — deliberately ugly, pure motion information.
The real Blender session — the whole scene built and animated through the Blender MCP, cameras bound to timeline markers.
The clay film — deliberately, pure motion information.
Phase 2 — One prompt for all the images
Validation gate: only start this phase once the blocky film is exactly the film you want.
Two sub-steps live in this phase, and the order matters: references first, keyframes second.
Why references first? Because consistency across 30+ generated images doesn't come from luck — it comes from (a) a canonical style block reused verbatim in every prompt, and (b) the same validated reference images injected into every keyframe generation.
ultrathink. You have the blocky film, its per-shot clips, and each shot's
first frame. Now produce the visual identity and one photoreal keyframe per
shot, using image models on fal. Stop at each VALIDATION.
STYLE BLOCK:
Write ONE canonical style paragraph (era, place, light, film stock, palette
— e.g. "1930s American Southwest desert, abandoned earthen adobe town in a
sun-baked canyon, late-afternoon golden sun, dust haze, 35mm anamorphic
period film, warm Kodak color, fine grain"). Reuse it VERBATIM in every
image prompt of the project. Never paraphrase it.
HERO REFERENCES:
- Generate ~10 candidates each for: the car, the train, the environment
(text-to-image; nano-banana-pro works well). Same style block everywhere.
- Build me a simple local selection page (numbered grid).
- VALIDATION: wait for my picks. Fix small defects on winners with an edit
call (remove accidental text, etc.) instead of re-rolling.
- Crop the three validated references to the film's EXACT aspect ratio.
This is not cosmetic: the edit model matches the MAJORITY aspect of its
inputs — widescreen refs + one clay frame = recomposed 16:9 output.
KEYFRAMES (one per shot — the critical step):
- One image-edit call per shot (nano-banana-pro/edit; gpt-image-2 or
flux-2-klein-9b are alternatives): image 1 = the clay first frame,
images 2-4 = the three validated references.
- Prompt structure (write these yourself, be surgical):
- "IMAGE 1 is the ONLY source of truth for geometry and composition.
Reproduce it EXACTLY - same camera, same framing, every object at the
same position, size, silhouette. Repaint surfaces only. Do not reframe,
recenter or zoom."
- "IMAGES 2-4 are STYLE ONLY - ignore their composition entirely."
- A numeric SPATIAL SURVEY of image 1: each element's extent as % of frame
width/height, including what is cropped by the frame edges. Mandatory
for extreme close-ups, which edit models otherwise "improve" by zooming
out.
- The canonical style block, verbatim.
- A self-check clause: "overlaid at 50% on image 1, no double edges."
- Generate 20-40 candidates per shot, in batches of 4. Expect some API
refusals on tight close-ups; retry those batches.
- Score every candidate automatically: edge-detect both candidate and clay
(ffmpeg edgedetect), compute PSNR, rank. ~17+ is good.
- Build me a review page: per candidate, the image NEXT TO the clay frame,
and a 50% blend overlay UNDERNEATH, with its score.
- VALIDATION: wait for my picks per shot. Where I reject everything, ask
what's wrong, sharpen the survey language, and regenerate that shot.
imageWhich image model to use on fal
This phase is model-agnostic by design — any strong multi-image edit model on fal can produce the keyframes. Four options, all tested on this pipeline:
Nano Banana Pro — edit — the default for this film. Best instruction-following of the group: it takes the "image 1 is the only source of truth" contract seriously, and its multi-image conditioning (clay frame + three references) is exactly the shape of this job. It is also the surgical-fix tool — replace a deformed car on a winning keyframe while keeping every other pixel untouched.
Seedream 5.0 Pro — edit — the strongest raw photoreal push we measured: it takes blocky geometry the furthest toward "period photograph". Two practical notes: always request an explicit image_size (the auto presets can recompose the frame), and describe the perspective in plain sentences — it follows natural language better than numeric coordinates.
GPT Image 2 — edit — excellent world knowledge and scene logic (period-correct props, materials, signage); the right pick when a keyframe needs semantic reasoning more than strict geometry.
FLUX.2 [klein] 9B — edit — open weights and fast: the volume option when you generate 20–40 candidates per shot, with solid geometry preservation.
Whichever model you pick: same references, same canonical style block, same overlay QC. The pipeline doesn't care which brush you use — it cares that you verify.
How the keyframe prompts are actually written
Every keyframe prompt in this project is assembled from the same five ingredients, in this order:
The contract — one blunt opening line: "Image 1 is the ONLY source of truth for geometry and composition. Repaint surfaces only. Do not reframe, recenter or zoom."
The role of each input — "Images 2–4 are STYLE ONLY — ignore their composition entirely." Edit models blend inputs by default; you have to forbid it explicitly.
A spatial survey of image 1 — a few sentences that pin every element to the frame: what is huge and cropped by which edge, what sits at the center, which direction everything travels, and what must NOT appear ("the train travels away from the camera — no locomotive front, no headlamp, nothing faces the lens"). For extreme close-ups this part is mandatory: it is the only thing that stops the model from politely zooming out. Plain language beats coordinates: "the pickup is seen from directly behind, slightly left of center, racing away toward the vanishing point."
The canonical style block, verbatim — the same era/place/light/film-stock paragraph pasted unchanged into every prompt of the project. Cross-shot consistency lives here, nowhere else.
A self-check clause — "overlaid at 50% on image 1, no double edges on road, rails, buildings or vehicles." It measurably improves adherence, and it mirrors exactly how the result will be judged afterwards.
When a shot keeps failing, the fix is almost never "prompt harder". It is a sharper survey (ingredient 3), or references cropped to the film's exact aspect ratio, or — for a first frame that doesn't show every key element — moving the camera in Blender.
What we learned the hard way here, so you don't have to:
Edit models recompose. Their instinct is to make a nicer image — zoom out, recenter, prettify. The geometry-lock language and the survey percentages are what stop them. This took several failed rounds to converge; the overlay tool is what made each failure visible immediately.
The aspect-ratio trap cost us a full generation round: 16:9 references quietly overrode the 2.39:1 clay frame. Crop your refs.
Volume is a feature. With 20-40 candidates per shot, the perfect draw exists; your job becomes selection, not hoping.
Verify with overlays, not vibes. If edges double in the 50% blend, the perspective drifted — and the video model will faithfully animate that drift later.

imageThe keyframe review tool — every candidate next to its clay frame, 50% blend underneath, alignment score.
The keyframe review tool — every candidate next to its clay frame, 50% blend underneath, alignment score.
We don't write these prompts by hand. We ask Fable to write them, look at the results, and give direction ("the car must be dead frontal", "don't zoom out"). Iteration is the job.
Phase 3 — One prompt for all the videos
Validation gate: only start once every keyframe overlays its clay frame cleanly.
ultrathink. You have per-shot clay clips and one validated keyframe per shot.
Generate the final footage with fal-ai/ltx-2.3-quality/render-to-real.
PER JOB:
- video_url = the shot's clay clip (motion), image_url = the validated
keyframe (look), num_frames matching the clip (8k+1), 24 fps.
- Settings: 720p, intensity strong-v2, detail refine ON (strength 0.9),
audio ON.
- Write a DESCRIPTIVE ACTION PROMPT per shot: what moves, in which
direction, what the camera does, plus sound cues (engine roar, steam
pistons, landing impact). Generic mood prompts waste this model - it
needs the action.
EXECUTION:
- Render 3-4 seeds per keyframe (selection is cheap, quality is free).
- Rolling window of ~10 concurrent jobs: when one finishes, download it
immediately and launch the next. Persist job state to disk so the whole
run is resumable if interrupted.
- For every video, build a synchronized vertical comparison: generated on
top, clay underneath.
VALIDATION: I pick one video per shot; you cut the picks together in order
and deliver the final film.
Why this model: render-to-real is specialized in reproducing the exact motion of the render you feed it — which is precisely why all the verification above matters. Give it a keyframe with a perspective error, and it will animate that error beautifully. Give it a clean one and it locks on. And again: this step is open — the 3DREAL LoRA we trained for LTX 2.3 is on Hugging Face (Light and Strong variants), and the same pipeline runs through the fal endpoint used here.
How 3DREAL works under the hood
A quick technical detour, since this is the part we open-sourced.
The base model is LTX 2.3, a video diffusion transformer. 3DREAL is an in-context LoRA on top of it: instead of conditioning on text alone, the model receives the CG clip itself as a dense conditioning stream (motion, layout, camera) plus one keyframe as the appearance anchor. The LoRA was trained on paired sequences — 3D/CG renders aligned with photoreal footage of the same composition — so what it learns is precisely the mapping we need: repaint the surfaces, keep the geometry. The trigger word 3DREAL activates it.
The three adapters trade fidelity against transformation strength:
Light — gentle push, maximum structural faithfulness, fewest hallucinations. Start here.
Strong — aggressive photoreal push for complex scenes.
Strong v2 (new) — retrained with multi-shot sequences and joint audio: it stays coherent across cuts inside one clip, generates synced audio, handles talking characters (faces, lip motion) far better, and is sharper overall.
Endpoint mechanics worth knowing (fal-ai/ltx-2.3-quality/render-to-real):
video_url drives motion, image_url drives look — the split that makes the whole pipeline controllable.
num_frames must satisfy 8k+1 (17, 33, 41, 81, 97…): the temporal aut
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み