ComfyLab
SCAIL-2 en ComfyUI: Prueba Real de Reemplazo de Personaje (Sin Custom Nodes, RTX 3090)

SCAIL-2 en ComfyUI: Prueba Real de Reemplazo de Personaje (Sin Custom Nodes, RTX 3090)

24GB VRAM (variante int8_convrot probada) VRAM Avanzado 13 min SCAIL-2 (Wan 2.1 14B, int8_convrot) + SAM3.1
Savien

SCAIL-2 en ComfyUI: Prueba Real de Reemplazo de Personaje (Sin Custom Nodes, RTX 3090)

Read in English →

Hace poco descargué un template oficial de ComfyUI que prometía algo que parecía ciencia ficción hace un par de años: reemplazar a una persona en un vídeo por un personaje completamente distinto, manteniendo intactos la escena, la iluminación, la cámara y cada movimiento. Sin plugins personalizados. Sin acceso a APIs de pago. Ejecutándose en una RTX 3090 local. Este artículo documenta exactamente qué pasó cuando intenté usar SCAIL-2 en ComfyUI con un workflow real.

Lo que vas a leer es exactamente lo que pasó cuando lo intenté: qué modelos necesité, qué problemas reales encontré, cuánto tiempo tardó, y cómo quedó el vídeo final. Sin dramatismo, sin especulación. Solo números, hechos reproducibles y un resultado que puedes ver.

De un vistazo: SCAIL-2 en ComfyUI

AspectoDetalle
ModeloWan 2.1 SCAIL-2 (int8_convrot, 16.7 GB)
Duración máxima (un segmento)81 frames (~6.3 segundos a 25fps)
GPU probadaRTX 3090 (24 GB VRAM)
Tiempo total de ejecución~9.5 minutos
Custom nodes necesariosNinguno (nativo desde ComfyUI v0.27.0)
Problemas encontrados2 (nombres de archivo de VAE y rutas de LoRA)
Resultado finalVídeo funcional, 896x512, 25fps, 6.28 segundos

¿Qué es SCAIL-2 y por qué importa?

SCAIL-2 es un modelo de animación y reemplazo de personajes desarrollado por Z.AI que llegó a ComfyUI de forma nativa en la versión 0.27.0. A diferencia de soluciones anteriores que requerían custom nodes complejos o servicios en la nube, SCAIL-2 está integrado directamente en el núcleo de ComfyUI como parte del workflow SCAIL-2 oficial.

El concepto es simple pero poderoso: le das un vídeo (el “vídeo conductor”) donde alguien se está moviendo, y una imagen de referencia de una persona o personaje distinto. SCAIL-2 toma la pose, el movimiento y la dinámica del vídeo original y los aplica al personaje de referencia, preservando perfectamente la escena original, la iluminación y el encuadre de cámara. Es lo que se conoce como reemplazo de personaje vídeo ComfyUI sin necesidad de herramientas externas.

Los nodos nativos que hacen esto posible son:

  • WanSCAILToVideo: el motor de sampling principal que genera el vídeo transformado
  • SCAIL2ColoredMask: convierte los datos de tracking en las máscaras coloreadas que necesita el sampler
  • SAM3_VideoTrack: identifica y sigue a la persona en el vídeo conductor, proporcionando el tracking de vídeo ComfyUI frame a frame

Ninguno de estos requiere instalación de custom nodes. Están ahí, listos para usar desde el core de ComfyUI.

💡 Consejo: SCAIL-2 es una solución nativa de ComfyUI que permite reemplazar personajes en vídeo manteniendo pose, movimiento e iluminación originales, sin dependencias externas.

El template oficial: estructura y complejidad

El workflow que usé es el template oficial de Comfy-Org llamado video_wan21_scail2_character_replacement.json, disponible directamente en la galería de templates de ComfyUI buscando “SCAIL-2”.

A primera vista, parece intimidante: 15 nodos de nivel superior. Pero la magia real está en dos subgrafos nativos (una característica real de ComfyUI 2.0, no un workaround):

  • Character Replacement (SCAIL-2 Base): contiene 42 nodos internos. Se ocupa de un segmento de vídeo de hasta 81 frames (~6.3 segundos a 25fps).
  • Character Replacement (SCAIL-2 Extend): pensado para encadenar segmentos adicionales de 76 frames cuando necesitas vídeos más largos.

Esta prueba solo usó la pasada Base, suficiente para entender cómo funciona el sistema. El Extend existe en el template pero no fue probado. Los subgrafos nativos no son custom nodes; son una característica del core de ComfyUI que permite agrupar y reutilizar nodos sin dependencias de terceros.

📌 A tener en cuenta: El template oficial de SCAIL-2 usa subgrafos nativos de ComfyUI para organizar la lógica, manteniendo todo dentro del core sin necesidad de plugins externos.

🏗️ Workflow: SCAIL-2 Character Replacement (con los 2 fixes aplicados)

🧠 VRAM: 24GB 📡 MODEL: SCAIL-2 (Wan 2.1 14B, int8_convrot) + SAM3.1

Workflow de SCAIL-2 cargado y ejecutándose en ComfyUI, con el vídeo conductor y la imagen de referencia visibles Captura real del grafo corriendo en ComfyUI v0.27.0, con las miniaturas del vídeo conductor (boxeadora) y la imagen de referencia (streetwear) cargadas.

Modelos necesarios: tamaños reales y opciones de cuantización

Aquí es donde la cosa se vuelve concreta. SCAIL-2 necesita varios modelos, y los tamaños varían bastante según la cuantización elegida:

ModeloVersiónTamañoUbicaciónNotas
wan2.1_14B_SCAIL_2_int8_convrot.safetensorsint8_convrot16.7 GBdiffusion_models/✅ Elegida para RTX 30 series (tensor cores INT8 nativos)
wan2.1_14B_SCAIL_2_fp16.safetensorsfp16 (original)32.8 GBdiffusion_models/Máxima precisión, requiere 24+ GB VRAM, no probada
wan2.1_14B_SCAIL_2_fp8_scaled.safetensorsfp8_scaled17.7 GBdiffusion_models/No probada
wan2.1_14B_SCAIL_2_mxfp8.safetensorsmxfp817.2 GBdiffusion_models/No probada
wan2.1_14B_SCAIL_2_nvfp4_mxpf8_mix.safetensorsnvfp4_mxpf8_mix11 GBdiffusion_models/Más agresiva, no probada
wan2.1_SCAIL_2_DPO_lora_bf16.safetensorsbf161.2 GBloras/Mejora de calidad de salida
sam3.1_multiplex_fp16.safetensorsmultiplex_fp161.75 GBcheckpoints/Tracking de vídeo SAM3
clip_vision_h.safetensorsh1.26 GBclip_vision/Codificador de imágenes
lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensorsdistilled738 MBloras/lightx2v/Generación de vídeo auxiliar

La descarga total para esta sesión fue de 21.4 GB (el VAE de Wan 2.1 y el text encoder ya estaban locales de pruebas anteriores).

Por qué int8_convrot en RTX 3090

La razón de elegir la cuantización int8_convrot en lugar de fp16 es técnica pero importante: las GPUs RTX serie 30 (Ampere) tienen soporte nativo en hardware para operaciones INT8 en los tensor cores, pero carecen del soporte para matmul FP8 que llegó con arquitecturas posteriores (Hopper, Ada). Es el mismo razonamiento que aplicamos en una prueba anterior de LTXV-2.3 en la misma tarjeta.

En contraste, las cuantizaciones fp8_scaled o mxfp8 se benefician del soporte FP8 nativo de tarjetas más nuevas, pero en Ampere el overhead de conversión hace que int8_convrot sea más eficiente.

⚠️ Importante: Para RTX 3090, int8_convrot es la cuantización óptima; las variantes FP8 están diseñadas para GPUs más nuevas con soporte nativo de matmul FP8.

Bugs reales encontrados (y cómo solucionarlos)

Aquí viene la parte honesta. El template oficial, tal como se descarga, tiene dos problemas que bloquean la ejecución. Ambos son desajustes de nombres de fichero, no bugs del algoritmo.

Problema 1: Nombre del archivo VAE incorrecto

Los nodos VAELoader del template referencian Wan2_1_VAE_bf16.safetensors, pero el archivo real en disco se llama Wan2.1_VAE.pth (nombre y extensión distintos).

Error de ComfyUI: “Value not in list: vae_name”

Solución: Edita ambos nodos VAELoader (hay uno en el subgrafo Base y otro en el Extend) y cambia el valor del widget al nombre correcto del archivo. Es un cambio de una línea, pero bloquea todo hasta que lo hagas.

Problema 2: Ruta de LoRA incompleta

La LoRA distilled de lightx2v se descarga en una subcarpeta lightx2v/ dentro de models/loras/ (para mantener organización). El template original especifica solo el nombre del archivo desnudo, pero ComfyUI necesita la ruta completa relativa.

Error de ComfyUI: “Value not in list” nuevamente

Solución: Antepón el nombre de la subcarpeta en ambos nodos LoraLoaderModelOnly. El valor correcto es lightx2v/lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensors, no solo el nombre de archivo.

Ambos son problemas simples de coincidencia de nombres, no bugs profundos del algoritmo. Pero merecen documentarse explícitamente porque el error que genera ComfyUI es genérico y no te dice dónde buscar.

Observación: El aviso de subgrafos “no cargados”

Al abrir el template, ComfyUI mostró un aviso diciendo “No se pudieron cargar los subgrafos”. Este mismo aviso apareció en dos pruebas anteriores de este blog: una con un paquete de custom nodes genuinamente desactualizado, otra con un template legacy incompatible.

Esta vez, el template usa la función de subgrafo nativa y actual de ComfyUI 2.0, y aun así mostró el aviso. Sin embargo, ejecutó correctamente de principio a fin una vez arreglados los nombres de archivo.

Conclusión: El aviso parece ser una advertencia cosmética/genérica en esta combinación de versión de ComfyUI + frontend que no indica de forma fiable un problema bloqueante real. Merece la pena señalarlo como patrón.

💡 Consejo práctico: Antes de declarar un template como “roto”, intenta ejecutarlo de todas formas. Los avisos de subgrafos pueden ser falsos positivos si el template está actualizado.

Configuración de entrada: vídeo conductor e imagen de referencia

El vídeo conductor fue reutilizado directamente: 1920x1024, 25fps, 251 frames totales. Mostró a una boxeadora trabajando un saco pesado en un gimnasio. Generado en una prueba anterior con LTXV-2.3, así que no hubo necesidad de regenerar.

La imagen de referencia se generó con Z-Image Turbo (el mismo pipeline usado para hero images en este blog): una foto de cuerpo completo de una joven con sudadera oversized streetwear, pantalones cargo, fondo neutro de estudio. Resolución 768x1152, 8 pasos, sampler res_multistep.

Imagen de referencia streetwear generada para esta prueba Personaje de referencia real usado en esta prueba, generado con Z-Image Turbo.

Números reales de ejecución en RTX 3090

Aquí es donde ves si todo funciona o si todo explota:

Tiempo total: 571.09 segundos (~9.5 minutos) para el pipeline completo.

Desglose aproximado:

  • SAM3 tracking (81 frames): ~13 segundos (visible como barra tqdm en consola)
  • Carga de modelos: distribuida a lo largo de la ejecución
  • Sampling de Wan 14B: la mayoría del tiempo
  • Decodificación VAE: los últimos segundos

Uso de VRAM por componente (según se cargaba dinámicamente):

  • Modelo SCAIL-2: 15.881 MB
  • Text encoder (umt5_xxl): 6.419 MB
  • SAM3 + CLIP wrapper: menos de 1.700 MB
  • CLIP Vision: 1.205 MB

Los modelos se cargan y descargan dinámicamente, no residen todos simultáneamente. VRAM residual al final: 11.8 GB en la tarjeta (comprobado con nvidia-smi tras completarse).

RAM del sistema: pico de ~22 GB de 32 GB disponibles. Sin errores de memoria (OOM). Esto contrasta con una prueba separada del modelo dev de LTXV-2.3 que sí produjo OOM de RAM del sistema; SCAIL-2, pese a usar un modelo de 14B comparablemente grande, no reprodujo ese modo de fallo.

📌 A tener en cuenta: SCAIL-2 en RTX 3090 consume ~16 GB VRAM pico y tarda ~9.5 minutos por segmento de 81 frames; es eficiente en memoria respecto a otros modelos de generación de vídeo.

El resultado: vídeo de salida real

El vídeo final: 896x512, 25fps, 6.28 segundos (81 frames, un único segmento).

Lo que ves: el mismo gimnasio de boxeo con cuerdas del ring, saco, lámpara cenital, suelo reflectante. El mismo movimiento de caminar del vídeo conductor original. Pero la persona ahora es el personaje de referencia streetwear, no la boxeadora.

La composición de escena, la iluminación y el encuadre de cámara se preservan con fidelidad. El único cambio es la identidad de la persona.

Es un resultado real y funcional. No es parcial, no es degradado. Es SCAIL-2 funcionando como se supone que debe funcionar.

Vídeo real generado con este workflow exacto: la boxeadora original reemplazada por el personaje streetwear, mismo gimnasio y movimiento.

Limitaciones y alcance de esta prueba

Necesito ser explícito sobre qué NO probé:

  • Solo se ejecutó la pasada Base (un único segmento de ~81 frames, ~6.3 segundos).
  • El subgrafo Extend para encadenar vídeos más largos existe en el template pero no fue puesto a prueba.
  • No afirmo nada sobre calidad de vídeo largo o costuras de encadenado que no haya observado realmente.

Si necesitas un vídeo más largo, el template lo soporta (el Extend está ahí), pero esto requeriría una sesión de prueba separada.

Preguntas frecuentes

¿SCAIL-2 necesita algún custom node en ComfyUI?

No. Desde ComfyUI v0.27.0, WanSCAILToVideo, SCAIL2ColoredMask, y toda la familia de nodos de tracking SAM3 son nodos nativos del core. El template oficial sí usa la función de subgrafo nativa de ComfyUI para agrupar nodos, pero eso es una función del core de la UI, no una dependencia de terceros.

¿Por qué SCAIL-2 necesita SAM3?

SCAIL-2 necesita saber exactamente qué píxeles del vídeo conductor pertenecen a la persona que se va a reemplazar, frame a frame. SAM3_VideoTrack genera esos datos de tracking, que SCAIL2ColoredMask convierte después en las máscaras de pose y referencia que realmente consume WanSCAILToVideo.

¿Qué cuantización de SCAIL-2 usar en una RTX 3090?

int8_convrot (16.7GB), probada aquí con éxito. Las GPU RTX serie 30 tienen soporte nativo de tensor cores INT8 pero carecen del soporte nativo de matmul FP8 del que se benefician las variantes fp8_scaled o mxfp8 en tarjetas más nuevas — el mismo patrón visto con las opciones de cuantización de LTXV-2.3 en Ampere.

¿Por qué el template oficial de SCAIL-2 falló al cargar con errores ‘Value not in list’?

Dos desajustes de nombre de fichero: el template referencia ‘Wan2_1_VAE_bf16.safetensors’ pero el fichero de VAE realmente descargado suele llamarse ‘Wan2.1_VAE.pth’, y cualquier LoRA colocada en una subcarpeta (p. ej. models/loras/lightx2v/) necesita esa subcarpeta antepuesta en el valor del nodo, no solo el nombre de fichero desnudo.

¿Cuál es la duración máxima de vídeo que puedo procesar?

La pasada Base soporta hasta 81 frames (~6.3 segundos a 25fps). Para vídeos más largos, usas el subgrafo Extend, que encadena segmentos de 76 frames. La fórmula es: ceil(frames_totales / 76) segmentos necesarios. Cada segmento usa 5 frames anclados del anterior para continuidad.

¿Qué calidad de imagen de referencia necesito?

La imagen debe ser clara, de cuerpo completo o al menos el torso visible, con buena iluminación. Fondo neutral ayuda. La imagen se procesa con tracking SAM3, así que necesita suficiente contraste para que SAM3 identifique el cuerpo.

¿Puedo usar vídeos de cualquier resolución?

El template maneja escalado automático. La entrada se redimensiona según sea necesario. El vídeo de salida de esta prueba fue 896x512, escaleado desde la entrada de 1920x1024. Resoluciones más altas aumentan el tiempo de ejecución.

Sigue leyendo

Si buscas otro workflow de generación de vídeo local para comparar, nuestra guía completa de Wan 2.2 cubre otro pipeline basado en Wan. Para el pipeline de LTXV-2.3 + escalado a 4K del que sale el vídeo conductor de esta prueba, consulta nuestra guía de LTXV-2.3 + RTX Super Resolution. Y si las cuantizaciones como int8_convrot no te resultan familiares, nuestra guía de GGUF en ComfyUI explica el porqué de estas decisiones.

🏆 Nuestra recomendación

Si buscas reemplazar personajes en vídeo de forma local sin servicios en la nube y tienes una RTX 3090 o superior: SCAIL-2 es la herramienta que necesitas ahora mismo. El workflow está maduro, documentado y funciona de verdad. Descarga el template oficial desde la galería de ComfyUI, arregla los dos nombres de archivo mencionados en este artículo, y ejecútalo. Espera unos 10 minutos por segmento de 6 segundos. Si tu GPU tiene menos VRAM (RTX 4080, RTX 4070), prueba las cuantizaciones más agresivas (nvfp4_mxpf8_mix) o divide el vídeo en segmentos más cortos. Si necesitas procesar vídeos más largos (>10 segundos): el subgrafo Extend del template está diseñado exactamente para esto, pero requiere una sesión de prueba separada para validar la calidad de costura entre segmentos en tu caso específico.

Preguntas frecuentes

¿SCAIL-2 necesita algún custom node en ComfyUI?
No. Desde ComfyUI v0.27.0, WanSCAILToVideo, SCAIL2ColoredMask, y toda la familia de nodos de tracking SAM3 son nodos nativos del core. El template oficial sí usa la función de subgrafo nativa de ComfyUI para agrupar nodos, pero eso es una función del core de la UI, no una dependencia de terceros.
¿Por qué SCAIL-2 necesita SAM3?
SCAIL-2 necesita saber exactamente qué píxeles del vídeo conductor pertenecen a la persona que se va a reemplazar, frame a frame. SAM3_VideoTrack genera esos datos de tracking, que SCAIL2ColoredMask convierte después en las máscaras de pose y referencia que realmente consume WanSCAILToVideo.
¿Qué cuantización de SCAIL-2 usar en una RTX 3090?
int8_convrot (16.7GB), probada aquí con éxito. Las GPU RTX serie 30 tienen soporte nativo de tensor cores INT8 pero carecen del soporte nativo de matmul FP8 del que se benefician las variantes fp8_scaled o mxfp8 en tarjetas más nuevas -- el mismo patrón visto con las opciones de cuantización de LTXV-2.3 en Ampere.
¿Por qué el template oficial de SCAIL-2 falló al cargar con errores 'Value not in list'?
Dos desajustes de nombre de fichero: el template referencia 'Wan2_1_VAE_bf16.safetensors' pero el fichero de VAE realmente descargado suele llamarse 'Wan2.1_VAE.pth', y cualquier LoRA colocada en una subcarpeta (p. ej. models/loras/lightx2v/) necesita esa subcarpeta antepuesta en el valor del nodo, no solo el nombre de fichero desnudo.
Compartir X LinkedIn

También te puede interesar