SillyTavern拡張:会話から画像を自動生成する仕組みを入れてみた

🗂 目次

  1. はじめに

  2. 改造の概要

  3. どんなことができるのか?

  4. 技術的な仕組み

  5. 実際の使い方

  6. 今後の展望

  7. 導入手順

  8. おわりに(&GitHubリンク)

✏️ 1. はじめに


SillyTavernでキャラクターと会話してると、
「このシーン、画像で見たいな……」って思うこと、ありません?

今回紹介するのは、そんな気持ちに応える拡張機能です。
しかも、自分で書くのが苦手なので、このnoteはChatGPTに代筆してもらってます
一部、自分の文章もありますが、1割以下です。

この拡張では、**「会話の内容をもとにキャラクターの服装や場所、表情などを自動で要約し、Stable Diffusionで画像を生成」**できるようになります。
既存のSillyTavern拡張 sd-stablediffusion をベースに、ボタン1つで動くように改造しています。
改造は、ChatGPTとペアプログラミングしてました。

⚠️ 本記事に記載されているプロンプト構造には、登場人物の服装・表情・視覚的状態などを抽出する項目が含まれます。

出力結果や応用内容によっては、センシティブな描写(NSFW的なもの)を含む可能性がありますが、本記事の内容自体は技術的なプロンプト制御に関するものです。

AIモデルの出力は利用者の設定・使用環境により異なりますので、利用にはご注意ください。

✏️ 2. 改造の概要


ベースにしたのは、SillyTavern標準搭載の画像生成拡張 sd-stablediffusion です。
そこに新しく ex_image というボタンを追加し、そのボタンから以下の処理を走らせるようにしました:

  • 会話の履歴から直近の内容を取得

  • キャラクター設定から「体・服・性格・場所」などのタグを抽出

  • それらを英語に翻訳(プロンプト用)

  • ローカルLLM(Oobabooga)で要約を2段階に分けて実施

  • 最終的なプロンプトを組み立てて画像生成

✏️ 3. どんなことができるのか?


この改造を入れることで、こんなことができます:

  • 💬 会話中に「暑いね〜水着に着替えたい」→ 水着の画像が生成される

  • 📍 「ここは誰もいない教室だよ」→ 教室背景になる

  • 😠 「怒ってるんだからねっ!」→ 表情が怒り顔に変わる

しかも、同じ会話が続いている限り、プロンプトの再生成をスキップするキャッシュ機構付き

✏️ 4. 技術的な仕組み


この拡張のコアは、**「会話から画像プロンプトを自動生成する」**という部分です。
そのために内部では、以下のようなステップを踏んでいます:

🧠 ステップ1:キャラクター設定からタグを抽出

SillyTavernのキャラ説明に書かれたタグ(例:<体=銀髪,黒目>, <服=白シャツ>)を元に、
体・服・性格・場所などの特徴を取り出します。

🌍 ステップ2:タグを英語に翻訳(プロンプト用)

Stable Diffusionに渡すため、タグはすべて英語に変換します。
翻訳はローカルLLM(Oobabooga)を使って、JSONで受け取ります。

{
"clothe": "white shirt, pleated skirt",
"body": "silver hair, black eyes",
"place": "classroom"
}

💬 ステップ3:会話の要約(2段階)

会話の内容を元に、キャラの「状態変化」を2回に分けて推論:

  • 1回目:服装や場所など → 全チャット履歴(10000件)を使用

  • 2回目:表情や行動など → 直近のやり取り(6件)から推測

これもローカルLLMにJSONで回答してもらいます。

🎯 ステップ4:プロンプトを組み立て

最後に、これらの情報を組み合わせて最終的なプロンプトを作成します。

text

コピーする編集する

17 years old female, silver hair, black eyes, light smile, white shirt open, pleated skirt, calm and quiet, walking in a hallway, background classroom

このプロンプトをそのままStable Diffusion Web UIに投げて、画像を生成!

🧠 キャッシュ処理もあり

同じキャラでチャットが進んでいなければ、前回の推論結果を再利用することで処理を高速化しています。
また、キャラタグの翻訳結果もキャッシュしているので、無駄なLLM呼び出しを減らせます。

✏️ 5. 実際の使い方


✅ 使い方は超シンプル

  1. SillyTavernのチャット画面で会話を続ける

  2. Extensions→Generate Image→Extend Create Imageを選択!

  3. スペック次第だけど、1分ほど待つと、会話内容に応じた画像が生成されて表示される!

🧪 使用例

👤「今日は浜辺でのんびりしたいな」
→ 👙「水着姿でビーチにいる画像」が自動生成される

👤「ちょっと怒ってるよ…」
→ 😠「怒った表情で立ってるキャラ画像」が出力される

✏️ 6. 今後の展望


  • 💬 要約を「会話引き継ぎ」に活用
    → システムプロンプトに自動挿入して、新セッションでも状態を維持

  • 🖼️ 画像生成の完全分離(新拡張化)
    → sd-stablediffusionから切り離して独立拡張として配布予定

  • 🔄 プロンプトテンプレの編集UI対応
    → GUIで出力スタイルのカスタマイズが可能に?

✏️ 7. 導入手順


📁 手順概要:

  1. SillyTavern本体の sd-stablediffusion 拡張を開く

  2. index.js にコードを追記(GitHub参照)

  3. 必要なライブラリや設定(例:LLM APIのURL)を設定

  4. SillyTavernを再起動して完了!

GitHubにコード一式&設定サンプルも掲載してます👇

🔧 使用モデルについて

本拡張では、ローカルのLLMを用いて以下の処理を行っています:
(だって、ローカルじゃないとあれやこれやできないので・・・)

  • キャラクター設定タグの英訳

  • 会話内容の要約(服装・行動・場所・表情)

モデルには、
💡 aya-expanse-32b-abliterated.i1-Q4_K_M.gguf を使用しています。

✏️ 8. おわりに(&GitHubリンク)


今回は、SillyTavernの拡張 sd-stablediffusion に
「会話要約 → 自動プロンプト生成 → 画像出力」の流れを組み込んだ話を紹介しました。

自分では文章を書くのが苦手なので、この記事はほぼChatGPTに任せました
でも、この拡張は本当に自分で使ってて便利なので、ぜひ試してみてください!

GitHubリポジトリはこちら → https://github.com/Fuua0408/SillyTavern_stable-diffusion_custom

普段、こういうことをしないしがないエンジニア
(VB.NET,Winform主戦場 Web系技術苦手)
なので、とっても疲れました。。。
上げたソースは煮るなり焼くなりして供養してあげてくださいまし・・・


いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
SillyTavern拡張:会話から画像を自動生成する仕組みを入れてみた|亜風
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1