ComfyLab
MiniMax H3 en ComfyUI: Face Swap Real con Ref2VA en RTX 3090

MiniMax H3 en ComfyUI: Face Swap Real con Ref2VA en RTX 3090

24GB VRAM (RTX 3090) -- pico real 23,2GB con el checkpoint REF2VA INT8, margen ajustado VRAM Avanzado 13 min MiniMax H3 REF2VA (swap) + FL2VA I2V (vídeo fuente propio) + Krea2 turbo (retrato) + SAM3 + MaskVidExperiments
Savien

Read in English →

Un canal pequeño de YouTube (menos de lo que suele hacer falta para que un vídeo llegue a nuestro radar, lo vimos porque nos lo pasaron directamente) publicó un tutorial de face+body swap con MiniMax H3 dentro de ComfyUI, sin ReActor y sin insightface — solo SAM3 para trackear al sujeto, un paquete de nodos llamado MaskVidExperiments para recortar-generar-pegar, y el modelo Reference-to-Video (Ref2VA) nativo de ComfyUI. Lo interesante: el creador publicó el workflow exacto, las imágenes de referencia y los vídeos fuente que usó, gratis, en su propio repositorio de HuggingFace. No tuvimos que adivinar nada del grafo — lo descargamos tal cual y lo corrimos en nuestra RTX 3090.

La cara sí cambia, de forma clara y verificable — lo comprobamos comparando lado a lado con el vídeo original, y luego lo repetimos por completo con un vídeo fuente generado enteramente por nosotros para descartar que dependiera de ese material concreto. El cuerpo no cambia en ninguno de los dos casos. Y “descargar tal cual” tampoco significó “correr tal cual”: el checkpoint que pedía el workflow no lo teníamos, el LoRA turbo exacto que menciona no existe donde dice, y tuvimos que liberar espacio en disco antes de poder empezar. Todo eso está documentado abajo, sin maquillar.

⚠️ Nota de uso responsable: este workflow sustituye la identidad facial de una persona en un vídeo. Úsalo solo con tu propio material o con consentimiento explícito de la persona representada — las imágenes de referencia y el vídeo fuente que usamos en la primera prueba son los que el propio creador publicó abiertamente para que otros reproduzcan su tutorial, y en la segunda generamos una identidad sintética propia precisamente para no depender de la imagen de nadie real.

De un vistazo

AspectoDetalles
Modelo baseMiniMax H3 REF2VA INT8 ConvRot (minimax_h3_ref2va_pruned_int8_convrot.safetensors, ~21GB)
Pipeline de máscaraSAM3 (sam3.1_multiplex_fp16) para tracking + MaskVidExperiments (drozbay, 174+★, sube rápido) para recorte/máscara/pegado
GPU de pruebaRTX 3090 24GB — una sola GPU, no generalizable
Parámetros del samplerSeed 123 (fijo), 8 pasos, cfg 1, er_sde, simple — sin cambios respecto al original
Tiempo del swap (assets del creador)7 min 18 s (438,5 s según history.json de ComfyUI)
Tiempo del swap (vídeo propio)6 min 18 s (378 s) — más rápido, salida más corta (209 vs 226 frames)
Pipeline del vídeo propioRetrato con Krea2 turbo (181 s) + animación I2V con MiniMax H3 FL2VA (196 s, VRAM pico 22GB) + swap (378 s, VRAM pico 23,2GB)
VRAM pico real23,2GB de 24GB en el swap — margen ajustado, sin OOM en ninguna de las dos pruebas
ResultadoFace swap real, verificado DOS veces (assets del creador + vídeo 100% propio); el cuerpo, ropa y fondo NO cambian (SAM3 detecta solo “head”); el texto superpuesto en la escena original sale deformado

Origen: el workflow lo publicó el propio creador, no lo reconstruimos

El vídeo enlaza directamente su repositorio en HuggingFace con dos carpetas — Workflow-1 (el que probamos aquí) y Workflow-2 (más avanzado, con más control de máscara, que el propio creador deja para un vídeo futuro si hay suficiente interés). De ahí descargamos: el grafo completo (Workflow-1-updated.json, 65 nodos), dos imágenes de referencia de la misma persona (una frontal, una de tres cuartos) y cuatro vídeos fuente de prueba.

Rastreamos el grafo nodo por nodo antes de tocar nada. Las dos imágenes de referencia no entran como dos inputs separados del modelo — un nodo ImageStitch (side="right") las cose en una sola imagen compuesta que alimenta el único slot ref_image_0 que el nodo MiniMaxH3ReferenceToVideo tiene realmente conectado en este workflow. Encontramos también un LoadImage (Old-Man.png) que entra en una rama auxiliar cuya salida no se usa en el resultado final — sin efecto en el vídeo generado, probablemente un resto de una prueba anterior del propio creador que quedó guardado en el JSON.

Lo que el workflow pedía y lo que tuvimos que sustituir

Tres ficheros del grafo original no estaban instalados en nuestro ComfyUI, y uno de ellos, sencillamente, no existe donde el material original apunta:

  1. minimax_h3_ref2va_pruned_int8_convrot.safetensors (~21GB) — el núcleo del test. Lo descargamos tal cual del repositorio oficial Comfy-Org/MiniMax-H3, sin sustitución. Es un modelo distinto al FL2VA que ya teníamos instalado de nuestro artículo anterior sobre MiniMax H3 — no son intercambiables, REF2VA y FL2VA son fine-tunes para tareas diferentes.
  2. Text encoder: el grafo pedía qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors (15,7GB, no instalado). Ya teníamos qwen3vl_32b_minimax_h3_int8_convrot.safetensors de nuestro artículo anterior — misma familia de encoder, distinta cuantización — y lo reutilizamos en vez de descargar 15,7GB de más.
  3. LoRA turbo: el grafo pedía minimax_h3_fl2v_lightx2v_turbo_8step_v1.0_resized_avg_rank_24_bf16.safetensors. A 2026-09-05 no aparece con ese nombre exacto en ningún repositorio público que encontráramos — ni en Comfy-Org/MiniMax-H3 ni en lightx2v/Minimax-h3-Turbo. Usamos el LoRA turbo de 8 pasos específico para REF2V de lightx2v/Minimax-h3-Turbo, manteniendo los 8 steps originales del KSampler sin tocar.
  4. BiRefNet (424MB): una nota del propio workflow lo mencionaba como opcional (“usa la técnica de detección que prefieras, SAM3 o Mediapipe”), pero el validador de ComfyUI lo exigió igualmente al cargar el grafo completo. Lo descargamos del repositorio oficial Comfy-Org/BiRefNet.

Antes de descargar nada de esto, nuestro disco estaba al 95% de uso (25GB libres) — insuficiente margen de seguridad para un fichero de 21GB. Liberamos 41GB borrando tres modelos de Ollama sin uso desde hacía tres meses (qwen3:30b, un GGUF de Cydonia-24B y qwen2.5:14b), ninguno relacionado con este test. Sin ese paso previo, no hubiéramos podido completar la prueba con margen seguro.

Segunda vuelta: repetimos todo con un vídeo fuente 100% propio

Una sola prueba con el material de otra persona deja una duda abierta: ¿el swap funciona porque el pipeline es sólido, o porque ese vídeo concreto (esa cara, esa luz, esa pose) era un caso fácil? Para descartarlo, generamos nuestro propio vídeo fuente de principio a fin, en nuestro propio ComfyUI, sin tocar nada del repositorio del creador:

  1. Retrato base con Krea2 turbo local (krea2_turbo_fp8_scaled.safetensors, 8 steps, cfg 1) — un hombre genérico de unos 28 años, camiseta gris lisa, plano medio, fondo de estudio neutro. 181 segundos.
  2. Animación image-to-video con el nodo nativo MiniMaxH3ImageToVideo — usando el checkpoint FL2VA que ya teníamos instalado de nuestro artículo anterior sobre MiniMax H3, sin descargar nada nuevo. Prompt sencillo: la persona gira ligeramente la cabeza y parpadea una vez, cámara estática, sin cortes — exactamente el consejo del vídeo original sobre qué vídeo fuente funciona bien con este pipeline. 196 segundos, 22GB de VRAM pico, salida de 226 frames (9,42s).
  3. El mismo swap, mismo grafo, mismas imágenes de referencia (Girl-left.png + Girl-Right.png), mismo seed 123 — cambiando solo el vídeo fuente. 378 segundos, 23,2GB de VRAM pico, salida de 209 frames (8,71s).

Nuestro vídeo fuente (izquierda, un hombre generado con Krea2 y animado con MiniMax H3) contra el resultado del swap (derecha). Cambiamos incluso el género de la persona a propósito — así no hay forma de confundir “se parece un poco” con “cambió de verdad”. La camiseta gris, la pose, el giro de cabeza y el fondo son idénticos en ambos lados; verificado en 3 frames repartidos por el clip (inicio, mitad, final), no solo uno.

El resultado es inequívoco: la cara cambia por completo hacia la identidad femenina de la referencia — pelo rizado castaño, pecas, forma de cara — sobre un cuerpo, ropa y movimiento que siguen siendo exactamente los que generamos nosotros mismos. Esto confirma, con material del que controlamos cada paso, lo mismo que ya habíamos visto con los assets del creador: swap de cara real, cuerpo intacto.

Primera prueba: con los assets exactos del creador

Original (izquierda) contra resultado (derecha), con el Video-1.mp4 y las imágenes de referencia que publicó el propio creador. Mismo patrón que con nuestro material propio: solo cambia la cara — pelo, tono de piel y pecas — todo lo demás (pose de la mano, chaqueta, cadenas, cinturón, vaqueros, fondo) no muestra cambios apreciables fotograma a fotograma.

Revisando el grafo encontramos el porqué: el nodo CLIPTextEncode que alimenta la detección de SAM3 lleva el texto literal "head" — este workflow concreto recorta y regenera solo la cabeza, no el cuerpo, en las dos pruebas que hicimos.

Conclusión honesta: las dos pruebas demuestran face swap, no body swap, pese a que el vídeo y el workflow que reprodujimos se anuncian como “face + body swap”. Puede que el Workflow-2 (más avanzado, que no probamos) sí toque el cuerpo — lo dejamos como pendiente explícito más abajo.

Resultado final tras el uncrop, a tamaño completo: 226 frames a 24fps (9,42s), seed 123, mismo prompt del creador original (“<Subject 1> is the character represented in <Picture 1>. The video is a close up face of <Subject 1>.”).

Frame del resultado con texto de fondo deformado e ilegible

El fallo real: en los frames donde el vídeo fuente tiene pegatinas de texto superpuestas, el texto sale con letras invertidas o deformadas — limitación conocida de los modelos de vídeo con IA en general, no específica de este swap.

También conservamos la salida intermedia, antes de que MVEx_SubjectUncrop la pegue de vuelta en el fotograma completo — útil si quieres entender qué resolución de trabajo usa realmente el pipeline dentro del recorte:

Salida directa del sampler, antes del uncrop — la región de trabajo recortada por MaskVidExperiments, no el fotograma completo.

VRAM y tiempo: margen ajustado, no sobra

23,2GB de 24GB disponibles en la RTX 3090 en ambas pruebas del swap — funcionó, pero sin margen para mucho más. Si tu tarjeta tiene 24GB pero además tienes otra cosa cargada en VRAM (navegador con muchas pestañas, otro proceso de generación), es razonable esperar un OOM con este pipeline concreto. El tiempo de generación real fue 7 min 18 s con los assets del creador y 6 min 18 s con nuestro vídeo propio — ambos confirmados desde el history.json de ComfyUI, no una estimación desde consola. Si cuentas el pipeline completo de generar tu propio vídeo fuente (retrato + animación + swap), son unos 12-13 minutos de principio a fin en una RTX 3090. Cero errores ni tracebacks en el log del servidor durante ninguna de las dos ejecuciones del swap.

Limitaciones de esta prueba

  • Una sola GPU (RTX 3090), un solo seed en cada prueba — sin repetición estadística dentro de cada una (sí repetimos la prueba completa dos veces con material distinto, que es lo que nos hizo encontrar el patrón de frame count).
  • No probamos el Workflow-2 (más avanzado, con más control de máscara) que el mismo creador menciona en su vídeo — lo deja para un vídeo futuro suyo, y nosotros lo dejamos pendiente para un artículo futuro nuestro. Es nuestro principal candidato para verificar si el “body swap” real existe en algún punto de este par de workflows.
  • Solo verificamos que el cuerpo NO cambia con dos vídeos fuente concretos (uno de terceros, uno propio), ambos con la persona relativamente quieta y de frente. No probamos con movimiento corporal amplio, ni si cambiar el texto de detección de SAM3 de "head" a algo como "person" activaría un recorte de cuerpo completo — no lo intentamos porque habría sido una modificación del grafo original, no una reproducción tal cual.
  • Dos de las tres sustituciones de ficheros (LoRA turbo y text encoder) significan que esto no es una réplica byte-a-byte del vídeo original — es la reproducción más fiel posible con lo que existe públicamente hoy, documentada donde diverge.
  • No aislamos qué sustitución concreta explica la diferencia de frame count (226 vs 243 con los assets del creador, 209 vs 226 con los propios) — es nuestra hipótesis más probable (el LoRA), reforzada por aparecer en las dos pruebas, pero no una causa confirmada nodo por nodo.
  • Solo probamos con uno de los cuatro vídeos fuente que publicó el creador (Video-1.mp4) y con un único vídeo propio — no sabemos si el fallo de texto deformado del primer vídeo aparece igual en los otros tres del creador.

Conclusión

El workflow real funciona, y funciona bien para la mitad de lo que promete: face swap consistente y verificable — lo comprobamos dos veces, con material de terceros y con un vídeo generado enteramente por nosotros, incluso cambiando de género para eliminar cualquier ambigüedad — sin ReActor ni insightface, usando el pipeline nativo de MiniMax H3 en ComfyUI. La otra mitad del título — “body swap” — no la vimos en ninguna de las dos pruebas: el cuerpo, la ropa y el fondo del vídeo fuente quedan intactos, porque este workflow concreto detecta y recorta solo la cabeza. Y “gratis y publicado por el creador” tampoco significó “listo para copiar y pegar” — un tercio de los ficheros que pedía no estaban donde decía el material original, y tuvimos que gestionar espacio en disco antes de poder ni empezar.

🏆 Nuestra recomendación

Si lo que buscas es cambiar solo la cara manteniendo pose, ropa y escena originales, este workflow cumple — lo vimos comparado fotograma a fotograma contra el original, dos veces, con dos vídeos fuente distintos. Si lo que buscas es un swap de cuerpo completo (cambiar contextura, vestuario, etc.), esta prueba concreta no lo demuestra — necesitarías el Workflow-2 del mismo creador, que no hemos probado todavía. Si ya tienes el checkpoint FL2VA de MiniMax H3 instalado de antes, no asumas que sirve aquí — este workflow necesita específicamente REF2VA, son 21GB adicionales, y antes de lanzar la descarga comprueba que te sobran de verdad 25GB, no solo lo justo para el fichero. Y si quieres verificarlo con tu propia cara o la de alguien que no sea de terceros, el pipeline completo (retrato local + animación I2V + swap) te lleva unos 12-13 minutos en una RTX 3090.


Sigue Leyendo

Si es la primera vez que tocas MiniMax H3 en ComfyUI, empieza por nuestra prueba de Sage Attention y Sol-Attn en RTX 3090 — ahí cubrimos la instalación base y un bug real de duplicación en el latent upscale. Si el margen de VRAM de este artículo (23,2GB de 24GB) te preocupa para tu propia tarjeta, revisa nuestra guía de reducción de VRAM en ComfyUI. Y si te interesa exprimir la acción rápida en tus generaciones, comparamos la LoRA PDD Acc de 8 pasos de Alibaba PAI contra la turbo de 4 pasos que usamos aquí. Si necesitas vídeos más largos que un solo segmento, probamos Motion Director para encadenar segmentos con continuidad.

Preguntas frecuentes

¿Por qué repetir la prueba con un vídeo propio si ya funcionó con el del creador?
Porque una sola prueba con el material de otra persona deja abierta la duda de si el resultado depende de ese vídeo concreto (iluminación, pose, cara de partida ya parecida a la referencia, etc.). Generamos nuestro propio retrato con Krea2 turbo, lo animamos con MiniMax H3 image-to-video, y le aplicamos el mismo swap -- con un cambio de género de por medio para que no quede ninguna duda visual. El resultado fue el mismo patrón: cara sustituida, cuerpo y fondo intactos.
¿Esto es face swap, body swap, o los dos?
Solo face swap, verificado dos veces. El nodo de detección de SAM3 en este workflow (`CLIPTextEncode` con el texto "head") apunta específicamente a la cabeza, y las dos comparativas lado a lado lo confirman: con los assets del creador, la cara cambia pero la chaqueta, las joyas, el cinturón y el fondo son idénticos fotograma a fotograma; con nuestro vídeo propio (cambio de hombre a mujer), la camiseta gris y el fondo de estudio se mantienen exactamente iguales. El título original del vídeo promete "face + body swap", pero este workflow concreto (Workflow-1) no lo demuestra en ninguna de las dos pruebas -- puede que el Workflow-2, más avanzado y que no probamos, sí toque el cuerpo.
¿Hace falta subir dos imágenes de referencia (frontal + 3/4)?
El grafo real usa dos LoadImage que un nodo ImageStitch (side="right") cose en una sola imagen compuesta antes de pasarla al nodo MiniMaxH3ReferenceToVideo como referencia única -- no son dos entradas separadas del modelo, es un truco de composición previo. Usamos las dos imágenes de referencia (frontal y 3/4) que el propio creador publicó junto al workflow.
¿Qué diferencia REF2VA de FL2VA y por qué no puedes usar el checkpoint que ya tenías?
Son dos modelos entrenados para tareas distintas: FL2VA condiciona por primer/último frame (texto o imagen a vídeo), REF2VA condiciona por una imagen de referencia de identidad que se re-ancla en cada segmento. El nodo `MiniMaxH3ReferenceToVideo` exige específicamente los pesos REF2VA -- no son intercambiables, tuvimos que descargar el checkpoint REF2VA de 21GB aunque ya teníamos el FL2VA instalado de un artículo anterior.
¿Por qué el número de frames de salida nunca coincide con el pedido?
Pasó en las dos pruebas: 226 frames en vez de 243 con los assets del creador, y 209 en vez de 226 con nuestro vídeo propio -- un patrón consistente, no un fallo puntual. Nuestra hipótesis más probable sigue siendo el LoRA turbo sustituido (el fichero exacto de 8 pasos que menciona el material original no existe públicamente, usamos una alternativa oficial de `lightx2v/Minimax-h3-Turbo`), pero no lo hemos aislado nodo por nodo -- es una correlación observada dos veces, no una causa confirmada.
¿Qué falla en el resultado?
El texto superpuesto en la escena (unas pegatinas estilo collage en el vídeo fuente) sale con letras deformadas o invertidas en varios frames -- una limitación conocida y documentada de los modelos de vídeo con IA en general, no algo específico de este workflow ni del swap en sí. Lo comprobamos muestreando 3 frames repartidos por todo el clip, no solo el primero.
¿Necesitaste tocar el disco para poder correr esto?
Sí, de verdad: el checkpoint REF2VA (21GB) no cabía con margen seguro en un disco al 95% de uso. Antes de descargar nada liberamos 41GB borrando tres modelos de Ollama sin uso desde hacía 3 meses (qwen3:30b, Cydonia-24B, qwen2.5:14b) -- ninguno relacionado con ComfyUI, pura limpieza de espacio.
Compartir X LinkedIn

También te puede interesar