🖼️

RunwayMLで挑む、一貫性のあるAI絵コンテ自動生成

に公開

1. はじめに

こんにちは!Labdemyで長期インターンをしているガルシアです。

インターン業務の一環で、「企画絵コンテの制作を自動化する」というテーマに挑戦する機会がありました。広告や映画制作の現場において、絵コンテは企画の骨子を視覚的に共有する重要なツールですが、その作成には多大な時間と専門スキルが必要です。このボトルネックをAIで解消できないか、というのが今回の出発点です。

その具体的なアプローチとして、まず「シナリオテキストから、絵コンテを自動で作り出せるアプリケーション」開発に取り組みました。しかし、開発を進める中で、AIによる絵コンテ自動生成には大きな壁があることが分かりました。それが、シーンをまたいだキャラクターや画風の「一貫性」をどう保つか、という点です。

本記事では、この「一貫性」という最大の課題を解決するために採用したRunwayMLの強みと、それを活用した具体的なワークフロー、そして現時点での到達点と今後の課題についてご紹介します。

2. なぜRunwayMLだったのか?

絵コンテ制作における「一貫性」という課題を解決できる機能を軸に、アプリケーションとして実装可能かどうかという観点も加えて、複数の画像生成モデルを比較検討しました。

Midjourney、Stable Diffusionなど複数の有力なモデルを比較検討した結果、このプロジェクトの目的に最も合致したのがRunwayMLでした。
https://runwayml.com/

注意: 以下の比較表は、本プロジェクトに取り組んでいた時点(2025年6月頃)の情報を基に、ツール選定の判断材料として作成したものの一部です。AIモデルの機能やAPIの仕様は非常に速いスピードで変化するため、最新の情報とは異なる可能性がある点にご留意ください。

特徴項目 Midjourney (v6+) Stable Diffusion(SDXL/SD3) RunwayML (Gen-4 Turbo)
ビジュアルの一貫性 ◎ (Character Reference) △ (各リファレンス毎に要学習) ◎ (Image Reference)
公式APIの提供 ❌ (非公式クライアントのみ) ◎ (OSS/サードパーティ)

選定の決め手は、「Image Reference」機能をAPI経由で利用できたことです。

MidjourneyのCharacter Reference機能も非常に強力でしたが、当時は公式APIが提供されておらず、アプリケーションへの組み込みが困難でした。一方、RunwayMLは、アプリケーションからAPIを呼び出す際に、基準となるリファレンス画像を直接渡すことが可能でした。これが、「一貫性」という最大の課題をプログラムで解決する上で、決定的な要因となりました。

3. RunwayMLを活用した絵コンテ自動生成アプリの概要

RunwayMLの強みを活かし、以下のようなワークフローで動作するアプリケーションを開発しました。

3.1. アプリケーションのワークフロー

  1. シナリオ入力: まず、ユーザーが絵コンテにしたいシナリオを入力します。

  2. キービジュアル(リファレンス画像)の生成: LLM(Geminiなど)がシナリオを分析し、絵コンテ全体の基準となるキービジュアルを生成するためのプロンプトを1〜2枚分作成し、それを元に画像を生成します。ここで、ユーザーが任意のリファレンス画像をアップロードするオプションも用意しました。

  3. シーン分割とプロンプト生成: LLMがシナリオをシーンごとに分割し、それぞれの画像生成プロンプトを作成します。ここで、ユーザーは生成された各プロンプトを自由に編集・修正することができます。また、シーン内で特定の登場人物を描写したい場合は、対応するリファレンス画像のtag(例:@mainCharacter)をプロンプトに含めるように指示します。

  4. 画像生成: 作成された各シーンのプロンプトを、設定したリファレンス画像と共にRunwayMLに送信し、画像を生成します。

この処理の核となる部分を、以下にPythonのサンプルコードで示します。

# 公式ライブラリをインポート
from runwayml import RunwayML

# --- アプリケーション内での実行イメージ ---

# 1. クライアントの初期化
# 環境変数RUNWAYML_API_SECRETにAPIキーが設定されていることを想定
client = RunwayML()

# 2. APIに渡すデータの準備
# Step2で生成・設定したキービジュアル(リファレンス画像)のURL
key_visual_url = "https://path/to/key_visual.png"

# RunwayML APIに渡すリファレンス画像のデータ構造を作成します。
# RunwayMLでは一度に3枚までリファレンス画像を指定できます。
reference_images_data = [
    {
        # 'uri'には画像の場所(URLまたはデータURI)を指定します。
        'uri': key_visual_url,
        # 'tag'にはプロンプト内で使うための名前を指定します(省略可)。
        'tag': 'mainCharacter'
    }, 
]

# 生成したい1シーン分のプロンプトを用意
# プロンプト内で「@mainCharacter」と記述することで、どのリファレンス画像を参照するかを指定します。
prompt_for_a_scene = """朝の日差しが差し込む散らかった寝室で、
@mainCharacterが驚いた表情を浮かべてベッドから急に起き上がる。"""


# 3. RunwayML APIを呼び出して画像を生成
task = client.text_to_image.create(
    model='gen4_image',
    prompt_text=prompt_for_a_scene,
    # リファレンスデータを渡す
    reference_images=reference_images_data
).wait_for_task_output()


# 4. 生成された画像データを取得して保存
generated_image = task.outputs['image']
generated_image.save("output/scene1.png")

このワークフローによって、以下のように一貫性のある画像を生成できます。

シーン1:朝日が差し込む散らかった寝室で、@mainCharacterが驚いた表情を浮かべてベッドから急に起き上がる。

シーン2:制服に急いで着替えた@mainCharacterが、食パンを口にくわえながら玄関のドアを慌ただしく開ける。

シーン3:通学路の歩道を、@mainCharacterがリュックを背負って全力で走り抜けていく。

シーン4:教室の前に立ち、緊張した表情でプリントを手にした@mainCharacterが、クラスメートの前で緊張しながら発表をする。

ここで一貫性をさらに高める工夫として、RunwayMLが最大3枚のリファレンス画像を設定できる点を活かし、2枚目以降の画像を生成する際には、常に「1枚目に生成した画像」を追加のリファレンスに加えています。これにより、キービジュアルが持つ全体の一貫性に加え、最初のシーンが持つ雰囲気を引き継がせ、より連続性のある絵コンテを目指しました。

  1. (オプション) 動画化: 生成した各画像をRunwayMLのImage-to-Video機能にかけることで、シーンごとに短い動きのあるビデオコンテを作成することも可能です。

4. 現状の到達点と残された課題

RunwayMLを活用したアプリケーション開発によって、絵コンテの「一貫性」という課題に対して、有効なアプローチを見出すことができました。しかし、このアプリケーションにはまだ改善の余地があり、完璧なソリューションにはいくつかの課題が残されています。

  • リファレンス適用の判断: 時間経過や場面転換が大きいシーン(例:子供時代→大人)では、リファレンス画像をそのまま引き継ぐことが逆に不自然になることがありました。どのシーンでリファレンスを適用し、どのシーンでは外すか、といった判断を自動化するロジックが今後の課題です。

  • プロンプトの限界: AIが生成したプロンプトだけでは、企画者が意図する微妙なニュアンス(キャラクターの表情、構図など)を完全に表現しきれない場合がありました。最終的には、いくつかの重要なシーンで手動によるプロンプトの微調整が必要となるのが現状です。

5. まとめと今後の展望

今回は、シナリオテキストから絵コンテを自動生成するというアイデアの実現可能性を探りました。

その過程で、RunwayMLのImage Reference機能を活用することにより、AIによる絵コンテ自動生成における大きな課題であった「一貫性」について、有効な解決アプローチの一つを提示できたと思います。

現状ではまだ手動での調整が必要な部分も多く、完璧な自動化には至っていません。しかし、企画の初期段階において、アイデアを素早く視覚化する上で、AIが強力な支援ツールとなり得る可能性を感じさせる結果となりました。

最後までお読みいただき、ありがとうございました!

labdemy

Discussion