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:
221
contexto.md
Normal file
221
contexto.md
Normal file
@@ -0,0 +1,221 @@
|
||||
# Contexto del Proyecto
|
||||
|
||||
## Resumen Ejecutivo
|
||||
|
||||
Pipeline automatizado para detectar y generar highlights de streams de Twitch. El objetivo es:
|
||||
1. Descargar un VOD completo de Twitch (varias horas)
|
||||
2. Analizar el chat y el video para detectar momentos destacados
|
||||
3. Generar un video resumen con los mejores momentos
|
||||
|
||||
El sistema original planeaba usar 3 métricas para detectar highlights (2 de 3 deben cumplirse):
|
||||
- Chat saturado (muchos mensajes en poco tiempo)
|
||||
- Picos de audio (gritos del streamer)
|
||||
- Colores brillantes en pantalla (efectos visuales)
|
||||
|
||||
**Estado actual:** Solo chat implementado. Audio y color pendientes.
|
||||
|
||||
---
|
||||
|
||||
## Historia y Desarrollo
|
||||
|
||||
### Inicio
|
||||
El proyecto comenzó con la carpeta `clipper/` que contenía código antiguo para descargar streams de Twitch en vivo. El usuario quería actualizar el enfoque para procesar VODs completos (streams de varias horas) y detectar automáticamente los mejores momentos.
|
||||
|
||||
### Primera Iteración (Código Viejo)
|
||||
Existía código en `clipper/` y `analyser/` que:
|
||||
- Descargaba streams en vivo
|
||||
- Usaba `twitchAPI` para autenticación
|
||||
- Tenía issues con versiones de dependencias (Python 3.14 incompatibilidades)
|
||||
|
||||
### Limpieza y Nuevo Pipeline
|
||||
Se eliminó el código viejo y se creó una estructura nueva:
|
||||
```
|
||||
downloaders/ - Módulos para descargar video/chat
|
||||
detector/ - Lógica de detección de highlights
|
||||
generator/ - Creación del video resumen
|
||||
```
|
||||
|
||||
### Problemas Encontrados
|
||||
|
||||
#### 1. Chat Downloader - Múltiples Intentos
|
||||
Se probaron varios repositorios para descargar chat de VODs:
|
||||
|
||||
- **chat-downloader (xenova)**: No funcionó con VODs (KeyError 'data')
|
||||
- **tcd (PetterKraabol)**: Mismo problema, API de Twitch devuelve 404
|
||||
- **TwitchDownloader (lay295)**: Este sí funcionó. Es un proyecto C#/.NET con CLI.
|
||||
|
||||
**Solución:** Compilar TwitchDownloaderCLI desde código fuente usando .NET 10 SDK.
|
||||
|
||||
#### 2. Dependencias Python
|
||||
Problemas de versiones:
|
||||
- `requests` y `urllib3` entraron en conflicto al instalar `tcd`
|
||||
- Streamlink dejó de funcionar
|
||||
- **Solución:** Reinstalar versiones correctas de requests/urllib3
|
||||
|
||||
#### 3. Video de Prueba
|
||||
- VOD: `https://www.twitch.tv/videos/2701190361` (elxokas)
|
||||
- Duración: ~5.3 horas (19GB)
|
||||
- Chat: 12,942 mensajes
|
||||
- El chat estaba disponible (no había sido eliminado por Twitch)
|
||||
|
||||
#### 4. Detección de Highlights
|
||||
Problemas con el detector:
|
||||
- Formato de timestamp del chat no era reconocido
|
||||
- **Solución:** Usar `content_offset_seconds` del JSON directamente
|
||||
|
||||
El detector actual solo usa chat saturado. Encuentra ~139 picos pero la mayoría son de 1-2 segundos (no útiles). Con filtro de duración >5s quedan solo 4 highlights.
|
||||
|
||||
#### 5. Generación de Video
|
||||
- Usa moviepy
|
||||
- Funciona correctamente
|
||||
- Genera video de ~39MB (~1 minuto)
|
||||
|
||||
---
|
||||
|
||||
## Stack Tecnológico
|
||||
|
||||
### Herramientas de Descarga
|
||||
| Herramienta | Uso | Estado |
|
||||
|-------------|-----|--------|
|
||||
| streamlink | Video streaming | ✅ Funciona |
|
||||
| TwitchDownloaderCLI | Chat VODs | ✅ Compilado y funciona |
|
||||
|
||||
### Processing (Python)
|
||||
| Paquete | Uso | GPU Support |
|
||||
|---------|-----|-------------|
|
||||
| opencv-python-headless | Análisis de video/color | CPU (sin ROCm) |
|
||||
| librosa | Análisis de audio | CPU |
|
||||
| scipy/numpy | Procesamiento numérico | CPU |
|
||||
| moviepy | Generación de video | CPU |
|
||||
|
||||
### GPU
|
||||
- **ROCm 7.1** instalado y funcionando
|
||||
- **PyTorch 2.10.0** instalado con soporte ROCm
|
||||
- GPU detectada: AMD Radeon Graphics (6800XT)
|
||||
- **Pendiente:** hacer que OpenCV/librosa usen GPU
|
||||
|
||||
---
|
||||
|
||||
## Hardware
|
||||
|
||||
- **GPU Principal:** AMD Radeon 6800XT (16GB VRAM) con ROCm 7.1
|
||||
- **GPU Alternativa:** NVIDIA RTX 3050 (8GB VRAM) - no configurada
|
||||
- **CPU:** AMD Ryzen (12 cores)
|
||||
- **RAM:** 32GB
|
||||
- **Almacenamiento:** SSDNVMe
|
||||
|
||||
---
|
||||
|
||||
## Credenciales
|
||||
|
||||
- **Twitch Client ID:** `xk9gnw0wszfcwn3qq47a76wxvlz8oq`
|
||||
- **Twitch Client Secret:** `51v7mkkd86u9urwadue8410hheu754`
|
||||
|
||||
---
|
||||
|
||||
## Pipeline Actual (Manual)
|
||||
|
||||
```bash
|
||||
# 1. Descargar video
|
||||
bajar "https://www.twitch.tv/videos/2701190361"
|
||||
|
||||
# 2. Descargar chat (después de compilar TwitchDownloaderCLI)
|
||||
TwitchDownloaderCLI chatdownload --id 2701190361 -o chat.json
|
||||
|
||||
# 3. Convertir chat a texto
|
||||
python3 -c "
|
||||
import json
|
||||
with open('chat.json') as f:
|
||||
data = json.load(f)
|
||||
with open('chat.txt', 'w') as f:
|
||||
for c in data['comments']:
|
||||
f.write(f\"[{c['created_at']}] {c['commenter']['name']}: {c['message']['body']}\n\")
|
||||
"
|
||||
|
||||
# 4. Detectar highlights
|
||||
python3 detector.py
|
||||
|
||||
# 5. Generar video
|
||||
python3 generate_video.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Resultados Obtenidos
|
||||
|
||||
| Métrica | Valor |
|
||||
|---------|-------|
|
||||
| Video original | 19GB (5.3 horas) |
|
||||
| Mensajes de chat | 12,942 |
|
||||
| Picos detectados | 139 |
|
||||
| Highlights útiles (>5s) | 4 |
|
||||
| Video final | 39MB (~1 minuto) |
|
||||
|
||||
### Highlights Encontrados
|
||||
1. ~4666s - ~4682s (16s)
|
||||
2. ~4800s - ~4813s (13s)
|
||||
3. ~8862s - ~8867s (5s)
|
||||
4. ~11846s - ~11856s (10s)
|
||||
|
||||
---
|
||||
|
||||
## Pendientes (TODO)
|
||||
|
||||
### Alta Prioridad
|
||||
1. **Sistema 2 de 3**: Implementar análisis de audio y color
|
||||
2. **GPU**: Hacer que OpenCV/librosa usen la 6800XT
|
||||
3. **Mejor detección**: Keywords, sentimiento, ranking
|
||||
4. **Kick**: Soporte para chat (sin API pública)
|
||||
|
||||
### Media Prioridad
|
||||
5. Paralelización
|
||||
6. Interfaz web (Streamlit)
|
||||
7. CLI mejorada
|
||||
|
||||
### Baja Prioridad
|
||||
8. STT (reconocimiento de voz)
|
||||
9. Detectar cuando streamer muestra algo en pantalla
|
||||
10. Múltiples streamers
|
||||
|
||||
---
|
||||
|
||||
## Archivos del Proyecto
|
||||
|
||||
```
|
||||
Twitch-Highlight-Detector/
|
||||
├── .env # Credenciales Twitch
|
||||
├── .git/ # Git repo
|
||||
├── .gitignore
|
||||
├── requirements.txt # Dependencias Python
|
||||
├── lower # Script: descargar streams
|
||||
├── pipeline.sh # Pipeline automatizado
|
||||
├── detector.py # Detección de highlights (chat)
|
||||
├── generate_video.py # Generación de video resumen
|
||||
├── highlight.md # Docs: uso del pipeline
|
||||
├── contexto.md # Este archivo
|
||||
├── todo.md # Lista de tareas pendientes
|
||||
│
|
||||
├── chat.json # Chat descargado (TwitchDownloader)
|
||||
├── chat.txt # Chat en formato texto
|
||||
├── highlights.json # Timestamps de highlights
|
||||
├── highlights.mp4 # Video final
|
||||
└── 20260218_193846_twitch.mp4 # Video original de prueba
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
1. **Twitch elimina el chat** de VODs después de un tiempo (no hay tiempo exacto definido)
|
||||
2. **El threshold actual** es muy sensible - detecta muchos falsos positivos de 1-2 segundos
|
||||
3. **El video de prueba** es de elxokas, un streamer español de League of Legends
|
||||
4. **PyTorch con ROCm** está instalado pero no se está usando todavía en el código
|
||||
|
||||
---
|
||||
|
||||
## Links Relevantes
|
||||
|
||||
- TwitchDownloader: https://github.com/lay295/TwitchDownloader
|
||||
- streamlink: https://streamlink.github.io/
|
||||
- PyTorch ROCm: https://pytorch.org/
|
||||
- ROCm: https://rocm.docs.amd.com/
|
||||
Reference in New Issue
Block a user