小説を入力したらマンガのコマ割りに変換するサービスを作Novel2Manga 〈第3回 AI Agent Hackathon応募作〉
はじめに
Novel2Mangaというサービスを作ってみました。
このサービスは、テキストで書かれた小説を自動的にマンガ形式に変換します。自分で書いた小説や記事をマンガとしてイメージできるようにしたり、著作権の消失した古典を漫画形式に再解釈することができるようになります。外国語や明治時代の文語も現代日本語口語に翻訳するので、とても読みやすくなります。
これは 第3回 AI Agent Hackathon with Google Cloudへの応募作です。
「AIエージェントが、現実を豊かにする」というテーマのもと、創作活動を支援し、より多くの人が物語創作を楽しめる世界を目指して作詞しました。
本記事では、このサービスの技術的な側面、特にLLMを活用した変換パイプラインの設計思想と実装について解説します。
工夫したこと
単純にテキストをバラしてコマに配置するのではなく、演劇の台本作成技法を援用して、物語を「見せる」形式に再構成することです。小説の地の文をすべてナレーションとして表示するのではなく、絵で表現できる部分は絵に任せ、キャラクターの対話と最小限のナレーションで物語を進行させます。この部分をプロンプトでチューニングして、実現しました。
また、小説ではない論述的なテキストが入力された場合は、自動的に「学習マンガ」形式に変換される仕組みも実装しています。
変換パイプライン概要
システムの中心は、複数回のLLMコールを組み合わせた多段階の変換パイプラインです。以下の図は、ユーザーの入力から最終的な画像出力までの流れを示しています。
このパイプラインの特徴は、各段階で異なるLLMモデルを使い分けていることです。軽量な処理にはGemini 2.5 Flash Liteを、思考力を問われる変換処理にはGemini 2.5 Proを使用するなど、コストとパフォーマンスのバランスを最適化しています。
技術的な工夫点
演劇アプローチによるスクリプト変換
最も重要な技術的挑戦は、小説の地の文を適切に視覚表現に変換することでした。単純に文章を分割してコマに配置すると、文字だらけのマンガになってしまいます。そこで、演劇の脚本作成で使われる「ト書き」の概念を導入しました。
プロンプトエンジニアリングにおいて、状況説明は最小限のナレーションに留め、可能な限り登場人物の表情、動作、背景の変化で表現するよう指示します。これにより、例えば小説の「彼は悲しそうに俯いた」という文章が、キャラクターの悲しい表情と俯く姿勢を描いたコマに変換されることを期待します。
チャンクベースの処理とキャラクター記憶
LLMは最近は100万トークンも受け付けられるようになりましたが、出力も同じだけ出来るわけではありません。Gemini 2.5 Proは、最大出力トークン数は65,536です。
これは、長文の小説を読み込ませると、かなり端折られてしまうことを意味します。特に、キャラクターの動機や成し遂げたことが問われる物語というフィールドにおいて、結果だけ要約されても非常に困ります。
そこで、物語を意味のある単位(チャンク)に分割し、各チャンクを順次処理する方式を採用しています。現状では4000トークンで切っています。こうすることで、4000トークン分の情報が、端折られずに演劇台本形式に変換されていることを期待します。
重要なのは、チャンク間でキャラクターの一貫性を保つことです。システムは各チャンクの処理結果からキャラクター情報を抽出し、次のチャンク処理時にコンテキストとして提供します。この抽出された情報は、チャンクを分析毎に引き継がれていくので、2チャンク目では1チャンク目のキャラクター情報を参照しますし、10チャンク目では、1~9チャンク目までのキャラクターの振る舞いを記録したものを参照します。これにより、物語の進行に伴うキャラクターの成長や変化を適切に反映できます。
メール通知機能
LLM処理は時間がかかるため、すべての処理を非同期で実行しています。ユーザーがテキストを投稿すると、システムはジョブIDを返却し、バックグラウンドで処理を進めます。処理完了時にはメール通知が送信され、ユーザーは結果を確認できます。
技術スタック
システムの実装には以下の技術を使用しています。
フロントエンド・フレームワーク
- Next.js 15.5 (App Router)
- React 19
- TypeScript 5.9
- Tailwind CSS v3
バックエンド・インフラ
- Node.js 24
- SQLite with Drizzle ORM
- Docker / Docker Compose
LLM・AI関連
- Google Gemini API (Flash Lite / Pro)
- 縦書きテキスト生成API (自作)
- BudouX (日本語改行位置最適化)
画像処理・レンダリング
- Canvas API (@napi-rs/canvas)
- 効果音・吹き出し自動配置アルゴリズム
認証・通知
- NextAuth v5 (メール認証)
- Nodemailer (処理完了通知)
開発・テスト環境
- Vitest (単体・統合テスト)
- Playwright (E2Eテスト)
- Biome (リンター)
ユーザー体験への配慮
著作権への配慮
サービス利用時には、ユーザー自身が著作権を持つ文章、または著作権が消失した文章のみを使用するよう明確に案内しています。他人の著作物を無断で翻案することは法的問題を引き起こす可能性があるため、この点は特に重要視しています。
透明性の確保
入力されたテキストが短すぎる場合や、物語性が低いと判定された場合、システムはAIによる創作的な補完や再構成を行う前に、必ずユーザーの同意を求めます。これにより、出力結果が入力と大きく異なることへの驚きや不満を防いでいます。
シェア機能
完成したマンガは時限付きの共有リンクを生成でき、SNSや友人との共有が可能です。リンクはいつでも無効化でき、プライバシーにも配慮した設計となっています。
Discussion