Floniks
ブログへ戻る
ショーケース約 8 分で読めます

ひと言から、ビジュアルノベルを出荷する:5 つの生成能力、1 本のパイプライン

企画書は「ミステリー・インタビューものにしよう」の一文だけ:エージェントは立ち絵の一貫性、キャラごとの固有ボイス、アンビエント BGM と分岐シナリオを備えた尋問型ビジュアルノベルを出荷。Floniks の 5 能力が 1 本のパイプラインで駆動し、声の修正は基本周波数の計測で検証しました。

著者: Elena Park
ひと言から、ビジュアルノベルを出荷する:5 つの生成能力、1 本のパイプライン

プロジェクトの企画書はたった一文でした:「ミステリー・インタビューものにしよう」。そこからエージェントは、ミステリー×ライトホラーの尋問型ビジュアルノベルを出荷しました——3 人の証人はそれぞれ 3 種類の表情で顔が完全に一致、キャラクターごとに固有の合成ボイス、アンビエントな BGM、分岐ダイアログ、そしてブラウザで遊べるビルド。Floniks の 5 つの能力——text-to-image、image-to-image、背景除去、TTS、text-to-music——が 1 本のパイプラインで動き、エージェントがエンドツーエンドで統括。人間が書いたプロンプトはゼロです。

本稿は全 2 回の後編です。前編《スクリーンショット 1 枚から、パズルゲームを作る》はこの手法の土台を扱っています。

証人選択画面:透過処理済みの 3 枚の立ち絵が深夜のギャラリーに合成されている——WASM 版の実機スクリーンショット
証人選択画面:透過処理済みの 3 枚の立ち絵が深夜のギャラリーに合成されている——WASM 版の実機スクリーンショット

一文が入り、ゲームデザインが出てくる

「ミステリー・インタビューものにしよう」は次のように展開されました。明示的に要求されたものは 1 つもありません:

人間が言ったことエージェントが分解した内容
「ミステリー・インタビュー」設定:名画《The Gazer(凝視者)》が深夜のギャラリーから盗まれる;3 人の証人を尋問し、表情を読み、犯人を告発する
(何も言っていない)職業・性格・秘密を持つ 3 人のキャラクター:テニスコーチ、経理、美術史講師
(何も言っていない)素材仕様:3 キャラ × 3 表情、通常/不気味の 2 シーン、オープニングボイス 3 本、アンビエントループ 1 曲
(何も言っていない)タイプライター字幕と表情切り替えを備えた分岐ダイアログエンジン
(何も言っていない)Lua の予約語の地雷(分岐フィールド名 goto)をリネームで回避

立ち絵パイプライン:同じ顔、4 つの段階

ビジュアルノベル最大の難所はキャラクターの一貫性——同じ顔が平静・緊張・恐怖の 3 状態を、透過背景で担わなければなりません。パイプラインは全行程 Floniks、MCP 経由です:

立ち絵パイプラインの 4 段階:背景付きの text-to-image ベース、背景除去後の透過立ち絵、そして image-to-image による同じ顔の表情バリエーション 2 種
立ち絵パイプラインの 4 段階:背景付きの text-to-image ベース、背景除去後の透過立ち絵、そして image-to-image による同じ顔の表情バリエーション 2 種

text-to-image のベース 1 枚が顔・衣装・佇まいを固定。image-to-image がそのベースから緊張と恐怖のバリエーションを派生——同じ顔のまま、表情だけが動く。背景除去が最終的な透過スプライトを産出。不気味なシーンも同じ方法:クリーンなギャラリー背景を image-to-image で「壁の絵がこちらを見ている」バリアントへ。

ボイス:キャラごとに固定の声色、計測器で検証

人間の要求は一行:キャラクターごとに性別に合った固有の声を固定すること。最初の「修正済み」はそれらしく聞こえました——追いの一言が音響分析を引き起こすまでは:3 つの声の基本周波数は実測 128、122、131 Hz。実質同じ声。まったく直っていなかったのです。

根本原因はパラメータのフィールド名ミス;プラットフォームは別の形の voiceId を期待していました。修正後の再計測:291、202、158 Hz——本当に異なる 3 つの声。キャラクターデータに声 ID を固定したので、再生成しても常に一貫します。

この教訓はあらゆる AI ワークフローに一般化できます:「直った」には計測器の読みが要る。印象では足りない。

スクリーンショット 1 枚の報告、3 つの根本原因

公開後、人間がスクショを 1 枚送ってきました:「声は出るが、誰も切り抜かれていない——3 人とも背景付きのままだ」。エージェントの処理チェーン:立ち絵 9 枚をすべて Floniks の背景除去へ;ついでに Web 版の無音を修正(ブラウザは初回操作まで AudioContext をサスペンドする);直した絵がまだ表示されないとき、第 3 の犯人——ブラウザキャッシュを特定し、テクスチャをリネームして突破。

症状の一文、エンジンのリファクタリング

開発終盤、人間が報告したのは解決策ではなく症状でした:「オーディオトラックの管理が混乱している——重なって積み上がる;体系的に解決して」。エージェントはエンジンのオーディオを3 チャンネルに再構築:効果音は重ねられるがフレーム内で重複排除;同じ曲の再リクエストで音楽は再スタートしない;ボイスチャンネルは新しいセリフの前に前のセリフを止め、会話が被ることは二度とない。パッチはバグを 1 つ直し、モデルはバグの類型ごと直す。コレクションの全ゲームがこれを継承しました。

証人の尋問:タイプライター字幕が一字ずつ打たれ、背後の壁から《The Gazer》が見つめる——WASM 版の実機スクリーンショット
証人の尋問:タイプライター字幕が一字ずつ打たれ、背後の壁から《The Gazer》が見つめる——WASM 版の実機スクリーンショット

5 つの能力、1 本のパイプライン

Floniks の各能力は、すでに待ち構えていたエンジン側の契約に着地します:

能力Floniks 側(MCP 経由のツール)エンジン側(データが契約)
立ち絵text-to-image ベース + image-to-image 表情テクスチャはファイル名でロード;呼び出し 1 回で表情切り替え
切り抜き背景除去透過 PNG がそのまま合成、エンジン改変ゼロ
ボイスキャラごとに固定した TTS専用ボイスチャンネル:新しいセリフが古いのを止める、重なりなし
アンビエントtext-to-music二重再生しないミュージックチャンネル
ストーリー——(エージェントが分岐ツリーを直接書く;LLM がエディタ)ホットリロードされる Lua;分岐データはプレーンテキストで diff 可能

前編と同じ結論が、ここではより鋭く:エージェントが速いのではない——道に関所がないのだ。 脚本、立ち絵、切り抜き、ボイス、スコア、テスト、デプロイ:1 セッション、手作業のファイル運搬ゼロ。

完全クロスプラットフォーム:同じスクリプトがネイティブでもブラウザでも

これはコレクションで最も要求の厳しいゲームです——立ち絵、ボイス、音楽、分岐ストーリー——そのすべてが、ネイティブ macOS、ネイティブ iOS の 120Hz、ブラウザの WebAssembly 上で、バイト単位で同一の 1 本の Lua スクリプトで駆動されます。ブラウザのオーディオアンロックのようなプラットフォームの癖はエンジン層が吸収し、スクリプトは何も知りません。本稿の 2 枚のスクリーンショットは、いずれもヘッドレスブラウザ内の WASM 版をライブ撮影したものです。

質問と回答

表情をまたいだキャラクターの一貫性はどう実現していますか?

キャラクターごとに text-to-image のベース 1 枚がアイデンティティを固定;緊張と恐怖のバリエーションは image-to-image でベースから派生させるため、変わるのは表情だけです。その後の背景除去で透過スプライトになります。

各キャラクターの声が変わらないことはどう保証しますか?

声 ID をキャラクターデータに固定し、TTS 生成のたびに同じ声色を再利用します——さらに修正は耳ではなく基本周波数の計測(291 / 202 / 158 Hz)で検証しました。

最初の一文の後、人間は何を提供しましたか?

一行の要求とバグ報告のスクリーンショットだけです。調査、分解、生成、デバッグ、オーディオエンジンのリファクタリングはエージェントの仕事でした。

ブラウザ版は本当に同じゲームを動かしていますか?

はい——同一の Lua スクリプトがバイト単位でネイティブと WASM ビルドを駆動し、エンジンが同一 API の背後でプラットフォームごとに Lua VM を切り替えます。

自分のパイプラインは Floniks MCP サーバーで接続を。この手法の出発点は前編でどうぞ。

タグ

#showcase#visual-novel#character-consistency#image-to-image#tts#text-to-music#mcp#agentic-development

関連記事

ひと言からビジュアルノベルを出荷:5 つの生成能力 | Floniks