- 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
6.7 KiB
Contexto del Proyecto
Resumen Ejecutivo
Pipeline automatizado para detectar y generar highlights de streams de Twitch. El objetivo es:
- Descargar un VOD completo de Twitch (varias horas)
- Analizar el chat y el video para detectar momentos destacados
- 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
twitchAPIpara 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:
requestsyurllib3entraron en conflicto al instalartcd- 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_secondsdel 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)
# 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
- ~4666s - ~4682s (16s)
- ~4800s - ~4813s (13s)
- ~8862s - ~8867s (5s)
- ~11846s - ~11856s (10s)
Pendientes (TODO)
Alta Prioridad
- Sistema 2 de 3: Implementar análisis de audio y color
- GPU: Hacer que OpenCV/librosa usen la 6800XT
- Mejor detección: Keywords, sentimiento, ranking
- Kick: Soporte para chat (sin API pública)
Media Prioridad
- Paralelización
- Interfaz web (Streamlit)
- CLI mejorada
Baja Prioridad
- STT (reconocimiento de voz)
- Detectar cuando streamer muestra algo en pantalla
- 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
- Twitch elimina el chat de VODs después de un tiempo (no hay tiempo exacto definido)
- El threshold actual es muy sensible - detecta muchos falsos positivos de 1-2 segundos
- El video de prueba es de elxokas, un streamer español de League of Legends
- 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/