GDM can be driven without its window in three ways:
- La propia línea de comandos de la aplicación, los mismos modificadores que los de IDM: entregar una descarga a la aplicación en ejecución desde un script, un archivo por lotes u otro programa.
misterdownloadmanager-cli, una herramienta de línea de comandos independiente: descargar archivos, vídeos y torrents desde un terminal, con una barra de progreso y sin abrir la aplicación.- The automation API: other programs list the running app's downloads (as JSON) and pause, start, remove or delete them, over a local, token-protected channel. AI assistants use it through GDM's MCP server: see AI assistants.
To run the whole app without a window, on a home server or a NAS, see Run GDM on a server (misterdownloadmanager --headless); to control it from a phone, Control GDM from your phone.
Los ejemplos usan rutas de Windows; en macOS y Linux los programas tienen los mismos nombres sin .exe.
La línea de comandos de la aplicación
misterdownloadmanager.exe /d URL [/p folder] [/f name] [/a] [/n] [/s]
| Modificador | Qué hace |
|---|---|
/d URL |
La dirección desde la que descargar. |
/p folder |
Guardar el archivo en esta carpeta (si no se indica, se usará la carpeta de la categoría de Opciones → Guardar en). |
/f name |
Guardarlo con este nombre. |
/a |
Añadirlo a la cola de descarga principal sin iniciarlo. |
/n |
Silencioso: sin ventana de Información del archivo de descarga, la descarga comienza (o se pone en cola, con /a) de inmediato. |
/s |
Iniciar la cola de descarga principal. |
/exit |
Guardar y cerrar la aplicación en ejecución (el instalador lo usa antes de una actualización). |
/startup |
Start in the notification area, the window hidden: what Launch GolinksPRO Download Manager on startup starts GDM with when you sign in. Where no notification area shows GDM's icon (some Linux desktops), GDM starts minimized. A running GDM stays as it is. |
un archivo .torrent o un enlace magnet: |
Open it in Add torrent (what Windows passes when GDM opens torrents). |
Switches can start with / or -, in any case. If GDM is running, the command goes to it; if not, GDM starts and carries it out. For example:
misterdownloadmanager.exe /d https://example.com/files/report.pdf /p D:\Reports /n
misterdownloadmanager.exe /d https://example.com/big.iso /a
misterdownloadmanager.exe /s
misterdownloadmanager-cli
It comes with every download of GDM, next to the app (the installer puts it in GDM's folder). It works on its own: the app needn't run, except for status and api.
| Comando | Qué hace |
|---|---|
get URL [-o folder\|file] [-c connections] [-H "Header: value"]... [--checksum hash] [--dns choice] [--adapter name] |
Descargar un archivo con hasta 8 conexiones (-c, de 1 a 128) y mostrar el progreso. Ctrl+C pausa la descarga; resume la reanuda. --checksum comprueba el archivo descargado con una suma de comprobación hexadecimal: MD5, SHA-1, SHA-256, SHA-512 o CRC32, con un nombre opcional (sha256:…). --dns permite elegir el DNS: system (el predeterminado); un servicio y cómo consultarlo, cloudflare-https, quad9-tls, google-plain, adguard-https, nextdns-tls; las direcciones de servidores DNS, 9.9.9.9,149.112.112.112; o una dirección DNS-over-HTTPS. Nunca recurre al DNS del sistema. --adapter envía cada conexión a través de un adaptador de red, identificado por su nombre (Ethernet, wg0) o por una de sus direcciones; si no está conectado, no se envía nada y la descarga falla. Los enlaces de servidores de archivos compatibles con una de tus cuentas de debrid (Opciones → Cuentas) se descargan a través de esa cuenta, como en la aplicación, y get indica through Real-Debrid; --direct descarga la dirección directamente (Cuentas de servicio de debrid). |
resume file.mdm.json [-c connections] [-H ...] [--direct] |
Reanudar una descarga pausada o interrumpida desde el archivo .mdm.json que está a su lado. Con una cuenta de debrid, funciona como get: si el enlace anterior ha caducado, el servicio proporciona uno nuevo; --direct reanuda la descarga desde la propia dirección. |
install-gallery-dl |
Instalar o actualizar gallery-dl, para descargar galerías de imágenes. La lista de sumas de comprobación se verifica con la clave de firma de su autor y el programa, con esa lista (Windows y Linux x86-64; en otros sistemas, hay que instalarlo manualmente). |
gallery-get URL [-o folder] [--limit N] [--adapter name] |
Descargar las imágenes de una galería (una categoría de Wikimedia Commons, un álbum de Flickr, ...) en una carpeta con el nombre de la galería dentro de -o. --limit limita la descarga a ese número de imágenes, empezando por las primeras que muestra el sitio. Si se vuelve a iniciar, solo descarga las nuevas. --adapter envía las conexiones de gallery-dl a través de un adaptador de red, igual que get. |
video-info URL |
Qué vídeo contiene una página (YouTube, Vimeo, ...) y qué calidades se pueden elegir. |
playlist-info URL [--from N] [--count N] |
Los vídeos de una lista de reproducción o un canal, uno por línea y en el orden en que aparecen: posición, duración, título y dirección. |
playlist-get URL [-f selector] [-o folder] [--from N] [--count N] |
Descargar los vídeos de una lista de reproducción o un canal, uno tras otro, en una carpeta con el nombre de la lista dentro de -o. -f aplica la misma calidad a todos, igual que video-get (por defecto, la mejor de cada vídeo; bv*[height<=720]+ba/b[height<=720] = hasta 720p; ba = el sonido original; mp3:320, opus:, flac: igual que video-get). |
video-get URL [-f selector] [-o folder] [--subs langs] [--auto-subs] [--embed-subs] [--adapter name] |
Descargar un vídeo; -f toma de video-info el selector de calidad (b = el mejor archivo único; ba = solo el sonido tal como lo ofrece el sitio, sin convertir; mp3:320, mp3:256, mp3:192 o mp3:128 = el sonido en MP3 a esa tasa de bits; mp3:0 = a la mejor tasa de bits variable; opus: = en Opus; flac: = en FLAC, sin pérdidas, pero sin mejorar el sonido del sitio; para las conversiones hace falta ffmpeg). --subs guarda los subtítulos junto al vídeo: códigos de idioma de video-info (en,fr), o all para todos los que haya proporcionado quien subió el vídeo; --auto-subs usa los subtítulos automáticos del sitio; --embed-subs los incorpora al vídeo (hace falta ffmpeg, y el formato debe ser MP4 o MKV). --adapter envía las conexiones de yt-dlp (y las de ffmpeg) a través de un adaptador de red, igual que get; si no está conectado, no se inicia ninguna conexión. |
install-ytdlp, install-ffmpeg |
Install or update the helpers videos need: yt-dlp (checked against its signing key) and ffmpeg (Windows; on macOS and Linux GDM uses the system's). |
torrent-info SOURCE |
Nombre del torrent, archivos (numerados) y tamaño; SOURCE es un enlace magnet o un archivo .torrent. |
torrent-get SOURCE [-o folder] [--files 0,2] [--use-existing] |
Descargar un torrent o solo algunos de sus archivos. Si algunos ya están en la carpeta, se detiene y los indica; --use-existing los usa en su lugar (se conservan los que coinciden y se descargan los demás). |
torrent-create PATH -o file.torrent |
Crear un .torrent a partir de un archivo o una carpeta (los pares lo encuentran a través de la DHT). |
status |
Las descargas de la aplicación en ejecución, en formato JSON y con sus ID (la API de automatización debe estar activada). |
pause ID..., start ID... |
Pausar las descargas en curso, o iniciar (reanudar) las detenidas, en cola o fallidas, en la aplicación en ejecución. |
remove ID..., delete ID... |
Quitar descargas de la lista de la aplicación en ejecución: remove mantiene sus archivos, delete también los elimina. Una descarga en curso se pausa primero (pause). |
api on, api off |
Activar o desactivar la API de automatización de la aplicación en ejecución. |
misterdownloadmanager-cli help <command>muestra todas las opciones. Si un comando falla (la aplicación no está en ejecución, responde con un error o se interrumpe una descarga), termina con el código 1. Por ejemplo:
misterdownloadmanager-cli get https://example.com/big.iso -o D:\Downloads -c 16 --checksum sha256:9f86d0…
misterdownloadmanager-cli video-get "https://www.youtube.com/watch?v=aqz-KE-bpKQ" -f "b[height=720]"
misterdownloadmanager-cli torrent-get "magnet:?xt=urn:btih:…" --files 0
JSON para scripts y programas
Con --json (antes o después del comando), cada comando muestra JSON en lugar de texto, con un objeto por línea, para que lo lean los scripts y los agentes de IA:
| Comando | Imprime |
|---|---|
get, resume |
{"event": "through", "service"}primero, cuando la descarga se realiza a través de una cuenta de debrid; después, una línea {"event": "progress", "downloaded", "size", "speed", "connections", "segments"} cada medio segundo; y, por último, {"event": "done", "path", "size", "seconds"}, o {"event": "paused", "state"} después de Ctrl+C (state es el archivo que ocupa resume). |
video-get |
{"event": "progress", "downloaded", "size", "speed"}líneas y, después, {"event": "done", "path", "subtitles", "subtitle_problems"}: los archivos de subtítulos guardados junto al vídeo y los idiomas que el sitio rechazó ({"code", "name", "reason", "beside"}; beside: se descargaron en un segundo intento, junto al vídeo en lugar de dentro de él). |
torrent-get |
{"event": "progress", "phase", "downloaded", "size", "speed", "peers", "peers_seen"}líneas y, después, {"event": "done", "path", "size"}, o {"event": "stopped", "downloaded", "seconds"} con --seconds. |
video-info |
{"title", "choices": [{"label", "format", "size"}], "subtitles": [{"code", "name", "automatic"}]}; el format de una opción es lo que ocupa video-get -f; el code de un subtítulo es lo que ocupa --subs. |
torrent-info |
{"name", "info_hash", "size", "files": [{"index", "size", "path"}]}. |
torrent-create |
{"info_hash", "path"}. |
install-ytdlp, install-ffmpeg |
{"tool", "version", "path"}. |
status, pause, start, remove, delete,api |
La respuesta de la aplicación, que ya está en formato JSON (consulta más abajo). |
Los tamaños se indican en bytes (null si se desconoce el tamaño) y las velocidades, en bytes por segundo. Si se produce un error, se muestra {"error": "…"} y el proceso termina con el código 1. Por ejemplo:
misterdownloadmanager-cli --json get https://example.com/big.iso -o D:\Downloads
{"event":"progress","downloaded":4194304,"size":1073741824,"speed":52428800,"connections":8,"segments":8}
…
{"event":"done","path":"D:\\Downloads\\big.iso","size":1073741824,"seconds":20.4}
La API de automatización
Otros programas pueden preguntar a la aplicación en ejecución qué está descargando, y pausar, iniciar, quitar o eliminar descargas. La API está desactivada de forma predeterminada; actívala con misterdownloadmanager-cli api on (y desactívala con api off).
How a program talks to GDM
- While it runs, GDM listens on a port of
127.0.0.1(this computer only) and writes the port and a secret token toipc.jsonin its data folder: - Windows:%APPDATA%\misterdownloadmanager\ipc.json- macOS:~/Library/Application Support/misterdownloadmanager/ipc.json- Linux:~/.local/share/misterdownloadmanager/ipc.json- A portable copy:data\ipc.jsonnext to the program.
The token changes at every start; only programs that can read your data folder (yours) can use it.
2. Connect to that port and send one line of JSON: the token and the command's fields, e.g. {"token": "<token>", "query": "list"}.
3. GDM answers with one line: ok for a command, or a JSON object for a question.
Qué entiende
Campos (además de token) |
Respuesta |
|---|---|
{"query": "list"} |
Cada descarga y la velocidad total: {"downloads": [{"id", "file", "url", "path", "status", "size", "downloaded", "speed", "added", "category", "error"}], "speed": bytes per second, "queues": [{"name", "running", "ids"}], "categories": [{"key", "name"}], "free": bytes}. status es Queued, Downloading, Stopped, Complete o Error; size es null si se desconoce; error (por qué falló) solo está disponible para una descarga en Error; category es la key de una categoría; free es el espacio libre donde van las descargas (null si se desconoce). Solo si la API está activada. |
{"action": "pause", "ids": [3, 4]} |
Actúa sobre las descargas mediante su ID: "pause", "start", "remove" (se conserva el archivo) o "delete" (también se elimina el archivo). Responde {"done": [3], "skipped": [{"id": 4, "why": "not running"}]}; primero hay que pausar las descargas en curso para quitarlas o eliminarlas. Solo está disponible mientras la API está activada. |
{"action": "start_queue", "queue": "Main download queue"} |
Inicia (o con "stop_queue", detiene) la cola con ese nombre (un nombre de la queues de la lista). Responde {"done": [], "skipped": []}, o {"error": …, "code": "unknown-queue"}. Solo si la API está activada. |
{"api": true} / {"api": false} |
Activa o desactiva la API: {"api": true}. |
{"url": "https://…", "dir": "D:\\Files", "name": "a.zip", "silent": true} |
Añade una descarga, como lo hace /d /p /f /n de la línea de comandos ("later": true es /a); ok. "category" (una clave de la categories de la lista) la coloca en la carpeta de esa categoría en lugar de la que elige su tipo; "queue" (el nombre de una cola) es la cola en la que espera con "later". También con la API desactivada, como la línea de comandos. |
{"start_queue": true} |
Inicia la cola principal de descargas; ok. |
Una pregunta o acción desconocida recibe {"error": "…"}, al igual que una pregunta mientras la API está desactivada (en ese caso, recibe "code": "api-off", para que los programas puedan comprobarlo: el texto del error puede cambiar). Un token incorrecto recibe denied.
Cada solicitud y respuesta se describe, campo por campo, en un esquema JSON: automation-api.schema.json (también en https://misterdownloadmanager.com/automation-api.schema.json). Se genera a partir del código con el que responde la aplicación, por lo que se mantiene exacto; los programas pueden verificar lo que envían y leen con él, o generar sus tipos a partir de él.
Ejemplos
PowerShell (Windows):
$ep = Get-Content "$env:APPDATA\misterdownloadmanager\ipc.json" | ConvertFrom-Json
$client = New-Object Net.Sockets.TcpClient("127.0.0.1", $ep.port)
$stream = $client.GetStream()
$writer = New-Object IO.StreamWriter($stream); $reader = New-Object IO.StreamReader($stream)
$writer.WriteLine((@{ token = $ep.token; query = "list" } | ConvertTo-Json -Compress))
$writer.Flush()
$reader.ReadLine() | ConvertFrom-Json | Select-Object -ExpandProperty downloads | Format-Table file, status, downloaded, size
$client.Close()
Python:
import json, os, socket
ipc = os.path.join(os.environ["APPDATA"], "misterdownloadmanager", "ipc.json") # see above elsewhere
ep = json.load(open(ipc))
with socket.create_connection(("127.0.0.1", ep["port"])) as s:
s.sendall((json.dumps({"token": ep["token"], "query": "list"}) + "\n").encode())
answer = json.loads(s.makefile().readline())
for d in answer["downloads"]:
print(d["file"], d["status"], d["downloaded"], d["size"])
Para añadir una descarga, envía {"token": "…", "url": "https://example.com/a.zip", "silent": true}.
Gratis, código abierto, sin anuncios, sin prueba.
Download GolinksPRO Download Manager