- ✅ Dashboard web moderno con Flask y Bootstrap 5 - ✅ Descarga de videos en formato MP3 y MP4 - ✅ Configuración optimizada de yt-dlp para evitar errores 403 - ✅ Progreso en tiempo real con velocidad y ETA - ✅ Soporte Docker con docker-compose - ✅ Script de despliegue automático - ✅ API REST para integraciones - ✅ Manejo robusto de errores con reintentos - ✅ Limpieza automática de archivos temporales - ✅ README detallado con instrucciones de uso 🚀 Funciona con YouTube y está listo para producción 24/7 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
356 lines
10 KiB
Markdown
356 lines
10 KiB
Markdown
# YouTube Downloader Dashboard 🎵
|
|
|
|
Una aplicación web moderna para descargar videos de YouTube en formato MP3 y MP4 con una interfaz amigable y soporte para Docker. Basada en yt-dlp con configuración optimizada para evitar restricciones de YouTube.
|
|
|
|
## ✨ Características
|
|
|
|
- 🌐 **Interfaz Web Moderna**: Dashboard responsive con Bootstrap 5
|
|
- 🎧 **Descarga MP3**: Extrae audio de alta calidad (192 kbps)
|
|
- 🎬 **Descarga MP4**: Descarga videos en alta calidad
|
|
- 📊 **Progreso en Tiempo Real**: Barra de progreso con velocidad y tiempo estimado
|
|
- 🔄 **Reintentos Automáticos**: Configuración robusta con 10 reintentos
|
|
- 🧹 **Limpieza Automática**: Elimina archivos temporales y descargas antiguas
|
|
- 🐳 **Soporte Docker**: Listo para producción 24/7
|
|
- 📱 **Responsive**: Funciona perfectamente en móviles y desktop
|
|
|
|
## 🚀 Capturas de Pantalla
|
|
|
|
### Interfaz Principal
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ 🎵 YouTube Downloader Dashboard │
|
|
│ Descarga videos de YouTube en formato MP3 o MP4 │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ URL del Video de YouTube │
|
|
│ [🔗] [https://www.youtube.com/watch?v=...] │
|
|
│ │
|
|
│ Formato de Descarga │
|
|
│ ○ MP3 (Audio) ○ MP4 (Video) │
|
|
│ │
|
|
│ [📥 Descargar] │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Progreso de Descarga
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ 📥 Descargando... │
|
|
│ [████████████████████████████████████] 75% │
|
|
│ Velocidad: 2.5 MB/s | Tiempo: 00:45 │
|
|
│ Archivo: el_principe_nicolas_maquiavelo.mp3 │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## 📋 Requisitos
|
|
|
|
### Opción 1: Sin Docker (Desarrollo)
|
|
- Python 3.8+
|
|
- FFmpeg (requerido para conversión de audio/video)
|
|
- pip
|
|
|
|
### Opción 2: Con Docker (Producción)
|
|
- Docker
|
|
- Docker Compose
|
|
|
|
## ⚙️ Instalación y Uso
|
|
|
|
### Opción 1: Docker (Recomendado para Producción)
|
|
|
|
1. **Clona el repositorio:**
|
|
```bash
|
|
git clone https://gitea.cbcren.online/renato97/youtube-downloader.git
|
|
cd youtube-downloader
|
|
```
|
|
|
|
2. **Ejecuta el script de despliegue:**
|
|
```bash
|
|
chmod +x deploy.sh
|
|
./deploy.sh
|
|
```
|
|
|
|
3. **Accede a la aplicación:**
|
|
```
|
|
http://localhost:5000
|
|
```
|
|
|
|
### Opción 2: Sin Docker (Para Desarrollo)
|
|
|
|
1. **Clona el repositorio:**
|
|
```bash
|
|
git clone https://gitea.cbcren.online/renato97/youtube-downloader.git
|
|
cd youtube-downloader
|
|
```
|
|
|
|
2. **Crea un entorno virtual:**
|
|
```bash
|
|
python3 -m venv venv
|
|
source venv/bin/activate # En Windows: venv\Scripts\activate
|
|
```
|
|
|
|
3. **Instala las dependencias:**
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
4. **Instala FFmpeg (requerido):**
|
|
|
|
**Ubuntu/Debian:**
|
|
```bash
|
|
sudo apt update
|
|
sudo apt install ffmpeg
|
|
```
|
|
|
|
**CentOS/RHEL:**
|
|
```bash
|
|
sudo yum install epel-release
|
|
sudo yum install ffmpeg
|
|
```
|
|
|
|
**macOS:**
|
|
```bash
|
|
brew install ffmpeg
|
|
```
|
|
|
|
5. **Ejecuta la aplicación:**
|
|
```bash
|
|
python app.py
|
|
```
|
|
|
|
6. **Abre tu navegador en:**
|
|
```
|
|
http://localhost:5000
|
|
```
|
|
|
|
## 🎯 Cómo Usar la Aplicación
|
|
|
|
1. **Abre la aplicación** en tu navegador
|
|
2. **Pega la URL** del video de YouTube que quieres descargar
|
|
3. **Selecciona el formato:**
|
|
- **MP3**: Para extraer solo el audio (ideal para música, podcasts)
|
|
- **MP4**: Para descargar el video completo
|
|
4. **Haz clic en "Descargar"**
|
|
5. **Monitorea el progreso** en tiempo real
|
|
6. **Descarga el archivo** cuando esté completo
|
|
|
|
## 📂 Estructura del Proyecto
|
|
|
|
```
|
|
youtube-downloader/
|
|
├── app.py # Aplicación Flask principal
|
|
├── requirements.txt # Dependencias Python
|
|
├── Dockerfile # Configuración Docker
|
|
├── docker-compose.yml # Orquestación Docker
|
|
├── deploy.sh # Script de despliegue fácil
|
|
├── .dockerignore # Archivos ignorados por Docker
|
|
├── README.md # Esta documentación
|
|
├── templates/
|
|
│ └── index.html # Interfaz web principal
|
|
├── static/
|
|
│ ├── css/
|
|
│ │ └── style.css # Estilos personalizados
|
|
│ ├── js/
|
|
│ │ └── app.js # Lógica del frontend
|
|
│ └── downloads/ # Archivos descargados
|
|
│ └── *.mp3, *.mp4 # Archivos de usuario
|
|
└── venv/ # Entorno virtual (gitignore)
|
|
```
|
|
|
|
## 🔧 Configuración Avanzada
|
|
|
|
### Variables de Entorno
|
|
|
|
Puedes configurar las siguientes variables de entorno:
|
|
|
|
```bash
|
|
export FLASK_ENV=production # Modo producción
|
|
export DOWNLOAD_FOLDER=/path/to/downloads # Carpeta personalizada
|
|
export PORT=5000 # Puerto personalizado
|
|
```
|
|
|
|
### Personalización de Calidad
|
|
|
|
Edita `app.py` para ajustar la calidad de descarga:
|
|
|
|
```python
|
|
# Para MP3 (calidad de audio)
|
|
'preferredquality': '192' # 128, 192, 256, 320 kbps
|
|
|
|
# Para MP4 (calidad de video)
|
|
'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
|
|
```
|
|
|
|
## 🐳 Docker Detalles
|
|
|
|
### Dockerfile
|
|
```dockerfile
|
|
FROM python:3.11-slim
|
|
# Instala FFmpeg y dependencias
|
|
# Configura la aplicación
|
|
# Expone puerto 5000
|
|
```
|
|
|
|
### Docker Compose
|
|
```yaml
|
|
version: '3.8'
|
|
services:
|
|
youtube-downloader:
|
|
build: .
|
|
ports:
|
|
- "5000:5000"
|
|
volumes:
|
|
- ./static/downloads:/app/static/downloads
|
|
restart: unless-stopped
|
|
```
|
|
|
|
## 📊 API Endpoints
|
|
|
|
La aplicación incluye una API REST:
|
|
|
|
- `POST /api/downloads` - Iniciar nueva descarga
|
|
- `GET /api/status/<download_id>` - Verificar estado
|
|
- `GET /api/downloads` - Listar todas las descargas
|
|
- `POST /api/cleanup` - Limpiar archivos temporales
|
|
- `GET /download/<filename>` - Descargar archivo específico
|
|
|
|
### Ejemplo de uso con curl:
|
|
|
|
```bash
|
|
# Iniciar descarga
|
|
curl -X POST http://localhost:5000/api/downloads \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"url": "https://www.youtube.com/watch?v=VIDEO_ID", "format": "mp3"}'
|
|
|
|
# Verificar estado
|
|
curl http://localhost:5000/api/status/<download_id>
|
|
|
|
# Listar descargas
|
|
curl http://localhost:5000/api/downloads
|
|
```
|
|
|
|
## 🔒 Solución de Problemas
|
|
|
|
### Error 403 de YouTube
|
|
La aplicación incluye configuración optimizada para evitar errores 403:
|
|
|
|
- User-Agent actualizado de Chrome 130
|
|
- Headers HTTP completos
|
|
- Múltiples reintentos (10)
|
|
- Timeout extendido (60s)
|
|
|
|
### Videos No Disponibles
|
|
Si un video no se puede descargar:
|
|
|
|
1. **Verifica que el video sea público**
|
|
2. **Intenta con otro video para descartar problemas de conexión**
|
|
3. **Revisa la consola del navegador para errores**
|
|
4. **Prueba la descarga directa con yt-dlp**
|
|
|
|
### Problemas con FFmpeg
|
|
|
|
**Error: `FFmpeg not found`**
|
|
```bash
|
|
# Verifica instalación
|
|
ffmpeg -version
|
|
|
|
# Instala si es necesario
|
|
sudo apt install ffmpeg # Ubuntu/Debian
|
|
brew install ffmpeg # macOS
|
|
```
|
|
|
|
### Problemas de Puerto
|
|
|
|
**Error: `Port 5000 is in use`**
|
|
```bash
|
|
# Cambia el puerto en app.py
|
|
app.run(host='0.0.0.0', port=5001, debug=True)
|
|
```
|
|
|
|
## 🔄 Actualización
|
|
|
|
### Actualizar la aplicación
|
|
|
|
1. **Detén la aplicación:**
|
|
```bash
|
|
docker compose down # Si usas Docker
|
|
# o Ctrl+C si corres localmente
|
|
```
|
|
|
|
2. **Actualiza el código:**
|
|
```bash
|
|
git pull origin main
|
|
```
|
|
|
|
3. **Reconstruye y reinicia:**
|
|
```bash
|
|
docker compose build
|
|
docker compose up -d
|
|
```
|
|
|
|
### Actualizar yt-dlp
|
|
|
|
```bash
|
|
# Con Docker (reconstruye la imagen)
|
|
docker compose build --no-cache
|
|
|
|
# Sin Docker
|
|
pip install --upgrade yt-dlp
|
|
```
|
|
|
|
## 🤝 Contribuir
|
|
|
|
¡Las contribuciones son bienvenidas!
|
|
|
|
1. **Fork** el repositorio
|
|
2. **Crea una rama** para tu feature (`git checkout -b feature/AmazingFeature`)
|
|
3. **Commit** tus cambios (`git commit -m 'Add some AmazingFeature'`)
|
|
4. **Push** a la rama (`git push origin feature/AmazingFeature`)
|
|
5. **Abre un Pull Request**
|
|
|
|
## 📝 Licencia
|
|
|
|
Este proyecto está bajo la Licencia MIT. Consulta el archivo `LICENSE` para más detalles.
|
|
|
|
## ⚠️ Advertencia Legal
|
|
|
|
Esta herramienta está diseñada para uso personal y educativo. Por favor:
|
|
|
|
- ✅ Descarga solo contenido que tengas derecho a descargar
|
|
- ✅ Respeta los términos de servicio de YouTube
|
|
- ✅ Usa esta herramienta de manera responsable
|
|
- ❌ No uses para contenido protegido por derechos de autor
|
|
- ❌ No redistribuyas contenido descargado
|
|
|
|
## 🆘 Soporte
|
|
|
|
Si encuentras algún problema:
|
|
|
|
1. **Revisa la sección de solución de problemas**
|
|
2. **Busca issues existentes** en el repositorio
|
|
3. **Crea un nuevo issue** con detalles del problema
|
|
4. **Incluye logs y capturas de pantalla** si es posible
|
|
|
|
## 📈 Métricas y Monitoreo
|
|
|
|
La aplicación incluye métricas básicas:
|
|
|
|
- **Cantidad de descargas** completadas
|
|
- **Tamaño total** de archivos descargados
|
|
- **Tiempo promedio** de descarga
|
|
- **Errores** y reintentos
|
|
|
|
### Ver logs en tiempo real:
|
|
|
|
```bash
|
|
# Docker
|
|
docker compose logs -f
|
|
|
|
# Local (la aplicación muestra logs en consola)
|
|
python app.py
|
|
```
|
|
|
|
---
|
|
|
|
**🎉 ¡Disfruta descargando tus videos favoritos de YouTube!**
|
|
|
|
Hecho con ❤️ usando Flask, yt-dlp y Bootstrap 5 |