Inpainting y outpainting: máscaras, denoise y modelo
Cuándo usar modelos de inpainting vs checkpoints base, cómo el contenido enmascarado y el área de inpaint cambian el resultado, y por qué fallan los edits.
On this page
- TL;DR
- El mito del modelo: no necesitas un checkpoint especial para la mayoría del inpainting
- Contenido enmascarado: el relleno inicial decide la trayectoria
- Área de inpaint: Only masked vs Whole picture
- Por qué las esquinas muestran costuras — y cómo arreglarlas
- Outpainting con Fooocus: cómo encaja 4K en 12 GB
- Ajustes de outpainting que funcionan de verdad
- Referencia rápida: ajustes por tarea
- Errores comunes y solución
- Preguntas frecuentes (FAQ)
- Resumen
- Artículos relacionados
Inpainting y outpainting: máscaras, denoise y elección de modelo
TL;DR
- Modelos de inpainting dedicados (SD1.5 inpainting, el patch de 1.28 GB de Fooocus) añaden 5 canales extra de entrada al UNet para condicionar con imagen enmascarada + máscara. Los checkpoints base pueden inpintar pero pierden coherencia en reemplazos complejos (gente nueva, cuerpos nuevos).
- Contenido enmascarado elige el relleno inicial del latente:
fill/latent nothing+ denoise > 0.8 = reemplazar;original/latent noise+ denoise 0.4–0.6 = modificar. Ajusta el modo a la tarea. - Área de inpaint: Only masked recorta la región enmascarada, la escala a resolución completa (suele ser 1024²), la procesa y la pega de nuevo — dando mucho más detalle que
Whole pictureen lienzos grandes. - Mask blur 4–8 evita costuras duras. Fooocus lo automatiza con una apertura morfológica (dilate → erode) en cada máscara.
- Fooocus permite outpainting de 4K+ en 12 GB VRAM recortando a la zona de expansión, procesando a ≤ 1024 px y usando una cabeza inpaint ligera inyectada en el primer bloque del UNet — no un checkpoint de inpainting completo.
- Outpainting necesita 50–100 pasos, samplers ancestrales (Euler a / DPM2 a), denoise 1.0 y CFG en el tope del rango 7–12. Pocos pasos o sampler erróneo producen extensiones incoherentes.
El mito del modelo: no necesitas un checkpoint especial para la mayoría del inpainting
Las guías de la comunidad afirman "necesitas un modelo de inpainting para buenos resultados". Solo es verdad a medias.
SD1.5 tiene un checkpoint oficial de inpainting entrenado durante 440k pasos adicionales con 5 canales extra del UNet (4 para la imagen enmascarada codificada por VAE, 1 para la máscara binaria). Esos canales se inicializan en cero tras restaurar los pesos base, así que el modelo aprende solo a mezclar las regiones enmascaradas (tarjeta del modelo SD1.5 inpainting).
SDXL es distinto. Stability AI nunca lanzó un checkpoint inpainting de SDXL independiente. El pipeline SDXL usa base + refiner. Los modelos "SDXL inpainting" de la comunidad son fine-tunes: algunos añaden la arquitectura de 5 canales, otros solo se entrenan con datos enmascarados sobre el UNet base. Se comportan de forma similar; solo fine-tunes específicos (variantes Pony, merges NSFW) muestran diferencias medibles (artículo 3990 de Civitai).
Fooocus sigue un tercer enfoque. Descarga un inpaint_v26.fooocus.patch de 1.28 GB — una cabeza conv pequeña (320 canales, 5 entradas: 4 latent + 1 máscara) que inyecta el condicionamiento de máscara en el primer bloque de entrada de un UNet SDXL estándar (repositorio Fooocus). Cualquier modelo base SDXL funciona; no se necesita checkpoint separado.
Regla práctica: usa un modelo de inpainting dedicado (SD1.5 inpainting, Fooocus) cuando vayas a reemplazar contenido del todo — persona nueva, objeto nuevo, fondo nuevo. Para modificar contenido existente (arreglar caras, cambiar color de camiseta, borrar logo), un checkpoint base con los ajustes correctos funciona bien.
Contenido enmascarado: el relleno inicial decide la trayectoria
El desplegable Masked content en Automatic1111 (y equivalentes en ComfyUI, Fooocus) define cómo se ve el latente antes de que el diffusion empiece. No es un ajuste de estilo: es la distribución de ruido inicial.
Condición inicial | Latente inicial | Cuándo usarlo | Rango denoise | Source
|---------|----------------|----------|---------------|--------
fill | Promedio local de color (desenfoque de píxeles circundantes) | Reemplazar áreas grandes, fondo nuevo | 0.8–1.0 | A1111 Features latent nothing | Ceros (negro puro en el espacio latente) | Reemplazo desde cero | 0.8–1.0 | A1111 Features original | VAE-encode de los píxeles enmascarados originales | Modificar contenido existente (arreglo de cara, cambio de color) | 0.4–0.6 | A1111 Features latent noise | Ruido gaussiano aleatorio | Variación creativa sobre la estructura existente | 0.5–0.8 | A1111 Features
Por qué el denoise debe coincidir: un denoise alto (> 0.8) sobrescribe el latente inicial casi por completo. Si le pasas original (la cara existente) pero denoise a 0.9, destruyes las señales de identidad — el resultado se parece a otra persona. El denoise bajo (0.4–0.6) conserva la estructura original mientras el prompt dirige los detalles (ThinkDiffusion aDetailer).
Área de inpaint: Only masked vs Whole picture
Este ajuste define si el modelo ve la imagen completa o solo el recorte enmascarado.
- Whole picture — La imagen completa se redimensiona a la resolución objetivo (p. ej., 1024×1024), la región enmascarada se procesa con contexto, y el resultado se vuelve a pegar. Se preserva la coherencia global, pero la región enmascarada recibe menos píxeles efectivos.
- Only masked — El cuadro delimitador de la máscara se recorta, se escala a la resolución objetivo, se procesa a resolución completa y se vuelve a pegar. La región editada recibe ~4× más presupuesto de píxeles en una imagen de 2048 px.
Cuándo usar cada uno:
Escenario | Configuración | Motivo | Source
|----------|---------|--------|--------
Arreglo de cara/mano en foto grande | Only masked | 1024 px en la cara vs 256 px si se reduce | A1111 Features Extensión de fondo sin costura | Whole picture | El contexto global de luz/color importa | A1111 Features Inserción de objeto pequeño | Only masked | Maximizar detalle en el nuevo objeto | A1111 Features Transferencia de estilo sobre la imagen completa | Whole picture | Consistencia en el marco | A1111 Features
Source: Wiki de A1111: "With Inpaint area: Only masked enabled, only the masked region is resized, and after processing it is pasted back to the original picture. This allows you to work with large pictures and render the inpainted object at a much larger resolution." (A1111 Features)
Por qué las esquinas muestran costuras — y cómo arreglarlas
Tres modos de fallo crean bordes visibles en el borde de la máscara:
- Mask blur muy bajo (0–3). El recorte/pegado crea una transición de píxeles dura. La documentación de A1111 recomienda 4–8 (A1111 Features). Fooocus aplica
morphological_open(dilate → erode) automáticamente en cada máscara antes del procesamiento (Fooocus inpaint_worker.py). - Desajuste de denoise. El denoise alto con contenido
originaldestruye los píxeles del borde que deberían mezclarse. Usa 0.4–0.6 para modificaciones (ThinkDiffusion aDetailer). - Desajuste de resolución.
Whole pictureen una imagen 4K reduce todo; la región enmascarada pierde el detalle de alta frecuencia necesario para una mezcla limpia.
Lista de verificación de arreglos:
- Poner mask blur ≥ 4 (A1111) o confiar en el procesado automático de Fooocus
- Ajustar el denoise al contenido enmascarado: 0.4–0.6 para
original, 0.8+ parafill/latent nothing - Usar
Only maskedpara ediciones en imágenes > 1024 px
Outpainting con Fooocus: cómo encaja 4K en 12 GB
El outpainting de Fooocus evita la explosión de VRAM del procesado a pantalla completa:
- Recortar a la zona de expansión.
InpaintWorkercalcula un cuadro delimitador (solve_abcd) alrededor de la máscara + relleno (Fooocus inpaint_worker.py). - Escalar solo si es necesario. Los recortes < 1024 px se escalan a 1024 px como máximo; los mayores se mantienen nativos.
- Rellenado por desenfoque de caja multiescala.
fooocus_fillmezcla el borde con desenfocos de caja progresivamente mayores (5, 21, 41, 81 px) para una transición latente suave (Fooocus inpaint_worker.py). - Apertura morfológica en la máscara.
cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)suaviza los bordes duros antes de la difusión (Fooocus inpaint_worker.py). - Cabeza inpaint ligera. Una convolución de 320 canales (5 entradas, kernel 3×3) inyecta máscara+latent en el primer bloque de entrada del UNet vía
input_block_patch, sustituyendo la concatenación de 5 canales del UNet que usan los modelos de inpainting de SD1.5 (Fooocus inpaint_worker.py). - Procesar y pegar de nuevo. El recorte difundido se pega sobre el lienzo original a resolución completa.
Solo la zona de expansión ocupa VRAM en resolución latente 1024². Un outpainting de 4000 px en 12 GB es rutinario (repositorio Fooocus).
Ajustes de outpainting que funcionan de verdad
"Poor man's outpainting" de A1111 y las pruebas de la comunidad convergen en una receta (A1111 Features):
Parámetro | Valor | Por qué
|-----------|-------|-----
Pasos | 50–100 | El outpainting se beneficia desproporcionadamente de un alto número de pasos Sampler | Euler a / DPM2 a | Los samplers ancestrales mantienen la diversidad estocástica para una extensión coherente Denoise | 1.0 (máx) | Libertad creativa total para la nueva región CFG | 7–12, favoreciendo el extremo alto | Aderencia fuerte al prompt para continuidad estructural. No es el máximo del deslizador — CFG arriba de ~15 quema la extensión Mask blur | 8–16 | Desenfoque más ancho para mezcla sin costura en la imagen existente
Pocos pasos (< 30) o samplers deterministas (Euler, DPM++ 2M) producen extensiones rígidas, repetitivas o incoherentes.
Referencia rápida: ajustes por tarea
Tarea | Modelo | Contenido enmascarado | Área de inpaint | Denoise | Mask blur | Sampler | Pasos
|------|-------|----------------------|---------------|---------|-----------|---------|-------
Arreglo de cara/mano | Base o inpainting | original | Only masked | 0.4–0.6 | 4–8 | DPM++ 2M / Euler a | 20–30 Borrar objeto | Inpainting | fill | Only masked | 0.8–1.0 | 4–8 | DPM++ 2M | 30–40 Nueva persona en escena | Inpainting / Fooocus | latent nothing | Only masked | 0.9–1.0 | 6–10 | DPM++ 2M / DDPM | 30–40 Sustitución de fondo | Base o inpainting | fill | Whole picture | 0.8–1.0 | 8–16 | Euler a | 40–50 Outpainting | Fooocus / Base | fill | N/A (Fooocus) | 1.0 | 8–16 | Euler a / DPM2 a | 50–100 Transferencia de estilo (completa) | Base | original | Whole picture | 0.3–0.5 | 0–4 | DPM++ 2M | 20–30 DDPM (ancestral) recomendado para fine-tunes SDXL de la familia Pony; los 20–30 pasos coinciden con su sampler de entrenamiento (artículo 3990 de Civitai).
Errores comunes y solución
Síntoma | Causa | Solución | Source
|---------|-------|---------|--------
Costura visible dura en el borde de la máscara | Mask blur 0–3 | Poner mask blur 4–8 (A1111) o usar Fooocus (apertura morfológica automática) Cara inpaintada parece otra persona | Denoise > 0.8 con contenido original | Usar denoise 0.4–0.6 con original + Only masked Outpainting ignora el prompt / incoherente | Pasos < 30, sampler incorrecto, denoise sin maximizar | 50–100 pasos, Euler a o DPM2 a, denoise 1.0, CFG 10–12 Edición en imagen grande pierde detalle en la zona enmascarada | Whole picture reduce el lienzo completo | Cambiar a Only masked — recorta y procesa a resolución completa Fooocus rellena toda la imagen ignorando la máscara | Inpaint engine = "None" u opción equivocada | Seleccionar "Inpaint or Outpaint (default)" / "Modify Content"; verificar que la máscara es blanco-sobre-negro (Fooocus flags.py)
Preguntas frecuentes (FAQ)
¿Cuál es la diferencia entre fill, original, latent noise y latent nothing en inpainting? Definen el latente inicial antes de la difusión. fill promedia los colores circundantes; original conserva los píxeles existentes; latent noise añade ruido aleatorio; latent nothing usa ceros. Ajusta a la tarea: reemplazar → fill/latent nothing + denoise alto; modificar → original/latent noise + denoise bajo (A1111 Features).
¿Cuándo usar "Inpaint area: Only masked" vs "Whole picture"? Only masked cuando la región editada necesita máximo detalle (caras, objetos pequeños, imágenes fuente grandes). Whole picture cuando la coherencia global de luz/color importa más que el detalle local (extensiones de fondo, transferencia de estilo) (A1111 Features).
¿Necesito un modelo de inpainting dedicado para SDXL? No. Fooocus funciona con cualquier base SDXL vía su patch inpaint de 1.28 GB (repositorio Fooocus). Los modelos SDXL de inpainting de la comunidad existen, pero la mayoría son fine-tunes; solo variantes específicas (Pony, merges NSFW) difieren de forma medible (artículo 3990 de Civitai). Para SD1.5, el checkpoint oficial de inpainting (5 canales extra del UNet) vale la pena usar (tarjeta del modelo SD1.5 inpainting).
¿Por qué tiene mi región inpaintada una costura visible? Suelen ser: mask blur muy bajo (0–3), desajuste de denoise (alto con contenido original) o Whole picture en imagen grande que fuerza la reducción. Subir mask blur a 4–8, ajustar el denoise al modo de contenido y usar Only masked en imágenes grandes (A1111 Features; Fooocus inpaint_worker.py).
¿Qué intensidad de denoise usar para inpainting de caras? 0.4–0.6 con contenido original, área Only masked y configuración apropiada. Valores más altos destruyen la identidad; valores más bajos no cambian lo suficiente. El tutorial de aDetailer de ThinkDiffusion usa ≈ 0.6 como valor por defecto (ThinkDiffusion aDetailer).
¿Puedo outpaint imágenes 4K en 12 GB VRAM? Sí, con Fooocus. Recorta la zona de expansión, procesa a ≤ 1024 px, usa una cabeza inpaint ligera (no un UNet de inpainting completo) y pega de nuevo. El outpainting a pantalla completa de 4K en A1111/ComfyUI necesita 24 GB+ (repositorio Fooocus; Fooocus inpaint_worker.py).
¿Qué sampler funciona mejor para modelos Pony? DDPM (ancestral) a 20–30 pasos. Los fine-tunes Pony se entrenaron con DDPM; los samplers ancestrales coinciden con su schedule de ruido. No es universal — revisar la tarjeta del modelo específico (artículo 3990 de Civitai).
Resumen
La calidad de inpainting y outpainting viene de ajustar tres controles — modelo, contenido enmascarado + denoise, área de inpaint — al tipo de tarea (reemplazar vs modificar). Los modelos de inpainting dedicados añaden condicionamiento de máscara con canales extra del UNet (SD1.5) o con una cabeza inyectada ligera (Fooocus). Los checkpoints base funcionan para modificaciones cuando los ajustes son correctos. El pipeline crop-procesa-pega de Fooocus hace viable el outpainting 4K en GPUs de consumo. El fallo más común — costuras visibles — casi siempre es un desajuste de mask blur o denoise, no una limitación del modelo.
Artículos relacionados
- Comparación de samplers de Stable Diffusion — Cómo Euler a, DPM++ 2M, DDPM y otros afectan la calidad del inpainting
- Optimización de VRAM para generación de gran resolución — Técnicas para 4K+ en tarjetas de 12–16 GB
- ControlNet para inpainting preciso — Usar máscaras de profundidad, canny y segmentación para ediciones controladas