Descarga automatizada de los cursos de Codigo Facilito
con un script creado con Python, Playwright y FFmpeg.
codi-vault te permite descargar todos los videos de un curso, bootcamp o video individual de Código Facilito para verlos sin conexión a internet.
El flujo es simple:
- Iniciás sesión una sola vez con
facilito login(se abre un navegador real) - La sesión se guarda localmente de forma automática
- Pasás la URL del curso y el script descarga todos los videos automáticamente
| Herramienta | Versión mínima | Cómo instalar |
|---|---|---|
| Python | 3.10+ (recomendado 3.12) | python.org o brew install python@3.12 |
| FFmpeg | cualquiera | brew install ffmpeg (macOS) / sudo apt install ffmpeg (Linux) |
Important
FFmpeg es requerido para procesar y guardar los videos HLS. Es la herramienta que hace el trabajo pesado de descarga.
Este es el método más simple. No requiere Poetry.
# 1. Clonar el repositorio
git clone https://github.com/jdfesa/codi-vault.git
cd codi-vault
# 2. Crear y activar el entorno virtual
python3 -m venv venv
source venv/bin/activate # macOS / Linux
# venv\Scripts\activate # Windows
# 3. Instalar dependencias
pip install -r requirements.txt
# 4. Instalar el paquete en modo editable (para el comando `facilito`)
pip install -e .
# 5. Instalar el navegador Chromium
playwright install chromium
# 6. Instalar FFmpeg (si no lo tenés)
brew install ffmpeg # macOS
# sudo apt install ffmpeg -y # Ubuntu/DebianCon el venv activo, el comando disponible es directamente:
facilito --helpTip
Cada vez que abras una nueva terminal, recordá activar el entorno con source venv/bin/activate antes de usar el script.
# Instalar pipx (gestor de herramientas Python aisladas)
brew install pipx
# Instalar Poetry via pipx
pipx install poetrybrew install ffmpeggit clone https://github.com/jdfesa/codi-vault.git
cd codi-vaultImportant
Es fundamental indicarle a Poetry que use Python 3.12 (o 3.10/3.11). La versión 3.14 no es compatible con algunas dependencias.
# Apuntar Poetry a Python 3.12 del sistema
poetry env use /usr/local/bin/python3.12
# Instalar todas las dependencias del proyecto
poetry installpoetry run playwright install chromium# Instalar FFmpeg
sudo apt install ffmpeg -y # Ubuntu/Debian
sudo pacman -S ffmpeg # Arch Linux
# Clonar e instalar
git clone https://github.com/jdfesa/codi-vault.git
cd codi-vault
pip install poetry
poetry install
poetry run playwright install chromium# Dentro del directorio del proyecto
git reset --hard HEAD
git pull
poetry install
poetry run playwright install chromiumCreá un archivo .env en la raíz del proyecto con tus credenciales de Código Facilito:
FACILITO_EMAIL=tu_correo@ejemplo.com
FACILITO_PASSWORD=tu_contraseñaLuego ejecutá el login normalmente:
poetry run facilito loginEl script detectará las credenciales, abrirá el navegador, las completará automáticamente y guardará la sesión sin intervención manual.
Important
El archivo .env ya está excluido en .gitignore. Tus credenciales nunca se subirán al repositorio. Usá el archivo .env.example como referencia.
Si preferís no guardar credenciales, podés iniciar sesión manualmente. El mismo comando facilito login abre un navegador real donde podés escribir tu Email, o usar Google/Facebook:
poetry run facilito loginTenés 3 minutos para completar el login. La sesión se guarda automáticamente en tu sistema y se reutiliza en descargas futuras.
Tip
El login sólo hay que hacerlo una vez. La sesión persiste entre ejecuciones hasta que expire o hagas logout.
Si ambos métodos fallan (ej: captcha persistente), podés exportar tus cookies desde el navegador:
- Instalá la extensión GetCookies en Chrome
- Iniciá sesión en Código Facilito desde Chrome
- Exportá las cookies en formato JSON
- Usá el siguiente comando:
poetry run facilito set-cookies path/to/cookies.jsonpoetry run facilito logoutSi prefieres no usar el comando manual ni aprender parámetros, el proyecto incluye un asistente completamente guiado en terminal:
poetry run facilito interactiveEl script te guiará de la mano para establecer:
- La URL del recurso.
- La calidad de descarga.
- Opcionalmente configurar ocultar el navegador (
headless). Nota: Si la consola arroja un error al obtener la información de un bootcamp (debido a las protecciones anti-bot automáticas del sitio), contesta 'n' a la ejecución de modo oculto para saltarte esa capa de seguridad exitosamente.
Tip
🚀 Auto-descarga Inteligente: Si ingresas la URL de un video individual (terminada en /videos/...), el script detectará automáticamente si ese video pertenece a un curso más grande. Si es así, codi-vault redirigirá la orden y comenzará a descargar el curso completo para que no tengas que ir copiando enlaces uno por uno. Solo los videos legítimamente "sueltos" (como talleres o introducciones independientes) se descargarán como archivos individuales.
poetry run facilito download <url> [OPCIONES]Opciones:
--quality,-q: calidad del video (max|1080p|720p|480p|360p|min). Por defecto:max--override,-w: sobreescribir archivos existentes. Por defecto:False--threads,-t: hilos paralelos de descarga (1–16). Por defecto:10
Ejemplos:
# Descargar un curso completo
poetry run facilito download https://codigofacilito.com/cursos/docker
# Descargar un bootcamp completo
poetry run facilito download https://codigofacilito.com/programas/ingles-conversacional
# Descargar con calidad específica y menos hilos
poetry run facilito download https://codigofacilito.com/cursos/docker -q 720p -t 5
# Descargar un video individual
# (Nota: ¡Si el video pertenece a un curso completo, codi-vault bajará el curso entero por ti!)
poetry run facilito download https://codigofacilito.com/videos/...Tip
Si una descarga se interrumpe, volvé a ejecutar el mismo comando: los videos ya descargados se saltean automáticamente.
Los videos de cursos y programas se enlazan de forma deductiva y se organizan automáticamente en subcarpetas estructuradas. Únicamente los videos de índole verdaderamente solitaria (que fallan en encontrar un "curso madre") se guardan aislados en la carpeta Facilito/Videos Sueltos/.
facilito download <url>
│
├── Playwright abre un navegador con las cookies de sesión guardadas
├── Navega al curso/bootcamp y extrae la estructura (secciones + unidades)
├── Para cada video: extrae la URL del stream HLS (.m3u8)
└── FFmpeg descarga el stream HLS pasando las cookies de autenticación
como headers HTTP → guarda como .mp4
Tecnologías clave:
- Playwright + playwright-stealth: automatización de navegador con anti-bot
- FFmpeg: descarga y conversión de streams HLS autenticados
- Typer: interfaz de línea de comandos
- aiohttp + aiofiles: descargas asíncronas
| Cambio | Descripción |
|---|---|
| 🔄 Descarga con FFmpeg | Se reemplazó vsd (que fallaba en macOS) por ffmpeg con soporte de cookies HTTP |
| 🔐 Detección de sesión | Ya no depende de un selector CSS frágil; ahora verifica las cookies de sesión directamente |
| ⏱️ Tiempo de login | De 2 a 3 minutos para completar el login |
| 🐍 Compatibilidad Python | Probado y funcional con Python 3.12 en macOS |
| 📊 Barra de progreso | Implementación visual interactiva con rich detallando tamaño, velocidad y tiempos |
| 🤖 Asistente interactivo | Nuevo comando interactive para configurar todas las descargas guiadas paso a paso |
| 🛡️ Extracción de Tokens | Bypass dinámico para enlaces premium protegidos (Asesorías/Bootcamps) que rebotaban en 403 |
| 🚀 Auto-descarga de Rutas | Al pasar un .com/videos/... particular, el script ubicará mágicamente el Curso padre y lo bajará entero sin intervención |
| 📂 Organización limpia | Organización estricta de videos individuales en su propio subdirectorio especializado |
🔑 Login automático .env |
Soporte para credenciales en archivo .env local — el script las detecta y completa el formulario automáticamente |
Si encuentras fallas repentinas, bloqueos por Cloudflare (pantallas de "Just a moment...") o errores esporádicos al intentar decodificar los cursos:
👉 Consulta la Guía de Solución de Problemas para encontrar explicaciones y el marco general de las soluciones documentadas que hemos implementado a causas comunes.
¡Contribuciones son bienvenidas!
- Manejo de reintentos automáticos de conexión
- Incorporación de tests automatizados
Este proyecto se realiza con fines exclusivamente educativos y de aprendizaje. El código se ofrece "tal cual" sin ninguna garantía.
No me hago responsable por cualquier mal uso. Es responsabilidad del usuario utilizarlo dentro de los límites legales y éticos.

