Cómo generé 30 imágenes para mi blog con IA local (y por qué Fooocus me dejó tirado)
Necesitaba 30 imágenes para mi blog. Imágenes de calidad, con texto legible, adaptadas a cada artículo. Así que encendí Fooocus, mi herramienta de confianza para generación de imágenes con IA, y le pedí una imagen sobre SEO.
El resultado fue una composición bonita con un texto que decía algo parecido a «SE0» con un cero. Y «G0ogel» con cero y una ele extra. SDXL, el modelo que usa Fooocus por debajo, es excelente para paisajes y retratos. Pero para texto es analfabeto.
Y yo necesitaba texto. «SEO», «IA», «WordPress»: palabras simples que cualquier modelo de lenguaje debería poder escribir. Pero SDXL no es un modelo de lenguaje. Es un modelo de difusión que aprendió patrones visuales, no ortografía.
Ese fue el momento en que empecé a buscar alternativa. Y la encontré: FLUX.1 de Black Forest Labs, con su encoder T5-XXL que entiende el lenguaje de verdad.
El problema con Fooocus (y SDXL)
Fooocus es cómodo. Lo instalas, eliges un prompt y genera imágenes. Pero tiene un límite duro: usa modelos basados en SDXL, que no tienen capacidad nativa para entender texto. Cuando le pides una imagen con la palabra «SEO», SDXL pinta algo que parece una palabra, pero no lo es. Son garabatos con forma de letras.
Probé todo: prompts más largos, más cortos, comillas, mayúsculas, guiones. Nada. El modelo simplemente no sabe escribir. Es como pedirle a un pintor hiperrealista que te escriba una carta: puede pintar las letras perfectas, pero no sabe qué significan.
La lección: No todos los modelos de IA generativa son iguales. SDXL genera imágenes espectaculares, pero su comprensión del lenguaje es puramente visual. Para texto legible, necesitas un modelo que entienda lenguaje de verdad.
FLUX.1: cuando la IA aprendió a leer
FLUX.1 es un modelo de difusión de 12 mil millones de parámetros desarrollado por Black Forest Labs (los creadores originales de Stable Diffusion). La diferencia clave: usa T5-XXL como encoder de texto, un modelo de lenguaje con 4.670 millones de parámetros.
¿Qué significa esto en la práctica? Que FLUX no solo «ve» las palabras de tu prompt: las entiende. Sabe que «SEO» es una palabra de tres letras, no un patrón visual que imitar. Y eso cambia todo.
Las tres versiones de FLUX
| Versión | Uso | Acceso |
|---|---|---|
| FLUX.1 [schnell] | Rápido, menor calidad | Descarga libre |
| FLUX.1 [dev] | Equilibrado, buena calidad | Open-weight (no-comercial por defecto, licencia comercial de pago) |
| FLUX.1.1 [Pro/Ultra] | Máxima calidad | Solo vía API de pago |
Yo elegí FLUX.1 [dev]: calidad profesional, descarga libre, sin depender de APIs de terceros. Todo corre en mi RTX 4090 local.

El montaje: ComfyUI + FLUX en local
Para ejecutar FLUX necesitas un frontend. Hay varios: Automatic1111, Forge, InvokeAI… Yo elegí ComfyUI por una razón concreta: tiene API headless. Puedo enviarle workflows en JSON y recibir imágenes de vuelta, sin tocar la interfaz gráfica. Perfecto para automatización.
La instalación paso a paso
# Clonar ComfyUI
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
# Crear entorno virtual (con uv, nunca pip directo)
uv venv venv
source venv/bin/activate
# PyTorch con soporte CUDA 12.8
uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128
# Dependencias de ComfyUI
uv pip install -r requirements.txt
Hasta aquí, estándar. Lo interesante viene con los modelos.
El truco de la cuantización GGUF
FLUX.1 [dev] en su formato original (FP16) ocupa 24 GB de VRAM solo para el modelo. Mi RTX 4090 tiene 24 GB, pero necesito espacio también para los encoders de texto (T5-XXL + CLIP) y el VAE. En FP16, simplemente no cabe.
La solución: cuantización GGUF Q8_0. Este formato comprime el modelo manteniendo el 99% de la calidad visual, pero reduciendo el peso a 12 GB. La magia está en que GGUF cuantiza los pesos del modelo a 8 bits sin perder información significativa, porque la mayoría de los parámetros de un modelo de difusión tienen precisión sobrante.
GGUF Q8_0 vs FP16: El modelo pasa de 24 GB a 12 GB con pérdida de calidad prácticamente imperceptible. En una RTX 4090, eso deja espacio suficiente para T5-XXL (5.1 GB cuantizado), CLIP (246 MB) y el VAE (168 MB). Total: ~18 GB de los 24 GB disponibles.
Los modelos que necesitaba:
| Archivo | Tamaño | Función |
|---|---|---|
flux1-dev-Q8_0.gguf | 12 GB | Modelo principal de difusión |
t5-v1_1-xxl-encoder-Q8_0.gguf | 5.1 GB | Encoder de texto (comprensión del lenguaje) |
clip_l.safetensors | 246 MB | Segundo encoder de texto |
flux-vae-bf16.safetensors | 168 MB | Decodificador de imagen final |
Todo se descarga de HuggingFace. La única complicación: el repositorio oficial de Black Forest Labs es gated (requiere aceptar términos). Usé mirrors comunitarios verificados.
El nodo GGUF para ComfyUI
ComfyUI por defecto no lee modelos GGUF. Necesita un custom node:
cd ComfyUI/custom_nodes
git clone https://github.com/city96/ComfyUI-GGUF.git
Este nodo (UnetLoaderGGUF y DualCLIPLoaderGGUF) carga los modelos cuantizados y los convierte al vuelo al formato que ComfyUI entiende. Sin él, nada funciona.
El workflow: cómo genera imágenes FLUX
Una vez montado, el pipeline es un grafo de nodos conectados. Así funciona:
[UnetLoaderGGUF] → modelo FLUX
[DualCLIPLoaderGGUF] → T5-XXL + CLIP → [CLIPTextEncode] → prompt
[EmptyLatentImage] → lienzo vacío (1280x768)
[KSampler] → euler, 20 steps, CFG 1
[VAEDecode] → latente → píxeles
[SaveImage] → PNG final
Los parámetros que importan
FLUX funciona diferente a SDXL. No uses los mismos parámetros o tendrás resultados mediocres:
- Sampler: euler (no DPM++ ni otros. FLUX funciona mejor con euler puro)
- Scheduler: normal
- Steps: 20 (más no mejora significativamente)
- CFG: 1 (FLUX usa guidance embebido vía
ModelSamplingFlux, no necesita CFG alto)
CFG a 1, no a 7. En SDXL, CFG 7-12 es lo normal. En FLUX, la guía de escala está integrada en el modelo. Si pones CFG alto, obtendrás imágenes quemadas y sobreprocesadas. CFG 1 es lo correcto.
Y la diferencia más importante: los prompts.
Prompt engineering para FLUX (no es como SDXL)
SDXL funciona con keywords: professional photo, 4k, highly detailed, SEO concept, office desk, dramatic lighting. Es un inventario de etiquetas.
FLUX necesita lenguaje natural. Frases descriptivas, como si le explicaras la imagen a un compañero:
# SDXL-style (MAL para FLUX):
"SEO optimization, laptop, analytics, professional, 4k, dramatic lighting"
# FLUX-style (CORRECTO):
"A professional web performance dashboard on a large monitor showing
Core Web Vitals metrics: LCP speedometer in green, INP interactivity
gauge in green, with a WordPress logo in the corner and speed
optimization icons, clean modern tech aesthetic"
La razón: T5-XXL entiende la semántica del prompt. Le das contexto, relaciones entre elementos y descripciones concretas. Cuanto más descriptivo y específico, mejor el resultado.
No necesitas negative prompts. FLUX no los usa. El modelo genera lo que le pides sin necesidad de decirle lo que no quieres.
Automatización: 30 imágenes en una tarde
Aquí es donde ComfyUI brilla. Tiene una API REST que permite enviar workflows completos en JSON y recibir imágenes de vuelta. Nada de interfaz gráfica, nada de clics manuales.
El setup headless
python3 main.py --listen 127.0.0.1 --port 8188
ComfyUI arranca sin interfaz, escuchando en el puerto 8188. El workflow se envía como JSON:
import json, urllib.request
workflow = json.load(open("post-img-api.json"))
workflow["6"]["inputs"]["text"] = "tu prompt aquí"
workflow["5"]["inputs"]["width"] = 1280
workflow["5"]["inputs"]["height"] = 768
urllib.request.urlopen(
"http://127.0.0.1:8188/prompt",
json.dumps({"prompt": workflow}).encode()
)
Luego haces polling a /history/{prompt_id} hasta que la imagen está lista, y la copias al proyecto. Yo empaqueté todo en un script Python que genera, convierte a WebP y copia con el naming correcto en un solo paso.
Números concretos
- Tiempo por imagen: ~45 segundos en RTX 4090 (la primera tarda ~84s por compilación de kernels CUDA)
- Total generado: 9 hero images (1280x768) + 21 central images (832x512) = 30 imágenes
- Tiempo total: una tarde, mayormente automatizado
- Coste: 0€ (todo local, sin APIs de pago)

El naming SEO que todo el mundo ignora
Mientras generaba imágenes, también pensé en cómo nombrarlas. No es lo mismo screenshot-2026-05-04-183021.png que 2026-05-asturwebs-seis-estrategias-seo.webp.
Las reglas que apliqué:
- Prefijo de fecha:
YYYY-MM-para contexto temporal - Marca:
asturwebs-para identificación en Google Images - Slug descriptivo: palabras clave del contenido, no genéricas
- Formato WebP: 60-80% menos peso que PNG, misma calidad visual
- Dos tamaños: heroes a 1280x768 (16:9), centrales a 832x512
Y el alt text siempre en español, describiendo lo que se ve en la imagen. Esto es básico para accesibilidad (lectores de pantalla) y para SEO: Google penaliza el keyword stuffing en alt texts. El alt text debe responder a «¿qué muestra esta imagen?», no a «¿de qué trata el artículo?».
Lo que aprendí
1. El modelo importa más que la interfaz
Fooocus es una interfaz bonita, pero SDXL es el modelo que ejecuta debajo. Y SDXL no puede escribir texto. Podría haber cambiado a otra interfaz con SDXL y tendría el mismo problema. La solución fue cambiar el modelo base, no la herramienta.
2. La cuantización no es un parche, es una necesidad
Sin GGUF Q8_0, FLUX.1 [dev] no cabe en una 4090. Y la pérdida de calidad es prácticamente nula (estamos hablando de pasar de FP16 a INT8: 16 bits a 8 bits por peso). Es el mismo principio que usar MP3 en vez de WAV: suficiente para el uso final.
3. Automatizar siempre merece la pena
Podría haber generado 30 imágenes a mano desde la interfaz de ComfyUI. Me habría costado 3 horas. Con el script batch, fueron 8 minutos de generación desatendida. La inversión de tiempo en automatizar se paga sola.
4. Los prompts son parametrización semántica
En FLUX, tu prompt no es código: es parametrización semántica. Le das instrucciones descriptivas a un modelo estocástico que las interpreta visualmente. A diferencia de la programación tradicional (determinista), aquí hay varianza: dos ejecuciones con el mismo prompt no producen el mismo resultado. Pero la habilidad de escribir instrucciones precisas, estructuradas y contextualizadas —pensar en lo que quieres antes de pedirlo— es un skill transversal a toda la IA generativa.
FAQ
¿Puedo usar FLUX sin una RTX 4090? Sí, pero con limitaciones. Con 12 GB de VRAM (RTX 3060/4070) puedes usar cuantización más agresiva (Q5_0 o Q4_0) a costa de algo de calidad. Con 8 GB, complica bastante.
¿FLUX.1 [dev] es gratis? Depende del uso. La licencia por defecto es no-comercial: investigación, proyectos personales y aprendizaje. Para uso comercial (generar imágenes para tu negocio o clientes), Black Forest Labs ofrece una licencia self-hosted de pago con fees según uso. Si necesitas uso comercial sin coste, FLUX.1 [schnell] usa licencia Apache 2.0: libre y gratuito para cualquier propósito.
¿Por qué ComfyUI y no Fooocus con FLUX? Fooocus no soporta FLUX de forma nativa con GGUF. Y ComfyUI me da la API headless para automatizar. Fooocus es genial para SDXL, pero no es la herramienta adecuada para FLUX.
¿Realmente el texto sale bien en FLUX? Sí. El T5-XXL entiende el lenguaje. Si le pides que escriba «SEO», escribe «SEO». Palabras cortas funcionan perfecto. Frases largas pueden tener errores menores, pero está a años luz de SDXL.
¿Cuánto cuesta generar una imagen? En local: el coste eléctrico de tu GPU (~400W durante 45 segundos). En la práctica: gratis. Si usaras APIs de pago (DALL-E 3, Midjourney) a 0.04€ por imagen, 30 imágenes serían 1.20€. No es mucho, pero te ata a un servicio externo.
Si quieres imágenes profesionales para tu web, consulta mi servicio de Inteligencia Artificial.
¿Quieres imágenes profesionales para tu web?
Generación con IA, optimización WebP y estrategia visual para tu proyecto. Sin APIs de terceros, sin dependencias.
Hablemos →