feat: Initial pipeline for Twitch highlight detection
- New 2-of-3 detection system (chat + audio + color) - GPU support (PyTorch ROCm/CUDA ready) - Draft mode (360p) for fast testing - HD mode (1080p) for final render - Auto download video + chat - CLI pipeline script - Documentation in Spanish
This commit is contained in:
229
todo.md
Normal file
229
todo.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# TODO - Mejoras Pendientes
|
||||
|
||||
## Estado Actual
|
||||
|
||||
### Working ✅
|
||||
- Descarga de video (streamlink)
|
||||
- Descarga de chat (TwitchDownloaderCLI)
|
||||
- Detección por chat saturado
|
||||
- Generación de video (moviepy)
|
||||
- PyTorch con ROCm instalado
|
||||
|
||||
### Pendiente ❌
|
||||
- Análisis de audio
|
||||
- Análisis de color
|
||||
- Uso de GPU en procesamiento
|
||||
|
||||
---
|
||||
|
||||
## PRIORIDAD 1: Sistema 2 de 3
|
||||
|
||||
### [ ] Audio - Picos de Sonido
|
||||
Implementar detección de gritos/picos de volumen.
|
||||
|
||||
**Método actual (CPU):**
|
||||
- Extraer audio con ffmpeg
|
||||
- Usar librosa para RMS
|
||||
- Detectar picos con scipy
|
||||
|
||||
**Método GPU (a implementar):**
|
||||
```python
|
||||
import torch
|
||||
import torchaudio
|
||||
|
||||
# Usar GPU para análisis espectral
|
||||
waveform, sr = torchaudio.load(audio_file)
|
||||
spectrogram = torchaudio.transforms.Spectrogram()(waveform)
|
||||
```
|
||||
|
||||
**Tareas:**
|
||||
- [ ] Extraer audio del video con ffmpeg
|
||||
- [ ] Calcular RMS/energía por ventana
|
||||
- [ ] Detectar picos (threshold = media + 1.5*std)
|
||||
- [ ] Devolver timestamps de picos
|
||||
|
||||
### [ ] Color - Momentos Brillantes
|
||||
Detectar cambios de color/brillo en el video.
|
||||
|
||||
**Método GPU:**
|
||||
```python
|
||||
import cv2
|
||||
# OpenCV con OpenCL
|
||||
cv2.ocl::setUseOpenCL(True)
|
||||
```
|
||||
|
||||
**Tareas:**
|
||||
- [ ] Procesar frames con OpenCV GPU
|
||||
- [ ] Calcular saturación y brillo HSV
|
||||
- [ ] Detectar momentos con cambios significativos
|
||||
- [ ] Devolver timestamps
|
||||
|
||||
### [ ] Combinar 2 de 3
|
||||
Sistema de scoring:
|
||||
```
|
||||
highlight = (chat_score >= 2) + (audio_score >= 1.5) + (color_score >= 0.5)
|
||||
if highlight >= 2: es highlight
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PRIORIDAD 2: GPU - Optimizar para 6800XT
|
||||
|
||||
### [ ] PyTorch con ROCm
|
||||
✅ Ya instalado:
|
||||
```
|
||||
PyTorch: 2.10.0+rocm7.1
|
||||
ROCm available: True
|
||||
Device: AMD Radeon Graphics
|
||||
```
|
||||
|
||||
### [ ] OpenCV con OpenCL
|
||||
```bash
|
||||
# Verificar soporte OpenCL
|
||||
python -c "import cv2; print(cv2.ocl.haveOpenCL())"
|
||||
```
|
||||
|
||||
**Si no tiene OpenCL:**
|
||||
- [ ] Instalar opencv-python (no headless)
|
||||
- [ ] Instalar ocl-runtime para AMD
|
||||
|
||||
### [ ] Reemplazar librerías CPU por GPU
|
||||
|
||||
| Componente | CPU | GPU |
|
||||
|------------|-----|-----|
|
||||
| Audio | librosa | torchaudio (ROCm) |
|
||||
| Video frames | cv2 | cv2 + OpenCL |
|
||||
| Procesamiento | scipy | torch |
|
||||
| Concatenación | moviepy | torch + ffmpeg |
|
||||
|
||||
### [ ] MoviePy con GPU
|
||||
MoviePy actualmente usa CPU. Opciones:
|
||||
1. Usar ffmpeg directamente con flags GPU
|
||||
2. Crear pipeline propio con torch
|
||||
|
||||
```bash
|
||||
# ffmpeg con GPU
|
||||
ffmpeg -hwaccel auto -i input.mp4 -c:v h264_amf output.mp4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PRIORIDAD 3: Mejorar Detección
|
||||
|
||||
### [ ] Palabras Clave en Chat
|
||||
Detectar momentos con keywords como:
|
||||
- "LOL", "POG", "KEK", "RIP", "WTF"
|
||||
- Emotes populares
|
||||
- Mayúsculas (gritos en chat)
|
||||
|
||||
### [ ] Análisis de Sentimiento
|
||||
- [ ] Usar modelo de sentiment (torch)
|
||||
- [ ] Detectar momentos positivos/negativos intensos
|
||||
|
||||
### [ ] Ranking de Highlights
|
||||
- [ ] Ordenar por intensidad (combinación de scores)
|
||||
- [ ] Limitar a N mejores highlights
|
||||
- [ ] Duration-aware scoring
|
||||
|
||||
---
|
||||
|
||||
## PRIORIDAD 4: Kick
|
||||
|
||||
### [ ] Descarga de Video
|
||||
✅ Ya funciona con streamlink:
|
||||
```bash
|
||||
streamlink https://kick.com/streamer best -o video.mp4
|
||||
```
|
||||
|
||||
### [ ] Chat
|
||||
❌ Kick NO tiene API pública para chat.
|
||||
|
||||
**Opciones:**
|
||||
1. Web scraping del chat
|
||||
2. Usar herramientas de terceros
|
||||
3. Omitir chat y usar solo audio/color
|
||||
|
||||
---
|
||||
|
||||
## PRIORIDAD 5: Optimizaciones
|
||||
|
||||
### [ ] Paralelización
|
||||
- [ ] Procesar chunks del video en paralelo
|
||||
- [ ] ThreadPool para I/O
|
||||
|
||||
### [ ] Cache
|
||||
- [ ] Guardar resultados intermedios
|
||||
- [ ] Reutilizar análisis si existe chat.txt
|
||||
|
||||
### [ ] Chunking
|
||||
- [ ] Procesar video en segmentos
|
||||
- [ ] Evitar cargar todo en memoria
|
||||
|
||||
---
|
||||
|
||||
## PRIORIDAD 6: UX/UI
|
||||
|
||||
### [ ] CLI Mejorada
|
||||
```bash
|
||||
python main.py --video-id 2701190361 --platform twitch \
|
||||
--min-duration 10 --threshold 2.0 \
|
||||
--output highlights.mp4 \
|
||||
--use-gpu --gpu-device 0
|
||||
```
|
||||
|
||||
### [ ] Interfaz Web
|
||||
- [ ] Streamlit app
|
||||
- [ ] Subir video/chat
|
||||
- [ ] Ver timeline de highlights
|
||||
- [ ] Preview de clips
|
||||
|
||||
### [ ] Progress Bars
|
||||
- [ ] tqdm para descargas
|
||||
- [ ] Progress para procesamiento
|
||||
|
||||
---
|
||||
|
||||
## RECETAS DE INSTALACIÓN
|
||||
|
||||
### GPU ROCm
|
||||
```bash
|
||||
# PyTorch con ROCm
|
||||
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm7.1
|
||||
|
||||
# Verificar
|
||||
python -c "import torch; print(torch.cuda.is_available())"
|
||||
```
|
||||
|
||||
### NVIDIA CUDA (alternativa)
|
||||
```bash
|
||||
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
|
||||
```
|
||||
|
||||
### OpenCV con OpenCL
|
||||
```bash
|
||||
# Verificar
|
||||
python -c "import cv2; print(cv2.ocl.haveOpenCL())"
|
||||
|
||||
# Si False, instalar con GPU support
|
||||
pip uninstall opencv-python-headless
|
||||
pip install opencv-python
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## RENDIMIENTO ESPERADO
|
||||
|
||||
| Config | FPS Processing | Tiempo 5h Video |
|
||||
|--------|----------------|------------------|
|
||||
| CPU (12 cores) | ~5-10 FPS | ~1-2 horas |
|
||||
| GPU NVIDIA 3050 | ~30-50 FPS | ~10-20 min |
|
||||
| GPU AMD 6800XT | ~30-40 FPS | ~15-25 min |
|
||||
|
||||
---
|
||||
|
||||
## NOTAS
|
||||
|
||||
1. **ROCm 7.1** funcionando con PyTorch
|
||||
2. **6800XT** detectada como "AMD Radeon Graphics"
|
||||
3. **MoviePy** sigue usando CPU para renderizado
|
||||
4. Para mejor rendimiento, considerar renderizado con ffmpeg GPU directamente
|
||||
Reference in New Issue
Block a user