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.
On this page
- TL;DR
- ¿Por qué convertir un checkpoint en lugar de descargarlo?
- La diferencia de arquitectura: 9 canales frente a 4
- Receta de mezcla de SD 1.5
- Receta de mezcla de SDXL
- Cómo funciona Add Difference (el mecanismo)
- Error común: colapso de metadatos BigLust v1.0
- Controlando la seed y el ruido para ediciones repetibles
- Flujo de trabajo: del boceto a un resultado listo para inpainting
- Tabla de referencia rápida: configuraciones de mezcla SD 1.5 vs SDXL
- FAQ
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.Generatorcon seed como un tensorlatentsexplícito a la pipeline;strength < 1.0preserva 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 canales | Cantidad | Propósito |
|---|---|---|
| Latente ruidoso | 4 | Entrada estándar de difusión |
| Latente de imagen con máscara | 4 | Codificación VAE de la imagen con las regiones enmascaradas en cero |
| Máscara | 1 | Má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
| Espacio | Modelo | Fuente |
|---|---|---|
| Modelo A | stable-diffusion-v1-5-inpainting (oficial) | HuggingFace |
| Modelo B | Tu checkpoint ajustado | — |
| Modelo C | stable-diffusion-v1-5 (base) | HuggingFace |
| Modo | Add Difference | — |
| Multiplicador | Se ignora en este modo | — |
| Formato | safetensors | — |
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
| Espacio | Modelo | Fuente |
|---|---|---|
| Modelo A | sd_xl_base_1.0_inpainting_0.1.safetensors | benjamin-paine/sd-xl-alternative-bases |
| Modelo B | Tu ajuste fino de SDXL | — |
| Modelo C | sd_xl_base_1.0_fp16_vae.safetensors | Mismo repositorio |
| Modo | Add Difference | — |
| Multiplicador | Se ignora | — |
| Formato | safetensors | — |
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:
theta_A - theta_C= el delta de inpainting (pesos añadidos/cambiados cuando el modelo base se ajustó para inpainting).theta_B + delta= tu ajuste fino con la adaptación de inpainting injertada.
Fuente:merge_models.pyde A1111 implementaadd_differencecomotheta_0 + (theta_1 - theta_2)sin escalado de multiplicador (A1111 merge_models.py).
Fuente:merge_models.pyde A1111 implementaadd_differencecomotheta_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íntoma | Causa | Solució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:
| Control | Parámetro | Efecto |
|---|---|---|
| Generator con seed | generator=torch.Generator(device).manual_seed(seed) | Hace la muestra determinista si la pipeline genera su propio ruido. |
| Latents explícitos | latents=your_tensor | Omite completamente el ruido aleatorio: la pipeline usa tu tensor como latente inicial. |
| Intensidad | strength=0.3–1.0 | En 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 deStableDiffusionInpaintPipeline.__call__de diffusers documentagenerator("make generation deterministic") ylatents("Pre-generated noisy latents to be used as inputs") (diffusers InpaintPipeline docs).
Fuente: la firma deStableDiffusionInpaintPipeline.__call__de diffusers documentagenerator("make generation deterministic") ylatents("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
- Prepara el checkpoint de inpainting usando la receta de mezcla anterior.
- Abre una interfaz img2img/inpaint (A1111, ComfyUI o Krita AI Diffusion).
- Dibuja una máscara cruda sobre la región a regenerar; definimos
strength ≈ 0.7. - Pides el contenido deseado para la zona enmascarada.
- Iteras: bajas
strengtha 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ón | SD 1.5 | SDXL |
|---|---|---|
| Modelo A (base para inpainting) | stable-diffusion-v1-5-inpainting | sd_xl_base_1.0_inpainting_0.1.safetensors |
| Modelo B (tu ajuste fino) | Tu .safetensors | Tu .safetensors |
| Modelo C (base) | stable-diffusion-v1-5 | sd_xl_base_1.0_fp16_vae.safetensors |
| Modo | Add Difference | Add Difference |
| Multiplicador | Ignorado | Ignorado |
| 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