Spaces:
Runtime error
Runtime error
title: ReelsX | |
emoji: 🎬 | |
colorFrom: blue | |
colorTo: purple | |
sdk: docker | |
pinned: false | |
# ReelsX - Generador de Videos con Wav2Lip | |
Esta aplicación permite generar videos sincronizando el audio con los labios de una persona utilizando la tecnología Wav2Lip. | |
## Características | |
- Generación de videos con sincronización labial | |
- Soporte para múltiples formatos de entrada de audio y video | |
- Interfaz web intuitiva | |
- Procesamiento asíncrono de videos | |
## Uso | |
1. Sube un video con un rostro claro | |
2. Sube o genera un archivo de audio | |
3. Espera mientras se procesa el video | |
4. Descarga el resultado final | |
## Tecnologías | |
- Python | |
- Flask | |
- Wav2Lip | |
- FFmpeg | |
- OpenCV | |
## Créditos | |
Este proyecto utiliza [Wav2Lip](https://github.com/Rudrabha/Wav2Lip) para la sincronización labial. | |
# Generador de Videos de Reacción | |
Este proyecto es una aplicación web que permite crear videos de reacción combinando videos de YouTube con animaciones faciales generadas mediante inteligencia artificial. | |
## Propósito | |
La aplicación permite a los usuarios: | |
1. Seleccionar un video de YouTube como base | |
2. Generar una reacción de audio mediante texto a voz (TTS) | |
3. Animar una imagen facial para sincronizarla con el audio | |
4. Combinar todo en un video final de reacción | |
## Estructura del Proyecto | |
``` | |
reels/ | |
├── app.py # Aplicación principal Flask | |
├── inference.py # Script de inferencia Wav2Lip | |
├── requirements.txt # Dependencias del proyecto | |
├── static/ # Archivos estáticos | |
│ ├── animations/ # Animaciones generadas | |
│ ├── female.png # Avatar femenino predeterminado | |
│ └── male.png # Avatar masculino predeterminado | |
├── templates/ | |
│ └── index.html # Interfaz de usuario | |
├── face_detection/ # Módulo de detección facial | |
│ ├── api.py # API de detección facial | |
│ └── detection/ | |
│ └── sfd/ # Detector SFD | |
│ ├── net_s3fd.py # Arquitectura de red | |
│ ├── s3fd.py # Implementación del modelo | |
│ ├── sfd_detector.py # Clase detector | |
│ └── s3fd.pth # Pesos del modelo | |
├── utils/ | |
│ ├── tts_processing.py # Procesamiento de texto a voz | |
│ └── video_processing.py # Procesamiento de video | |
├── checkpoints/ # Modelos pre-entrenados | |
│ └── wav2lip_gan.pth # Modelo Wav2Lip | |
└── temp_audio/ # Archivos temporales de audio | |
``` | |
## Flujo de Datos | |
1. **Entrada de Video** | |
- El usuario proporciona una URL de YouTube | |
- `video_processing.py` descarga y procesa el video | |
- Se permite seleccionar un segmento específico | |
2. **Generación de Audio** | |
- El usuario escribe texto y selecciona una voz | |
- `tts_processing.py` genera el audio usando Edge TTS | |
- El audio se guarda temporalmente en `temp_audio/` | |
3. **Animación Facial** | |
- El usuario selecciona/sube una imagen facial | |
- `face_detection/` detecta y procesa el rostro | |
- `inference.py` genera la animación usando Wav2Lip | |
- La animación se guarda en `static/animations/` | |
4. **Combinación Final** | |
- Se combina el video base con la animación | |
- El resultado se guarda y se ofrece para descarga | |
## Módulos Principales | |
### face_detection/ | |
- **api.py**: Interfaz principal de detección facial | |
- `FaceAlignment`: Clase para alineación y detección facial | |
- `download_sfd_model()`: Descarga el modelo SFD si no existe | |
### utils/ | |
- **tts_processing.py** | |
- `generate_tts_with_fallback()`: Genera audio desde texto | |
- **video_processing.py** | |
- `download_video_with_fallback()`: Descarga videos de YouTube | |
- `inference_preview()`: Genera preview del video | |
- `wav2lip_animate()`: Genera animación facial | |
- `cleanup_old_files()`: Limpia archivos temporales | |
### Modelos | |
- **SFD (S³FD)** | |
- Detector facial usado para preprocesamiento | |
- Archivos: `net_s3fd.py`, `sfd_detector.py` | |
- **Wav2Lip** | |
- Modelo principal para sincronización labial | |
- Checkpoint: `wav2lip_gan.pth` | |
## Interfaz de Usuario | |
La interfaz web (`templates/index.html`) está dividida en tres secciones: | |
1. **Video Base** | |
- Campo para URL de YouTube | |
- Visualización de thumbnail y título | |
- Selector de segmento de video | |
- Preview del video seleccionado | |
2. **Reacción** | |
- Editor de texto para la reacción | |
- Selector de voz TTS | |
- Preview del audio generado | |
- Selector de imagen facial | |
- Preview de la animación generada | |
3. **Generación Final** | |
- Botón para combinar videos | |
- Barra de progreso | |
- Opciones de descarga | |
## Dependencias Principales | |
- Flask: Servidor web | |
- PyTorch: Modelos de IA | |
- OpenCV: Procesamiento de imagen | |
- Edge-TTS: Generación de voz | |
- yt-dlp: Descarga de videos | |
- ffmpeg: Procesamiento de video | |
## Manejo de Errores | |
El sistema incluye: | |
- Verificación de archivos generados | |
- Limpieza automática de temporales | |
- Fallbacks para descargas y procesamiento | |
- Logging detallado de operaciones | |
## Notas de Desarrollo | |
- La aplicación usa CUDA si está disponible | |
- Los archivos temporales se limpian cada 24 horas | |
- Los modelos se descargan automáticamente | |
- Se incluye soporte para formatos WebM con alpha | |
## Problemas Conocidos y Soluciones | |
1. **Error de Detección Facial** | |
- Causa: Modelo SFD no cargado correctamente | |
- Solución: Verificar `s3fd.pth` en `face_detection/detection/sfd/` | |
2. **Error de Audio** | |
- Causa: Edge TTS no disponible | |
- Solución: Verificar conexión a internet | |
3. **Error de Video** | |
- Causa: URL de YouTube inválida | |
- Solución: Usar fallback de descarga |