ArtificialGuyBR

Home / Blog / Fixing things

Crear un checkpoint de inpainting desde cualquier modelo

Combina checkpoints SD en variantes de inpainting con Add Difference. Controla la seed y el ruido para ediciones repetibles.

8 sources cited Fixing things

Crear un checkpoint de inpainting desde cualquier modelo

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

TL;DR

  • Receta de mezcla: en la herramienta Checkpoint Merger de Automatic1111, selecciona el modo Add Difference con Modelo A = base para inpainting, Modelo B = tu ajuste fino, Modelo C = modelo base correspondiente. El multiplicador se ignora en este modo.
  • Diferencia de arquitectura: los UNet de inpainting tienen 9 canales de entrada (4 latentes + 4 latentes de imagen con máscara + 1 máscara) frente a 4 de los modelos base. Los canales extra se inicializan en cero durante el ajuste fino de inpainting.
  • Control de seed y ruido: para ediciones deterministas, pasa tanto un torch.Generator con seed como un tensor latents explícito a la pipeline; strength < 1.0 preserva parte de la señal latente original.

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

¿Por qué convertir un checkpoint en lugar de descargarlo?

Existen checkpoints de inpainting dedicados para SD 1.5 y SDXL, pero están ligados al modelo base desde el que se entrenaron. Si ajustaste un modelo a un estilo, personaje o dominio específico, los pesos oficiales de inpainting no transportan esas adaptaciones. La mezcla Add Difference (A + (B - C)) injerta la capacidad de inpainting en tu checkpoint, preservando los conceptos que aprendió.

Esta técnica funciona porque el delta de inpainting: los pesos que cambiaron cuando el modelo base se ajustó para inpainting, se aísla restando la base (C) de la base para inpainting (A). Aplicar ese delta a tu ajuste fino (B) transfiere solo la adaptación específica de inpainting.


Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

La diferencia de arquitectura: 9 canales frente a 4

Una UNet de Stable Diffusion estándar espera latentes de 4 canales del encoder VAE. Una UNet de inpainting espera 9 canales:

Grupo de canalesCantidadPropósito
Latente ruidoso4Entrada estándar de difusión
Latente de imagen con máscara4Codificación VAE de la imagen con las regiones enmascaradas en cero
Máscara1Máscara binaria redimensionada (blanco = regenerar, negro = preservar)

Los 5 canales adicionales se inicializan en cero al comenzar el entrenamiento de inpainting, así que el modelo aprende a condicionarse por la región enmascarada y la máscara desde cero. Por eso un checkpoint normal falla en inpainting: su UNet no tiene pesos para esas entradas adicionales.

Fuente: La tarjeta del modelo de inpainting de SD 1.5 indica: "Para inpainting, el UNet tiene 5 canales de entrada adicionales (4 para la imagen con máscara codificada y 1 para la máscara misma) cuyos pesos se inicializaron en cero tras restaurar el checkpoint sin inpainting".

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

Receta de mezcla de SD 1.5

EspacioModeloFuente
Modelo Astable-diffusion-v1-5-inpainting (oficial)HuggingFace
Modelo BTu checkpoint ajustado—
Modelo Cstable-diffusion-v1-5 (base)HuggingFace
ModoAdd Difference—
MultiplicadorSe ignora en este modo—
Formatosafetensors—

El archivo de salida aparece como <YourModelName>.inpainting.safetensors en la carpeta de modelos.

Nota: el repositorio de benjamin-paine refleja los pesos oficiales de CompVis/Stability. Usa la tarjeta del modelo oficial como fuente canónica.

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

Receta de mezcla de SDXL

EspacioModeloFuente
Modelo Asd_xl_base_1.0_inpainting_0.1.safetensorsbenjamin-paine/sd-xl-alternative-bases
Modelo BTu ajuste fino de SDXL—
Modelo Csd_xl_base_1.0_fp16_vae.safetensorsMismo repositorio
ModoAdd Difference—
MultiplicadorSe ignora—
Formatosafetensors—

Crítico: Modelo C debe ser la versión FP16 VAE. El equipo de Diffusers entrenó XL Inpainting con el VAE FP16 fusionado; usar una base distinta (VAE fp32 o sin VAE) aplica un delta incompatible y produce una VAE rota.

Fuente: La tarjeta del modelo de Benjamin Paine: "Debes usar específicamente los dos archivos presentes en este repositorio... usar una base XL distinta resultará en un delta incorrecto aplicado al checkpoint de inpainting y la VAE resultante será absurda".

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

Cómo funciona Add Difference (el mecanismo)

La fórmula theta_A + (theta_B - theta_C) calcula:

  1. theta_A - theta_C = el delta de inpainting (pesos añadidos/cambiados cuando el modelo base se ajustó para inpainting).
  2. theta_B + delta = tu ajuste fino con la adaptación de inpainting injertada.
Fuente: merge_models.py de A1111 implementa add_difference como theta_0 + (theta_1 - theta_2) sin escalado de multiplicador (A1111 merge_models.py).
Fuente: merge_models.py de A1111 implementa add_difference como theta_0 + (theta_1 - theta_2) sin escalado de multiplicador.

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

Error común: colapso de metadatos BigLust v1.0

SíntomaCausaSolución
Fuente: Solución publicada en el artículo 833 de Civitai.
Fuente: Solución publicada en el artículo 833 de Civitai.

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

Controlando la seed y el ruido para ediciones repetibles

Tres controles determinan el determinismo en StableDiffusionInpaintPipeline:

ControlParámetroEfecto
Generator con seedgenerator=torch.Generator(device).manual_seed(seed)Hace la muestra determinista si la pipeline genera su propio ruido.
Latents explícitoslatents=your_tensorOmite completamente el ruido aleatorio: la pipeline usa tu tensor como latente inicial.
Intensidadstrength=0.3–1.0En 1.0, la región enmascarada se convierte en ruido puro; en <1.0, se preserva parte de la señal latente.
Fuente: la firma de StableDiffusionInpaintPipeline.__call__ de diffusers documenta generator ("make generation deterministic") y latents ("Pre-generated noisy latents to be used as inputs") (diffusers InpaintPipeline docs).
Fuente: la firma de StableDiffusionInpaintPipeline.__call__ de diffusers documenta generator ("make generation deterministic") y latents ("Pre-generated noisy latents to be used as inputs").

Interacción de intensidad de denoise con la máscara

El parámetro strength controla cuánto ruido se añade a la imagen de entrada antes de denoisear la región enmascarada:

  • 1.0 → región enmascarada = ruido puro → regeneración completa guiada solo por el prompt.
  • 0.3–0.5 → conserva más contenido original → ediciones más finas y mejor preservación de estructura.
Fuente: documentación de la pipeline: "Un valor de 1 ignora esencialmente image". El flujo de trabajo de la comunidad (Civitai 4451) recomienda 0.7 para la primera pasada y 0.3 para refinar detalles.
Fuente: documentación de la pipeline: "Un valor de 1 ignora esencialmente image". El flujo de trabajo de la comunidad (Civitai 4451) recomienda 0.7 para la primera pasada y 0.3 para refinar detalles.

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

Flujo de trabajo: del boceto a un resultado listo para inpainting

  1. Prepara el checkpoint de inpainting usando la receta de mezcla anterior.
  2. Abre una interfaz img2img/inpaint (A1111, ComfyUI o Krita AI Diffusion).
  3. Dibuja una máscara cruda sobre la región a regenerar; definimos strength ≈ 0.7.
  4. Pides el contenido deseado para la zona enmascarada.
  5. Iteras: bajas strength a 0.3–0.4, refinéy la máscara/prompt y vuelve a ejecutar.
Herramientas: Krita AI Diffusion (ComfyUI) ofrece un bucle rápido de boceto → inpaint. El procesador "inpaint only" de ControlNet gestiona el outpainting. ADetailer automatiza retoques de cara/cuerpo (referencias: Civitai 482; Civitai 8261, referencia del hack de localStorage del generador on-site).
Herramientas: Krita AI Diffusion (ComfyUI) ofrece un bucle rápido de boceto → inpaint. El procesador "inpaint only" de ControlNet gestiona el outpainting. ADetailer automatiza retoques de cara/cuerpo.

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

Tabla de referencia rápida: configuraciones de mezcla SD 1.5 vs SDXL

ConfiguraciónSD 1.5SDXL
Modelo A (base para inpainting)stable-diffusion-v1-5-inpaintingsd_xl_base_1.0_inpainting_0.1.safetensors
Modelo B (tu ajuste fino)Tu .safetensorsTu .safetensors
Modelo C (base)stable-diffusion-v1-5sd_xl_base_1.0_fp16_vae.safetensors
ModoAdd DifferenceAdd Difference
MultiplicadorIgnoradoIgnorado
Nombre de salida<name>.inpainting.safetensors<name>.inpainting.safetensors

Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI

FAQ

¿Puedo usar un checkpoint normal para inpainting sin mezclar?

No. La UNet no tiene los 5 canales de entrada adicionales (latente de imagen con máscara de 4 + 1 máscara). O genera un error o produce basura.

¿Importa la configuración del multiplicador en Add Difference?

No. La implementación de A1111 ignora multiplier en este modo; la fórmula es fija: A + (B - C).

¿Por qué SDXL debe usar la VAE FP16 como Modelo C?

El modelo de inpainting XL se entrenó con la VAE FP16 fusionada. El delta A - C contiene estadísticas específicas de VAE. Una base incompatible aplica un delta erróneo y rompe la VAE.

¿Cómo obtengo el mismo resultado de inpainting exactamente dos veces?

Pasa el mismo torch.Generator con seed y el mismo tensor latents a la pipeline. También debe coincidir strength.

¿Qué hace realmente strength=0.5?

Añade ruido a medio camino hacia el ruido puro. En 0.5, la región enmascarada es ruidosa hasta la mitad hacia el ruido puro; el denoiser preserva más estructura mientras permite cambios guiados por el prompt.

¿Puedo mezclar un LoRA en el checkpoint de inpainting en su lugar?

Sí: carga el checkpoint de inpainting mezclado y aplica los LoRAs en tiempo de inferencia. La receta de mezcla solo maneja la arquitectura del checkpoint base.

¿Dónde encuentro los pesos oficiales de inpainting de SD 1.5?

stable-diffusion-v1-5/stable-diffusion-inpainting en HuggingFace (CompVis/Stability). El repositorio de benjamin-paine es un reflejo.


Related reads: Guía de entrenamiento de checkpoints de Stable Diffusion · Inpainting y outpainting con ControlNet · Tutorial de flujo de trabajo de inpainting en ComfyUI