メインコンテンツまでスキップ

Stable Diffusion デスクトップアプリ「Sodalite」を開発した

Stable Diffusion で画像を生成する方法は数多くありますが、Web UI 系のツールは Python 環境の構築や依存関係の管理が煩雑になりやすいです。

もっと手軽に、インストーラーをダウンロードするだけで使えるデスクトップアプリが欲しくなり、Sodalite を一から開発しました。

GitHub: https://github.com/Himeyama/Sodalite

Sodalite とは

Sodalite は、Stable Diffusion による画像生成を行う Windows デスクトップアプリです。

フロントエンドからバックエンドまでを実装した点が特徴です。

  • フロントエンド: WinUI3 (.NET 9 / Windows App SDK)
  • バックエンド: Python 3.13 以上 / FastAPI / diffusers (uv 管理)
  • 通信方式: フロントエンドがバックエンドをローカルサブプロセスとして起動し、HTTP 経由で通信します

主な機能

  • テキストから画像を生成します (txt2img)

セーフティチェッカーは無効化しており、NSFW 画像の生成にも対応しています。生成物の利用・公開については、使用したモデルのライセンスと利用者の居住地の法令に従う必要があります。

インストール

Releases から最新版の EXE ファイルをダウンロードするだけで利用できます。

個人開発アプリのためブラウザで一時的にブロックされる場合がありますが、「⋯」から「保存」を選び、警告を確認したうえで保持してください。セキュリティー上、インストーラーは GitHub Actions 上で自動作成しています。

事前に uv コマンドのインストールが必要です。

uv のインストール: https://docs.astral.sh/uv/#installation

インストーラーは管理者権限不要のユーザーインストールで、%LOCALAPPDATA%\Programs\Sodalite\ に配置されます。仮想環境 (.venv) は同梱しておらず、初回起動時にフロントエンドが uv sync を実行して依存パッケージ (torch など) をインストールします。数 GB のダウンロードが発生するため、数分から数十分かかります。

セットアップの成否は uv.lock のハッシュとともに記録され、失敗した場合は次回起動時に自動で再セットアップが走ります。アプリ更新で依存関係が変わった場合も再同期されます。

初回起動時には、既定の画像生成モデル (stabilityai/sd-turbo) が Hugging Face から自動ダウンロードされます。

GPU 要件

VRAM 12 GiB 以上を推奨しますが、10 GiB でも一応動作します。

開発者向けセットアップ

ソースからビルドして動かす場合の手順は以下の通りです。

# バックエンドの依存関係インストール
cd backend
uv sync
# ルートで実行: バックエンド同期 + フロントエンドビルド + 起動を一括で行う
./run.ps1

バックエンド単体で動作確認したい場合は、以下のようにします。

cd backend
./run.ps1
# 別ターミナルで
curl http://localhost:8000/api/v1/health

Python バックエンドの Lint・フォーマット・テストは以下のコマンドで実行します。

cd backend
uv run ruff check --fix .
uv run ruff format .
uv run pytest

フロントエンドのビルドは以下の通りです。

cd frontend/Sodalite
dotnet build -c Debug

コーディング規約は skills/python-coding/SKILL.mdskills/winui3-app/SKILL.md にまとめています。

API 概要

バックエンドは独自設計の REST API (/api/v1/*) を提供します。

メソッドパス説明
GET/api/v1/health起動確認・ロード中モデル・デバイス情報
GET/api/v1/samplers利用可能なサンプラー一覧
POST/api/v1/generations/text-to-imagetxt2img 生成

ディレクトリ構成

Sodalite/
├── backend/ # Pythonバックエンド (uv管理, FastAPI + diffusers)
│ ├── src/sodalite_backend/
│ │ ├── main.py # FastAPIエントリポイント
│ │ ├── config.py # 起動設定(ポート・モデルID)
│ │ ├── api/ # REST APIエンドポイント
│ │ ├── schemas/ # Pydanticリクエスト/レスポンスモデル
│ │ ├── inference/ # diffusersパイプライン管理・サンプラー
│ │ └── imaging/ # PNGメタデータ埋め込み・画像保存
│ └── tests/
├── frontend/Sodalite/ # WinUI3フロントエンド
│ ├── MainWindow.xaml(.cs) # バックエンド起動・ナビゲーション
│ ├── Views/GenerationPage # プロンプト入力・生成・画像表示
│ ├── ViewModels/ # GenerationViewModel
│ └── Services/ # BackendProcessManager, BackendApiClient
├── docs/ # セットアップ記録等のドキュメント
├── skills/ # 開発規約 (winui3-app, python-coding)
├── run.ps1 # アプリ起動スクリプト(ルート)
└── CLAUDE.md

WinUI3 と Python バックエンドを組み合わせる構成は資料が少なく手探りの部分も多かったですが、ローカルサブプロセスとして起動しヘルスチェックで同期を取る方式に落ち着きました。

免責事項

本アプリは画像生成モデルを実行するためのツールであり、生成された画像の内容・利用・公開について作者は一切の責任を負いません。生成物の利用はすべて利用者自身の責任で行ってください。

生成画像には、使用したモデルのライセンス (モデルカード記載の利用規約・禁止事項等) が適用されます。商用利用・再配布・NSFW 表現の可否等はモデルごとに異なるため、利用前に必ず使用モデルのライセンス条項をご確認ください。

また、生成画像がプロンプトや学習データに由来して既存の著作物・商標・肖像等の権利に類似・抵触する可能性があります。生成物を公開・配布・商用利用する際は、著作権・商標権・パブリシティー権等の第三者の権利を侵害しないよう、利用者自身でご確認・ご判断ください。

アニメ・ゲーム・映画等の既存キャラクターやその他 IP (知的財産) を模倣・想起させる画像の生成についても、著作権・商標権の侵害となる可能性があります。とくに当該 IP の権利者が許諾していない商用利用・二次配布・性的表現等は権利侵害・規約違反となるおそれがあるため、利用者自身の責任でご判断ください。

実在の人物を描写する画像 (なりすまし、誹謗中傷、性的な文脈での無断使用等) の生成・利用は、利用者の居住地の法令やプラットフォームの規約に違反する場合があります。法令・規約の遵守は利用者の責任となります。

法令で規制される内容の生成・所持・頒布は固く禁止します。

まとめ

Sodalite は、Stable Diffusion をローカル環境で手軽に使いたいという動機から生まれたデスクトップアプリです。

WinUI3 と Python バックエンドをローカルサブプロセスで連携させる構成により、Web UI 系ツールにありがちな環境構築の煩雑さを避けつつ、ネイティブアプリとしての使い勝手を実現しました。

興味のある方は、ぜひ Releases からダウンロードして試してみてください。

動作しなかったら、Issue お願いします。

コメント

読み込み中...

コメントを投稿する