# ✅ SOLUCIÓN FINAL SIMPLIFICADA - Error de Formato de Subtítulos ## 📝 Resumen del Problema ``` ERROR: [youtube] 6hini9Xz_fc: Requested format is not available ``` Este error ocurre porque yt-dlp no puede obtener los subtítulos en el formato solicitado. --- ## ✅ Cambios Implementados en main.py ### 1. Comando Simplificado (Sin Restricciones de Formato) **ANTES:** ```python command = [ "yt-dlp", "--skip-download", "--write-auto-subs", "--sub-format", "json3", # ❌ Esto causaba el error "--sub-langs", f"{lang}.*", ... ] ``` **DESPUÉS:** ```python command = [ "yt-dlp", "--skip-download", "--dump-json", # ✅ Solo obtener metadatos "--no-warnings", "--extractor-args", "youtube:player_client=android", url ] ``` ### 2. Búsqueda Flexible de Subtítulos El código ahora: 1. Obtiene SOLO los metadatos del video 2. Busca subtítulos en el JSON de metadatos 3. Acepta CUALQUIER formato disponible 4. Descarga directamente desde la URL encontrada ```python # Buscar en automatic_captions for lang_key in automatic_captions.keys(): if lang in lang_key or lang_key.startswith(lang): # Tomar el PRIMER formato disponible (sin filtrar) if automatic_captions[lang_key]: requested_subs = {lang_key: automatic_captions[lang_key][0]} break ``` --- ## 🚀 CÓMO APLICAR LA SOLUCIÓN ### Método 1: Reconstruir Docker (Recomendado) ```bash # Limpiar todo docker stop $(docker ps -aq) 2>/dev/null docker rm $(docker ps -aq) 2>/dev/null # Reconstruir desde cero cd /Users/cesarmendivil/Documents/Nextream/TubeScript-API docker-compose build --no-cache # Iniciar docker-compose up -d # Ver logs docker-compose logs -f tubescript-api ``` ### Método 2: Si Docker da problemas ```bash # Reiniciar Docker Desktop # 1. Cierra Docker Desktop completamente # 2. Ábrelo nuevamente # 3. Espera que inicie completamente # 4. Ejecuta: docker-compose down docker-compose build --no-cache docker-compose up -d ``` ### Método 3: Build Manual ```bash # Build solo del API docker build -t tubescript-api -f Dockerfile . # Ejecutar manualmente docker run -d \ --name tubescript_api \ -p 8080:8000 \ -v "$(pwd)/cookies.txt:/app/cookies.txt:ro" \ -v "$(pwd):/app" \ tubescript-api \ uvicorn main:app --host 0.0.0.0 --port 8000 --reload # Ver logs docker logs -f tubescript_api ``` --- ## 🧪 PROBAR LA SOLUCIÓN ### Test 1: Verificar que Docker está corriendo ```bash docker ps ``` Debería mostrar al menos `tubescript_api` corriendo. ### Test 2: Probar el endpoint problemático ```bash # Esperar 10 segundos después de iniciar sleep 10 # Probar curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es" ``` ### Test 3: Ver logs en tiempo real ```bash # Terminal 1: Ver logs docker logs -f tubescript_api # Terminal 2: Hacer petición curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es" ``` --- ## 🔍 DIAGNÓSTICO DE PROBLEMAS ### Problema: Docker no responde ```bash # Reiniciar Docker killall Docker open -a Docker # Esperar 30 segundos sleep 30 # Verificar docker ps ``` ### Problema: Puerto 8080 ocupado ```bash # Ver qué usa el puerto lsof -i :8080 # Matar proceso kill -9 $(lsof -ti:8080) # Cambiar puerto en docker-compose.yml # ports: # - "8081:8000" # Usar 8081 en lugar de 8080 ``` ### Problema: Contenedor se detiene inmediatamente ```bash # Ver logs completos docker logs tubescript_api # Ejecutar en modo interactivo docker run -it --rm \ -p 8080:8000 \ -v "$(pwd):/app" \ tubescript-api \ bash # Dentro del contenedor: python3 main.py ``` --- ## 📊 QUÉ HACE EL CÓDIGO AHORA ### Flujo Simplificado: ``` 1. Usuario pide transcripción de video ↓ 2. yt-dlp obtiene SOLO metadatos (sin bajar subtítulos) ↓ 3. Parseamos el JSON de metadatos ↓ 4. Buscamos en: - automatic_captions - subtitles ↓ 5. Tomamos el PRIMER formato disponible (json3, srv3, vtt, o lo que haya) ↓ 6. Descargamos desde la URL encontrada ↓ 7. Parseamos según el formato ↓ 8. ✅ Retornamos formato estándar ``` ### Ventajas: ✅ **Más rápido** - Solo obtiene metadatos una vez ✅ **Más flexible** - Acepta cualquier formato ✅ **Menos errores** - No forzamos formatos específicos ✅ **Mejor compatibilidad** - Funciona con más videos --- ## 💡 ALTERNATIVA: Probar Localmente Sin Docker Si Docker sigue dando problemas, puedes probar localmente: ```bash # 1. Instalar dependencias pip install fastapi uvicorn requests yt-dlp # 2. Ejecutar el API directamente cd /Users/cesarmendivil/Documents/Nextream/TubeScript-API uvicorn main:app --reload --port 8080 # 3. En otra terminal, probar: curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es" ``` --- ## 🎯 VERIFICACIÓN FINAL Una vez que hayas reconstruido, verifica: ```bash # 1. Contenedor corriendo docker ps | grep tubescript_api # 2. API respondiendo curl http://localhost:8080/docs # 3. Endpoint de transcripción curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es" | jq # 4. Logs sin errores docker logs tubescript_api 2>&1 | tail -20 ``` --- ## ✅ CHECKLIST - [ ] Detener servicios Docker actuales - [ ] Verificar que Docker Desktop esté corriendo - [ ] Reconstruir imagen: `docker-compose build --no-cache` - [ ] Iniciar servicios: `docker-compose up -d` - [ ] Esperar 10 segundos para que inicie - [ ] Verificar contenedor: `docker ps` - [ ] Probar endpoint: `curl http://localhost:8080/transcript/6hini9Xz_fc?lang=es` - [ ] Ver logs: `docker logs tubescript_api` - [ ] Si funciona: ✅ ¡Listo! - [ ] Si falla: Ver logs y diagnosticar --- ## 🆘 SI TODO FALLA ### Opción 1: Reinstalar Docker 1. Desinstala Docker Desktop 2. Descarga la última versión 3. Instala 4. Reinicia la Mac 5. Abre Docker Desktop 6. Prueba de nuevo ### Opción 2: Usar Python Local ```bash # Instalar en entorno virtual python3 -m venv venv source venv/bin/activate pip install -r requirements.txt # Ejecutar uvicorn main:app --reload --port 8080 ``` ### Opción 3: Contactar Soporte Si nada funciona, proporciona: - Logs completos: `docker logs tubescript_api` - Versión de Docker: `docker --version` - Sistema: `uname -a` - Error exacto que ves --- ## 📝 RESUMEN DE CAMBIOS EN EL CÓDIGO | Archivo | Cambio | Línea Aprox. | |---------|--------|--------------| | main.py | Comando yt-dlp simplificado | ~98-108 | | main.py | Búsqueda flexible de subtítulos | ~125-145 | | main.py | Acepta cualquier formato | ~125-145 | | main.py | Parser multi-formato | ~30-80 | --- ## 🎉 RESULTADO ESPERADO Después de aplicar los cambios: ```bash curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es" ``` **Debería retornar:** ```json { "video_id": "6hini9Xz_fc", "count": 150, "segments": [ { "start": 0.0, "duration": 2.5, "text": "Texto del subtítulo..." }, ... ] } ``` --- **TubeScript API Pro © 2026** ¡Reconstruye Docker y prueba!