Sumica AI Studio を作りました - ローカルLLMとStable Diffusionで「お気に入り」を育てる画像生成環境

· Other

突然ですが、「Sumica AI Studio」という新しいプロダクトを作りました。ここでは、なぜこれを作ったのか、そして何ができるのかについて紹介したいと思います。

例えば、画像を生成するための指示を日本語で、

「静かな山の湖、朝のとても淡い霧、遠くに小舟が浮かんでいる、水彩画のような柔らかい光、周囲にゆるやかに広がる針葉樹の森」

と書いて、生成ボタンを押します。すると Sumica は、ローカルで動く LLM にそれを渡し、Stable Diffusion 向けの詳細な英語プロンプトへ翻訳・拡張しつつ、「とても淡い」や「ゆるやかに広がる」を Stable Diffusion の重み付け構文 (phrase:weight) へ自動で変換します。そして、出てきた画像は、そのままお気に入りとしてストックされ、ギャラリーで育てていけます。

実際に触ってみると、こんな見た目です。

Sumica AI Studio の全体像 - 左に日本語プロンプトと生成パラメータ、中央に生成された山湖の画像プレビュー、右に元プロンプト・LLMが拡張した英語プロンプト・モデル・Seed・Sampler などのメタデータが並ぶ

左のパネルに日本語プロンプトと生成パラメータ、真ん中が生成された画像のプレビュー、右のパネルには元プロンプト、LLM に拡張された英語プロンプト、モデル・Seed・Sampler・LoRA・Hires.fix などのメタデータが並びます。下部には「プロンプト拡張 → 画像生成 → 保存完了」の 3 段階の進捗インジケータも見えます。この 1 枚を見てもらえれば、Sumica のコンセプトはほぼ伝わるかなと思います。

そう、Sumica AI Studio は、LM Studio と Stable Diffusion Web UI (AUTOMATIC1111 / Forge) を API で連携させて、自然言語のプロンプト(= 日本語や英語の文)から高画質な画像を生成し、その結果を丸ごとギャラリーとして管理できるウェブアプリなんです。名前の「Sumica」は、日本語の「すみか」から取っています。お気に入りの画像たちが住み着いていく場所、というイメージです。ソースコードは以下の GitHub リポジトリで公開しています。ライセンスは AGPL-3.0-or-later です。

yoichiro/sumica - github.com

なぜ作ったのか

Stable Diffusion Web UI はとても強力です。もちろん、それ一つで画像生成の要件はほぼ満たせます。ただ、日々使っていると、こんな不便を感じることはないでしょうか。

  • プロンプトを毎回英語で細かく書くのがしんどい
  • LM Studio と Stable Diffusion を行ったり来たりするのがしんどい
  • 生成のたびに設定を組み立て直すのが面倒
  • 気に入った画像の「レシピ」(モデル、Sampler、LoRA など) が散らばって管理できない
  • PNG info でパラメータは辿れるけれど、タブを跨いで手作業でコピペするのが地味に辛い
  • 過去のお気に入りをもう一度作りたいのに、どの設定だったか思い出せない
  • 大量に生成した画像を、後から見返しやすい形で整理する仕組みがない

僕自身がそうでした。「ええっと、この画像を作ったときの Steps はいくつだったっけ…」と過去の生成履歴を漁ることが日常茶飯事で、モヤモヤしていたのが正直なところです。

Stable Diffusion 単体は「生成する」ことに全力を注いでいて、「育てる・見返す・繰り返す」という体験は自前で作らないといけない。ここに手を入れれば、画像生成はもっと楽しくなるはず。それが Sumica を作った動機です。

自然言語プロンプトを LM Studio に任せる

Sumica の一番の推しポイントが、この自然言語プロンプト拡張機能です。

日本語 (もちろん英語でも OK) で生成したい画像のイメージを書くだけ。すると、その入力を LM Studio 上のローカル LLM が Stable Diffusion 向けの詳細な英語プロンプトへ翻訳・拡張してくれます。プロンプトエンジニアリングの手間を、そのままローカルの LLM に肩代わりしてもらう、ということです。

ただ単純に翻訳するだけではないです。「特に」「かなり」「強く」「めっちゃ」といった強調表現を書くと、Sumica が LM Studio にそれらを自動的に (phrase:weight) 構文へ変換するよう指示します。日本語の「めっちゃ」なら重み 1.3、「ものすごく」なら 1.4、「控えめに」なら 0.8 といった具合です。上のスクリーンショットの右下、拡張プロンプトのところに (extremely faint morning mist:1.2)(gently spreading coniferous forest surrounding the scene:1.2) が並んでいるのがそれです。日本語の「とても淡い霧」「ゆるやかに広がる針葉樹の森」というニュアンスが、そのまま Stable Diffusion の重み付けに直結します。

Gemma 4 でも Qwen 3 でも Phi-4 でも、LM Studio でロードできる 8B〜14B クラスの LLM なら基本的にどれでも動きます。日本語入力を扱うことを考えると、日本語コーパスに強いモデルを選んでおくと変換の精度が安定しやすいかなと思います。手元のマシンのスペックに合わせて、好きなモデルを選んでください。

パラメータ選びは、プリセットで一気に

画像生成の設定って、ちゃんとやろうとするとかなりの項目をいじらないといけません。アスペクト比、向き、サイズ、Sampler、Scheduler、Steps、CFG、Seed、LoRA、Hires.fix、Refiner、VAE… 一つずつ思い出しながら選ぶのは、正直しんどいです。

Sumica では、SDXL の学習バケットを ⭐ で視覚化したプリセットピッカーを用意しています。1:1 / 4:3 / 9:7 / 3:2 / 16:9 / 21:9 / 3:1 のアスペクト比 × 向き × サイズ (S / M / L) の組み合わせを、クリック一発で選べます。SD1.5 用のプリセットももちろん別途用意しています。SD1.5 は学習時のアスペクト比バケットの制約が強いので、1:1 だけ S / M / L を出し、それ以外は M 固定にしてあります。この辺の背景は GitHub リポジトリの docs/arch/ の ADR - github.com に細かく書いてあるので、気になる方はどうぞ。

SDXL のプリセットピッカー - アスペクト比 (1:1 / 4:3 / 9:7 / 3:2 / 16:9 / 21:9 / 3:1) とサイズ (S / M / L) が並び、SDXL 純正の学習比率 (1:1 / 9:7 / 3:1) とバケットサイズ (M) には ⭐ が付いている

⭐ の付いた比率やサイズは SDXL 本来の学習バケットです。ここを外れると生成品質が落ちやすいので、迷ったら ⭐ 付きから選ぶのが安心、という判断が一目でできます。上の例では 1:1 の M (1024×1024) が両方 ⭐ 付きで、SDXL のスイートスポットにピタリと合っています。

そして、詳細設定パネルには LoRA、Hires.fix、Refiner、VAE (SDXL) までひととおり並んでいます。LoRA は複数同時掛けができて、それぞれ独立した強度スライダーで重みを調整可能。Hires.fix はチェックを入れるとアップスケーラー・アップスケール倍率・Hires 用ステップ数・Denoising strength まで一気に展開されます。

Hires.fix を有効化した状態の詳細パネル - アップスケーラー選択、アップスケール倍率 1.5x、Hires 用ステップ数、Denoising strength 0.50 のスライダーが並ぶ

アップスケーラーは 4x-UltraSharp や R-ESRGAN 系など、SD Web UI が認識しているものがそのままドロップダウンに並びます。「ここまで細かく制御したいのに、どこからアクセスするんだっけ」と迷うこともありません。とにかく Stable Diffusion の楽しい部分に、最短距離でたどり着けるように設計してあります。

まとめて生成で試行錯誤を加速する

一回のプロンプト拡張で、複数枚の画像をまとめて連続生成できる機能を用意しています。モードは 3 つです。

  • 枚数モード: 同一設定で N 枚
  • サイズモード: アスペクト比 × 向き × サイズの掛け合わせで一括
  • モデルモード: 利用可能な各チェックポイントで 1 枚ずつ試行

「このプロンプトなら、どのモデルが一番ハマるかな」と気になったら、モデルモードを選ぶだけで自動的に全チェックポイントで試してくれます。枚数指定をすれば、単純に「ガチャ」ができます。そして、モデルごとに最適なサイズが違っていたりするので、サイズモードもかなり便利です。

生成中は、経過時間・残り時間・進捗バーがリアルタイムで表示されます。もし「これは違うな」と思ったら、「生成を止める」ボタンで即座に中断できます。ここは Stable Diffusion の interrupt API を叩いていて、無駄に待たされる時間がありません。

まとめて生成モーダルのモデル切替タブ - 20 個の SDXL チェックポイントが並び、「20 モデルで生成する」ボタンで一括キューイングできる

モデル切替タブを開くと、手元にある全チェックポイントがずらっと並びます。今回の環境では 20 モデルが検出されていて、これを全部使えば同じプロンプトで 20 通りの解釈を並べて眺められる、というわけです。

保存はハイブリッド、Firebase かローカルか

生成した画像の保存先は、2 つ対応しています。

なにも設定せずに Sumica を起動したときは、生成した画像はサーバー内の server/outputs/ に自動保存されます。メタデータは metadata.json に書き込まれるので、あとから機械的に扱うこともできます。

Google Cloud の Firebase を使ったことがあれば、Google アカウントでサインインして Firebase Storage と Firestore に自動保存されるように設定できます。サーバー側にサービスアカウントキーをおく必要はないです。すべてブラウザ上のクライアントが Firebase にアクセスする設計にしていて、サーバーは Firebase から完全に独立しています。秘密ごとを持たないシンプルなサーバー、ということです。

サムネイルは 256px WebP を自動生成しており、ギャラリー表示はサクサク動きます。大量に画像を生成しても、一覧をブラウジングするストレスはほとんどありません。

ギャラリーで「お気に入り」を育てる

生成した画像は、履歴ギャラリーですべて振り返れます。日付でフィルタしたり、⭐ お気に入りだけに絞り込んだりできます。Hires や LoRA を使ったかどうかは、バッジで一目瞭然にしています。

履歴ギャラリー - 日付フィルタとお気に入り絞り込みで絞った状態で、⭐ お気に入り登録した水彩調の風景画が 6 枚並んでいる

サムネイルは 256px の WebP で軽く表示されるので、大量に画像が並んでもスクロールがモッタリしません。上のスクリーンショットは日付を今日に絞ってお気に入りに登録した 6 枚を並べたところで、まとめて生成で作った海辺の水彩風景 5 枚と、朝の霧に包まれた山湖 1 枚が仲良く並んでいます。同じレシピから毎回少しずつ違う「当たり」が出てくる感覚が伝わるでしょうか。

画像をダブルクリックするとライトボックスが開いて、10 個の生成パラメータ (モデル、Sampler、Seed、Steps、CFG など) が詳細情報パネルに表示されます。キーボードの ←→ で前後の画像に移動、Space で選択、F でお気に入り切り替えができます。View Transitions によるモーフアニメーションで、サムネイルからライトボックスへの遷移も気持ちよく決まります。

ライトボックス - 画像が大きく表示され、右上に前後・お気に入り・フルスクリーン・閉じるのコントロールが並び、下部に寸法・モデル・Seed・Sampler・Steps・CFG のメタデータバーが表示される

そして、ここが Sumica の最推しポイントですが、タイルから「フォームにロード」を押すと、その画像を生成したときの設定がまるっとフォームに戻ってきます。モデル、サイズ、Seed、Sampler、LoRA まで全部です。過去のお気に入りをベースに、ちょっとだけ変えて再生成する、というリミックス的な使い方が超楽です。「あの画像、もう一段いい感じにしたいな」を、そのまま実現できます。PNG info からのコピペ作業とは、完全にお別れです。

ランキングで「勝ちレシピ」を可視化する

これは Sumica のイチオシ機能です。⭐ お気に入りに登録した画像から「レシピ」(モデル / サイズ / Sampler / Scheduler / Steps / CFG / Hires / LoRA / Refiner / VAE の組み合わせ) を抽出し、まったく同じパラメータ組み合わせを 1 グループにまとめ、絶対お気に入り数の降順で Top-N として表示するタブを設けました。

シンプルですが、ここには意図があります。試行回数で信頼区間を割り引く統計的な並び順もあり得たのですが、実運用では「あてずっぽうで大量に生成して、気に入ったものだけ ⭐ を押す」というワークフローが自然に発生します。試行回数はユーザーの粘り強さの指標であって、レシピの魅力とは無関係。ならば、単純に「⭐ が積み上がった数」で並べるほうが素直だと判断しました (詳細は ADR 35 にまとめてあります)。

そう、「あー、なんだかんだで僕は SDXL + DPM++ 2M Karras + Steps 30 + このLoRA の組み合わせが一番当たるんだな」みたいな傾向が、視覚的にわかります。しかもランキング画面から「フォームに適用」ボタンを押せば、ワンクリックで全パラメータが生成フォームに書き戻されます。ランキングは「眺めて終わり」ではなく、次の生成のスタート地点になるわけです。

僕の「好み」を、道具のほうが可視化してくれる。これは想像以上に楽しいです。

ランキングタブ - 1 位が 6 件のお気に入り、2 位が 1 件のお気に入り。それぞれ SDXL バッジ、モデル名、1:1・1024×1024、Sampler・Scheduler・Steps・CFG が並び、「フォームに適用」ボタンも見える

このレシピカードの中には、モデル・サイズ・Sampler・Scheduler・Steps・CFG・Refiner・VAE がひととおり書かれています。「フォームに適用」ボタンを押せば、この全部が一発で生成フォームに戻ります。次の一枚を狙う地図として使える、というイメージが伝わるかなと思います。

動かすための準備

Sumica を使うために必要な事前準備は、大きく分けて 2 つです。

まずは LM Studio。LM Studio - lmstudio.ai からアプリをダウンロードして起動、お好みの LLM (最初は 8B〜12B クラスの Gemma 4 や Qwen 3 系あたりが手軽) をロードして、Local Server タブでポート 1234 のサーバーを起動します。慣れれば 10 分もかかりません。

次に Stable Diffusion Web UI。AUTOMATIC1111/stable-diffusion-webui - github.com の README を参考にインストールし、起動オプションに --api フラグを追加します。

推奨環境の目安としては、GPU の VRAM が SD1.5 なら 8GB 以上、SDXL や Hires.fix を快適に回すなら 12GB 以上あると安心です。もちろんこれは Sumica の要件というより、Stable Diffusion 本体の一般的な要件ですね。

準備が整ったら、Sumica 本体は以下の手順で立ち上がります。

git clone https://github.com/yoichiro/sumica.git
cd sumica
npm install
npm run dev

concurrently によって、フロントエンドとバックエンドがワンコマンドで同時に立ち上がります。ブラウザで http://localhost:5173 を開けば、そこはもう Sumica の世界です。

Firebase 連携は任意で、使いたければ Firebase Console でポチポチして、API キーなどを client/.env に貼り付けます。Firestore と Storage にセキュリティルールが必要になるのと、Authentication で Google アカウント認証を ON にします。

現時点でカバーしていないこと

現時点の Sumica は、Stable Diffusion Web UI の core (txt2img) と Hires.fix / Refiner / VAE / LoRA には対応していますが、ControlNet、ADetailer、Regional Prompter といった代表的な拡張機能にはまだ対応していません。ComfyUI や X/Y/Z プロット相当の軸比較生成、Civitai の LoRA メタデータからのトリガーワード自動挿入も、現時点ではスコープ外です。もしこの辺の機能がヘビーに必要な方であれば、当面は SD Web UI 側で完結させる方が幸せかなと思います。

Sumica は個人プロジェクトなので、対応時期を約束することはできません。しかし、機能を足すたびに ADR を書いて、なぜ足すのか・どんな代替案を却下したのかを丁寧に残しながら、一つずつ育てていこうかなと思っています。もし気になる機能があれば、GitHub の Issue で気軽に相談していただけると嬉しいです。

とはいえ、「素の Stable Diffusion + LoRA でお気に入りを積み上げる」というユースケースだけでも、Sumica のワークフローは日常の生成体験をしっかり書き換える力を持っているんじゃないかなと思っています。「自然言語で描く → お気に入りを積む → レシピをランキングで発掘する → フォームに戻して次の一枚を狙う」というループそのものが、Sumica のコアバリューだからです。

まとめ

今回は、自作した Sumica AI Studio について紹介してみました。

Stable Diffusion Web UI と LM Studio は、それぞれ単体でも十分強力なツールです。しかし、その二つを繋いで「自然言語で描く → 綺麗に生成 → 気に入ったものを育てる → レシピとして再利用する」というループを一気通貫で回せるようにすると、画像生成体験は驚くほど滑らかで、そして楽しいものになります。

まだローカル LLM を触ったことがない方には、Sumica はローカル AI で何かを作るときの心地よい入り口になるはずです。すでに Stable Diffusion や LM Studio を活用している方には、これまでの生成資産を「お気に入り」として整理し、そこからさらに良い一枚を狙いに行くための、頼れるパートナーになれるんじゃないかなと思っています。

ぜひ、皆さんの手元でも動かしてみてください。フィードバックや PR も大歓迎です。