このページでは画像生成AIをStableDiffusion.cppで実行する方法を紹介します。
例えとして、v1-5-pruned-emaonly.safetensorsを使って画像生成を行います。
前提
以下の環境で試験を行っています。
| OS | Windows11 |
| メモリ | 32Gbyte |
環境構築
StableDiffusion.cppのインストール
下記サイトから環境にあったパッケージをダウンロードします。
対応するパッケージは以下を参考にしてください。
| 環境 | パッケージ |
| NVIDIAのGPU | sd-master-19bdfe2-bin-win-cuda12-x64.zip |
| AMDのGPU | sd-master-XXXXXXXX-bin-win-vulkan-x64.zip |
| GPUなし(CPUで実行) | sd-master-19bdfe2-bin-win-noavx-x64.zip |
CPUで実行し、動作するAVXが分かる場合は、対応するAVXのつくパッケージの方がいいです。
(対応するパッケージが表示されていない場合は、”Show All XX assets”をクリックすると表示されます。)
Releases · leejet/stable-diffusion.cpp
Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ - leejet/stable-diffusion.cpp
ダウンロードが完了したらzipを任意のフォルダに解凍してインストール完了です。
モデルのダウンロード
使用するモデルをダウンロードします。
v1-5-pruned-emaonly.safetensorsは以下のページにあります。

stable-diffusion-v1-5/stable-diffusion-v1-5 at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
StableDiffusion.cppの実行
以下のコマンドをパッケージを解凍したフォルダで実行します。
sd-cli -m ダウンロードしたモデルパス -p "プロンプト" -s -1
プロンプトは生成したい画像の説明を書いてください。ただしv1-5-pruned-emaonly.safetensorsは自然言語処理を行えないため、文ではなく単語を複数列挙する形で記述します。
例
以下のコマンドをsd-cli.exeのあるフォルダで実行することで、同じフォルダにoutput.pngが生成されました。
sd-cli.exe -m "F:\Stable-diffusion\v1-5-pruned-emaonly.safetensors" -p "a dog" -s -1

その他の引数
以下の引数を追加(変更)することで設定を変更できます。
| -n | ネガティブプロンプト |
| -H | 出力画像の高さ(指定なしで512) |
| -W | 出力画像の幅(指定なしで512) |
--steps | ステップ数 値が大きいほど処理に時間がかかります。 小さすぎると正しい画像が生成されません。 モデルにより最適値が異なります。 (指定なしで20) |
-o | 出力画像のパス (指定なしで ./output.png) |
詳細は以下
stable-diffusion.cpp/examples/cli/README.md at master · leejet/stable-diffusion.cpp
Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ - leejet/stable-diffusion.cpp
ほかのモデルの使用
このページではv1-5-pruned-emaonly.safetensorsを使用しました。StableDiffusion1.X、2.X、Turboでは同じ引数で動作しましす。
しかし他のモデルを使用するには別の引数を設定する必要があります。
各モデルの使用方法は以下のリンクから各モデルの設定を調べる必要があります。
GitHub - leejet/stable-diffusion.cpp: Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++
Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ - leejet/stable-diffusion.cpp