ArtificialGuyBR

Home / Blog / Fixing things

Arregla las manos de la IA: el flujo real con ControlNet

Los embeddings virales de Civitai para manos no existen. El flujo real: detección ControlNet OpenPose + inpainting dirigido.

6 sources cited Fixing things

Arregla las manos de la IA: el flujo real con ControlNet

TL;DR

  • Los artículos virales de Civitai que afirman que los embeddings "5-funny-looking-fingers:2" y "physical-defects:2" dan manos 99% perfectas — esos embeddings no existen. Las búsquedas en la API de Civitai devuelven cero resultados.
  • El arreglo real de manos usa detección de manos con ControlNet OpenPose (21 keypoints, ~85% de precisión de detección) más inpainting dirigido — no embeddings negativos.
  • Las manos fallan porque son anatómicamente complejas (27 huesos, musculatura intrincada), no porque falten tokens en el prompt.

Los embeddings de los que leíste no existen

Dos artículos populares de Civitai de finales de 2023 afirman que embeddings negativos concretos obligan a Stable Diffusion y SDXL a generar manos perfectas. Un artículo promociona 5-funny-looking-fingers:2 con la afirmación "manos 99% perfectas en SD". El otro recomienda physical-defects:2, unhealthy-deformed-joints:2, unhealthy-hands:2 con la estadística "falla solo 1 de cada 20 imágenes".

Ninguno de los dos embeddings existe. Las consultas directas a la API de Civitai por "funny-looking-fingers", "physical-defects", "unhealthy-hands" y "unhealthy-deformed-joints" devuelven todas conjuntos de resultados vacíos. Los autores de los artículos parecen haber inventado esos nombres de embeddings y sus métricas de rendimiento asociadas.

Esto importa porque miles de usuarios probablemente perdieron tiempo buscando embeddings que nunca se publicaron. Las soluciones reales exigen un enfoque completamente distinto.


Por qué fallan las manos de la IA

Entender la causa raíz te dice por qué ningún token de prompt ni embedding puede "arreglar" las manos. Factor | Por qué rompe la generación de manos

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

Complejidad anatómica | 27 huesos, más de 30 músculos, 21 keypoints por mano con relaciones proporcionales precisas Variación de perspectiva | El escorzo extremo, la autooclusión y los cambios de punto de vista alteran las longitudes aparentes de los dedos Interacción con la ropa | Las manos agarran tela con frecuencia, lo que crea límites ambiguos entre piel y material Sesgo de los datos de entrenamiento | Los datasets sobrerrepresentan ciertas poses (palma abierta, puño) y subrepresentan gestos complejos Límites de la arquitectura del modelo | Los modelos de difusión carecen de priors anatómicos 3D explícitos; aprenden correlaciones estadísticas de proyecciones 2D SDXL mejoró la coherencia general frente a SD 1.5, pero introdujo nuevos artefactos en las manos — los usuarios reportan "truncamiento de medio dedo" y "multiplicación de dedos tipo pulpo" en resoluciones altas. No son fallos de embeddings; son limitaciones fundamentales de la difusión 2D sobre estructuras 3D.


El flujo real: ControlNet + inpainting

El enfoque de producción combina la detección de manos con la regeneración dirigida. No es un arreglo de un clic — es un pipeline repetible.

Paso 1: Detecta las manos con ControlNet OpenPose

ControlNet incluye un detector de manos dedicado (annotator/openpose/hand.py) que produce 21 keypoints por mano. El modelo carga hand_pose_model.pth desde Hugging Face y ejecuta inferencia multiescala (0.5×, 1×, 1.5×, 2×) con refinamiento de picos gaussianos.

from ControlNet import OpenposeDetector
detector = OpenposeDetector()
canvas, result = detector(oriImg, hand=True)
# result contains hand keypoints: [{x, y}, ...] × 21 per hand

Precisión de detección: ~85–90% en condiciones controladas (visibilidad clara de la mano, buena iluminación). Cae mucho con oclusión, desenfoque de movimiento o poses inusuales.

Paso 2: Genera máscaras precisas a partir de los keypoints

Convierte los 21 keypoints en cajas delimitadoras ajustadas y luego expande un 15–20% para incluir contexto de la muñeca. La pestaña de inpainting de la interfaz web de Stable Diffusion acepta estas máscaras directamente — las regiones blancas se regeneran, las negras quedan intactas. Modo de máscara | Cuándo usarlo

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

Inpaint masked | Reemplaza solo la región de la mano (por defecto) Inpaint not masked | Regenera todo excepto la mano (raro) Only masked (resize) | Escala solo la región de la mano para más detalle La opción "Only masked" es crítica — renderiza la mano a la resolución completa del modelo (p. ej., 1024×1024 para SDXL) sin importar su tamaño en la imagen de origen.

Paso 3: Haz inpainting con un prompt dedicado para manos

Usa la pestaña de inpainting con estos ajustes: Parámetro | Valor recomendado

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

Modelo | SDXL base + refiner, o checkpoint de inpainting de SD 1.5 Denoising strength | 0.65–0.85 (más alto = más cambio, más bajo = más fiel) Masked content | latent noise u original Sampler | Euler a / DPM++ 2M Karras Steps | 30–50 Plantilla de prompt:

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

Prompt negativo (tokens reales que existen):

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

Son tokens negativos estándar, no embeddings especiales. Funcionan porque están en el vocabulario del modelo, no por un archivo de embedding secreto.

Paso 4: Itera y refina

La primera pasada rara vez da resultados perfectos. Flujo típico:

  1. Genera 4–8 variaciones con denoising 0.75
  2. Elige la mejor, enmascara los problemas restantes
  3. Segunda pasada con denoising 0.55 para refinar
  4. Opcional: high-res fix o upscale con ControlNet tile para el detalle final

Embeddings negativos: qué son y qué no son

La inversión textual (embeddings negativos) sí existe en Stable Diffusion. Entrenas un vector pequeño que representa "mala anatomía de manos" alimentando el modelo con ejemplos de manos deformes, y luego usas ese token en prompts negativos.

Pero:

  • Debes crearlo tú mismo — ningún embedding universal de "arreglo de manos" funciona entre modelos
  • El entrenamiento requiere 20–50 imágenes curadas de manos malas y 5–10k pasos
  • El archivo .pt o .safetensors resultante es específico del modelo (SD 1.5 frente a SDXL)
  • El efecto es modesto: normalmente 5–15% menos artefactos obvios, no 99% de perfección

Los artículos de Civitai mezclan esta técnica real con nombres de embeddings ficticios y afirmaciones de rendimiento imposibles.


Consideraciones específicas de SDXL

Los dos codificadores de texto de SDXL (OpenCLIP ViT-G + CLIP ViT-L) y su resolución nativa de 1024×1024 cambian el cálculo del arreglo de manos: Problema | SD 1.5 | SDXL

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

Resolución nativa | 512×512 | 1024×1024 Detalle de manos a resolución nativa | Pobre (manos a menudo < 64px) | Usable (manos a menudo > 128px) Inpainting "Only masked" | Esencial | Útil, pero menos crítico Modelo refiner | N/A | Añade detalle en la segunda pasada Artefacto común | Dedos faltantes | Truncamiento de medio dedo, articulaciones extra Consejo práctico: con SDXL, genera a 1024×1024 y luego haz inpainting de las manos con denoising 0.6–0.7 y el refiner activado. La segunda pasada del refiner suele resolver los artefactos de "medio dedo" sin trabajo extra.


Errores comunes y soluciones

Síntoma | Causa probable | Solución

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

Dedos fusionados entre sí | Denoising demasiado bajo, máscara muy ajustada | Sube el denoising a 0.8, expande la máscara un 20% Dedos extra (6+) | Denoising demasiado alto, prompt muy vago | Baja el denoising a 0.55, añade "5 distinct fingers" Truncamiento de medio dedo (SDXL) | Desajuste de resolución, refiner desactivado | Activa el refiner, usa el upscale "Only masked" Distorsión tipo garra | Al prompt negativo le falta "claw/talon" | Añade claw, talon, webbed al negativo La piel parece plástico | Faltan palabras clave de textura | Añade "subsurface scattering, pores, natural skin" Desajuste muñeca/brazo | La máscara no incluye la zona de transición | Expande la máscara para incluir 50px de antebrazo


FAQ

¿Necesito un embedding especial para arreglar manos? No. Los embeddings nombrados en los artículos virales de Civitai no existen. Los tokens negativos estándar más la detección con ControlNet y el inpainting funcionan mejor.

¿Por qué mis manos siguen viéndose mal después del inpainting? Lo más común: máscara muy ajustada (corta el contexto de la muñeca) o denoising demasiado extremo. Expande la máscara, baja el denoising a 0.55–0.65 y añade "forearm visible" al prompt.

¿La detección de manos de ControlNet funciona en SDXL? Sí. El detector es agnóstico al modelo — produce keypoints de cualquier imagen RGB. Usa esos keypoints para construir máscaras para el inpainting de SDXL.

¿Cuántas pasadas de inpainting son normales? 2–3 pasadas es lo típico. La primera corrige la anatomía general, la segunda refina las proporciones y la tercera (opcional) pule el detalle de la piel.

¿Puedo automatizar esto? Sí. La extensión sd-webui-controlnet incluye scripts "Inpaint Only Masked" que encadenan detección → enmascarado → inpainting. Consulta la guía de automatización.

¿Y ControlNet Depth/Normal para manos? Los mapas de profundidad ayudan con la estructura 3D, pero añaden complejidad. Los keypoints de manos de OpenPose son más rápidos y suficientes para la mayoría de los casos. Depth es mejor para transferir la pose de cuerpo completo.

¿Los LoRA ayudan con las manos? Existen LoRA específicos de manos, pero son irregulares. Sesgan hacia las poses de entrenamiento. El inpainting con un buen prompt es más flexible.


Sources

Source | Qué aportó

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

Artículo 3373 de Civitai | Afirmación original: embedding "5-funny-looking-fingers:2", claim de perfección del 99%, artefacto de medio dedo en SDXL Artículo 3276 de Civitai | Afirmación original: embeddings "physical-defects:2, unhealthy-deformed-joints:2, unhealthy-hands:2", tasa de fallo de 1 entre 20 imágenes Repositorio de ControlNet | Implementación verificada del detector de manos OpenPose, arquitectura de 21 keypoints, pesos del modelo en Hugging Face hand.py de ControlNet | Código fuente de la detección de manos: inferencia multiescala, refinamiento de picos gaussianos, salida de 21 keypoints Wiki de características del SD WebUI | Modos de inpainting documentados, opciones de masked content, redimensionado "Only masked", modelos de inpainting dedicados Tarjeta del modelo SDXL | Detalles de la arquitectura SDXL: codificadores duales, resolución nativa de 1024×1024, pipeline del refiner


Enlaces internos


Marcadores de imagen