跳至主要內容

開發了 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 管理)
  • 通訊方式: 前端將後端以本機子行程 (subprocess) 的方式啟動,並透過 HTTP 進行通訊

主要功能

  • 從文字生成圖片 (txt2img)

安全檢查器 (safety checker) 已停用,因此也支援生成 NSFW 圖片。生成內容的使用與公開,須遵守所使用模型的授權條款以及使用者所在地的法令。

安裝方式

只要從 Releases 下載最新版的 EXE 檔案即可使用。

由於是個人開發的應用程式,瀏覽器可能會暫時封鎖下載。此時可從「⋯」選擇「儲存」,確認警告訊息後保留檔案即可。基於安全考量,安裝程式是透過 GitHub Actions 自動建置的。

事前需要先安裝 uv 指令。

uv 安裝方式: https://docs.astral.sh/uv/#installation

安裝程式為不需要系統管理員權限的使用者層級安裝,會安裝至 %LOCALAPPDATA%\Programs\Sodalite\。虛擬環境 (.venv) 並未一併封裝,首次啟動時前端會執行 uv sync 來安裝 torch 等相依套件。由於會產生數 GB 的下載量,可能需要數分鐘到數十分鐘不等。

安裝設定的成功與否會連同 uv.lock 的雜湊值一併記錄,若失敗,下次啟動時會自動重新進行設定。應用程式更新導致相依套件變更時,也會重新同步。

首次啟動時,會自動從 Hugging Face 下載預設的圖片生成模型 (stabilityai/sd-turbo)。

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可用取樣器 (sampler) 清單
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 後端組合起來的架構相關資料不多,過程中有不少摸索,最後採用了以本機子行程啟動、並透過健康檢查 (health check) 進行同步的方式。

免責聲明

本應用程式是用來執行圖片生成模型的工具,作者對於生成圖片的內容、使用、公開概不負責。生成內容的使用須由使用者自行負責。

生成圖片須遵守所使用模型的授權條款 (模型卡片 (model card) 中記載的使用條款、禁止事項等)。商業使用、再散布、NSFW 表現的可否等會依模型而異,使用前務必確認所使用模型的授權條款。

此外,生成圖片可能因提示詞或訓練資料而與既有著作物、商標、肖像等權利相似或牴觸。公開、散布、商業使用生成內容時,使用者須自行確認並判斷是否侵害著作權、商標權、公開權等第三方權利。

生成模仿或令人聯想到動畫、遊戲、電影等既有角色或其他智慧財產權 (IP) 的圖片,也可能構成著作權或商標權的侵害。尤其未經該 IP 權利人許可的商業使用、二次散布、性表現等可能構成權利侵害或違反使用條款,使用者須自行負責判斷。

生成或使用描繪真實人物的圖片 (冒充、誹謗中傷、未經同意的性方面用途等),可能違反使用者所在地的法令或平台的使用條款。遵守法令與使用條款為使用者的責任。

嚴禁生成、持有、散布受法令規範的內容。

總結

Sodalite 是出於想在本機環境輕鬆使用 Stable Diffusion 的動機而誕生的桌面應用程式。

透過將 WinUI3 與 Python 後端以本機子行程連接的架構,避開了 Web UI 類型工具常見的環境建置繁瑣問題,同時實現了原生應用程式的易用性。

有興趣的話,歡迎從 Releases 下載試用。

如果無法運作,歡迎提交 Issue。

評論

載入中...

發表評論