ArtificialGuyBR

Home / Blog / Fixing things

Corrigir Mãos de IA: Por Que Falham e o Fluxo Real com ControlNet

Embeddings virais do Civitai para corrigir mãos não existem. Fluxo real: detecção OpenPose do ControlNet + inpainting direcionado.

3 sources cited Fixing things

Corrigir Mãos de IA: Por Que Falham e o Fluxo Real com ControlNet

Os Embeddings Que Você Leu Não Existem

Dois artigos populares do Civitai do final de 2023 afirmam que embeddings negativos específicos forçam Stable Diffusion e SDXL a gerar mãos perfeitas. Um artigo promove 5-funny-looking-fingers:2 com a alegação de "99% de mãos perfeitas no SD". O outro recomenda physical-defects:2, unhealthy-deformed-joints:2, unhealthy-hands:2 com a estatística de "falha apenas 1 em 20 imagens".

Nenhum dos embeddings existe. Consultas diretas à API do Civitai para "funny-looking-fingers", "physical-defects", "unhealthy-hands" e "unhealthy-deformed-joints" retornam conjuntos de resultados vazios. Os autores dos artigos parecem ter inventado esses nomes de embedding e suas métricas de performance associadas.

Isso importa porque milhares de usuários provavelmente perderam tempo procurando embeddings que nunca foram publicados. As soluções reais exigem uma abordagem completamente diferente.


Por Que Mãos de IA Falham em Primeiro Lugar

Entender a causa raiz explica por que nenhum token de prompt ou embedding único pode "corrigir" mãos. Fator | Por Que Quebra a Geração de Mãos

|--------|-------------------------------

Complexidade anatômica | 27 ossos, 30+ músculos, 21 keypoints por mão com relações proporcionais precisas Variação de perspectiva | Encurtamento extremo, auto-occlusão e mudanças de ponto de vista alteram comprimentos aparentes dos dedos Interação com tecido | Mãos frequentemente seguram tecido, criando limites ambíguos entre pele e material Viés de dados de treino | Datasets super-representam certas poses (palma aberta, punho) e sub-representam gestos complexos Limites de arquitetura do modelo | Modelos de difusão não têm priors anatômicos 3D explícitos; aprendem correlações estatísticas de projeções 2D SDXL melhorou a coerência geral sobre SD 1.5 mas introduziu novos artefatos de mão — usuários relatam "truncamento de meio dedo" e "multiplicação de dedos tipo polvo" em resoluções maiores. Não são falhas de embedding; são limitações fundamentais da difusão 2D em estruturas 3D.


O Fluxo Real: ControlNet + Inpainting

A abordagem de produção combina detecção de mão com regeneração direcionada. Não é uma correção de um clique — é um pipeline repetível.

Passo 1: Detectar Mãos com ControlNet OpenPose

ControlNet inclui um detector de mão dedicado (annotator/openpose/hand.py) que produz 21 keypoints por mão. O modelo carrega hand_pose_model.pth do Hugging Face e roda inferência multi-escala (0.5×, 1×, 1.5×, 2×) com refinamento de pico gaussiano.

from ControlNet import OpenposeDetector
detector = OpenposeDetector()
canvas, result = detector(oriImg, hand=True)
# result contém keypoints da mão: [{x, y}, ...] × 21 por mão

Precisão de detecção: ~85–90% em condições controladas (visibilidade clara da mão, boa iluminação). Cai significativamente com oclusão, motion blur ou poses incomuns.

Passo 2: Gerar Máscaras Precisas a Partir dos Keypoints

Converta os 21 keypoints em bounding boxes apertados, depois expanda em 15–20% para incluir contexto do pulso. A aba de inpainting do Stable Diffusion web UI aceita essas máscaras diretamente — regiões brancas são regeneradas, regiões pretas ficam intocadas. Modo de Máscara | Quando Usar

|-----------|-------------

Inpaint masked | Substituir apenas a região da mão (padrão) Inpaint not masked | Regenerar tudo exceto a mão (raro) Only masked (resize) | Upscale apenas da região da mão para maior detalhe A opção "Only masked" é crítica — ela renderiza a mão na resolução total do modelo (ex.: 1024×1024 para SDXL) independentemente do tamanho na imagem original.

Passo 3: Inpaint com Prompt Dedicado para Mão

Use a aba de inpainting com estes parâmetros: Parâmetro | Valor Recomendado

|-----------|-------------------

Model | SDXL base + refiner, ou checkpoint de inpainting SD 1.5 Denoising strength | 0.65–0.85 (maior = mais mudança, menor = mais fiel) Masked content | latent noise ou original Sampler | Euler a / DPM++ 2M Karras Steps | 30–50 Template de prompt:

5 distinct fingers, realistic human hand anatomy, correct proportions, natural skin texture, visible knuckles, proper fingernails, [pose description], sharp focus, subsurface scattering

Negative prompt (tokens reais que existem):

deformed fingers, extra fingers, missing fingers, fused fingers, mutated hands, poorly drawn hands, claw, talon, webbed fingers, blurry, low quality

São tokens negativos padrão, não embeddings especiais. Funcionam porque estão no vocabulário do modelo, não por causa de um arquivo de embedding secreto.

Passo 4: Iterar e Refinar

Primeira passagem raramente produz resultados perfeitos. Fluxo típico:

  1. Gerar 4–8 variações com denoising 0.75
  2. Escolher a melhor, mascarar problemas restantes
  3. Segunda passagem com denoising 0.55 para refinamento
  4. Opcional: high-res fix ou ControlNet tile upscale para detalhe final

Embeddings Negativos: O Que São e Não São

Inversão textual (embeddings negativos) existe no Stable Diffusion. Você treina um pequeno vetor que representa "anatomia ruim de mão" alimentando o modelo com exemplos de mãos deformadas, depois usa esse token em prompts negativos.

Mas:

  • Você deve criar o seu — nenhum embedding universal de "correção de mão" funciona entre modelos
  • Treino requer 20–50 imagens curadas de mãos ruins e 5–10k steps
  • O arquivo .pt ou .safetensors resultante é específico do modelo (SD 1.5 vs SDXL)
  • Efeito é modesto: tipicamente 5–15% de redução em artefatos óbvios, não 99% de perfeição

Os artigos do Civitai confundem essa técnica real com nomes de embedding fictícios e alegações de performance impossíveis.


Considerações Específicas para SDXL

Os encoders de texto duplos do SDXL (OpenCLIP ViT-G + CLIP ViT-L) e resolução nativa 1024×1024 mudam o cálculo de correção de mão: Problema | SD 1.5 | SDXL

|-------|--------|------

Resolução nativa | 512×512 | 1024×1024 Detalhe da mão na res nativa | Ruim (mãos frequentemente < 64px) | Usável (mãos frequentemente > 128px) Inpainting "Only masked" | Essencial | Útil mas menos crítico Modelo refiner | N/A | Adiciona detalhe na segunda passagem Artefato comum | Dedos faltando | Truncamento de meio dedo, juntas extras Dica prática: Para SDXL, gere em 1024×1024, depois inpaint mãos com denoising 0.6–0.7 com refiner ativado. A segunda passagem do refiner frequentemente resolve artefatos de "meio dedo" sem trabalho extra.


Common Errors and Fixes

Sintoma | Causa Provável | Correção

|---------|--------------|-----

Dedos fundidos | Denoising muito baixo, máscara muito apertada | Aumentar denoising para 0.8, expandir máscara 20% Dedos extras (6+) | Denoising muito alto, prompt muito vago | Baixar denoising para 0.55, adicionar "5 distinct fingers" Truncamento de meio dedo (SDXL) | Incompatibilidade de resolução, refiner desativado | Ativar refiner, usar upscale "Only masked" Distorção tipo garra | Negative prompt sem "claw/talon" | Adicionar claw, talon, webbed ao negative Textura da pele parece plástico | Palavras-chave de textura faltando | Adicionar "subsurface scattering, pores, natural skin" Incompatibilidade pulso/braço | Máscara não inclui zona de transição | Expandir máscara para incluir 50px de antebraço


FAQ

Preciso de um embedding especial para corrigir mãos? Não. Os embeddings citados em artigos virais do Civitai não existem. Tokens negativos padrão mais detecção ControlNet + inpainting funcionam melhor.

Por que minhas mãos ainda ficam erradas após inpainting? Mais comum: máscara muito apertada (corta contexto do pulso) ou denoising muito extremo. Expandir máscara, baixar denoising para 0.55–0.65, adicionar "forearm visible" ao prompt.

Detecção de mão ControlNet funciona no SDXL? Sim. O detector é agnóstico ao modelo — produz keypoints de qualquer imagem RGB. Use esses keypoints para criar máscaras para inpainting SDXL.

Quantas passagens de inpainting são normais? 2–3 passagens é típico. Primeira corrige anatomia geral, segunda refina proporções, terceira (opcional) polí detalhe de pele.

Posso automatizar isso? Sim. A extensão sd-webui-controlnet inclui scripts "Inpaint Only Masked" que encadeiam detecção → mascaramento → inpainting. Veja guia de automação.

E Depth/Normal ControlNet para mãos? Mapas de profundidade ajudam com estrutura 3D mas adicionam complexidade. Keypoints de mão OpenPose são mais rápidos e suficientes para a maioria dos casos. Depth é melhor para transferência de pose corporal completa.

LoRAs ajudam com mãos? LoRAs específicas de mão existem mas são acerto-ou-erro. Viesam para poses de treino. Inpainting com bom prompt é mais flexível.