Rust Stable Diffusion with diffuser-rs

graph LR M["model.ot"]-->A A["diffuser-rs (Rust Stable Diffusion library)"] <--"FFI (Foreign Function Interface)"--> C["C++ libtorch"]
Prerequisites
- Source code: diffusers-rs
HUGGINGFACE_TOKEN: Get it from here.- weights : 1.5 or 2.1
Manual Setup
For huggingface model v1.5, This will manual convert the weights so you will need installed Python, numpy, PyTorch.
git clone https://github.com/LaurentMazare/diffusers-rs
cd diffusers-rs
. ./scripts/download_weights.sh REPLACE_HERE_WITH_YOUR_HUGGINGFACE_TOKEN
Lazy Setup
For huggingface model v1.5
mkdir -p data
wget https://huggingface.co/lmz/rust-stable-diffusion-v1-5/resolve/main/weights/bpe_simple_vocab_16e6.txt -P data/
wget https://huggingface.co/lmz/rust-stable-diffusion-v1-5/resolve/main/weights/pytorch_model.ot -P data/
wget https://huggingface.co/lmz/rust-stable-diffusion-v1-5/resolve/main/weights/unet-inpaint.ot -P data/
wget https://huggingface.co/lmz/rust-stable-diffusion-v1-5/resolve/main/weights/unet.ot -P data/
wget https://huggingface.co/lmz/rust-stable-diffusion-v1-5/resolve/main/weights/vae.ot -P data/
For huggingface model v2.1
mkdir -p data
wget https://huggingface.co/lmz/rust-stable-diffusion-v2-1/resolve/main/weights/bpe_simple_vocab_16e6.txt -P data/
wget https://huggingface.co/lmz/rust-stable-diffusion-v2-1/resolve/main/weights/clip_v2.1.ot -P data/
wget https://huggingface.co/lmz/rust-stable-diffusion-v2-1/resolve/main/weights/unet_v2.1.ot -P data/
wget https://huggingface.co/lmz/rust-stable-diffusion-v2-1/resolve/main/weights/vae_v2.1.ot -P data/
Run
For huggingface model v1.5 (has flag --sd-version v1-5)
cargo run --example stable-diffusion --features clap -- --prompt "A rusty cat robot holding a fire torch." --sd-version v1-5
For huggingface model v2.1
cargo run --example stable-diffusion --features clap -- --prompt "A rusty cat robot holding a fire torch."