top of page

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.


Diagrama con fotos conectadas mostrando flujo de trabajo "ControlNet + LoRA (forma + estilo)". Fondo gris, líneas de colores, logo "LozKorp".
Workflow ControlNet & LoRA

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.


Captura de pantalla de un flujo de trabajo en un software gráfico. Menú con opciones: Nuevo, Abrir (Ctrl+o). Flechas indican acciones.
Cargar workflow en ComfyUI

🅱️ 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.


Interfaz de software con menú resaltado en morado. Opciones visibles: Workflow, Edit, Help. Botón "+ New" y flecha hacia espacio de trabajo.
Empezar con workflow en blanco

🧠 ¿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:

  1. La imagen de entrada define la estructura

  2. Canny extrae los bordes

  3. ControlNet usa esa información para condicionar la generación

  4. El LoRA modifica el estilo del modelo

  5. 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:

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)


Interfaz de software con diagramas de flujo. A la izquierda, una imagen urbana con personas. Fondos en tonos azules y grises. Texto técnico visible.
Load Image & Canny & Load ControlNet Model & Apply ControlNet

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:

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:

Salida:

  • MODEL → Load LoRA

  • CLIP → Load LoRA

  • VAE → VAEDecode


Diagrama de flujo colorido con cajas y líneas conectadas. Texto en las cajas indica modelos y configuraciones relacionadas a gráficos y escenarios.
Load Checkpoint & Load LoRA & Clip Text Encode (positvo & negativo)

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 environment

Salida:

  • 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 composition

Salida:

  • 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


Interfaz gráfica de software generador de imágenes con paneles de control. Imagen de fondo muestra paisaje futurista con luces neón.
Empty Latent Image & KSampler & VAE Decode & Save Image

🔟 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

  1. ControlNet

  2. LoRA

  3. 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

Varias imágenes: ciudad con fuentes y edificios, escena cibernética con luces neón, mujer en bikini con rifle en playa, ilustraciones de lo mismo.
Ejemplos de generación de imágenes con el workflow

🗺️ 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


Comentarios


© 2025 by Lozkorp                                                         

bottom of page