日本語 | English
Stable Diffusion 画像生成デスクトップアプリ。一から独自実装したもの。
text-to-image: プロンプトから新しい画像を生成
image-to-image: 元画像を選択してプロンプトに沿って画像を変換。入力は中央を正方形にトリミングして 1024×1024 で処理し、変化の強さで元画像をどの程度維持するか調整可能
プロンプト強調: (語句)、(語句:1.3)、[語句] による語句単位の強調・弱調に対応
生成設定: サンプラー、シード、ステップ数、CFG スケール、解像度、バッチ枚数を指定
LoRA: 複数の LoRA を選択し、各ウェイトを指定して適用
生成履歴: 出力 PNG のメタデータを保持し、ギャラリーで閲覧・パラメータ再利用・保存・コピーが可能
GPU 自動選択: CUDA、Windows 版 ROCm (対応 Radeon)、DirectML、CPU の順で利用可能な実行環境を選択
llama.cpp チャット連携: OpenAI互換 API のローカル llama.cpp server と会話し、ツール呼び出しでプロンプト・ネガティブプロンプトを自動更新。更新前の状態へ戻すことも可能
フロントエンド: WinUI3 (.NET 9 / Windows App SDK)
バックエンド: Python 3.12 / FastAPI / diffusers (uv管理)
通信方式: フロントエンドがバックエンドをローカルサブプロセスとして起動し、HTTP経由で通信する
ブラウザ webui: WinUI3 を使わず、バックエンド単体をブラウザ用 UI 付きで起動できる (LAN内の他デバイスからアクセス可能。後述)
セーフティチェッカーは無効化しており、🔞NSFW 画像の生成も可能。生成物の利用・公開は各自の責任・使用モデルのライセンス・居住地の法令に従うこと。
GPU: VRAM 12 GiB 以上が推奨です。(VRAM 10 GiB でも一応動作します)
uv コマンドの Windows 版インストールが必要です。
https://docs.astral.sh/uv/#installation
Releases から、最新版の EXE ファイルをダウンロードしてください。
個人開発アプリのためブラウザで一時ブロックされますが、「⋯」→「保存」→「削除」ボタンの「∨」→「保持する」から保存可能です。
セキュリティー上、インストーラーは Actions から自動作成してます。
Sodalite/
├── backend/ # Pythonバックエンド (uv管理, FastAPI + diffusers)
│ ├── src/sodalite_backend/
│ │ ├── main.py # FastAPIエントリポイント
│ │ ├── config.py # 起動設定(ポート・モデルID)
│ │ ├── api/ # REST APIエンドポイント
│ │ ├── schemas/ # Pydanticリクエスト/レスポンスモデル
│ │ ├── inference/ # diffusersパイプライン管理・サンプラー
│ │ ├── imaging/ # PNGメタデータ埋め込み・画像保存
│ │ └── webui/ # ブラウザ用UI (HTML/JS/CSS, 静的配信)
│ └── tests/
├── frontend/Sodalite/ # WinUI3フロントエンド
│ ├── MainWindow.xaml(.cs) # バックエンド起動・ナビゲーション
│ ├── Views/GenerationPage # プロンプト入力・生成・画像表示
│ ├── ViewModels/ # GenerationViewModel
│ └── Services/ # BackendProcessManager, BackendApiClient
├── docs/ # セットアップ記録等のドキュメント
├── skills/ # 開発規約 (winui3-app, python-coding)
├── run.ps1 # アプリ起動スクリプト(ルート)
├── run-webui.ps1 # ブラウザ webui 起動スクリプト(LANアクセス)
└── CLAUDE.md
# バックエンドの依存関係インストール
cd backend
uv sync
初回起動時、バックエンドが Hugging Face から画像生成モデル(既定: stabilityai/sd-turbo)を自動ダウンロードする。
モデルフォルダーに krea2Turbo_v10_bf16.safetensors などの Krea 2 Turbo 重みを置き、モデル画面から選択する。ComfyUI 形式の scaled FP8 重みは、GPU では FP8 のまま保持し、使用する層だけ GPU 上で BF16 に復元して計算する。BF16 ファイルを追加で量子化することはない。初回選択時には、画像生成に必要な Qwen/Qwen3-VL-4B-Instruct テキストエンコーダーと Qwen/Qwen-Image VAE が Hugging Face からダウンロードされる。重みファイルは元の場所から読み込み、複製しない。
Turbo の推奨設定は 8 ステップ、CFG 0、Euler、1024×1024。モデル選択時に画面の値が自動設定され、使用しない CFG・ネガティブプロンプト・サンプラーの操作は無効になる。モデル種別は重みから判定するため、ファイル名を変更しても対応する。Krea 2 Turbo はテキストからの画像生成に対応し、画像からの生成は使用できない。
Radeon では ROCm を優先し、テキスト符号化・画像生成・VAE 復号を GPU 上で実行する。ROCm 用 Attention とパディング除去で高速カーネルを利用し、同じプロンプトの符号化結果を再利用する。VRAM に余裕があれば生成器を GPU に保持し、不足する場合は重みをブロック単位で転送する。CPU は使用しない重みの保管場所として使う。生成途中のステップ間でも中止でき、PNG には実際に使用した設定と各画像の Seed を保存する。実機での測定と再現手順は Krea 2 ROCm 検証 を参照。
モデルフォルダーに anima-base-v1.0.safetensors などの ANIMA チェックポイントを置き、モデル画面から選択する。初回選択時に、Qwen3 テキストエンコーダーやVAEなどの共通コンポーネントを Hugging Face の circlestone-labs/Anima-Base-v1.0-Diffusers から取得する。チェックポイントは元の場所から読み込み、複製しない。
ANIMA Base の目安は30〜50ステップ、CFG 4〜5、512²〜1536²ピクセル。アプリは ANIMA 固有のフロースケジューラーを使うため、サンプラー選択は適用されない。テキストからの画像生成に対応し、画像からの生成は使用できない。ANIMA のモデル重みは CircleStone Labs Non-Commercial License の対象です。利用前にライセンス条件を確認してください。
# ルートで実行: バックエンド同期 + フロントエンドビルド + 起動を一括で行う
./run.ps1
アプリを起動すると、WinUI3プロセスが自動的にPythonバックエンドを子プロセスとして起動する(空きポートを動的に検出し、ヘルスチェック完了まで待機)。アプリを閉じるとバックエンドの子プロセスも確実に終了する。
任意で、llama.cpp の OpenAI 互換サーバーを既定ポート 8080 で起動すると、画像生成画面の右下に「チャット/モデル名」が表示される。
# llama.cpp の配置先で実行する例
./llama-server.exe -m <モデルファイル.gguf> --port 8080
アプリは起動時と以後10秒ごとに http://127.0.0.1:8080/v1/models を確認する。3秒以内に応答しない、またはモデル一覧を取得できない場合はチャットを表示しない。起動を検出するとモデルを選択でき、チャットは生成設定の左側に開く。
チャットAIには現在のプロンプトとネガティブプロンプトが渡される。AIが専用ツールを呼び出した場合のみ入力欄を自動更新し、各プロンプト見出しの戻すボタンから更新直前の状態を復元できる。会話履歴はアプリ終了時またはチャットのリセット操作で消去される。
cd backend
./run.ps1
# 別ターミナルで
curl http://localhost:8000/api/v1/health
WinUI3 アプリを使わず、バックエンド単体をブラウザ用 UI 付きで起動できる。API と UI を 同一プロセス (同一オリジン) で配信するため、同一LAN内のスマホ・タブレット・別PCの ブラウザから画像生成を操作できる。
# ルートで実行 (uv sync + 0.0.0.0 バインドで起動)
./run-webui.ps1
# ポートを変える場合
./run-webui.ps1 -Port 9000
起動するとコンソールにアクセスURL (このPC用 http://127.0.0.1:8188/ と
LAN用 http://<このPCのIP>:8188/) が表示される。他デバイスのブラウザでLAN用URLを開く。
[!WARNING] webui は 無認証 で
0.0.0.0にバインドされ、同一LAN内の誰でもアクセスできる。 信頼できるネットワークでのみ使用すること。 インターネットに直接公開しないこと。 他デバイスから接続できない場合、Windows ファイアウォールで当該ポート (既定 8188) の 受信を許可する必要がある。
バージョンは MAJOR.MINOR.PATCH 形式で管理する。メジャーバージョンはユーザーが明示的に指定した場合のみ上げ、機能追加ではマイナーバージョンを、バグ修正のみではパッチバージョンを上げる。更新時は手動編集せず、ルートで次を実行する。
./bump-version.ps1 -Version x.y.z
このスクリプトはすべてのバージョン定義と backend/uv.lock を一括更新する。
skills/python-coding/SKILL.mdskills/winui3-app/SKILL.md# バックエンドのlint/format/test
cd backend
uv run ruff check --fix .
uv run ruff format .
uv run pytest
# フロントエンドのビルド
cd frontend/Sodalite
dotnet build -c Debug
エンドユーザー向けに NSIS 製インストーラー (Sodalite-Setup-<version>.exe) を生成できる。
makensis)# ルートで実行 (publish → backend ステージング → NSIS コンパイルを一括)
./installer/build-installer.ps1 -Version 1.0.0
# または
make installer
installer/dist/Sodalite-Setup-<version>.exe が生成される。
インストーラーは %LOCALAPPDATA%\Programs\Sodalite\ に app\ (フロントエンド) と backend\
(Python ソース) を配置する(管理者権限不要のユーザーインストール)。.venv は同梱されず、
初回起動時にフロントエンドが uv sync を実行して仮想環境を作成・依存パッケージを
インストールする (torch 等で数GB、数分〜数十分)。
%LOCALAPPDATA%\Sodalite\.venv-ready に依存関係のフィンガープリントとして記録される
(アプリ自身のバージョンを除いた uv.lock のハッシュを保存)。成功した場合のみマーカーが書かれ、失敗した場合は
次回起動時に自動で再セットアップが走る。アプリ更新で依存が変わった場合も再同期される。バックエンドは独自設計のREST API (/api/v1/*) を提供する。
| Method | Path | 説明 |
|---|---|---|
| GET | /api/v1/health | 起動確認・ロード中モデル・デバイス情報 |
| GET | /api/v1/samplers | 利用可能なサンプラー一覧 |
| POST | /api/v1/generations/text-to-image | txt2img生成 |
| POST | /api/v1/generations/image-to-image | 元画像とプロンプトによる img2img生成 |
詳細は backend/src/sodalite_backend/api/ を参照。
日本語 | English
Stable Diffusion 画像生成デスクトップアプリ。一から独自実装したもの。
text-to-image: プロンプトから新しい画像を生成
image-to-image: 元画像を選択してプロンプトに沿って画像を変換。入力は中央を正方形にトリミングして 1024×1024 で処理し、変化の強さで元画像をどの程度維持するか調整可能
プロンプト強調: (語句)、(語句:1.3)、[語句] による語句単位の強調・弱調に対応
生成設定: サンプラー、シード、ステップ数、CFG スケール、解像度、バッチ枚数を指定
LoRA: 複数の LoRA を選択し、各ウェイトを指定して適用
生成履歴: 出力 PNG のメタデータを保持し、ギャラリーで閲覧・パラメータ再利用・保存・コピーが可能
GPU 自動選択: CUDA、Windows 版 ROCm (対応 Radeon)、DirectML、CPU の順で利用可能な実行環境を選択
llama.cpp チャット連携: OpenAI互換 API のローカル llama.cpp server と会話し、ツール呼び出しでプロンプト・ネガティブプロンプトを自動更新。更新前の状態へ戻すことも可能
フロントエンド: WinUI3 (.NET 9 / Windows App SDK)
バックエンド: Python 3.12 / FastAPI / diffusers (uv管理)
通信方式: フロントエンドがバックエンドをローカルサブプロセスとして起動し、HTTP経由で通信する
ブラウザ webui: WinUI3 を使わず、バックエンド単体をブラウザ用 UI 付きで起動できる (LAN内の他デバイスからアクセス可能。後述)
セーフティチェッカーは無効化しており、🔞NSFW 画像の生成も可能。生成物の利用・公開は各自の責任・使用モデルのライセンス・居住地の法令に従うこと。
GPU: VRAM 12 GiB 以上が推奨です。(VRAM 10 GiB でも一応動作します)
uv コマンドの Windows 版インストールが必要です。
https://docs.astral.sh/uv/#installation
Releases から、最新版の EXE ファイルをダウンロードしてください。
個人開発アプリのためブラウザで一時ブロックされますが、「⋯」→「保存」→「削除」ボタンの「∨」→「保持する」から保存可能です。
セキュリティー上、インストーラーは Actions から自動作成してます。
Sodalite/
├── backend/ # Pythonバックエンド (uv管理, FastAPI + diffusers)
│ ├── src/sodalite_backend/
│ │ ├── main.py # FastAPIエントリポイント
│ │ ├── config.py # 起動設定(ポート・モデルID)
│ │ ├── api/ # REST APIエンドポイント
│ │ ├── schemas/ # Pydanticリクエスト/レスポンスモデル
│ │ ├── inference/ # diffusersパイプライン管理・サンプラー
│ │ ├── imaging/ # PNGメタデータ埋め込み・画像保存
│ │ └── webui/ # ブラウザ用UI (HTML/JS/CSS, 静的配信)
│ └── tests/
├── frontend/Sodalite/ # WinUI3フロントエンド
│ ├── MainWindow.xaml(.cs) # バックエンド起動・ナビゲーション
│ ├── Views/GenerationPage # プロンプト入力・生成・画像表示
│ ├── ViewModels/ # GenerationViewModel
│ └── Services/ # BackendProcessManager, BackendApiClient
├── docs/ # セットアップ記録等のドキュメント
├── skills/ # 開発規約 (winui3-app, python-coding)
├── run.ps1 # アプリ起動スクリプト(ルート)
├── run-webui.ps1 # ブラウザ webui 起動スクリプト(LANアクセス)
└── CLAUDE.md
# バックエンドの依存関係インストール
cd backend
uv sync
初回起動時、バックエンドが Hugging Face から画像生成モデル(既定: stabilityai/sd-turbo)を自動ダウンロードする。
モデルフォルダーに krea2Turbo_v10_bf16.safetensors などの Krea 2 Turbo 重みを置き、モデル画面から選択する。ComfyUI 形式の scaled FP8 重みは、GPU では FP8 のまま保持し、使用する層だけ GPU 上で BF16 に復元して計算する。BF16 ファイルを追加で量子化することはない。初回選択時には、画像生成に必要な Qwen/Qwen3-VL-4B-Instruct テキストエンコーダーと Qwen/Qwen-Image VAE が Hugging Face からダウンロードされる。重みファイルは元の場所から読み込み、複製しない。
Turbo の推奨設定は 8 ステップ、CFG 0、Euler、1024×1024。モデル選択時に画面の値が自動設定され、使用しない CFG・ネガティブプロンプト・サンプラーの操作は無効になる。モデル種別は重みから判定するため、ファイル名を変更しても対応する。Krea 2 Turbo はテキストからの画像生成に対応し、画像からの生成は使用できない。
Radeon では ROCm を優先し、テキスト符号化・画像生成・VAE 復号を GPU 上で実行する。ROCm 用 Attention とパディング除去で高速カーネルを利用し、同じプロンプトの符号化結果を再利用する。VRAM に余裕があれば生成器を GPU に保持し、不足する場合は重みをブロック単位で転送する。CPU は使用しない重みの保管場所として使う。生成途中のステップ間でも中止でき、PNG には実際に使用した設定と各画像の Seed を保存する。実機での測定と再現手順は Krea 2 ROCm 検証 を参照。
モデルフォルダーに anima-base-v1.0.safetensors などの ANIMA チェックポイントを置き、モデル画面から選択する。初回選択時に、Qwen3 テキストエンコーダーやVAEなどの共通コンポーネントを Hugging Face の circlestone-labs/Anima-Base-v1.0-Diffusers から取得する。チェックポイントは元の場所から読み込み、複製しない。
ANIMA Base の目安は30〜50ステップ、CFG 4〜5、512²〜1536²ピクセル。アプリは ANIMA 固有のフロースケジューラーを使うため、サンプラー選択は適用されない。テキストからの画像生成に対応し、画像からの生成は使用できない。ANIMA のモデル重みは CircleStone Labs Non-Commercial License の対象です。利用前にライセンス条件を確認してください。
# ルートで実行: バックエンド同期 + フロントエンドビルド + 起動を一括で行う
./run.ps1
アプリを起動すると、WinUI3プロセスが自動的にPythonバックエンドを子プロセスとして起動する(空きポートを動的に検出し、ヘルスチェック完了まで待機)。アプリを閉じるとバックエンドの子プロセスも確実に終了する。
任意で、llama.cpp の OpenAI 互換サーバーを既定ポート 8080 で起動すると、画像生成画面の右下に「チャット/モデル名」が表示される。
# llama.cpp の配置先で実行する例
./llama-server.exe -m <モデルファイル.gguf> --port 8080
アプリは起動時と以後10秒ごとに http://127.0.0.1:8080/v1/models を確認する。3秒以内に応答しない、またはモデル一覧を取得できない場合はチャットを表示しない。起動を検出するとモデルを選択でき、チャットは生成設定の左側に開く。
チャットAIには現在のプロンプトとネガティブプロンプトが渡される。AIが専用ツールを呼び出した場合のみ入力欄を自動更新し、各プロンプト見出しの戻すボタンから更新直前の状態を復元できる。会話履歴はアプリ終了時またはチャットのリセット操作で消去される。
cd backend
./run.ps1
# 別ターミナルで
curl http://localhost:8000/api/v1/health
WinUI3 アプリを使わず、バックエンド単体をブラウザ用 UI 付きで起動できる。API と UI を 同一プロセス (同一オリジン) で配信するため、同一LAN内のスマホ・タブレット・別PCの ブラウザから画像生成を操作できる。
# ルートで実行 (uv sync + 0.0.0.0 バインドで起動)
./run-webui.ps1
# ポートを変える場合
./run-webui.ps1 -Port 9000
起動するとコンソールにアクセスURL (このPC用 http://127.0.0.1:8188/ と
LAN用 http://<このPCのIP>:8188/) が表示される。他デバイスのブラウザでLAN用URLを開く。
[!WARNING] webui は 無認証 で
0.0.0.0にバインドされ、同一LAN内の誰でもアクセスできる。 信頼できるネットワークでのみ使用すること。 インターネットに直接公開しないこと。 他デバイスから接続できない場合、Windows ファイアウォールで当該ポート (既定 8188) の 受信を許可する必要がある。
バージョンは MAJOR.MINOR.PATCH 形式で管理する。メジャーバージョンはユーザーが明示的に指定した場合のみ上げ、機能追加ではマイナーバージョンを、バグ修正のみではパッチバージョンを上げる。更新時は手動編集せず、ルートで次を実行する。
./bump-version.ps1 -Version x.y.z
このスクリプトはすべてのバージョン定義と backend/uv.lock を一括更新する。
skills/python-coding/SKILL.mdskills/winui3-app/SKILL.md# バックエンドのlint/format/test
cd backend
uv run ruff check --fix .
uv run ruff format .
uv run pytest
# フロントエンドのビルド
cd frontend/Sodalite
dotnet build -c Debug
エンドユーザー向けに NSIS 製インストーラー (Sodalite-Setup-<version>.exe) を生成できる。
makensis)# ルートで実行 (publish → backend ステージング → NSIS コンパイルを一括)
./installer/build-installer.ps1 -Version 1.0.0
# または
make installer
installer/dist/Sodalite-Setup-<version>.exe が生成される。
インストーラーは %LOCALAPPDATA%\Programs\Sodalite\ に app\ (フロントエンド) と backend\
(Python ソース) を配置する(管理者権限不要のユーザーインストール)。.venv は同梱されず、
初回起動時にフロントエンドが uv sync を実行して仮想環境を作成・依存パッケージを
インストールする (torch 等で数GB、数分〜数十分)。
%LOCALAPPDATA%\Sodalite\.venv-ready に依存関係のフィンガープリントとして記録される
(アプリ自身のバージョンを除いた uv.lock のハッシュを保存)。成功した場合のみマーカーが書かれ、失敗した場合は
次回起動時に自動で再セットアップが走る。アプリ更新で依存が変わった場合も再同期される。バックエンドは独自設計のREST API (/api/v1/*) を提供する。
| Method | Path | 説明 |
|---|---|---|
| GET | /api/v1/health | 起動確認・ロード中モデル・デバイス情報 |
| GET | /api/v1/samplers | 利用可能なサンプラー一覧 |
| POST | /api/v1/generations/text-to-image | txt2img生成 |
| POST | /api/v1/generations/image-to-image | 元画像とプロンプトによる img2img生成 |
詳細は backend/src/sodalite_backend/api/ を参照。