Un downloader moderno y eficiente para descargar videos y subtítulos desde el sitio visuales.ucv.cu. Construido con Python y UV, ofrece tanto interfaz de línea de comandos (CLI) como interfaz gráfica (GUI).
- 🎯 Descarga selectiva: Videos (.mp4), subtítulos (.srt), imágenes (.jpg) y archivos de información (.nfo)
- 🖥️ Doble interfaz: CLI interactivo y GUI con tkinter
- 📊 Progreso en tiempo real: Barras de progreso y estadísticas detalladas
- 🔄 Reintentos automáticos: Lógica de reintento para descargas fallidas
- 🎨 Interfaz moderna: GUI intuitiva con selección de tipos de archivo
- 📁 Organización inteligente: Estructura modular y mantenible
- ⚡ Descarga secuencial: Descarga archivo por archivo con control total
- Python 3.8+
- UV (Ultra-fast Python package installer)
- tkinter (para GUI en Linux:
sudo apt install python3-tk)
# En Linux/macOS
curl -LsSf https://astral.sh/uv/install.sh | sh
# En Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"# Clonar el repositorio
git clone <repository-url>
cd ucvl_dowloader
# Instalar dependencias
uv syncpython main.py
# o simplemente
python main.py --guipython main.py --clipython main.py --help # Mostrar ayuda
python main.py --version # Mostrar versiónucvl_dowloader/
├── core/
│ ├── __init__.py
│ ├── downloader.py # Lógica principal de descarga
│ └── utils.py # Utilidades para URLs y archivos
├── cli/
│ ├── __init__.py
│ └── interface.py # Interfaz de línea de comandos
├── gui/
│ ├── __init__.py
│ └── interface.py # Interfaz gráfica con tkinter
├── release/
│ ├── build.py # Script de compilación
│ ├── create_release.py # Creador de paquetes
│ ├── build_and_release.sh # Script automático
│ └── README.md # Documentación de herramientas
├── main.py # Launcher principal
├── pyproject.toml # Configuración UV y dependencias
├── CHANGELOG.md # Historial de versiones
├── .gitignore # Archivos ignorados por git
└── README.md # Este archivo
- Ingresa la URL: Pega la URL de la carpeta de visuales.ucv.cu
- Analizar: Haz clic en "Analizar URL" para obtener la lista de archivos
- Seleccionar tipos: Marca/desmarca los tipos de archivo a descargar:
- ☑️ Videos (.mp4)
- ☑️ Subtítulos (.srt)
- ☐ Imágenes (.jpg)
- ☐ Info (.nfo)
- Elegir carpeta: Selecciona dónde guardar los archivos
- Descargar: Haz clic en "Iniciar Descarga" y observa el progreso
- Ingresa la URL cuando se solicite
- Configura tipos de archivo a descargar
- Previsualiza archivos disponibles antes de descargar
- Confirma la descarga y observa el progreso
- UCLVDownloader: Clase principal con filtros configurables
- Reintentos: Lógica de reintento para descargas fallidas
- Callbacks: Sistema de callbacks para actualización de progreso
- Estadísticas: Tracking detallado de descargas y errores
- FileUtils: Detección de tipos de archivo y formateo de tamaños
- URLUtils: Manipulación y validación de URLs
- CLI: Interfaz interactiva con emojis y formato claro
- GUI: Interfaz completa con tkinter, threading para operaciones no bloqueantes
- requests: Para realizar peticiones HTTP
- beautifulsoup4: Para parsing de HTML
- tqdm: Para barras de progreso en CLI
- urllib3: Para manejo avanzado de URLs
- tkinter: Para la interfaz gráfica (incluido en Python estándar)
Para crear un ejecutable que funcione en distribuciones Debian/Ubuntu sin dependencias:
# Script automático que hace todo el proceso
./release/build_and_release.sh# 1. Instalar PyInstaller
uv add --dev pyinstaller
# 2. Compilar ejecutable
uv run python release/build.py
# 3. Crear paquetes de distribución
uv run python release/create_release.pydist/ucvl-downloader- Ejecutable standalone (14MB)ucvl-downloader-v1.0.0-linux-x64.tar.gz- Paquete comprimidoucvl-downloader-v1.0.0-linux-x64.zip- Paquete ZIP
Los usuarios finales solo necesitan:
- Descargar el archivo
.tar.gzo.zip - Descomprimir en cualquier carpeta
- Dar permisos:
chmod +x ucvl-downloader - Ejecutar:
./ucvl-downloader
El proyecto está diseñado con una arquitectura modular que facilita:
- ✅ Mantenimiento y testing
- ✅ Extensión con nuevas funcionalidades
- ✅ Reutilización de componentes
- ✅ Separación clara de responsabilidades
- 🔄 Descargas paralelas: Múltiples archivos simultáneos
- ⏸️ Resumir descargas: Continuar descargas interrumpidas
- 🎨 Temas: Modo oscuro/claro para la GUI
- 🔔 Notificaciones: Alertas de finalización
- 📋 Cola de descargas: Gestión de múltiples URLs
- 🗂️ Organización inteligente: Clasificación automática por serie/temporada
- 💾 Configuración persistente: Guardar preferencias del usuario
¡Las contribuciones son bienvenidas! Por favor:
- Fork el proyecto
- Crea una branch para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la branch (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Si encuentras algún bug, por favor abre un issue en el repositorio con:
- Descripción del problema
- Pasos para reproducir
- Sistema operativo y versión de Python
- Logs de error si están disponibles
- A la comunidad de Python por las excelentes librerías
- A los contribuidores que han ayudado a mejorar este proyecto