stable-diffusion.cpp は、ggml をベースにした純粋なC/C++実装で、Stable Diffusion系列やFlux、Wan、Qwen Image、Z-Imageなど多数の拡散モデルの推論を行うライブラリ兼CLI/サーバーツールです。外部依存を最小限に抑えつつ、CPUからCUDA・Vulkan・Metal・SYCLまで多様なバックエンドで画像・映像生成を実行できます。llama.cppと同じ設計思想で作られており、モデル変換やGGUF量子化にも対応しています。
コア部分はsrc/以下のC++コードで、model_loaderがsafetensors・ckpt・GGUFなど複数形式の重みを読み込み、conditioner.hpp内のSDConditionがテキストエンコーダ(CLIP・T5・LLM)からの条件付けテンソルを保持します。examples/cli/main.cppがコマンドライン引数を解析してSDCliParamsを構築し、stable-diffusion.hのAPI経由でサンプラーとVAEを呼び出して画像を生成します。examples/server/main.cppはhttplibを使ったHTTPサーバーで、非同期ジョブキューを介してsd_ctxを共有しながらリクエストを処理します。convert.cppはテンソルごとの型ルールを適用してGGUFやsafetensors形式へエクスポートする変換パイプラインを担っています。ビルドはCMakeLists.txtとdocker/Dockerfileに定義され、GGML_BACKEND_DLやGGML_CPU_ALL_VARIANTSといったオプションでバックエンドを切り替えます。
- STEP 01
releasesページからsd-cli実行ファイルをダウンロードするか、docs/build.mdに従ってCMakeでソースからビルドします。
- STEP 02
Hugging FaceからSD1.5などの.safetensorsファイルをcurlで取得し、models配下に置きます。
- STEP 03
./bin/sd-cli -m モデルパス -p プロンプト文字列 を実行すると、コンソールにロード進捗とサンプリングステップのログが表示されます。
- STEP 04
生成が終わるとoutput.pngが出力され、PNGのテキストチャンクにwebui互換の生成パラメータが埋め込まれているのが確認できます。
- STEP 05
examples/server/main.cppをビルドしたsd-serverを起動すると、httplib経由のHTTP APIで非同期に画像生成ジョブを投げられます。
- STEP 06
dockerディレクトリのDockerfileを使えばNode/pnpmで組み込みWeb UIも同時にビルドされ、コンテナ内でsd-cliまたはsd-serverを直接実行できます。
1枚以上のPNG画像(または動画モデルならmp4・webm等)が生成され、画像にはプロンプトやサンプラー設定などの生成パラメータがwebui互換形式でメタデータとして埋め込まれます。CLIログには読み込んだモデル情報、使用バックエンド、各サンプリングステップの進行状況が表示され、変換モードを使えば元の重みファイルをGGUF量子化形式に変換した新しいファイルも得られます。
READMEにも明記されている通り、開発が活発でAPIやコマンドラインオプションが頻繁に変わる可能性があります。
対応モデルの種類が非常に多い(SD1.x〜Z-Image、Wan、LTX-2など)ため、モデルごとに必要なdocs/*.mdの手順やパラメータが異なり、把握コストがあります。
大規模モデル(Flux、Wan14Bなど)を動かすにはGPUメモリやディスク容量が相当必要になると推測されますが、具体的な要件は提供資料からは確認できません。
GGML_BACKEND_DLやCPU_ALL_VARIANTSなどビルドオプションが多く、環境に合った適切なCMake設定を選ぶ必要があります。
C/C++環境で外部Python依存なしに拡散モデル推論を組み込みたい開発者、あるいはllama.cpp的な軽量スタックで画像・映像生成をローカル実行したい人に向いています。CLIとサーバーの両方のソースコードから、引数解析・モデル読み込み・条件付け・サンプリング・出力保存という一連の処理経路が具体的に確認でき、Dockerfileやdocs群も対応モデルごとに整備されているため、実行フローの信頼性は資料だけでも十分に判断可能です。ただし対応モデル数が多く変化も速いため、実際に使う際は該当モデルのdocsを都度確認するのが安全です。