IPAdapter vs ControlNet vs Regional Prompter no ComfyUI
Qual ferramenta de condicionamento usar no ComfyUI para transferência de estilo, composição e consistência de personagem — e configurações que funcionam.
On this page
- TL;DR
- A correção que você precisa antes de qualquer outra coisa
- O que é IPAdapter e quando ele vence?
- Como fazer o IPAdapter afetar apenas parte da imagem?
- Como transferir apenas estilo, não conteúdo, com IPAdapter?
- O que é ControlNet e quando ele vence?
- Regional Prompter: prompts travados a regiões
- Modo Attention vs Latent no Regional Prompter
- Tokens do ADetailer: [SEP], [SKIP], [PROMPT]
- Erros comuns e correções
- Como escolher: uma tabela de decisão
- FAQ
IPAdapter vs ControlNet vs Regional Prompter no ComfyUI
TL;DR
- IPAdapter transfere um assunto ou estilo de uma imagem de referência; adiciona cross-attention de prompt de imagem sobre a cross-attention de texto congelada (tencent-ailab/IP-Adapter).
- ControlNet dita a estrutura espacial (bordas, profundidade, pose, segmentação); treina uma cópia dos blocos codificadores da UNet alimentada por um mapa de controle (lllyasviel/ControlNet).
- Regional Prompter vincula diferentes prompts de texto a diferentes regiões da imagem, o que corrige o sangramento de atributos entre personagens (sd-webui-regional-prompter).
A correção que você precisa antes de qualquer outra coisa
Um tutorial de ComfyUI de 2024 amplamente divulgado diz para ajustar um controle deslizante noise do IPAdapter (0.01 = "adiciona ruído", 1.0 = "remove ruído"). Esse parâmetro não existe mais. O antigo nó IPAdapter Apply foi removido e substituído pelo IPAdapter Advanced, com image_negative como a entrada atual de condicionamento negativo — uma imagem, não um controle deslizante de 0.01–1.0. Sem uma, o nó usa como padrão uma imagem zerada: image_negative = image_negative if image_negative is not None else torch.zeros([1, clipvision_size, clipvision_size, 3]). Assim, a antiga ideia de imagem negativa vazia sobrevive, só que como uma entrada de imagem. Ignore qualquer tutorial que cite números de 0.01/1.0.
O que é IPAdapter e quando ele vence?
IPAdapter é um adaptador de aproximadamente 22 milhões de parâmetros que dá a um modelo de difusão pré-treinado de texto para imagem um prompt de imagem além do seu prompt de texto. O repositório do artigo original descreve "um adaptador eficaz e leve para alcançar a capacidade de prompt de imagem para os modelos de difusão de texto para imagem pré-treinados. Um IP-Adapter com apenas 22M de parâmetros pode alcançar desempenho comparável ou até melhor do que um modelo de prompt de imagem ajustado." O mantenedor do ComfyUI o chama de "uma lora de 1 imagem" (cubiq README) — e quando uma imagem não é suficiente, é aí que treinar uma LoRA real começa a valer a pena. Ele vence para consistência de assunto e estilo a partir de uma referência.
Configurações-chave: comece weight/scale em 0.8 para o weight_type linear padrão; use 0.5 para condicionamento equilibrado de texto mais imagem e 1.0 apenas para imagem. Sempre use uma imagem de referência quadrada — o processador padrão do CLIP corta no centro, então entradas não quadradas "perderão a informação fora do centro" (tencent README).
Variantes de modelo do IPAdapter em resumo
| Sufixo do arquivo | Força | Melhor para | Fonte |
|---|---|---|---|
ip-adapter_sd15 | Básico, médio | Assunto/estilo geral | cubiq README |
ip-adapter_sd15_light_v11 | Impacto leve | Influência sutil | cubiq README |
ip-adapter-plus_sd15 | Muito forte | Correspondência rigorosa de assunto | cubiq README |
ip-adapter-plus-face_sd15 | Rosto, retratos | Consistência de personagem | cubiq README |
ip-adapter-full-face_sd15 | Rosto mais forte, "não necessariamente melhor" | Rostos quando o Plus-Face é fraco | cubiq README |
Os modelos FaceID são uma família separada: eles "exigem insightface" e "a maioria dos modelos FaceID também precisa de uma LoRA", com o aviso de que "cada modelo FaceID precisa ser combinado com sua própria LoRA específica" (cubiq README).
Como fazer o IPAdapter afetar apenas parte da imagem?
O nó IPAdapter Advanced tem uma entrada attn_mask que restringe onde a referência se aplica. Segundo a documentação do nó: "A máscara definirá a área de influência dos modelos IPAdapter na imagem final. Zonas pretas não serão afetadas, zonas brancas receberão influência máxima. Pode ser uma máscara em tons de cinza." A máscara deve corresponder ao tamanho ou à proporção do latent. A documentação do diffusers descreve o mesmo mecanismo de forma independente: "A máscara binária permite atribuir uma imagem IP-Adapter a uma área específica da imagem de saída, tornando útil para compor várias imagens IP-Adapter. Cada imagem IP-Adapter requer uma máscara binária."
Esta é a maneira moderna e suportada de compor várias imagens de referência em um único quadro. O exemplo de condicionamento regional do cubiq o demonstra com um nó MaskFromRGBCMYBW+ dividindo uma máscara codificada por cores em máscaras por região que alimentam cada bloco de parâmetro IPAdapter. (Um tutorial mais antigo cita examples/IPAdapter_2_masks.json, um nome de arquivo que não existe mais no diretório de exemplos — o equivalente atual é ipadapter_regional_conditioning.json.)
Duas entradas adicionais do IPAdapter Advanced importam para trabalho regional: weight_type ("style transfer (SDXL) só funciona com SDXL e é uma ferramenta muito poderosa para transferir apenas o estilo de uma imagem, mas não seu conteúdo") e start_at/end_at de intervalo de etapas ("se você começar mais tarde (ex: start_at=0.3) a imagem gerada terá um condicionamento muito leve") — ambos da documentação do nó.
Como transferir apenas estilo, não conteúdo, com IPAdapter?
Use o InstantStyle. Seu método em duas partes está documentado no README do projeto: subtrair as características de texto de conteúdo das características da imagem para que "estilo e conteúdo possam ser explicitamente desacoplados", e então injetar apenas nos blocos de atenção que tratam de estilo — "up blocks.0.attentions.1 e down blocks.2.attentions.1 capturam estilo (cor, material, atmosfera) e layout espacial (estrutura, composição), respectively." Ele é "suportado em ComfyUI_IPAdapter_plus, desenvolvido por nosso coautor", e a opção weight_type: style transfer (SDXL) expõe a mesma ideia.
O que é ControlNet e quando ele vence?
ControlNet adiciona uma condição espacial — bordas de Canny, mapas de profundidade, esqueletos de OpenPose, segmentação, rabiscos, etc. — através de uma cópia treinável dos blocos codificadores da UNet, enquanto uma cópia "travada" preserva o modelo base. Uma "convolução zero" (uma conv 1×1 com peso e viés zero) significa que não adiciona distorção antes do treinamento: "antes do treinamento, todas as convoluções zero produzem zeros, e o ControlNet não causará nenhuma distorção" (ControlNet README). O FAQ do mantenedor explica por que pesos zero ainda aprendem: "enquanto $x \neq 0$, uma iteração de descida de gradiente tornará $w$ não-zero."
ControlNet vence quando você precisa de estrutura — pose, bordas, profundidade, layout. O nó ControlNetApplyAdvanced do ComfyUI expõe strength (0.0–10.0, padrão 1.0), start_percent e end_percent (ambos 0–1) (ComfyUI nodes.py), correspondendo ao idioma de intervalo de etapas do IPAdapter. Múltiplos ControlNets se compõem: "mais de um ControlNet pode ser facilmente composto para controle multicondição" (ControlNet README). Para combinar tipos de ControlNet com tarefas, veja Modelos de ControlNet para controle de composição.
Regional Prompter: prompts travados a regiões
O Regional Prompter é uma extensão do A1111 que permite que "diferentes prompts... sejam especificados para diferentes regiões", separados pela palavra-chave BREAK. Usuários do ComfyUI encontram a mesma necessidade quando as máscaras do IPAdapter parecem pesadas e uma divisão apenas por texto é suficiente. A sintaxe:
a man and a woman, a man with black hair
BREAK
a man and a woman, a woman with blonde hair
O primeiro bloco se aplica à região esquerda, o segundo à direita. O compartilhado "a man and a woman" importa: sem isso, o modelo vê dois prompts de pessoa única e renderiza uma pessoa. A palavra-chave ADDCOMM automatiza isso, prefixando o primeiro bloco a cada região, e ADDBASE mais um base ratio mistura um prompt base por peso em vez de concatená-lo — "cláusula comum combina prompts, e cláusula base combina pesos (como a força de remoção de ruído do img2img)" (hako README).
Prompt comum vs prompt base
| Recurso | Comum (ADDCOMM) | Base (ADDBASE) |
|---|---|---|
| Como se aplica | Prefixado ao prompt de cada região | Misturado por base ratio (ex: 0.2 = 20% base + 80% região) |
| Analogia | Concatenação | Mistura de remoção de ruído de img2img |
| Use quando | O enquadramento da cena deve aparecer em cada região | A base é forte demais e você quer reduzi-la |
| Fonte | hako README | hako README |
Modo Attention vs Latent no Regional Prompter
O Regional Prompter tem dois modos de cálculo com uma compensação real de precisão/velocidade. Segundo o README: "No caso de uma imagem 512 x 512, o modo Attention reduz o tamanho da região para cerca de 8 x 8 pixels no fundo da U-Net, de modo que áreas pequenas se misturam; o modo Latent calcula 64*64, de modo que a região é exata." O modo Latent é mais lento — "o tempo de geração é o número de áreas x o tempo de geração de uma imagem" — mas é o modo que "permite separar LoRAs até certo ponto." Internamente, Attention usa BREAK e Latent usa AND, convertidos automaticamente para que você possa digitar qualquer um.
Tokens do ADetailer: [SEP], [SKIP], [PROMPT]
Quando o ADetailer detecta vários rostos, três tokens controlam prompts por rosto. Se você ainda não configurou o ADetailer, comece com nosso guia de corrigir rostos e mãos automaticamente. Da wiki:
[SEP]divide um prompt em prompts por objeto, "dividido pela regex\s*[SEP]\s*," aplicado na ordem de detecção — que é "altamente arbitrária, então use com cautela."[SKIP]pula o inpainting para aquela parte (regex^\s*[SKIP]\s*$).[PROMPT]é substituído pelo prompt de entrada original.
Combinar Regional Prompter para posicionamento com ADetailer para reparo de rosto é a receita padrão para múltiplos personagens. Uma afirmação frequentemente citada de que a ordem de processamento do rosto é ajustável por uma configuração não é suportada pela wiki do ADetailer — a ordem de detecção é arbitrária.
Erros comuns e correções
| Erro / sintoma | Causa | Correção | Fonte |
|---|---|---|---|
'NoneType' object has no attribute 'encode_image' (frequentemente no sd1.5) | Codificador de visão CLIP errado, ou a extensão obsoleta IPAdapter_ConfyUI conflitando | Carregue o codificador correto de h94/IP-Adapter (models/image_encoder/model.safetensors para sd1.5, sdxl_models/image_encoder/model.safetensors para sdxl); remova a extensão obsoleta; atualize o ComfyUI + a extensão IPAdapter | cubiq issue #108 |
size mismatch for proj_in.weight ... | Combinação errada de modelo/codificador/checkpoint (ex: modelo -vit-h com o codificador bigG) | Todos os modelos -vit-h precisam do codificador ViT-H SD1.5; apenas um modelo SDXL e o modelo SD1.5 vit-G precisam do codificador maior | cubiq issue #108 |
Expected query, key, and value to have the same dtype ... | Incompatibilidade fp16/fp32 | Execute o ComfyUI com --force-fp16 | cubiq issue #108 |
| Corrupção de LoRA, tela verde/preta no modo Latent do Regional Prompter | Problema conhecido de LoRA no modo Latent, sem correção de causa raiz | Reduza CFG, reduza o peso da LoRA, aumente as etapas; use parâmetros negative textencoder + negative U-net; volte ao inpaint | hako README |
| Pessoa única quando duas eram intencionadas | Cada prompt de região descreve uma pessoa | Adicione um prompt comum (ADDCOMM) declarando a cena completa | stable-diffusion-art.com |
| Cor de cabelo/roupa cai no personagem errado | Auto-atenção associa atributos em toda a imagem | Divida prompts por região com BREAK para que cada atributo fique travado à região | stable-diffusion-art.com |
Como escolher: uma tabela de decisão
| Você quer controlar... | Primeira escolha | Alternativa / combinar com |
|---|---|---|
| Assunto ou rosto a partir de uma referência | IPAdapter Plus-Face / FaceID | ADetailer para limpeza de rosto |
| Apenas estilo, sem vazamento de conteúdo | InstantStyle / weight_type: style transfer (SDXL) | IPAdapter attn_mask para localizar |
| Pose, bordas, profundidade, layout | ControlNet | IPAdapter para aparência por cima |
| Prompt diferente por região da imagem | Regional Prompter (BREAK) | ADetailer [SEP] para prompts por rosto |
| Compor várias imagens de referência em um quadro | IPAdapter attn_mask por imagem | ControlNet para o layout subjacente |
FAQ
Como fazer o IPAdapter afetar apenas parte da imagem? Conecte uma máscara à entrada attn_mask no IPAdapter Advanced. Áreas brancas recebem influência total da referência, áreas pretas não recebem nenhuma, e tons de cinza são permitidos. A máscara deve corresponder ao tamanho ou à proporção do latent. A documentação do diffusers chama isso de "máscara binária" e exige uma máscara binária por imagem IP-Adapter.
Qual a diferença entre prompt comum e prompt base no Regional Prompter? Um prompt comum (ADDCOMM) é prefixado ao prompt de cada região — concatenação. Um prompt base (ADDBASE) é misturado por um peso base ratio, como a força de remoção de ruído do img2img: uma razão de 0.2 significa 20% base mais 80% região. Use comum quando o enquadramento da cena deve repetir; use base quando esse enquadramento é forte demais e você quer reduzi-lo (hako README).
Por que minhas LoRAs corrompem ao usar o Regional Prompter? É um problema conhecido no modo Latent — o README lista mitigações, mas afirma "sem solução até o momento." Reduza CFG, reduza o peso da LoRA, aumente as etapas de amostragem, ou use os parâmetros negative textencoder e negative U-net (0–1 por LoRA). Inpainting é o último recurso. A causa profunda não está documentada; não assuma uma.
Posso usar IPAdapter e ControlNet juntos? Sim. A Tencent distribui notebooks dedicados ip_adapter_controlnet_demo para "geração estrutural com prompt de imagem", e os ControlNets são documentados como composíveis. Uma configuração comum usa ControlNet (profundidade ou OpenPose) para layout e IPAdapter para a aparência do assunto, cada um com sua própria força/peso e porcentagens de início/fim.
Como transferir apenas estilo, não conteúdo, com IPAdapter? Use o InstantStyle, que subtrai as características de texto de conteúdo das características da imagem e injeta apenas nos blocos de atenção de estilo (up_blocks.0.attentions.1 para estilo, down_blocks.2.attentions.1 para layout). Ele é integrado ao ComfyUI_IPAdapter_plus; no SDXL você também pode tentar weight_type: style transfer (SDXL).
Quais tokens do ADetailer separam rostos? [SEP] divide um prompt em prompts por objeto na ordem de detecção (que a wiki chama de "altamente arbitrária"), [SKIP] pula o inpainting para aquela parte, e [PROMPT] é substituído pelo prompt de entrada original. O próprio ADetailer executa em três etapas: gerar, detectar-e-mascarar, e então inpaintar (README).
Com qual peso de IPAdapter devo começar? O cubiq README sugere reduzir o peso "para pelo menos 0.8" e aumentar as etapas; o NODES.md chama 0.8 de "um bom ponto de partida" para o tipo de peso linear padrão. Para condicionamento equilibrado de texto mais imagem, a Tencent e a documentação do diffusers apontam ambas para scale=0.5, reservando 1.0 para geração apenas por imagem.
O Regional Prompter funciona 100% das vezes? Não. Um tutorial da comunidade relata uma taxa de sucesso de aproximadamente 75%; trate isso como relatado pela comunidade, não como uma figura medida (stable-diffusion-art.com). O sangramento de atributos entre personagens ainda acontece, razão pela qual o reparo de rosto com ADetailer geralmente é combinado a ele.