Serie Comfy-UI (XIV): ControlNet + LoRA: control total de forma y estilo
- 25 abr
- 10 min de lectura
Continuamos la Serie ComfyUI, dedicada a entender y dominar la generación de imágenes con IA en local.
En artículos anteriores ya hemos trabajado dos piezas fundamentales:
En ellos vimos cómo:
ControlNet permite controlar la estructura de una imagen
LoRA permite modificar su estilo de forma ligera y flexible
Pero hasta ahora hemos trabajado estas herramientas por separado, y en cuanto empiezas a construir workflows reales, aparece una necesidad clara: no basta con controlar la forma, ni basta con controlar el estilo. Necesitas ambas cosas a la vez, porque si no:
las composiciones no son consistentes
los personajes cambian sin control
y los resultados se vuelven impredecibles
En este artículo vamos a dar un paso clave en la serie: combinar ControlNet + LoRA en un mismo workflow, para conseguir algo fundamental: definir la forma (ControNet) y definir el estilo (LoRA), y todo ello dentro de un flujo sencillo, controlado y totalmente reutilizable en ComfyUI.

Incluimos el workflow listo para descarga: 📁 wf_ComfyUI_ControlNet_LoRA_XL_Simple.json (descargable al final del artículo)
🎯 Qué vas a lograr
Al finalizar este artículo serás capaz de:
Entender cómo combinar ControlNet y LoRA dentro de un mismo workflow en ComfyUI.
Diferenciar claramente el papel de cada elemento:
ControlNet → controla la forma
LoRA → controla el estilo
Prompt → define la intención
Construir un workflow que te permita:
mantener la estructura de una imagen
mientras transformas completamente su estética
Entender cómo interactúan ambos sistemas:
cuándo se complementan
y cuándo pueden entrar en conflicto
Aplicar este enfoque a distintos casos:
paisajes
retratos
escenas complejas
Diseñar workflows reutilizables que sirvan como base para:
pipelines creativos
generación controlada
y casos reales de uso
🧩 Requisitos
Para seguir este artículo y ejecutar correctamente el workflow ControlNet + LoRA, necesitas lo siguiente:
💻 Entorno
ComfyUI instalado y funcionando correctamente
Preferiblemente con GPU (recomendado para SDXL)
🧠 Modelo base (checkpoint)
Este workflow está diseñado para trabajar con SDXL. En el ejemplo utilizamos:
juggernautXL_v8Rundiffusion.safetensors (puedes usar cualquier checkpoint SDXL compatible).
ControlNet y LoRA deben ser compatibles con SDXL (no mezclar con modelos de SD 1.5)
🎨 LoRA
En este artículo usamos un LoRA de estilo: cyberpunk_xl_v1.safetensors. Su función es definir la estética final de la imagen (neón, sci-fi, etc.)
🧠 ControlNet
Para este workflow utilizamos: ControlNetUnion (SDXL)
Archivo: ControlNetUnion_XL_ParaTodoControlNEt.safetensors
Nota importante: aunque existen modelos específicos (Canny, OpenPose, etc.), en nuestras pruebas ControlNetUnion nos ha dado mejor equilibrio entre control y libertad creativa en SDXL
🖼️ Imagen de entrada
Este workflow parte de una imagen base que será la que defina la estructura. Puede ser un paisaje, una escena urbana, una persona, o cualquier composición clara
🗂️ Crear o cargar el workflow en ComfyUI
Tienes dos maneras de trabajar con este flujo:
🅰️ Opción A — Cargar el workflow ya creado
1️⃣ Descarga el archivo JSON adjunto:📁 wf_ComfyUI_ControlNet_LoRA_XL_Simple.json
2️⃣ Abre ComfyUI.
3️⃣ En el menú superior selecciona:Workflow → Load
4️⃣ Carga el archivo JSON. Verás en el lienzo todos los nodos conectados y listos para funcionar.

🅱️ Opción B — Crear el workflow desde cero
Si prefieres entenderlo pieza a pieza, puedes recrearlo manualmente. En la siguiente sección explicamos qué hace cada bloque del flujo.

🧠 ¿Qué pasa cuando combinas ControlNet y LoRA?
Hasta ahora hemos visto estas herramientas por separado. Ahoravamos a ver que pasa cuando se combinan.
🔄 Dos tipos de control distintos
Para entenderlo bien, hay que separar claramente sus funciones:
Elemento | Qué controla |
ControlNet | Estructura (forma, pose, composición) |
LoRA | Estilo (textura, estética, trazo) |
Prompt | Intención (qué quieres generar) |
👉 Cada uno actúa en un nivel distinto del proceso
⚖️ No compiten… pero pueden entrar en conflicto
Aunque ControlNet y LoRA no hacen lo mismo, sí pueden interferir si no se ajustan correctamente. Por ejemplo, ControlNet quiere mantener una forma muy concreta y LoRA intenta aplicar un estilo agresivo. Esto puede provocar una imagen rígida, con estilo poco visible o incoherencias
Imagina que estás dirigiendo una película:
ControlNet → es el director de fotografía (decide encuadre, posición, composición)
LoRA → es el director artístico (decide estética, colores, estilo visual)
Si ambos trabajan coordinados tendremos un resultado potente, si no será un resultado confuso.
🔀 Cómo se combinan en el workflow
En nuestro workflow ocurre esto:
La imagen de entrada define la estructura
Canny extrae los bordes
ControlNet usa esa información para condicionar la generación
El LoRA modifica el estilo del modelo
El prompt guía el resultado final
👉 Todo converge en el KSampler
🎛️ La clave: equilibrio
El resultado depende de tres cosas:
fuerza de ControlNet
peso del LoRA
claridad del prompt
Si uno domina demasiado se rompe el equilibrio
🧪 Casos típicos
Caso | Qué ocurre | Causa probable | Solución |
🔴 ControlNet demasiado fuerte | Imagen rígida, estilo apenas visible | ControlNet domina la generación | Bajar strength de ControlNet |
🔴 LoRA demasiado fuerte | Estructura deformada, pérdida de coherencia | El estilo intenta imponerse sobre la forma | Bajar peso del LoRA |
🔴 Prompt poco claro | Resultados inconsistentes | Falta de dirección en la generación | Reforzar la intención en el prompt |
💡 Regla fundamental: ControlNet fija la estructura, LoRA redefine la estética y el prompt alinea ambos
⚙️ El workflow: estructura general
El workflow sigue esta estructura:
Imagen → Canny → ControlNet → KSampler Checkpoint → LoRA → KSampler Prompt → ControlNet → KSampler Latente → KSampler 👉 Todo converge en el KSampler, que es donde se genera la imagen final.
El flujo completo se compone de los siguientes elementos:
Nº | Bloque | Función |
1️⃣ | LoadImage | Carga la imagen base |
2️⃣ | Canny | Extrae la estructura (bordes) |
3️⃣ | ControlNetLoader | Carga el modelo ControlNet |
4️⃣ | ControlNetApply | Aplica el control estructural |
5️⃣ | CheckpointLoader | Carga el modelo base |
6️⃣ | LoRALoader | Aplica el estilo |
7️⃣ | CLIPTextEncode (+) | Prompt positivo |
8️⃣ | CLIPTextEncode (–) | Prompt negativo |
9️⃣ | Empty Latent Image | Define resolución |
🔟 | KSampler | Genera la imagen |
1️⃣1️⃣ | VAE Decode | Convierte a imagen |
1️⃣2️⃣ | SaveImage | Guarda el resultado |
🔗 Cómo fluye la información
En este workflow hay tres flujos principales que se combinan:
🧠 1. Flujo de estructura (ControlNet)
Imagen → Canny → ControlNet👉 Define la forma: composición, bordes, estructura principal
🎨 2. Flujo de estilo (LoRA)
Checkpoint → LoRA👉 Define la estética: colores, iluminación, estilo visual.
📝 3. Flujo de intención (Prompt)
Prompt → ControlNet → KSampler👉 Define qué quieres generar y cómo se interpreta la escena
En este workflow: ControlNet se aplica antes del KSampler, el LoRA modifica el modelo base y El prompt se adapta al condicionamiento. Esto asegura que la estructura se respeta, el estilo se aplica correctamente y el resultado es coherente
🧱 Entendiendo el workflow paso a paso
Ahora que ya hemos visto la estructura general, vamos a analizar el workflow en detalle para entender exactamente qué ocurre en cada nodo.
1️⃣ LoadImage (imagen base)
Qué hace: carga la imagen que se usará como referencia estructural. Esta imagen define la composición, las formas y la distribución de elementos.
Qué tocar:
La imagen de entrada. Cuanto más clara sea la estructura, mejor funcionará ControlNet.
Salida:
IMAGE → Canny (nos vamos al preprocesado que en este caso hemos escogido canny, pero se podrían usar otros en función de que tipo de "mapa" queremos extraer de la imagen cargada)

2️⃣ Canny (preprocesado)
Qué hace: convierte la imagen en un mapa de bordes que servirá como guía para ControlNet.
Qué tocar:
low_threshold: 0.10
high_threshold: 0.30
👉 Ajusta según la imagen:
más bajo → más detalle
más alto → menos ruido
Salida:
IMAGE → ControlNetApply
IMAGE → Preview (opcional para ver que bordes ha extraído)
3️⃣ ControlNetLoader
Qué hace: carga el modelo de ControlNet.
En este workflow:
ControlNetUnion (SDXL)
Se puede descargar de: "https://huggingface.co/xinsir/controlnet-union-sdxl-1.0/tree/main"
una vez descargado se pone en la carpeta: \comfy.git\app\models\controlnet
Qué tocar:
Seleccionar el modelo ControlNet adecuado. Asegúrate de que sea compatible con SDXL.
Como estamos usando el preprocesado Canny lo normal sería usar un controlnet específico para Canny como por ejemplo "controlnet-canny-sdxl-1.0.fp16.safetensors" (diffusers/controlnet-canny-sdxl-1.0 at main), pero en este caso nos ha dado mejor resultado el ControlNetUnion.
La diferencia práctica suele ser esta:
Canny puro: más “quirúrgico”, mejor si quieres bordes muy fieles.
ControlNetUnion: más flexible, y muchas veces más agradecido para workflows creativos con SDXL. El modelo Union para SDXL fue creado precisamente para soportar múltiples tipos de control dentro de una sola arquitectura.
Salida:
CONTROL_NET → ControlNetApply
4️⃣ ControlNetApplyAdvanced
Qué hace: aplica el control estructural sobre el proceso de generación. Combina prompts (positive &negative), imagen procesada (Canny) y modelo ControlNet. En este caso la entrada VAE la dejamos vacía.
Qué tocar:
strength: 0.7 – 0.8
start: 0
end: 1
👉 Interpretación:
strength alto → más rigidez
strength bajo → más libertad
Salida:
CONDITIONING (positivo) → KSampler
CONDITIONING (negativo) → KSampler
5️⃣ CheckpointLoader (modelo base)
Qué hace: carga el modelo base de Stable Diffusion (SDXL).
Qué tocar:
Seleccionar checkpoint SDXL
En nuestro ejemplo hemos usado el modelo "Juggernaut XL" (https://civitai.com/models/133005?modelVersionId=782002)
Consejo: evita modelos excesivamente estilizados al empezar.
Salida:
MODEL → Load LoRA
CLIP → Load LoRA
VAE → VAEDecode

6️⃣ LoRALoader (estilo)
Qué hace: aplica el LoRA sobre el modelo base para modificar el estilo.
En este workflow aplicamos estilo cyberpunk usando este LoRA para XL: "2.1.5 Cyberpunk [Style] Sci-Fi LoRA XL" (https://civitai.com/models/135492/cyberpunk-style-sci-fi-lora-xl)
Qué tocar:
strength_model: 0.6 – 0.8
strength_clip: 0.5 – 0.7
👉 Más alto → estilo más fuerte, Más bajo → resultado más neutro
Salida:
MODEL → KSampler
CLIP → prompts
7️⃣ CLIPTextEncode (prompt positivo)
Qué hace: convierte el prompt positivo en instrucciones para el modelo.
Qué tocar:
El contenido del prompt. Debe describir claramente la escena, el contexto y el estilo
En nuestro ejemplo:
cyberpunk landscape, futuristic city in the distance, mountains, river reflections, neon lights, atmospheric fog, cinematic lighting, highly detailed, sci-fi environmentSalida:
CONDITIONING → ControlNetApply
8️⃣ CLIPTextEncode (prompt negativo)
Qué hace: Indica qué debe evitar el modelo.
Qué tocar:
Prompt negativo. Incluir elementos no deseados: realismo, artefactos, errores anatómicos...
En nuestro ejemplo:
photorealistic, realism, 3d render, CGI, lowres, blurry, noise, jpeg artifacts, watermark, text, logo, oversaturated, bad compositionSalida:
CONDITIONING → ControlNetApply
9️⃣ EmptyLatentImage
Qué hace: define el espacio donde se generará la imagen.
Qué tocar:
Resolución
Ejemplo:
1152 × 768 → paisaje
768 × 1152 → retrato
👉 Ajusta según el tipo de imagen.
Salida:
LATENT → KSampler

🔟 KSampler (núcleo del sistema)
Qué hace: combina todos los elementos:
modelo + LoRA
ControlNet
prompts
latente
Y genera la imagen final.
Qué tocar: (estos parámetros también dependerán del modelo SDXL usado; lee su documentación para ver sus recomendaciones)
steps: 25–35
CFG: 5–6
sampler: Euler / DPM++
scheduler: normal / Karras
👉 No usar CFG para compensar errores de LoRA o ControlNet.
Salida:
LATENT → VAEDecode
1️⃣1️⃣ VAEDecode
Qué hace: convierte el latente en una imagen visible.
Qué tocar:
Nada (usar VAE del checkpoint)
Salida:
IMAGE → Preview / Save
1️⃣2️⃣ PreviewImage / SaveImage
Qué hace:
muestra la imagen
la guarda en disco
Qué tocar:
nombre de salida (opcional)
Salida:
imagen final
🎛️ Ajustes clave: cómo controlar el resultado
Una vez que tienes el workflow funcionando, el resultado final depende principalmente de tres elementos:
ControlNet → forma, control de la estructura
LoRA → estilo
Prompt → intención, dirección del resultado.
Aprender a equilibrarlos es lo que marca la diferencia.
🔁 Cómo ajustar correctamente
1️⃣ Empieza con valores equilibrados
ControlNet: 0.75
LoRA: 0.7
2️⃣ Ajusta una cosa cada vez. Regla fundamental:una variable por iteración
3️⃣ Ajusta en este orden
ControlNet
LoRA
Prompt
❌ No empieces por CFG
💡 Regla si no te gusta el resultado: 1️⃣ baja parámetros2️⃣ simplifica3️⃣ vuelve a construir
🧪 Casos típicos y cómo corregirlos
Cuando combinas ControlNet + LoRA, los problemas más habituales suelen venir de un mal equilibrio entre ambos. Aquí tienes una guía rápida para identificar y corregir los casos más comunes.
Caso | Qué ocurre | Causa probable | Solución |
🔴 Imagen rígida, poco natural | La estructura domina completamente | ControlNet demasiado fuerte | Bajar strength de ControlNet (0.7 → 0.6) |
🔴 El estilo apenas se nota | Resultado demasiado neutro | ControlNet alto o LoRA bajo | Bajar ControlNet o subir ligeramente el LoRA |
🔴 Imagen deformada o incoherente | Se pierde la estructura original | LoRA demasiado fuerte | Bajar strength_model del LoRA |
🔴 Resultado caótico | Falta de coherencia visual | Prompt poco claro o conflicto entre elementos | Simplificar y reforzar el prompt |
🔴 Demasiado detalle o ruido | Exceso de líneas en la estructura | Canny demasiado sensible | Subir low/high o simplificar imagen |
🔴 Resultado impredecible | Cambios difíciles de controlar | Demasiadas variables modificadas | Aplicar regla: una variable por iteración |
🔁 Qué puedes probar a continuación
Prueba | Qué hacer | Qué vas a observar |
🧪 Cambiar la imagen de entrada | Probar con paisajes, retratos, escenas u objetos | Cómo ControlNet adapta la estructura en cada caso |
🎨 Cambiar el LoRA (mantener estructura) | Usar distintos estilos: cyberpunk, anime, sketch, ilustración | Mismo encuadre con estilos completamente diferentes |
⚖️ Ajustar ControlNet | Probar valores: 0.6 / 0.75 / 0.9 | Cómo cambia el equilibrio entre forma y estilo |
🎛️ Cambiar la resolución | Ajustar EmptyLatentImage (ej. 1152×768 vs 768×1152) | Mejora en composición al respetar proporciones |
🧪 Modificar el prompt | Añadir, quitar o simplificar detalles | Cómo influye la intención en el resultado final |
🔄 Cambiar el checkpoint | Probar distintos modelos base | Diferencias en calidad, estilo y comportamiento del modelo |

🗺️ Conclusión
En este artículo has dado un paso clave en la serie: pasar de generar imágenes a controlarlas de verdad
Hasta ahora habíamos visto por separado:
ControlNet → control de la forma
LoRA → control del estilo
Pero aquí has aprendido a combinarlos dentro de un mismo workflow. Y eso cambia completamente el juego.
El workflow es simple por diseño, porque el control real no está en los nodos sino en cómo equilibras:
la estructura (ControlNet)
el estilo (LoRA)
y la intención (prompt)
A partir de ahora puedes mantener la composición de una imagen, transformar completamente su estética, diseñar resultados en lugar de generarlos al azar y construir workflows reutilizables y controlados
Generar imágenes con IA no es cuestión de suerte, es cuestión de control, y eso es exactamente lo que estás empezando a construir.
Si quieres seguir aprendiendo a dominar la IA en local y construir workflows realmente útiles:
🌐 Recursos útiles
🌍 Hugging Face: uno de los mayores repositorios de IA del mundo, donde encontrarás miles de modelos —incluidos los compatibles con Stable Diffusion y ComfyUI— listos para descargar y usar.
🎨CivitAI: plataforma comunitaria donde los usuarios comparten modelos, estilos, LoRAs y nodos específicos para ComfyUI, clasificados por categoría, versión y nivel de complejidad.
Recursos dentro del workflow:
Checkpoint: Juggernaut XL - https://civitai.com/models/133005?modelVersionId=782002
LoRA: Cyberpunk [Style] Sci-Fi LoRA XL - https://civitai.com/models/135492/cyberpunk-style-sci-fi-lora-xl
ControlNetUnion SDXL: https://huggingface.co/xinsir/controlnet-union-sdxl-1.0/tree/main
🧠 En Lozkorp:
Descubre el artículo previo donde introdujimos ComfyUI dentro del ciclo “Generación de imágenes con IA en local (IV)”:🔗 Generación de imágenes con IA en local (IV) — ComfyUI
Serie ComfyUI (V) -- Generar imágenes a partir de prompts guardados en un archivo de texto
Serie ComfyUI (VI) — Extraer prompts desde una carpeta de imágenes (WD14 Tagger)
Serie ComfyUI (VII) — Img2Img simple: mejorar o modificar una imagen en local
Serie ComfyUI (VIII) — Upscale de imágenes: qué es, cómo funciona y workflow comparativo
Serie ComfyUI (IX) — Upscale y normalización automática de imágenes
Serie ComfyUI (XI) — Introducción a ControlNet: control real sobre la forma
Serie ComfyUI (XII) — ¿Qué es un LoRA y cómo usarlo en Stable Diffusion?
Serie ComfyUI (XIII) — Multi-LoRA: cómo combinar estilos sin romper la imagen
Archivo JSON de este ejemplo 📁 wf_ComfyUI_ControlNet_LORA_XL_Simple.json





















Comentarios