Criar checkpoint de inpainting a partir de qualquer modelo
Mesclar checkpoints em variantes de inpainting com Add Difference. Por que pesos de inpaint diferem e como controlar seed e ruído.
On this page
- Por que converter um checkpoint em vez de baixar um?
- A diferença de arquitetura: 9 canais vs. 4
- Receita de merge SD 1.5
- Receita de merge SDXL
- Como o Add Difference funciona (o mecanismo)
- Erro comum: Crash de metadados BigLust v1.0
- Controlando seed e ruído para edições repetíveis
- Workflow: Do esboço ao resultado pronto para inpaint
- Referência rápida: Configurações de merge SD 1.5 vs. SDXL
- FAQ
Criar checkpoint de inpainting a partir de qualquer modelo
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Por que converter um checkpoint em vez de baixar um?
Checkpoints dedicados de inpainting existem para SD 1.5 e SDXL, mas eles estão atrelados ao modelo base do qual foram treinados. Se você fez fine-tune de um modelo em um estilo, personagem ou domínio específico, os pesos oficiais de inpainting não carregarão essas adaptações. O merge Add Difference (A + (B - C)) enxerta a capacidade de inpainting no seu checkpoint preservando seus conceitos aprendidos.
Esta técnica funciona porque o delta de inpainting — os pesos que mudaram quando o modelo base foi feito fine-tune para inpainting — é isolado subtraindo a base (C) da base de inpainting (A). Aplicar esse delta ao seu fine-tune (B) transfere apenas a adaptação específica de inpainting.
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
A diferença de arquitetura: 9 canais vs. 4
Um UNet padrão do Stable Diffusion espera latentes de 4 canais do encoder VAE. Um UNet de inpainting espera 9 canais: Grupo de canal | Contagem | Propósito
|---------------|-------|---------
Latente ruidoso | 4 | Entrada padrão de difusão Latente de imagem mascarada | 4 | Encoding VAE da imagem com regiões mascaradas zeradas Máscara | 1 | Máscara binária com downsample (branco = regenerar, preto = preservar) Os 5 canais adicionais são inicializados com zero quando o treinamento de inpainting começa, então o modelo aprende a condicionar na região mascarada e na máscara do zero. É por isso que um checkpoint comum simplesmente falha no inpainting — seu UNet não tem pesos para essas entradas extras.
Fonte: O model card do SD 1.5 inpainting afirma: "Para inpainting, o UNet tem 5 canais de entrada adicionais (4 para a imagem mascarada codificada e 1 para a própria máscara) cujos pesos foram inicializados com zero após restaurar o checkpoint não-inpainting."
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Receita de merge SD 1.5
Slot | Modelo | Fonte
|------|-------|--------
Modelo A | stable-diffusion-v1-5-inpainting (oficial) | HuggingFace Modelo B | Seu checkpoint fine-tuned | — Modelo C | stable-diffusion-v1-5 (base) | HuggingFace Modo | Add Difference | — Multiplicador | Ignorado neste modo | — Formato | safetensors | — O arquivo de saída aparece como <SeuModeloNome>.inpainting.safetensors na sua pasta de modelos.
Nota: O repositório benjamin-paine espelha os pesos oficiais CompVis/Stability. Use o model card oficial como fonte canônica.
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Receita de merge SDXL
Slot | Modelo | Fonte
|------|-------|--------
Modelo A | sd_xl_base_1.0_inpainting_0.1.safetensors | benjamin-paine/sd-xl-alternative-bases Modelo B | Seu fine-tune SDXL | — Modelo C | sd_xl_base_1.0_fp16_vae.safetensors | Mesmo repo Modo | Add Difference | — Multiplicador | Ignorado | — Formato | safetensors | — Crítico: Modelo C deve ser a versão FP16 VAE. A equipe Diffusers treinou XL Inpainting com FP16 VAE fundido; usar uma base diferente (VAE fp32 ou sem VAE) aplica um delta incorreto e resulta em VAE quebrado.
Fonte: Model card do Benjamin Paine: "Você deve usar especificamente os dois arquivos presentes neste repositório... usar uma base XL diferente resultará em um delta incorreto sendo aplicado ao checkpoint de inpainting, e o VAE resultante será sem sentido."
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Como o Add Difference funciona (o mecanismo)
A fórmula theta_A + (theta_B - theta_C) computa:
theta_A - theta_C= o delta de inpainting (pesos adicionados/alterados quando o modelo base foi fine-tuned para inpainting)theta_B + delta= seu fine-tune com a adaptação de inpainting enxertada
Como A e C compartilham a mesma arquitetura (e para SDXL, o mesmo VAE), a subtração cancela os pesos de base compartilhados, deixando apenas as mudanças específicas de inpainting: a projeção de entrada de 9 canais, modificações de atenção e quaisquer estatísticas de VAE assadas no delta.
Fonte:merge_models.pydo A1111 implementaadd_differencecomotheta_0 + (theta_1 - theta_2)sem escalonamento de multiplicador.
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Erro comum: Crash de metadados BigLust v1.0
Sintoma | Causa | Correção
|---------|-------|-----
TypeError: argument 'metadata': 'dict' object cannot be converted to 'PyString' durante merge | Checkpoint contém metadados em formato incompatível (dict vs. PyString) | No Checkpoint Merger → seção Metadados: desmarque "save metadata", clique em "read metadata from selected checkpoints", depois Merge
Fonte: Workaround do artigo Civitai 833.
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Controlando seed e ruído para edições repetíveis
Três alavancas determinam determinismo no StableDiffusionInpaintPipeline: Alavanca | Parâmetro | Efeito
|-------|-----------|--------
Gerador com seed | generator=torch.Generator(device).manual_seed(seed) | Torna amostragem determinística se o pipeline gera seu próprio ruído Latentes explícitos | latents=seu_tensor | Ignora ruído aleatório completamente — pipeline usa seu tensor como latente inicial Strength | strength=0.3–1.0 | Em 1.0, região mascarada vira ruído puro; em <1.0, sinal latente original parcialmente preservado Para reprodutibilidade exata entre execuções, forneça ambos um gerador com seed e latents explícitos.
Fonte: AssinaturaStableDiffusionInpaintPipeline.__call__do diffusers documentagenerator("tornar geração determinística") elatents("Latentes ruidosos pré-gerados a serem usados como entradas").
Interação entre Strength de denoising e máscara
O parâmetro strength controla quanto ruído é adicionado à imagem de entrada antes de denoisar a região mascarada:
- 1.0 → região mascarada = ruído puro → regeneração total guiada apenas pelo prompt
- 0.3–0.5 → retém mais conteúdo original → edições finas, melhor preservação de estrutura
- 0.7 → ponto de partida comum para "esboço grosseiro → imagem coerente" (heurística, não regra)
Fonte: Docs do pipeline: "Um valor de 1 essencialmente ignora image." Workflow da comunidade (Civitai 4451) recomenda 0.7 para primeira passagem, 0.3 para refinamento de detalhes.
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Workflow: Do esboço ao resultado pronto para inpaint
- Prepare o checkpoint de inpainting usando a receita de merge acima.
- Abra uma interface img2img/inpaint (A1111, ComfyUI ou Krita AI Diffusion).
- Desenhe uma máscara grosseira sobre a região a regenerar; defina
strength ≈ 0.7. - Faça prompt do conteúdo desejado para a área mascarada.
- Itere: reduza
strengthpara 0.3–0.4, refine máscara/prompt, rode novamente. - Para reprodutibilidade exata: capture o tensor
latentsde uma boa execução, depois reutilize com a mesma seed.
Ferramentas: Krita AI Diffusion (ComfyUI) fornece loop rápido esboço → inpaint. Processador "inpaint only" do ControlNet lida com outpainting. ADetailer automatiza retoques de rosto/corpo.
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
Referência rápida: Configurações de merge SD 1.5 vs. SDXL
Configuração | SD 1.5 | SDXL
|---------|--------|------
Modelo A (base inpainting) | stable-diffusion-v1-5-inpainting | sd_xl_base_1.0_inpainting_0.1.safetensors Modelo B (seu fine-tune) | Seu .safetensors | Seu .safetensors Modelo C (base) | stable-diffusion-v1-5 | sd_xl_base_1.0_fp16_vae.safetensors Modo | Add Difference | Add Difference Multiplicador | Ignorado | Ignorado Nome de saída | <nome>.inpainting.safetensors | <nome>.inpainting.safetensors
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial
FAQ
Posso usar um checkpoint comum para inpainting sem mesclar?
Não. O UNet não tem os 5 canais de entrada adicionais (4 latente de imagem mascarada + 1 máscara). Vai dar erro ou produzir lixo.
A configuração Multiplier importa para Add Difference?
Não. A implementação do A1111 ignora multiplier para este modo; a fórmula é fixa como A + (B - C).
Por que SDXL deve usar FP16 VAE como Modelo C?
O modelo XL inpainting foi treinado com FP16 VAE fundido. O delta A - C contém estatísticas específicas do VAE. Uma base incompatível aplica o delta errado e quebra o VAE.
Como obtenho o mesmo resultado de inpaint duas vezes?
Passe o mesmo torch.Generator com seed e o mesmo tensor latents para o pipeline. strength também deve ser igual.
O que strength=0.5 faz de verdade?
Adiciona ruído no meio do caminho para ruído puro. Em 0.5, a região mascarada é ruidosa até a metade do caminho para ruído puro; o denoiser preserva mais estrutura enquanto ainda permite mudanças guiadas pelo prompt.
Posso mesclar um LoRA no checkpoint de inpainting em vez disso?
Sim — carregue o checkpoint de inpainting mesclado, depois aplique LoRAs em tempo de inferência. A receita de merge só lida com a arquitetura do checkpoint base.
Onde encontro os pesos oficiais de inpainting SD 1.5?
stable-diffusion-v1-5/stable-diffusion-inpainting no HuggingFace (CompVis/Stability). O repo benjamin-paine é um espelho.
Related reads: Stable Diffusion checkpoint training guide · ControlNet inpainting and outpainting · ComfyUI inpainting workflow tutorial