Pipeline local y modular de reemplazo facial con GPU NVIDIA. Mantiene los flujos por fotograma existentes y añade un backend temporal nativo para DreamID-V sobre Wan 2.1 1.3B. La etiqueta visible es configurable por perfil; el perfil DreamID-V para RTX 5070 Ti no dibuja marcas sobre los fotogramas y conserva un manifiesto JSON separado.
| Backend | Generador | Geometría | Estado |
|---|---|---|---|
insightface_inswapper |
INSwapper 128 | Ninguna dentro del generador | Compatible y rápido |
insightface_inswapper_mediapipe_mesh |
INSwapper 128 | Postproceso por malla MediaPipe | Compatible, no 3D-aware generativo |
hififace_3dmm |
HifiFace 256 | Identidad condicionada por 3DMM dentro del generador | 3DMM-aware real |
dreamid_v |
DreamID-V + Wan 2.1 1.3B | Diffusion Transformer temporal sobre clips | Backend de vídeo, 480p/720p |
El alias histórico mediapipe_3d_hybrid permanece para no romper YAML antiguos,
pero emite una advertencia de obsolescencia. El nombre era impreciso porque MediaPipe
solo deformaba la salida 2D después de generarla.
FaceAnalyzer ───────────────┐
├─► tracking y selección de identidad
FaceGenerator / FaceSwapper┘
│
├─ tracking multiinstancia (actor + reflejos)
├─ INSwapper 128
├─ INSwapper + postproceso por malla
└─ HifiFace + extractor 3DMM + Semantic Facial Fusion
│
▼
máscara aprendida / composición ROI
│
▼
NVENC + manifiesto
VideoSwapBackend
└─ DreamID-V Faster + Wan 2.1 1.3B
│
├─ banco de referencias por pose/calidad
├─ tracking real del sujeto objetivo
├─ ventanas solapadas + worker persistente
├─ stitching guiado por flujo
├─ composición selectiva con oclusiones
└─ codificación final + métricas + C2PA/manifiesto
Las capacidades del modelo se declaran mediante ModelCapabilities:
geometry_conditioning: geometría usada dentro del generador;geometry_postprocess: corrección aplicada después de generar;truly_3d_aware: verdadero únicamente para condicionamiento interno conocido.
En Windows/NVIDIA se recomienda el instalador del proyecto, que evita que la
dependencia histórica de InsightFace vuelva a introducir onnxruntime CPU:
powershell -ExecutionPolicy Bypass -File .\scripts\setup_windows.ps1
conda activate FaceSwap-Pro
faceswap-pro doctorSi el entorno ya existe y solo vas a actualizar el código, reinstala FaceSwap-Pro con
--no-deps después de asegurar sus dependencias; no uses un pip install -e . normal
sobre un entorno NVIDIA con ORT GPU porque pip puede intentar satisfacer InsightFace
con la distribución CPU onnxruntime.
El instalador base prepara también el backend opcional por malla salvo que se use
-SkipMeshAssist. MediaPipe queda fijado a 0.10.21, compatible con el nuevo backend
de ControlNet Aux.
En Windows/NVIDIA usa el instalador dedicado dentro del entorno Conda existente:
conda activate FaceSwap-Pro
powershell -ExecutionPolicy Bypass -File .\scripts\setup_diffusion_backend_windows.ps1Este flujo fija las combinaciones sensibles de MediaPipe/ControlNet Aux y
TensorBoard/protobuf, conserva onnxruntime-gpu sin reinstalar ORT CPU y configura
Accelerate en BF16 cuando la GPU lo admite. Valida después con:
faceswap-pro doctor --diffusiondoctor muestra este backend en diffusion_finetuning_backends y detalla SDXL/FLUX
en la sección diffusion_finetuning; no se mezcla con model_backends porque es un
servicio separado de entrenamiento/generación. Consulta
docs/diffusion_finetuning_backend.md.
La generación de difusión admite target_reference para seleccionar una identidad concreta
del vídeo. Con inputs/target_faces/target.jpg, InsightFace sigue únicamente a esa persona,
SDXL/FLUX genera una ROI facial y el resultado se recompone sobre el frame original. Las
demás personas permanecen sin modificar; si el objetivo no aparece, se conserva el frame.
La integración usa la implementación externa MIT xuehy/HiFiFace-pytorch. El código
y los pesos no se redistribuyen dentro de este ZIP.
Los recursos auxiliares se guardan en models/hififace/auxiliary; no se usa
un directorio llamado aux, porque AUX es un nombre reservado en Windows.
- Instala juntos una build CUDA de PyTorch y su
torchvisioncompatible con tu controlador y GPU. - Instala las dependencias de soporte:
python -m pip install -e ".[hififace3d]"- Clona la implementación. En Windows no uses un
git clonenormal: el repositorio contieneAdaptiveWingLoss/aux.pyyAUXes un nombre reservado por NTFS. El instaladorscripts/setup_windows.ps1ya aplica automáticamente un checkout compatible. Para hacerlo manualmente:
git clone --depth 1 --no-checkout `
https://github.com/xuehy/HiFiFace-pytorch.git `
.\third_party\HiFiFace-pytorch
git -C .\third_party\HiFiFace-pytorch config core.protectNTFS false
git -C .\third_party\HiFiFace-pytorch sparse-checkout set --no-cone `
"/*" "!/AdaptiveWingLoss/aux.py"
git -C .\third_party\HiFiFace-pytorch checkout --force- Descarga desde las fuentes indicadas por esa implementación:
models/hififace/
├── standard_model/
│ └── generator_320000.pth
└── auxiliary/
├── Deep3DFaceRecon/epoch_20_new.pth
├── arcface/ms1mv3_arcface_r100_fp16_backbone.pth
└── BFM/
├── 01_MorphableModel.mat
├── BFM_exp_idx.mat
├── BFM_front_idx.mat
├── BFM_model_front.mat
├── Exp_Pca.bin
├── facemodel_info.mat
├── select_vertex_id.mat
├── similarity_Lm3D_all.mat
└── std_exp.txt
BFM requiere obtener los archivos bajo sus propias condiciones. Usa únicamente checkpoints de una fuente confiable: los checkpoints PyTorch pueden contener datos serializados ejecutables.
- Valida todo el perfil antes de procesar:
faceswap-pro doctor --config .\config\quality_3dmm.yamlEl bloque hififace_3dmm.ready debe ser true.
DreamID-V puede usar el mismo entorno Conda que los demás backends. El instalador
selectivo evita duplicar OpenCV u ONNX Runtime CPU e instala una ruta SDPA nativa
que prioriza cuDNN/Flash/Efficient Attention, conserva las longitudes reales y evita
el fallback matemático extremadamente lento. Consulta
docs/dreamidv.md para la estructura completa.
El perfil quality_dreamidv.yaml usa dreamidv_faster.pth, 832×480, 49
fotogramas y 16 pasos. El perfil speed_dreamidv.yaml conserva la misma
resolución pero usa 8 pasos y 5 fotogramas de solape para pruebas o vídeos largos.
En GPU de 16 GB, los perfiles alternan la residencia del DiT y del VAE: el DiT sale de CUDA durante la codificación/decodificación VAE y el VAE sale durante la difusión. El VAE se ejecuta en BF16, el modelo se mueve una sola vez por etapa y la salida se codifica por fotograma, evitando una copia FP32 del clip completo.
La versión 0.5.4 conserva los mismos pasos, resolución, guía y solape de cada
perfil. Optimiza únicamente trabajo redundante: Q/K/V se entregan a SDPA como
vistas cuando el kernel lo admite, RoPE y embeddings invariantes se reutilizan
entre las dos pasadas de guidance, y los tensores pequeños de UniPC evitan rutas
CPU innecesarias. Cada optimización tiene fallback automático al comportamiento
compatible del checkout externo. La revisión 0.5.4 también hace las cachés
compatibles con torch.inference_mode y garantiza que las cachés dependientes
del clip se liberen antes de volver a cargar el VAE.
DWPose global se guarda en .faceswap_cache/dreamidv_pose junto al destino y
se invalida si cambia el vídeo, FPS, número de frames o modelos ONNX. Durante una
ejecución, un productor acotado prepara los siguientes clips mientras la GPU
procesa el actual; esto no modifica los frames ni el orden de generación.
Valida primero los archivos y la GPU:
faceswap-pro doctor --config .\config\quality_dreamidv.yamlEjecuta:
faceswap-pro run --config .\config\quality_dreamidv.yamlPara una ejecución más rápida:
faceswap-pro run --config .\config\speed_dreamidv.yamlEl backend divide vídeos largos en ventanas 4n+1 solapadas y desplaza fronteras a
cortes de escena. Primero precalcula DWPose para todos los clips en un proceso
separado; después cierra ese proceso, libera su VRAM y carga DreamID-V una sola vez.
InsightFace también libera sus sesiones GPU tras completar el tracking. El worker
registra el backend SDPA que realmente ejecutó cada forma de atención; los perfiles
incluidos desactivan MATH, de modo que una incompatibilidad de kernel falla rápido
en vez de consumir muchas horas. Si el worker de difusión falla, se reinicia de
forma controlada en lugar de degradar silenciosamente a la CLI lenta. La referencia
objetivo se usa para seguir a la
persona correcta y la salida se recompone únicamente dentro de sus máscaras
temporales. Si la misma identidad aparece directamente y reflejada en un espejo,
ambas regiones se incluyen en la composición.
Cada ejecución temporal genera también métricas JSON, una hoja visual entrada/salida,
hashes cacheados de modelos y C2PA opcional. Consulta
docs/mejoras_calidad_2026.md para el mapa completo.
faceswap-pro run --config .\config\quality.yamlfaceswap-pro run --config .\config\quality_mesh_assisted.yamlfaceswap-pro run --config .\config\quality_3dmm.yamlquality_3d.yaml es un alias legible del perfil quality_3dmm.yaml.
Todos los perfiles incluidos permiten dos apariciones simultáneas de la identidad objetivo mediante:
tracking:
max_target_faces: 2Cada aparición mantiene una trayectoria, suavizado y flujo óptico independientes; el orden cambiante del detector no mezcla el rostro directo con su reflexión. En el pipeline por fotogramas se genera y compone un reemplazo por rostro. En DreamID-V la máscara DWPose se cruza con el tracking antes de la difusión: se conserva el componente preciso del actor principal y se añaden máscaras para las apariciones coincidentes que falten, como reflejos. La composición final vuelve a usar la misma unión para conservar intactas las demás personas y el fondo.
Usa max_target_faces: 1 para recuperar el comportamiento conservador anterior, o
un valor mayor cuando una escena contenga varios espejos. El límite se aplica solo a
rostros cuya similitud supere identity.target_min_similarity.
--model-path admite archivos o directorios:
# Archivo ONNX
faceswap-pro run `
--model-path .\models\inswapper_128.onnx `
--config .\config\quality.yaml
# Directorio de checkpoint HifiFace
faceswap-pro run `
--model-path .\models\hififace\standard_model `
--config .\config\quality_3dmm.yamlLos alias antiguos --model y --swapper-model continúan disponibles.
hififace_3dmm no es un simple warper. El generador obtiene coeficientes de forma
3DMM de source y target, conserva la identidad/forma del source y combina expresión
y pose del target antes de sintetizar. Después, Semantic Facial Fusion predice una
máscara y conserva iluminación, fondo y oclusiones dentro del propio modelo.
Esto es condicionamiento generativo por 3DMM, no un avatar 3D explícito con rig, texturas editables o render físico. El perfil sigue siendo independiente por frame; la consistencia temporal neuronal queda como una extensión separada futura.
Todos los comandos crean automáticamente la carpeta logs/ con exactamente dos
archivos acumulativos en formato JSON Lines:
logs/logs.jsonl: inicio y fin de ejecución, advertencias, bloqueos prolongados, fallos de hilos y excepciones con traceback.logs/profile.jsonl: spans jerárquicos, métricas por fotograma y rostro, esperas de colas/futuros, tiempos de decodificación, detección, tracking, swap, composición, restauración, alimentación al encoder, memoria Python y estadísticascProfilepor función. En DreamID-V también incorpora la telemetría del worker: carga de modelos, VRAM asignada/reservada, VAE, cada forward del DiT, paso de difusión, pasada condicional/no condicionada, escritura, heartbeats ycProfilepor clip. Cuando el runtime no admite perfiles simultáneos, conserva los spans atómicos y registra explícitamente esa limitación sin detener el procesamiento.
El archivo de perfil añade también eventos span_summary ordenados por tiempo total,
con conteo, promedio, mínimo, máximo y CPU acumulada por operación. Cada línea incluye
run_id, timestamp, proceso e hilo, por lo que varias ejecuciones
pueden convivir en los mismos archivos y filtrarse sin perder el historial. La ruta
puede cambiarse para una ejecución completa colocando la opción global antes del
comando:
faceswap-pro --log-dir .\diagnostico run --config .\config\quality.yamlEl perfilado es intencionalmente detallado y añade cierta sobrecarga; sus mediciones permiten localizar cuellos de botella a nivel de etapa, fotograma, rostro y función.
pytest -qLa suite cubre contratos, configuración, tracking multiinstancia y reflejos, ventanas DreamID-V solapadas, banco multi-referencia, composición selectiva, métricas visuales, caché de hashes, C2PA, compatibilidad del flujo anterior, HifiFace y el adaptador 3DMM.
Procesa únicamente material propio o autorizado. El perfil DreamID-V no añade una marca visible, pero mantiene un manifiesto JSON, intenta incrustar C2PA y conserva los frames originales cuando el sujeto es ambiguo o no está localizado. Revisa por separado las licencias del código, los pesos, Wan 2.1, BFM e InsightFace.
El proyecto incluye ahora un backend SOLID opcional para personalización con SDXL LoRA y generación condicionada mediante OpenPose + Depth ControlNet. Está desacoplado del pipeline de reemplazo facial existente y expone una API FastAPI para datasets, jobs de entrenamiento y generación sobre imagen o vídeo.
Consulta docs/diffusion_finetuning_backend.md para instalación, arquitectura y endpoints.