Stable‑Diffusion.cpp: Motor ligero de inferencia de difusión en C++
Qué es stable‑diffusion.cpp?
stable‑diffusion.cpp es una implementación de código abierto, puro C/C++ de los modelos de difusión modernos. Lleva stable‑diffusion, Flux, Wan, Qwen‑Image, Z‑Image y otros algoritmos emergentes a cualquier sistema que pueda compilar C++ — desde servidores Linux hasta laptops Windows, e incluso Android mediante Termux. El proyecto está diseñado para ser:
- Zero‑dependency – sin librerías externas aparte del runtime ggml incluido.
- Cross‑platform – funciona en Linux, macOS, Windows, Macs basados en ARM y Android.
- GPU‑friendly – soporta CUDA, Vulkan, Metal, OpenCL, SYCL e incluso ejecución solo en CPU con AVX / AVX2 / AVX512.
- Performance‑oriented – uso de memoria optimizado, Flash‑Attention, tesselado VAE y aceleración basada en caché.
La biblioteca se inspira en llama.cpp y ggml, lo que la convierte en una opción natural para desarrolladores familiarizados con esos ecosistemas.
Funciones principales a primera vista
| Feature | Supported Models | Notes |
|---|---|---|
| Generación de imágenes | SD1.x, SD2.x, SD‑Turbo, SDXL, SDXL‑Turbo, SD‑v1.5, SD‑v2.5, SD‑3, SD‑3.5 | Pipelines estándar de texto‑a‑imagen |
| Edición / Inpainting de imágenes | FLUX.1‑Kontext‑dev, series Qwen‑Image‑Edit | Soporta ediciones basadas en prompts |
| Generación de video | Wan2.1, Wan2.2 | Incluye condicionamiento consciente de movimiento |
| Upscale rápido | ESRGAN | Tamaño de mosaico personalizado |
| Decodificación optimizada para latencia | TAESD | Decodificación latente más rápida |
| LoRA & ControlNet | SD1.5 | Misma interfaz que stable‑diffusion‑webui |
| Modelos de Consistencia Latente | LCM, LCM‑LoRA | Añadido en 2025 |
| Elección de back‑end | CPU, CUDA, Vulkan, Metal, OpenCL, SYCL | Arquitectura plug‑in |
| Formatos de pesos | .ckpt/.pth, .safetensors, .gguf | Carga flexible de pesos |
| API de línea de comandos | sd-cli |
Generación de imágenes en una línea |
| C API | sd.h / sd.cpp |
Integrar en otros proyectos |
| Docker & CI | Imágenes Docker | Compilar para Linux & Windows |
Empezando: Construir y ejecutar
1. Instalar dependencias
# En Ubuntu
sudo apt-get update && sudo apt-get install -y build-essential git cmake
# En macOS con Homebrew
brew install cmake git
2. Clonar el repositorio
git clone https://github.com/leejet/stable-diffusion.cpp
cd stable-diffusion.cpp
3. Construir desde fuente
mkdir build && cd build
cmake .. -Dggml_backend=cpu # o cuda, vulkan, metal, etc.
make -j$(nproc)
4. Descargar pesos del modelo
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. Generar una imagen
./bin/sd-cli -m ../models/v1-5-pruned-emaonly.safetensors -p "a cyberpunk city at dusk"
La salida PNG también embebe los embeddings del modelo como una cadena de tokens compatible con web‑UI.
Consejos de rendimiento
| Tip | Explicación |
|---|---|
| Usar GGUF | El formato .gguf está cuantificado y carga más rápido. |
| Habilitar Flash‑Attention | Reduce el uso de VRAM en gran medida en CUDA. |
| Tesselado VAE | Reduce la memoria pico para imágenes grandes. |
| Capa de caché | ./bin/sd-cli --use-cache reutiliza estados de modelo anteriores. |
| Usar Metal en macOS | Proporciona ~40 % de aceleración respecto a CPU. |
Las pruebas de rendimiento en un MacBook Pro 2020 (CPU 10 núcleos, GPU 3070) muestran generación de una imagen SD‑XL 512×512 en ~32 s en CPU, reducida a ~2.5 s en NVIDIA 3070 con CUDA + Flash‑Attention.
Extender la biblioteca
La API es intencionalmente ligera. Para añadir nuevos modelos:
1. Añade una definición de modelo (.h/.cpp) y referencia el formato ggml.
2. Actualiza CMakeLists.txt y añade una entrada en docs/.
3. Envía un PR y lo verás en la próxima release!
Ejemplos de extensiones comunitarias incluyen:
- Bindings en Python – stable-diffusion-cpp-python
- Wrapper en Go – stable-diffusion
- Runtime en Rust – diffusion-rs
- Widget Flutter – local-diffusion
Comunidad y contribución
El repositorio tiene más de 5 000 estrellas, 500 forks y una base de colaboradores vibrante. Si estás interesado en contribuir:
- Haz fork del repositorio.
- Crea ramas de características.
- Envía PRs con mensajes de commit claros.
- Ejecuta pruebas (make check).
- Participa en la conversación de issues.
El proyecto también incluye un conjunto de imágenes Docker listas para implantar rápidamente en producción o entornos CI.
Por qué elegir stable‑diffusion.cpp?
- Rendimiento y simplicidad – Aprovecha al máximo tu GPU sin aprender un nuevo framework.
- Cobertura amplia de modelos – Desde el clásico SD hasta los últimos modelos Flux y Wan.
- Personalizable – Cambia back‑ends, usa cuantización o incrústalo en tu propio servicio C++.
- Desarrollo en vivo – Releases activos cada mes y soporte de nuevos modelos añadido mensualmente.
¿Listo para probar? Descarga los binarios precompilados de la página de releases o crea el tuyo propio. La documentación se actualiza continuamente y la comunidad es increíblemente útil.
Próximos pasos:
1. Elige un back‑end de motor que coincida con tu hardware.
2. Descarga un modelo y genera una imagen de prueba.
3. Explora la carpeta examples/ para pipelines más avanzados como edición de imágenes o generación de video.
¡Feliz difusión!