Stable‑Diffusion.cpp : Moteur d'inférence diffusion léger en C++
Qu'est‑ce que stable‑diffusion.cpp ?
stable‑diffusion.cpp est une implémentation open‑source, pure C/C++ des modèles de diffusion modernes. Il apporte stable‑diffusion, Flux, Wan, Qwen‑Image, Z‑Image et d'autres algorithmes émergents à tout système capable de compiler du C++ — des serveurs Linux aux ordinateurs portables Windows, et même sur Android via Termux. Le projet est conçu pour être :
- Sans dépendance – aucune bibliothèque externe autres que le runtime ggml fourni.
- Multi‑plateforme – fonctionne sur Linux, macOS, Windows, Mac à base ARM et Android.
- Compatible GPU – prend en charge CUDA, Vulkan, Metal, OpenCL, SYCL, et même l'exécution uniquement CPU avec AVX / AVX2 / AVX512.
- Orienté performance – utilisation mémoire optimisée, Flash‑Attention, mosaïquage VAE, et accélération basée sur le cache.
La bibliothèque s'inspire de llama.cpp et ggml, ce qui en fait un choix naturel pour les développeurs habitués à ces écosystèmes.
Caractéristiques principales en un coup d’œil
| Fonctionnalité | Modèles supportés | Remarques |
|---|---|---|
| Génération d'image | SD1.x, SD2.x, SD‑Turbo, SDXL, SDXL‑Turbo, SD‑v1.5, SD‑v2.5, SD‑3, SD‑3.5 | Pipelines standard texte‑vers‑image |
| Édition d'image / Retouche | FLUX.1‑Kontext‑dev, Qwen‑Image‑Edit series | Prend en charge les retouches basées sur prompt |
| Génération vidéo | Wan2.1, Wan2.2 | Inclut la conditionnalité basée sur le mouvement |
| Upscale rapide | ESRGAN | Dimensionnement personnalisé des tiles |
| Décodage optimisé latence | TAESD | Décodage latent plus rapide |
| LoRA & ControlNet | SD1.5 | Même interface que stable‑diffusion‑webui |
| Modèles de cohérence latente | LCM, LCM‑LoRA | Ajouté en 2025 |
| Choix de backend | CPU, CUDA, Vulkan, Metal, OpenCL, SYCL | Architecture plugin |
| Formats de poids | .ckpt/.pth, .safetensors, .gguf | Chargement de poids flexible |
| API ligne de commande | sd-cli |
Génération d'image en un seul appel |
| API C | sd.h / sd.cpp |
Intégrer dans d'autres projets |
| Docker & CI | Docker images | Construire pour Linux & Windows |
Prise en main : Build & Run
1. Installer les dépendances
# Sur Ubuntu
sudo apt-get update && sudo apt-get install -y build-essential git cmake
# Sur macOS avec Homebrew
brew install cmake git
2. Cloner le dépôt
git clone https://github.com/leejet/stable-diffusion.cpp
cd stable-diffusion.cpp
3. Compiler à partir du code source
mkdir build && cd build
cmake .. -Dggml_backend=cpu # ou cuda, vulkan, metal, etc.
make -j$(nproc)
4. Télécharger les poids du modèle
git clone https://huggingface.co/stable-diffusion-v1-5
curl -L -O https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
5. Générer une image
./bin/sd-cli -m ../models/v1-5-pruned-emaonly.safetensors -p "a cyberpunk city at dusk"
La sortie PNG inclura également les embeddings du modèle sous forme de chaîne de tokens compatible web‑UI.
Astuces de performance
| Astuce | Explication |
|---|---|
| Utiliser GGUF | Le format .gguf est quantifié et se charge plus vite. |
| Activer Flash‑Attention | Réduit l'utilisation de VRAM de façon notable sur CUDA. |
| Mosaïquage VAE | Réduit la mémoire maximale pour les images volumineuses. |
| Cache des couches | ./bin/sd-cli --use-cache réutilise les états du modèle précédents. |
| Utiliser Metal sur macOS | Offre une accélération d’environ 40 % par rapport au CPU. |
Les benchmarks de performance sur un MacBook Pro 2020 (CPU 10 cœurs, GPU 3070) montrent la génération d'une image SD‑XL 512×512 en ~32 s sur CPU, réduite à ~2,5 s sur NVIDIA 3070 avec CUDA + Flash‑Attention.
Étendre la bibliothèque
L'API est délibérément légère. Pour ajouter de nouveaux modèles :
1. Ajouter une définition de modèle (.h/.cpp) et référencer le format ggml.
2. Mettre à jour CMakeLists.txt et ajouter une entrée dans docs/.
3. Soumettre un PR et vous le verrez dans la prochaine version !
Exemples d'extensions communautaires incluent :
- Python bindings – stable-diffusion-cpp-python
- Go wrappers – stable-diffusion
- Rust runtime – diffusion-rs
- Flutter widget – local-diffusion
Communauté & contribution
Le dépôt compte plus de 5 000 étoiles, 500 forks et une communauté de contributeurs active. Si vous souhaitez contribuer :
- Forker le dépôt.
- Créer des branches de fonctionnalités.
- Soumettre des PR avec des messages de commit clairs.
- Lancer les tests (make check).
- Participer au fil des issues pour discuter.
Le projet est également livré avec un ensemble d'images Docker prêtes à l'emploi pour un déploiement rapide en production ou dans les pipelines CI.
Pourquoi choisir stable‑diffusion.cpp ?
- Performance et simplicité – Profitez du maximum de votre GPU sans apprendre un nouveau framework.
- Couverture étendue des modèles – Du SD classique aux derniers modèles Flux et Wan.
- Personnalisable – Changez de backend, utilisez la quantification ou intégrez dans votre propre service C++.
- Développement en direct – Releases actives chaque mois et ajout de nouveaux modèles mensuellement.
Prêt à essayer ? Téléchargez les binaires précompilés depuis la page des releases ou construisez les vous-même. La documentation est constamment mise à jour, et la communauté est très serviable.
Étapes suivantes :
1. Choisissez un backend moteur qui correspond à votre matériel.
2. Téléchargez un modèle et générez une image test.
3. Plongez dans le dossier examples/ pour des pipelines plus avancés comme l'édition d'image ou la génération vidéo.
Bonne diffusion !