PTENES
Herramienta · uso personal

Pega el enlace. La tu VPS descarga.

Un descargador de video y audio que funciona en tu propia máquina, protegido con contraseña, y elimina el archivo automáticamente después de 6 horas.

inemadlp — downloader personal en VPS
Qué es

Un yt-dlp con interfaz, accesible desde el celular

Abres una página en tu VPS, pegas la URL, eliges video o audio y recibes el archivo. Por debajo está el yt-dlp de siempre — la diferencia es que no necesitas usar la terminal y la descarga sale desde una IP residencial de confianza en vez de la de tu celular.

📱 Funciona desde el celular

La interfaz es una PWA: la instalas en la pantalla de inicio, inicias sesión una vez con la contraseña y nunca más vuelve a pedirte que inicies sesión. Nada de apps, nada de tiendas.

🧹 No llena el disco

Cada archivo descargado se elimina 6 horas después, y un barrido también recoge los restos de descargas fallidas. La VPS no se convierte en un depósito.

🍪 Evita el bloqueo

Envías las cookies de tu navegador con sesión iniciada desde la propia interfaz. Esto evita el mensaje "Sign in to confirm you're not a bot" que bloquea las IP de centros de datos.

Cómo funciona

De la URL al archivo, sin que tengas que estar pendiente

Un solo proceso: FastAPI sirve la interfaz y la API, y un worker consume la cola con un job a la vez — a propósito, para evitar el rate limit de la fuente. Caddy se encarga del HTTPS.

Pega el enlace→ Entra en la cola→ yt-dlp descarga→ ffmpeg une→ Botón "Descargar"→ Se elimina en 6h

Un job a la vez

La cola es serial. Dos descargas simultáneas solo aumentarían la probabilidad de bloqueo en el origen.

Sin reintento automático

Falló, lo vuelves a poner en cola. Reintentar por tu cuenta contra una fuente que bloqueó solo hace que la IP se queme más rápido.

Reanudación de descargas

La entrega admite Range, así que si se pierde la señal en el celular, la descarga continúa desde donde se quedó — por eso existe el TTL y no se elimina con la primera descarga.

Requisitos previos

Lo que debe estar listo

Una VPS Linux con Docker y un subdominio apuntado a ella. Nada más — ffmpeg y yt-dlp vienen dentro de la imagen.

Docker + Compose

Es el único requisito de software en la VPS.

# Ubuntu
curl -fsSL https://get.docker.com | sh

Un subdominio

Apunta un registro A a la IP de la VPS antes antes de subir: Caddy emite el certificado en el primer acceso.

# ejemplo
dlp.seudominio  A  203.0.113.10

Un navegador con sesión iniciada

En la PC o en el celular, con sesión iniciada en las fuentes desde donde descargas. De ahí salen las cookies.

# extensión (Edge/Chrome)
Get cookies.txt LOCALLY
Guía de uso · paso a paso

De cero a la primera descarga

Son cinco pasos. A partir del tercero ya lo usas desde el celular.

1

Clonar y ejecutar el instalador

Genera los tres secretos, escribe el .env con el permiso correcto, inicia los contenedores e imprime tu contraseña al final.

git clone https://github.com/inematds/inemadlp.git && cd inemadlp
./instalar.sh dlp.seudominio  # avisa si el DNS todavía no apunta aquí
2

Esperar el certificado

Caddy solicita el certificado en el primer acceso — de 10 a 60 segundos. ¿Prefieres hacerlo a mano en vez de usar el instalador? El README tiene el método manual.

docker compose logs -f caddy   # espera "certificate obtained"
curl -I https://dlp.seudominio  # HTTP/2 200 = en línea
3

Instalar en el celular

Abre el dominio, inicia sesión con la contraseña y usa "Agregar a la pantalla de inicio". La sesión no expira: inicias sesión una vez y listo.

# en el navegador del celular
https://dlp.seudominio
4

Enviar las cookies

Sin esto, YouTube rechaza la solicitud: la IP de la VPS es de un centro de datos. En la PC, con Edge o Chrome con la sesión iniciada en YouTube:

  1. instala la extensión Get cookies.txt LOCALLY (solo una vez);
  2. abre YouTube y confirma que aparece tu foto de perfil;
  3. haz clic en el ícono de la extensión → Export — descarga uno cookies.txt;
  4. en inemadlp, abre el panel Cookies y envía ese archivo;
  5. borra el cookies.txt de la carpeta Downloads: le da acceso a tu cuenta.

Vuelve a hacerlo solo cuando falle una descarga: la interfaz te avisa "cookies expiradas".

# acceso directo, solo en la máquina Linux con Firefox con sesión iniciada
DLP_URL=https://dlp.seudominio DLP_UPLOAD_TOKEN=... ./sync-cookies.sh
# -> {"cookies": 81}
5

Descargar

Pega la URL, elige Video (MP4 hasta 1080p) o Audio (M4A) y espera. El progreso aparece en la lista y el botón "Descargar" aparece al final.

# el archivo está disponible durante 6 horas y luego desaparece
# ¿quieres más tiempo? DLP_TTL_HOURS en .env
Cookies

Por qué existe esto y cuándo renovar

YouTube y las otras fuentes desafían a las IP de centros de datos. Las cookies de un navegador con sesión iniciada resuelven esto — y son el único mantenimiento recurrente del proyecto.

Cuando falle una descarga

La propia interfaz dice "cookies expiradas" cuando reconoce el motivo. Luego vuelves a exportar y lo envías de nuevo; no hace falta adivinar. En la práctica, las cookies de YouTube duran semanas.

Por qué no se puede automatizar en Windows

Edge y Chrome cifran las cookies con App-Bound Encryption desde la versión 127: solo el propio navegador obtiene la clave. Por eso, el método principal es subirlas y no usar un script.

Cron semanal (opcional)

En la máquina Linux con Firefox con sesión iniciada, puedes no ver nunca el error.

# todos los lunes, 9h
0 9 * * 1 DLP_URL=https://dlp.seudominio DLP_UPLOAD_TOKEN=... /caminho/sync-cookies.sh

Operación del día a día

Prácticamente nula.

docker compose logs -f app     # ver qué pasó
docker compose restart app     # actualiza yt-dlp al iniciar
Roadmap

Dónde está y qué quedó fuera

La v1 está completa y verificada de punta a punta. Lo que no está aquí se descartó a propósito: es una herramienta personal, no un producto.

v1 ✓
CompletoCola, descarga de video y audio, PWA con contraseña, carga de cookies, expiración automática, deploy con Docker y Caddy. 77 pruebas, más una que descarga un video real, más verificación de la interfaz en el navegador.
Fuera
Descartado por YAGNIElección de resolución, listas de reproducción, subtítulos, recorte de fragmentos, varios usuarios y reintentos automáticos. Cada una de estas funciones existiría para un público que este proyecto no tiene.
Tal vez
Si llega a ser lo bastante molestoBotón para volver a poner en cola con un clic (hoy tienes que volver a pegar la URL) y un instalador de PWA más completo en Android.