Usando Stable Diffusion en tu máquina

Pablo Barrales Cartes
4 min readNov 6, 2022

--

He visto mucho las maravillas del modelo Stable Diffusion, el modelo open source de texto a imagen, pero a pesar de todo ninguna me ha dado la claridad de cómo usarlo en mi máquina, así dejaré este articulo por acá para esa alma curiosa.

¿Qué es Stable Diffusion?

Sí, lo tengo que explicar, sé que ya llegaste sabiendo lo que quieres, pero ¿Por qué no?
Stable Diffusion es un modelo de aprendizaje automático desarrollado por Stability AI para generar imágenes digitales de alta calidad a partir de descripciones en lenguaje natural. El modelo se puede usar para diferentes tareas, como la generación de traducciones de imagen a imagen guiadas por mensajes de texto y la mejora de imágenes.

Requerimientos

Empecemos de lleno al asunto, primero hablaré de cómo usarlo en código, sin GUI, esto porque me gusta más escribir código y siendo sincero aún no he levantado la GUI en mi local.
El primer requerimiento es tener espacio, el modelo de Stable Diffusion es pesado, sobre ~5GB de espacio o quizás más.
El segundo es python 3.x y el comando de instalación de paquetes pip, vamos a escribir un poco de código.
Lo último es internet, ojalá de buena velocidad, vas a descargar 5GB, ¿recuerdas?

Hugging Face 🤗

Usaremos la plataforma Hugging Face 🤗, el emoji al comienzo es tierno, pero luego de un rato empieza a perturbar, o quizás soy yo. Hugging Face 🤗 es una plataforma que contiene miles de modelos entrenados, así como datasets para entrenar modelos de Machine Learning que nos sirven para completar distintas tareas ML, además permite usarlos en la misma plataforma como también fuera de ella que es justamente lo que haremos:

Aceptar los términos y condiciones

Todo listo a escribir código.

Manos a la obra

Necesitamos descargar un paquete pip install diffusers … en realidad es el único paquete a instalar. Emm… rellenaré; diffusers es una librería creada por Hugging Face 🤗 (huggingface/diffusers) que nos permite usar los modelos subidos a Hugging Face 🤗.
Una vez instalada ya es hora de escribir código, crearemos un archivo, el mío se llamará stable_diffusion.py:

from diffuser import StableDiffusionPipelinetoken = "TU_TOKEN" # Acá va el token copiado desde Hugging Face
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, use_auth_token=token)

En esta primera parte del código hacemos el import del pipeline para usar Stable Diffusion y en donde dice TU_TOKEN debes pegar el API Token que copiaste ¿verdad?. Luego cargamos el modelo pre-entrenado con StableDiffusionPipeline.from_pretrained.

Y si tenemos tarjeta de vídeo será mucho mejor para nuestro computador, sólo debemos usar dos líneas:

device = "cuda"
pipe = pipe.to(device)

Lo último ya es generar la imagen y guardar un archivo:

prompt = "a photograph of handsome guy writing a medium post, vibrant color"
image = pipe(prompt, num_inference_steps=25)["sample"][0]
image.save("imagen_generated.png")

Si corremos python3 stable_diffusion.py notarás que ha empezado la descarga de los modelos, esto puede tardar dependiendo de tu internet, pero luego de eso empezará a mostrar el progreso.

Progreso al generar imagen

Luego de un gran esfuerzo tendremos nuestro primer resultado:

Primer intento

Y efectivamente así se ven mis manos al escribir este post o quizás son muy pocos pasos (25), con 50 pasos debería salir algo mejor:

image = pipe(prompt, num_inference_steps=50)["sample"][0]
Un intento mucho mejor

¡Maravilloso!

Puedes jugar bastante con pipe() por ejemplo puedes usar la imagen anterior y mejorarla, cambiarla o lo que imagines.
Usando Pillow (pip install Pillow) para cargar la imagen quedaría algo así:

from PIL import Image
# ...
img = Image.open("imagen_generated.png")
prompt = "a photograph of handsome guy with a hat writing on internet, vibrant color"
image = pipe(prompt, init_image=img, strength=0.1,
num_inference_steps=50)["sample"][0]
image.save("imagen_generated_next.png")
Un hombre escribiendo con sombrero

Ahora nuestro muchacho tiene un gorro y ya corregimos que esté frente a un computador.
Espero te diviertas generando imágenes divertidas o interesantes.

¡Ah! una última cosa, crear prompt no es una tarea sencilla, pero ya existe un repositorio de prompts y este es https://lexica.art/, busca un imagen que te guste y copia el prompt.

Acá hay más documentación del uso de pipelines Stable diffusion pipelines.
Y más información sobre diffusers de Hugging Face: Stable Diffusion with 🧨 Diffusers.

--

--

Pablo Barrales Cartes

Programador experimentado y apasionado por el aprendizaje continuo. Con más de 13 años de experiencia, lidero equipos para crear soluciones innovadoras