ArtificialGuyBR

Home / Blog / ComfyUI

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.

16 sources cited ComfyUI

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 arquivoForçaMelhor paraFonte
ip-adapter_sd15Básico, médioAssunto/estilo geralcubiq README
ip-adapter_sd15_light_v11Impacto leveInfluência sutilcubiq README
ip-adapter-plus_sd15Muito forteCorrespondência rigorosa de assuntocubiq README
ip-adapter-plus-face_sd15Rosto, retratosConsistência de personagemcubiq README
ip-adapter-full-face_sd15Rosto mais forte, "não necessariamente melhor"Rostos quando o Plus-Face é fracocubiq 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

RecursoComum (ADDCOMM)Base (ADDBASE)
Como se aplicaPrefixado ao prompt de cada regiãoMisturado por base ratio (ex: 0.2 = 20% base + 80% região)
AnalogiaConcatenaçãoMistura de remoção de ruído de img2img
Use quandoO enquadramento da cena deve aparecer em cada regiãoA base é forte demais e você quer reduzi-la
Fontehako READMEhako 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 / sintomaCausaCorreçãoFonte
'NoneType' object has no attribute 'encode_image' (frequentemente no sd1.5)Codificador de visão CLIP errado, ou a extensão obsoleta IPAdapter_ConfyUI conflitandoCarregue 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 IPAdaptercubiq 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 maiorcubiq issue #108
Expected query, key, and value to have the same dtype ...Incompatibilidade fp16/fp32Execute o ComfyUI com --force-fp16cubiq issue #108
Corrupção de LoRA, tela verde/preta no modo Latent do Regional PrompterProblema conhecido de LoRA no modo Latent, sem correção de causa raizReduza CFG, reduza o peso da LoRA, aumente as etapas; use parâmetros negative textencoder + negative U-net; volte ao inpainthako README
Pessoa única quando duas eram intencionadasCada prompt de região descreve uma pessoaAdicione um prompt comum (ADDCOMM) declarando a cena completastable-diffusion-art.com
Cor de cabelo/roupa cai no personagem erradoAuto-atenção associa atributos em toda a imagemDivida prompts por região com BREAK para que cada atributo fique travado à regiãostable-diffusion-art.com

Como escolher: uma tabela de decisão

Você quer controlar...Primeira escolhaAlternativa / combinar com
Assunto ou rosto a partir de uma referênciaIPAdapter Plus-Face / FaceIDADetailer para limpeza de rosto
Apenas estilo, sem vazamento de conteúdoInstantStyle / weight_type: style transfer (SDXL)IPAdapter attn_mask para localizar
Pose, bordas, profundidade, layoutControlNetIPAdapter para aparência por cima
Prompt diferente por região da imagemRegional Prompter (BREAK)ADetailer [SEP] para prompts por rosto
Compor várias imagens de referência em um quadroIPAdapter attn_mask por imagemControlNet para o layout subjacente

What must stay fixed? Appearance subject, face, style Structure pose, edges, depth Region this thing, here IPAdapter image prompt, no layout map ControlNet pixel-accurate layout Regional prompting prompt bound to an area Need two of them? They compose: ControlNet fixes the layout while IPAdapter carries appearance. They fail differently — IPAdapter has no structural map, so it cannot hold a pose; ControlNet holds the pose but knows nothing about who the subject is.
Which conditioning tool fits the job

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.