Este tutorial está diseñado para guiar a quienes desean aprender más acerca de Stable Diffusion. Es ideal para un nivel medio.
Stable Diffusion es un modelo de generación de imágenes potente y de código abierto desarrollado por Stability AI, basado en la arquitectura de Latent Diffusion Models. Permite a los usuarios crear imágenes realistas y artísticas de alta calidad a partir de descripciones textuales (Text-to-Image), pero también ofrece funcionalidades avanzadas como transformar imágenes existentes (Image-to-Image), editar partes de una imagen (Inpainting) y extender imágenes (Outpainting). Esta guía de nivel intermedio explora las diferentes versiones del modelo (SD 1.x, SD 2.x, SDXL), la influencia de los parámetros clave en la generación (prompt, negative prompt, guidance scale, steps, seed), la utilización de modelos finetuneados y checkpoints (como los creados con Dreambooth o LoRA) para estilos y sujetos específicos, y las consideraciones técnicas para ejecutar Stable Diffusion localmente en tu propio hardware (especialmente los requisitos de VRAM de GPU). Se cubre cómo usar librerías como Hugging Face Diffusers y se mencionan interfaces web populares que simplifican su uso. Stable Diffusion es una herramienta versátil para artistas digitales, diseñadores y desarrolladores que buscan integrar capacidades de generación visual en sus proyectos.
El 'Hola, mundo' de Stable Diffusion: un script básico en Python que utiliza la librería `diffusers` de Hugging Face para generar una imagen a partir de un prompt de texto, incluyendo un prompt negativo y un seed para controlar la generación.
# 1. Asegurate de tener suficiente VRAM de GPU (SD 1.5 ~4-6GB, SDXL ~12-16GB+)
# 2. Instala PyTorch con soporte CUDA si usas GPU Nvidia (ver docs.pytorch.org) o PyTorch con soporte ROCm para AMD
# 3. Instala las librerias: pip install diffusers transformers accelerate safetensors torch
# 4. Ejecuta el siguiente script:
from diffusers import StableDiffusionPipeline
import torch
import random
# ID del modelo en Hugging Face (ajusta segun la version, ej: sdxl-base-1.0)
model_id = "runwayml/stable-diffusion-v1-5"
# Cargar el pipeline. Usar float16 para reducir el uso de VRAM (si tu GPU lo soporta)
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16, use_safetensors=True)
# Mover el pipeline a la GPU (si esta disponible)
pipe = pipe.to("cuda") # O "cpu" si no tienes GPU o VRAM insuficiente (sera muy lento)
# Prompts: la descripcion de lo que quieres (positivo) y lo que NO quieres (negativo)
prompt = "Un castillo futurista en la cima de una montaña al atardecer, arte digital detallado, iluminación volumetrica, 4k"
negative_prompt = "baja calidad, mal dibujado, borroso, marca de agua, deformado, extra fingers"
# Generador para reproducibilidad: usa el mismo seed para obtener la misma imagen con los mismos parametros
manual_seed = 42
generator = torch.Generator(pipe.device).manual_seed(manual_seed)
# Generar la imagen con parametros clave
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
num_inference_steps=30, # Numero de pasos de denoising (ajustar entre 20 y 50 comunmente)
guidance_scale=7.5, # Fuerza con la que el modelo sigue el prompt (ajustar entre 7 y 10 comunmente)
generator=generator
).images[0]
# Guardar la imagen generada
image.save("castillo_futurista.png")
print(f"Imagen generada y guardada como castillo_futurista.png con seed {manual_seed}.")
Resultado:
Una imagen generada por IA guardada como `castillo_futurista.png` representando el prompt ingresado, utilizando un prompt negativo y un seed específico para reproducibilidad en un hardware con GPU.
Familiarizarse con estos comandos es esencial para interactuar eficientemente con Stable Diffusion:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# Ajusta 'cu118' a la version de CUDA compatible con tu GPU Nvidia. Para AMD, busca 'rocm' en la URL de PyTorch.
pip install diffusers transformers accelerate safetensors
import torch
print(f"CUDA/GPU disponible: {torch.cuda.is_available()}")
if torch.cuda.is_available():
print(f"Nombre de la GPU: {torch.cuda.get_device_name(0)}")
print(f"Total VRAM en GB: {torch.cuda.get_device_properties(0).total_memory / (1024**3):.2f}")
else:
print("No se detecto GPU con soporte CUDA/ROCm. Se usara la CPU (sera muy lento).")
from diffusers import StableDiffusionPipeline
import torch
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16) # Usar float16 para VRAM limitada
pipe = pipe.to("cuda") # Mover a GPU
from diffusers import StableDiffusionXLPipeline
import torch
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
pipe = StableDiffusionXLPipeline.from_pretrained(model_id, torch_dtype=torch.float16, use_safetensors=True)
pipe = pipe.to("cuda")
# SDXL tambien suele usar un modelo Refiner para mejorar la calidad final (se carga y usa por separado o con pipelines combinados)
import torch
# ... cargar pipeline (pipe), definir prompt, negative_prompt
manual_seed = 1234
generator = torch.Generator(pipe.device).manual_seed(manual_seed)
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
num_inference_steps=30,
guidance_scale=8.0,
generator=generator
).images[0]
from diffusers import StableDiffusionImg2ImgPipeline
from PIL import Image
import torch
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16).to("cuda")
init_image = Image.open("ruta/a/tu/imagen_inicial.jpg").convert("RGB").resize((512, 512)) # Redimensionar a tamaño compatible
prompt = "convertir a estilo cyberpunk"
image = pipe(prompt=prompt, image=init_image, strength=0.75).images[0] # Strength: 0.0 (no cambia nada) a 1.0 (ignora imagen original)
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
import torch
pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting", torch_dtype=torch.float16).to("cuda")
init_image = Image.open("ruta/a/tu/imagen_original.jpg").convert("RGB").resize((512, 512))
mask_image = Image.open("ruta/a/tu/mascara.png").convert("L").resize((512, 512)) # La mascara es una imagen en escala de grises o blanco/negro
prompt = "reemplazar el objeto enmascarado por una espada laser"
image = pipe(prompt=prompt, image=init_image, mask_image=mask_image).images[0]
from diffusers import StableDiffusionPipeline
import torch
# Cargar con precision reducida (float16 es comun)
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
# Habilitar optimizaciones de VRAM (requieren librerias/configuracion adicional)
pipe.enable_attention_slicing() # Divide el calculo de atencion en partes mas pequenas
# pipe.enable_xformers_memory_efficient_attention() # Requiere instalar xformers (pip install xformers) - muy efectivo
# pipe.enable_sequential_cpu_offload() # Mueve partes del modelo a la CPU cuando no se usan (lento)
# AUTOMATIC1111: Clonar repo `git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git`, instalar dependencias (python, git, etc.), ejecutar `webui.bat` o `webui.sh`.
# ComfyUI: Clonar repo `git clone https://github.com/comfyanonymous/ComfyUI.git`, instalar dependencias, ejecutar `run_nvidia_gpu.bat` o `main.py`.
import requests
import io, base64
import os # Para cargar API Key de forma segura
api_key = os.getenv("STABILITY_API_KEY") # Obtener de variable de entorno
engine_id = "stable-diffusion-xl-1024-v1-0" # O v1-6, etc.
api_host = 'https://api.stability.ai'
response = requests.post(
f"{api_host}/v1/generation/{engine_id}/text-to-image",
headers={
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": f"Bearer {api_key}"
},
json={
"text_prompts": [
{ "text": "Un lobo ártico con pelaje azul brillante, estilo fantasía" },
{ "text": "baja calidad, borroso", "weight": -1.0 } # Prompt negativo
],
"cfg_scale": 7.0,
"height": 1024, # Ajustar segun el modelo (512 o 1024)
"width": 1024,
"samples": 1,
"steps": 30,
}
)
# Procesar respuesta (imagen en base64)
if response.status_code == 200:
data = response.json()
for i, image in enumerate(data["artifacts"]):
if image["finishReason"] == 'SUCCESS':
with open(f"lobo_{i}.png", "wb") as f:
f.write(base64.b64decode(image["base64"]))
else:
print("Generacion fallida.", image.get("finishReason"))
else:
raise Exception(f"Error en la API: {response.text}")
from diffusers import StableDiffusionPipeline
model_id = "runwayml/stable-diffusion-v1-5"
lora_model_id = "path/to/your/lora_weights" # O ID en Hugging Face
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
# Cargar y unir el adaptador LoRA
pipe.unet.load_attn_procs(lora_model_id)
# Ahora las imagenes generadas con 'pipe' estaran influenciadas por el LoRA entrenado.
image = pipe(prompt="...", ...).images[0]
Comprender estos conceptos fundamentales te ayudará a dominar Stable Diffusion de forma más organizada y eficiente:
Modelos de Difusión (Latent Diffusion Models):
Stable Diffusion es un tipo de modelo generativo basado en el proceso de difusión. Estos modelos aprenden a 'denoisear' (eliminar ruido) de una imagen aleatoria paso a paso, guiados por alguna condición (como texto). Stable Diffusion es un 'Latent Diffusion Model' porque realiza este proceso en un espacio latente de menor dimensión en lugar del espacio de píxeles completo, lo que lo hace mucho más eficiente computacionalmente.
Generación Texto a Imagen (Text-to-Image):
La funcionalidad central que permite crear imágenes a partir de una descripción textual llamada 'prompt'. El modelo utiliza el prompt (procesado por un codificador de texto como CLIP) para guiar el proceso de denoising en el espacio latente y generar una imagen que coincide semánticamente con la descripción. La calidad y el estilo son altamente dependientes del prompt y los parámetros.
Generación Imagen a Imagen (Image-to-Image - Img2Img):
Permite transformar una imagen de entrada existente. El modelo aplica ruido a la imagen inicial (hasta un nivel controlado por el parámetro `strength`) y luego la denoisa de nuevo hacia una imagen coherente, pero esta vez guiado tanto por la imagen original como por un prompt de texto. Es útil para transferencias de estilo, variaciones o transformar bocetos en arte detallado.
Inpainting y Outpainting:
Técnicas de edición de imágenes. **Inpainting** permite seleccionar un área de una imagen (usando una máscara) y hacer que el modelo genere contenido nuevo para esa área, reemplazando el contenido original, guiado por un prompt. Es útil para eliminar objetos o rellenar huecos. **Outpainting** permite extender una imagen más allá de sus límites originales, generando contenido que continúa la escena de forma coherente, también guiado por un prompt.
Parámetros de Generación:
Ajustes que influyen en el proceso y el resultado. **Prompt Positivo**: la descripción deseada. **Prompt Negativo**: descripción de elementos, estilos o artefactos no deseados (ej: 'borroso', 'baja calidad'). **Guidance Scale (CFG Scale)**: cuánto debe 'escuchar' el modelo al prompt (mayor valor = más creativo/distante del prompt original si es Img2Img). **Inference Steps**: número de iteraciones de denoising (más pasos = más refinado, más tiempo). **Seed**: número que inicializa el generador de ruido para reproducibilidad. Otros: `height`, `width`, `num_images_per_prompt`, `sampler` (método de denoising).
Versiones de Stable Diffusion (SD 1.x, SD 2.x, SDXL):
Diferentes iteraciones y mejoras del modelo base. SD 1.x (ej: 1.5) es una versión muy utilizada, más accesible en VRAM. SD 2.x ofrece mejoras en algunos aspectos. SDXL (Stable Diffusion XL) es la versión más reciente y capaz (a partir de 2023/2024), entrenada con muchos más datos y una arquitectura más grande, que produce imágenes de mucha mayor calidad, detalles y comprensión del prompt, pero requiere significativamente más VRAM (generalmente 12GB+).
Checkpoints y Modelos Fine-tuned (Dreambooth, LoRA):
Un 'checkpoint' es un archivo que contiene los pesos de un modelo entrenado. 'Modelos Fine-tuned' son versiones del modelo base (o de otro checkpoint) que han sido entrenadas adicionalmente en datasets más pequeños y específicos. **Dreambooth** es una técnica de fine-tuning que permite 'enseñarle' al modelo un sujeto o estilo específico a partir de unas pocas imágenes. **LoRA (Low-Rank Adaptation)** es una técnica de fine-tuning más eficiente en VRAM que crea un archivo de pesos de 'adaptador' pequeño que se usa junto con el modelo base para modificar su comportamiento, muy popular para compartir estilos y sujetos personalizados.
Componentes Clave (VAE, U-Net, CLIP):
La arquitectura de Stable Diffusion incluye varios módulos: el **VAE (Variational Autoencoder)** se encarga de comprimir imágenes a un espacio latente de menor dimensión (encoder) y descomprimir las representaciones latentes de vuelta a imágenes de píxeles (decoder). El **U-Net** es la red neuronal principal que realiza el proceso iterativo de denoising en el espacio latente. **CLIP** (el codificador de texto) convierte el prompt de texto en una representación numérica que guía al U-Net durante el denoising.
Ejecución Local vs Cloud/API:
Puedes descargar los modelos y ejecutar Stable Diffusion directamente en tu propio ordenador (si cumples los requisitos de hardware, especialmente VRAM de GPU) o utilizar servicios en la nube o APIs (como Stability AI Platform, Hugging Face Inference API, u otras) donde el modelo se ejecuta en servidores remotos. La ejecución local ofrece control, privacidad y no tiene costos por uso (una vez pagado el hardware), mientras que las APIs son más accesibles, escalables y no requieren hardware potente localmente, pero se paga por uso.
Requisitos de Hardware (GPU y VRAM):
El factor más crítico para ejecutar Stable Diffusion localmente es la cantidad de VRAM en tu tarjeta gráfica (GPU). La mayoría de las GPUs modernas (Nvidia, AMD) son compatibles, pero la VRAM es la limitación. SD 1.5 es factible con 4-6GB de VRAM, aunque 8GB+ es mejor. SDXL requiere al menos 12GB, siendo 16GB o más lo ideal para una experiencia fluida y mayores resoluciones. Sin suficiente VRAM, el proceso se transferirá a la RAM del sistema o la CPU y será extremadamente lento, o el programa simplemente fallará.
Interfaces Web Populares (AUTOMATIC1111, ComfyUI):
Aplicaciones de interfaz gráfica de usuario (GUI) muy populares y de código abierto (requieren instalación local y hardware compatible) que simplifican enormemente el uso de Stable Diffusion. Proporcionan una interfaz visual completa para gestionar modelos, ajustar parámetros, usar Img2Img, Inpainting, Outpainting, Batch Generation, extensiones (como ControlNet) y flujos de trabajo complejos sin necesidad de escribir código. AUTOMATIC1111 es conocido por su gran cantidad de funcionalidades, mientras que ComfyUI destaca por su interfaz modular basada en nodos.
Optimización de VRAM y Velocidad:
Técnicas para reducir el consumo de VRAM y/o acelerar la generación en hardware limitado. Usar precisión reducida (`torch_dtype=torch.float16`) es la más común para reducir VRAM a la mitad. Optimizar la operación de atención (`enable_attention_slicing`, `enable_xformers_memory_efficient_attention`) también reduce VRAM (requiere `xformers`). Mover partes del modelo a la CPU cuando no se usan (`enable_sequential_cpu_offload`) reduce VRAM pero ralentiza mucho. Elegir el 'sampler' (método de denoising) y el número de `num_inference_steps` afecta la velocidad y la calidad.
ControlNet:
Una arquitectura de red neuronal que se puede añadir a Stable Diffusion para proporcionar un control más granular sobre la composición espacial y el estilo de las imágenes generadas. Permite usar una imagen de entrada (ej: un boceto, un mapa de profundidad, una detección de bordes) para guiar la estructura de la imagen de salida, manteniendo el prompt para controlar el contenido y el estilo.
Licenciamiento de Modelos Open Source:
Aunque Stable Diffusion se publica como código abierto, las diferentes versiones tienen licencias específicas (ej: CreativeML Open RAIL++ License para SD 1.5, otras para versiones posteriores y modelos finetuneados). Estas licencias permiten el uso libre (incluso comercial en muchos casos) pero a menudo incluyen restricciones éticas sobre el tipo de contenido que se puede generar.
Algunos ejemplos de aplicaciones prácticas donde se utiliza Stable Diffusion:
Crear arte digital original y único para portfolios, galerías, impresión o venta:
Utilizar las capacidades de Stable Diffusion para generar obras de arte digitales desde cero o transformando imágenes existentes, experimentando con estilos artísticos, temas y estéticas a través de prompts complejos y parámetros, o finetuneando el modelo para desarrollar un estilo visual personal y único.
Generar conceptos visuales y bocetos rápidos para diseño gráfico, desarrollo de videojuegos, arquitectura o moda:
Aprovechar la velocidad de generación para producir rápidamente múltiples variaciones de ideas visuales (personajes, entornos, objetos, edificios, atuendos) como punto de partida para procesos de diseño más elaborados. Ideal para brainstorming visual y exploración conceptual.
Producir contenido visual atractivo y variado para marketing, redes sociales, blogs o presentaciones:
Crear imágenes personalizadas que se ajusten exactamente a las necesidades de tu contenido. Genera ilustraciones para artículos de blog, imágenes llamativas para publicaciones en redes sociales, banners publicitarios o gráficos para presentaciones, adaptando el estilo y el tema a tu audiencia y mensaje.
Editar, retocar y recomponer imágenes existentes de forma creativa usando Inpainting y Outpainting:
Utilizar las funcionalidades de edición para modificar imágenes de maneras no convencionales. Añade o elimina objetos (inpainting), reemplaza fondos, cambia elementos específicos o extiende los límites de una fotografía para crear escenas más grandes o composiciones inesperadas (outpainting).
Personalizar el modelo para generar sujetos específicos, estilos artísticos o conceptos únicos (usando Dreambooth o LoRA):
Fine-tunear el modelo en un pequeño conjunto de imágenes de un sujeto particular (ej: tu cara, un personaje original, tu mascota) o en imágenes de un estilo artístico concreto para que el modelo pueda generar imágenes de ese sujeto o en ese estilo bajo demanda con cualquier prompt, creando modelos altamente personalizados.
Crear variaciones estilísticas o transformaciones de imágenes existentes utilizando Image-to-Image:
Tomar una imagen de entrada (una foto, un boceto, una ilustración) y usar un prompt y el pipeline Img2Img para transformarla a un estilo diferente (ej: de foto a pintura, de boceto a render 3D, de imagen a arte conceptual) o generar variaciones sobre el tema o la composición de la imagen original.
Generar assets visuales para desarrollo de videojuegos, novelas visuales o cómics:
Crear fondos, elementos del entorno, diseños de personajes, objetos, texturas o splashes utilizando Stable Diffusion, ajustando el estilo, la perspectiva y el contenido a las necesidades visuales específicas del proyecto.
Experimentar con diferentes modelos base, checkpoints, LoRAs y parámetros para entender sus características y resultados:
Utilizar las diversas versiones de Stable Diffusion, los modelos finetuneados por la comunidad y la amplia gama de parámetros de generación para explorar el espacio creativo, entender cómo cada elemento influye en la imagen final y descubrir las capacidades de diferentes modelos.
Construir aplicaciones o herramientas que integran capacidades de generación de imágenes (ej: generadores de avatares, herramientas de diseño asistido por IA):
Utilizar librerías como `diffusers` o APIs (Stability AI Platform) para integrar la generación de imágenes programáticamente en aplicaciones web, móviles, de escritorio o flujos de trabajo personalizados.
Aquí tienes algunas recomendaciones para facilitar tus inicios en Stable Diffusion:
Entiende el Concepto Clave: De Ruido Aleatorio a Imagen Guiado por Tu Prompt:
Imagina que Stable Diffusion empieza con una pantalla llena de ruido (como la estática de la tele antigua) y, poco a poco, elimina ese ruido para revelar una imagen. Tu prompt de texto es la 'brújula' que le dice al modelo qué 'formas' y 'colores' buscar mientras elimina el ruido, para que la imagen final se parezca a tu descripción. No es como dibujar desde cero.
Empieza Usando un Frontend Amigable como AUTOMATIC1111 o ComfyUI:
Si recién comienzas, no necesitas programar de inmediato. Descarga e instala una interfaz web popular (requieren hardware compatible) como la 'Stable Diffusion web UI' de AUTOMATIC1111 o ComfyUI. Tienen interfaces gráficas que te permiten gestionar modelos, escribir prompts y ajustar parámetros de forma visual y sencilla.
Verifica los Requisitos de Hardware, ¡La VRAM de la GPU es Crucial!:
Para ejecutar Stable Diffusion localmente, necesitas una tarjeta gráfica con suficiente memoria de video (VRAM). SD 1.5 es más 'ligero' (~4-6GB VRAM), pero SDXL requiere bastante más (~12-16GB+). Sin suficiente VRAM, será extremadamente lento o no funcionará. ¡Compruébalo antes de dedicarle tiempo!
Domina el Arte del Prompting: Sé Descriptivo y Usa Prompts Negativos:
La calidad de la imagen depende MUCHO de tu prompt. Sé detallado, especifica estilos, iluminación, calidad. Y aprende a usar prompts negativos para decirle al modelo qué no quieres ver (ej: 'borroso', 'mala anatomía', 'marca de agua'). ¡Experimenta mucho con diferentes redacciones!
Familiarízate con los Parámetros Clave: Steps, Guidance Scale y Seed:
Estos son tus principales controles creativos (aparte del prompt). `Steps` (pasos de inferencia) afecta la calidad y el tiempo (más pasos = más refinado, más tiempo). `Guidance Scale` (CFG) qué tan fuerte sigue el prompt. `Seed` te permite obtener la misma imagen exacta si usas el mismo prompt y parámetros.
Conoce las Diferentes Versiones del Modelo: SD 1.5, SDXL y Otros Checkpoints:
Hay varias versiones principales de Stable Diffusion (SD 1.5 es la 'clásica', SDXL es la más avanzada). Además, la comunidad crea 'checkpoints' y 'LoRAs' (modelos finetuneados) especializados en estilos o sujetos. Prueba diferentes para ver sus diferencias y fortalezas.
Explora Otras Funcionalidades Más Allá de Texto a Imagen: Img2Img, Inpainting:
Stable Diffusion puede hacer más. Investiga cómo usar Image-to-Image (transformar fotos con texto) e Inpainting/Outpainting (editar y extender imágenes). Son muy potentes para flujos de trabajo creativos.
Si Quieres Integrar en Código, Mira la Librería Hugging Face Diffusers:
Si tu objetivo es usar Stable Diffusion en tus propias aplicaciones o scripts Python, la librería `diffusers` de Hugging Face es la forma estándar de hacerlo. Te da control programático sobre la carga del modelo, los parámetros y el proceso de generación.
Lee la Documentación y Explora Recursos de la Comunidad:
El sitio de Stability AI, la documentación de Diffusers, los repositorios de GitHub de los modelos y las interfaces (como AUTOMATIC1111 y ComfyUI), y las comunidades online (Reddit, Discord) son excelentes recursos para aprender, encontrar prompts de ejemplo, descubrir modelos y resolver dudas.
Si te interesa Stable Diffusion, también podrías explorar estas herramientas:
Amplía tus conocimientos con estos enlaces y materiales: