Instalar ComfyUI en una RTX 5080 con CachyOS: setup, lecciones y por qué Fooocus ya no sirve
TL;DR: Quise montar generación de imágenes local en mi RTX 5080. Fooocus estaba abandonado y me dio errores de dependencias. Investigué, diagnosticé el problema (Starlette 1.0 rompió la API de Gradio), y cambié a ComfyUI. Resultado: setup limpio con Python 3.12, PyTorch 2.12, CUDA 13, y SDXL base listo para generar.
El plan original: Fooocus + ComfyUI
La idea era simple: dos herramientas, un modelo SDXL compartido, outputs en carpetas separadas.
| Herramienta | Rol | Estado |
|---|---|---|
| Fooocus | Prompt simple, sin fricción | ❌ Abandonado (último commit: agosto 2024) |
| ComfyUI | Control total, workflows con nodos | ✅ Activo (89k estrellas, releases semanales) |
Fooocus parecía perfecto para empezar rápido. Escribes un prompt y ya. Pero la realidad fue otra.
Lección 1: Fooocus está muerto
El repo de lllyasviel/Fooocus lleva sin actividad significativa desde agosto 2024. El autor no responde issues, no mergea PRs (hay 92+ abiertos), y el estado oficial dice “LTS with bug fixes only” pero no hay fixes.
Síntoma: Las dependencias transivas se rompen porque el requirements_versions.txt pinnea gradio==3.41.2 (julio 2023) pero no pinnea starlette ni fastapi. Pip resuelve a las versiones más nuevas, y algo explota.
El error
TypeError: unhashable type: 'dict'
File "jinja2/utils.py", line 515
rv = self._mapping[key]
La causa raíz (20 minutos de diagnóstico)
No era Jinja2. Era Starlette 1.0.0 (publicada marzo 2026), que cambió la firma de TemplateResponse:
| Starlette 0.x (vieja) | Starlette 1.0.0 (nueva) |
|---|---|
TemplateResponse(name, context) | TemplateResponse(request, name, context) |
| 2 args posicionales | 3 args posicionales |
Gradio 3.41.2 llama a TemplateResponse(template, {"request": request, ...}) con 2 args. Starlette 1.0.0 interpreta el dict como el segundo parámetro (name), que llega a Jinja2 como cache key → boom.
El mismo problema está documentado en fastapi/fastapi#15198. La solución habría sido pinnear starlette<1.0.0, pero ¿para qué mantener un proyecto muerto?
Decisión: Eliminar Fooocus, ir solo con ComfyUI.
Lección 2: Python 3.12 no está en pacman, pero sí en pyenv
CachyOS tiene Python 3.14 como versión del sistema y 3.11 disponible. ComfyUI recomienda 3.12, que no está en los repositorios oficiales ni en AUR.
Pero tenía pyenv instalado con 3.12.13 listo:
pyenv versions
# * system
# 3.12.13
Solución: usar el binario de pyenv directamente para crear el venv:
~/.pyenv/versions/3.12.13/bin/python3.12 -m venv ~/.venv/comfyui
El setup final
Estructura de directorios
/home/pablo/dev/ai-image/
├── ComfyUI/ # repo clonado
├── models/
│ └── checkpoints/
│ └── sd_xl_base_1.0.safetensors (6.5 GB)
├── outputs/
│ └── comfyui/
~/.venv/comfyui/ # virtualenv Python 3.12
Versiones instaladas
| Componente | Versión |
|---|---|
| Python | 3.12.13 (pyenv) |
| PyTorch | 2.12.0+cu130 |
| CUDA runtime | 13.0 |
| ComfyUI | 0.21.1 |
| GPU | NVIDIA RTX 5080 Laptop (16 GB VRAM) |
| Modelo | SDXL Base 1.0 |
Flags de lanzamiento para RTX 5080
ComfyUI tiene varios flags de VRAM que cambian radicalmente el rendimiento. Para una RTX 5080 con 16 GB, la configuración óptima es:
~/.venv/comfyui/bin/python main.py --listen 0.0.0.0 --port 8188 --highvram
| Flag | Qué hace | Cuándo usarlo |
|---|---|---|
--highvram | Mantiene los modelos en VRAM entre generaciones (no los baja a RAM) | ✅ RTX 5080/5090 con 16+ GB — mucho más rápido |
--gpu-only | Fuerza todo el procesamiento en GPU | ✅ Cuando no quieres que nada pase por CPU |
| (sin flags) | Modo normal: descarga modelos a RAM tras usarlos | GPUs con 8-12 GB |
--lowvram | Modo ahorro: carga modelos por partes en VRAM | GPUs con 4-8 GB |
--novram | Mínimo VRAM posible | Emergencias, GPUs muy pequeñas |
--cpu | Todo en CPU (muy lento) | Sin GPU NVIDIA |
RTX 5080 con 16 GB: Usa --highvram. Carga SDXL (~6.5 GB) una vez y se queda en VRAM. Generaciones consecutivas en ~3 segundos en vez de ~8.
Comando de lanzamiento recomendado
# Lanzamiento interactivo (ves los logs)
cd ~/dev/ai-image/ComfyUI
~/.venv/comfyui/bin/python main.py --listen 0.0.0.0 --port 8188 --highvram
Acceso: http://127.0.0.1:8188
En background
nohup ~/.venv/comfyui/bin/python main.py \
--listen 0.0.0.0 --port 8188 --highvram \
> ~/dev/ai-image/outputs/comfyui.log 2>&1 &
Compartir modelos entre herramientas
Si en el futuro instalas InvokeAI u otra herramienta, no quieres duplicar 6.5 GB por modelo. ComfyUI soporta extra_model_paths.yaml:
# ~/dev/ai-image/ComfyUI/extra_model_paths.yaml
pablo_models:
base_path: /home/pablo/dev/ai-image/models/
checkpoints: checkpoints/
controlnet: controlnet/
loras: loras/
vae: vae/
upscale_models: upscale_models/
embeddings: embeddings/
Esto le dice a ComfyUI que también busque modelos en tu stash compartido, además de su propia carpeta models/.
Problemas comunes y cómo solucionarlos
“CUDA out of memory”
La RTX 5080 tiene 16 GB. SDXL usa ~6.5 GB. Si añades ControlNet + LoRAs + batch, puedes llegar al límite.
Solución:
- Quita
--highvramy usa el modo normal (sin flags) - Reduce batch size a 1
- Usa modelos en FP8 en vez de FP16 (mitad de VRAM, pérdida de calidad mínima)
- Reinicia ComfyUI entre cambios grandes de workflow
Imágenes negras o sin color
El 99% de las veces es un problema de VAE. Algunos checkpoints tienen el VAE integrado (como SDXL Base), otros no.
Solución: Añade un nodo Load VAE y conecta un VAE externo al nodo VAE Decode. Para SDXL: sdxl_vae.safetensors. Para SD 1.5: vae-ft-mse-840000-ema-pruned.safetensors.
El modelo no aparece en el dropdown
ComfyUI detecta modelos al arrancar. Si añades uno nuevo:
- Pulsa
Ren el teclado para refrescar las definiciones - Si no funciona, reinicia ComfyUI
- Verifica que el archivo
.safetensorsesté enmodels/checkpoints/
“Install Missing Custom Nodes”
Cuando cargas un workflow que necesita nodos que no tienes instalados, ComfyUI-Manager los detecta automáticamente. Haz clic en el botón Manager → Install Missing Custom Nodes → reinicia.
¿Por qué ComfyUI y no otra cosa?
| Herramienta | Estado | Estrellas | Ideal para |
|---|---|---|---|
| ComfyUI | ✅ Muy activo | 89.2k | Workflows, control total, futuro-proof |
| Fooocus | ❌ Muerto | 47.7k | Ya no |
| InvokeAI | ✅ Activo (v6.12) | 27.2k | UI pulida, canvas profesional |
| Forge (A1111) | ⚠️ Semi-activo | 12.5k | Usuarios A1111 legacy |
ComfyUI tiene 3450+ extensiones, releases semanales, app de escritorio oficial, y recibió $30M de funding a $500M valoración. Es el estándar de la industria en 2026.
Qué viene después
Ahora tengo ComfyUI corriendo con SDXL. Los siguientes pasos:
- Aprender a usar la interfaz — los nodos abruman al principio, pero hay workflows predefinidos
- Instalar ComfyUI-Manager — para añadir custom nodes (ControlNet, upscalers, etc.)
- Valorar InvokeAI — como alternativa con UI más simple para uso casual
En el siguiente post te explico paso a paso cómo generar tu primera imagen con el workflow por defecto.
Serie: IA de imagen local en RTX 5080
- Instalar ComfyUI en RTX 5080: setup, lecciones y por qué Fooocus ya no sirve ← estás aquí
- ComfyUI para principiantes: tu primera imagen con SDXL paso a paso
- ComfyUI-Manager y custom nodes: ControlNet, upscalers y más
- InvokeAI: la alternativa con UI simple para generación casual