GDM can be driven without its window in three ways:
- A linha de comandos da própria aplicação, os mesmos parâmetros do IDM: entregar uma transferência à aplicação em execução a partir de um script, um ficheiro batch ou outro programa.
misterdownloadmanager-cli, uma ferramenta de linha de comandos separada: transferir ficheiros, vídeos e torrents num terminal, com progresso, sem a aplicação.- 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.
Os exemplos usam caminhos do Windows; no macOS e Linux os programas têm os mesmos nomes sem .exe.
A linha de comandos da aplicação
misterdownloadmanager.exe /d URL [/p folder] [/f name] [/a] [/n] [/s]
| Parâmetro | O que faz |
|---|---|
/d URL |
O endereço a transferir. |
/p folder |
Guardar nesta pasta (caso contrário, a pasta da categoria de Opções → Guardar em). |
/f name |
Guardar com este nome. |
/a |
Adicionar à fila de transferência principal sem iniciar. |
/n |
Silencioso: sem janela de Informações do Ficheiro de Transferência, a transferência começa (ou é adicionada à fila, com /a) de imediato. |
/s |
Iniciar a fila de transferência principal. |
/exit |
Guardar e fechar a aplicação em execução (o instalador usa-o antes de uma atualização). |
/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. |
um ficheiro .torrent ou link 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 | O que faz |
|---|---|
get URL [-o folder\|file] [-c connections] [-H "Header: value"]... [--checksum hash] [--dns choice] [--adapter name] |
Transfere um ficheiro com até 8 ligações (-c, 1 a 128), mostrando o progresso. Ctrl+C pausa-o; resume continua. --checksum verifica o ficheiro concluído: MD5 hexadecimal, SHA-1, SHA-256, SHA-512 ou CRC32, opcionalmente nomeado (sha256:…). --dns escolhe o DNS: system (o predefinido); um serviço e como o solicitar, cloudflare-https, quad9-tls, google-plain, adguard-https, nextdns-tls; endereços de servidores DNS, 9.9.9.9,149.112.112.112; ou um endereço DNS-over-HTTPS. Nunca recorre ao DNS do sistema. --adapter envia cada ligação através de um adaptador de rede, pelo seu nome (Ethernet, wg0) ou um dos seus endereços; quando não está ligado, nada é enviado e a transferência falha. Uma ligação de um anfitrião de ficheiros que uma das suas contas de desbridamento (Opções → Contas) suporta passa por essa conta, como na aplicação, e get diz through Real-Debrid; --direct transfere o próprio endereço (Contas de serviço de desbridamento). |
resume file.mdm.json [-c connections] [-H ...] [--direct] |
Continua uma transferência pausada ou interrompida a partir do ficheiro .mdm.json ao lado. Através de uma conta de desbridamento, como get: o serviço dá uma nova ligação quando a antiga expirou; --direct continua a partir do próprio endereço. |
install-gallery-dl |
Instalar ou atualizar o gallery-dl, para galerias de imagens: a sua lista de somas de verificação é verificada em relação à chave de assinatura do autor, o programa em relação a essa lista (Windows e Linux x86-64; noutros sistemas, instale-o você mesmo). |
gallery-get URL [-o folder] [--limit N] [--adapter name] |
Transfere as imagens de uma galeria (uma categoria do Wikimedia Commons, um álbum do Flickr, ...) para uma pasta com o nome da galeria dentro de -o; --limit transfere no máximo esse número de imagens, as primeiras que o site lista. Se for iniciado novamente, só transfere as novas. --adapter envia as ligações do gallery-dl através de um adaptador de rede, tal como para get. |
video-info URL |
Que vídeo uma página contém (YouTube, Vimeo, ...), e as qualidades a escolher. |
playlist-info URL [--from N] [--count N] |
Os vídeos de uma lista de reprodução ou canal, um por linha, pela ordem em que aparecem: a sua posição, duração, título e endereço. |
playlist-get URL [-f selector] [-o folder] [--from N] [--count N] |
Transfere os vídeos de uma lista de reprodução ou canal, um após o outro, para uma pasta com o nome da lista dentro de -o. -f é uma qualidade para todos, como para video-get (por predefinição, a melhor de cada vídeo; bv*[height<=720]+ba/b[height<=720] = até 720p; ba = o som original; mp3:320, opus:, flac: como para video-get). |
video-get URL [-f selector] [-o folder] [--subs langs] [--auto-subs] [--embed-subs] [--adapter name] |
Transfere um vídeo; -f usa um seletor de qualidade de video-info (b = o melhor ficheiro único; ba = apenas o áudio como está no site, sem conversão; mp3:320, mp3:256, mp3:192 ou mp3:128 = o áudio como MP3 com essa taxa de bits, mp3:0 com a melhor taxa de bits variável; opus: = como Opus; flac: = como FLAC, sem perdas, mas não melhor do que o áudio do site; as conversões precisam do ffmpeg). --subs guarda as legendas ao lado: códigos de idioma de video-info (en,fr), ou all para todas as que o carregador forneceu; --auto-subs usa as legendas automáticas do site; --embed-subs coloca-as no vídeo (precisa do ffmpeg, MP4 ou MKV). --adapter envia as ligações do yt-dlp (e do ffmpeg) através de um adaptador de rede, tal como para get; quando não está ligado, nada começa. |
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 |
Nome de um torrent, ficheiros (numerados) e tamanho; SOURCE é um link magnet ou um ficheiro .torrent. |
torrent-get SOURCE [-o folder] [--files 0,2] [--use-existing] |
Transferir um torrent, ou apenas alguns dos seus ficheiros. Se alguns dos seus ficheiros já estiverem na pasta, ele para e nomeia-os; --use-existing usa-os em vez disso (o que corresponde é mantido, o resto transferido). |
torrent-create PATH -o file.torrent |
Criar um .torrent de um ficheiro ou pasta (os pares encontram-no através do DHT). |
status |
As transferências da aplicação em execução, como JSON, com os seus IDs (a API de automação deve estar ativada). |
pause ID..., start ID... |
Interrompe as transferências em curso, ou inicia (retoma) as que estão paradas, em fila ou falhadas, na aplicação em execução. |
remove ID..., delete ID... |
Remove transferências da lista da aplicação em execução: remove mantém os ficheiros, delete também os apaga. Uma transferência em curso é primeiro interrompida (pause). |
api on, api off |
Ativa ou desativa a API de automatização da aplicação em execução. |
misterdownloadmanager-cli help <command>mostra todas as opções. Um comando que falha (a aplicação não está em execução, responde com um erro, uma transferência falha) termina com o código 1. Por exemplo:
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 e programas
Com --json (antes ou depois do comando), cada comando imprime JSON em vez de texto, um objeto por linha, para scripts e agentes de IA lerem:
| Comando | Imprime |
|---|---|
get, resume |
{"event": "through", "service"}primeiro quando a transferência passa por uma conta de desbridamento, depois uma linha {"event": "progress", "downloaded", "size", "speed", "connections", "segments"} a cada meio segundo, depois {"event": "done", "path", "size", "seconds"}, ou {"event": "paused", "state"} após Ctrl+C (state é o ficheiro que resume usa). |
video-get |
{"event": "progress", "downloaded", "size", "speed"}linhas, depois {"event": "done", "path", "subtitles", "subtitle_problems"}: os ficheiros de legendas guardados ao lado, e os idiomas que o site recusou ({"code", "name", "reason", "beside"}; beside: vieram numa segunda tentativa, ao lado do vídeo em vez de dentro dele). |
torrent-get |
{"event": "progress", "phase", "downloaded", "size", "speed", "peers", "peers_seen"}linhas, depois {"event": "done", "path", "size"}, ou {"event": "stopped", "downloaded", "seconds"} com --seconds. |
video-info |
{"title", "choices": [{"label", "format", "size"}], "subtitles": [{"code", "name", "automatic"}]}; o format de uma escolha é o que video-get -f usa, o code de uma legenda é o que --subs usa. |
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 |
A resposta da aplicação, que já é JSON (ver abaixo). |
Os tamanhos são em bytes (null enquanto desconhecido), as velocidades em bytes por segundo. Uma falha imprime {"error": "…"} e termina com o código 1. Por exemplo:
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}
A API de automatização
Outros programas podem perguntar à aplicação em execução o que está a transferir e interromper, iniciar, remover ou apagar transferências. A API está desativada por predefinição; ative-a com misterdownloadmanager-cli api on (e desative-a com 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.
O que ele entende
Campos (além de token) |
Resposta |
|---|---|
{"query": "list"} |
Cada transferência e a velocidade 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 é Queued, Downloading, Stopped, Complete ou Error; size é null enquanto desconhecido; error (por que falhou) só existe para uma transferência em Error; category é o key de uma categoria; free é o espaço livre onde as transferências são guardadas (null quando desconhecido). Apenas enquanto a API estiver ativa. |
{"action": "pause", "ids": [3, 4]} |
Atua sobre as transferências por ID: "pause", "start", "remove" (ficheiro mantido) ou "delete" (ficheiro também apagado). Responde {"done": [3], "skipped": [{"id": 4, "why": "not running"}]}; uma transferência em curso deve ser interrompida antes de ser removida ou apagada. Apenas enquanto a API estiver ativada. |
{"action": "start_queue", "queue": "Main download queue"} |
Inicia (ou com "stop_queue", para) a fila com esse nome (um nome do queues da lista). Responde {"done": [], "skipped": []}, ou {"error": …, "code": "unknown-queue"}. Apenas enquanto a API estiver ativa. |
{"api": true} / {"api": false} |
Ativa ou desativa a API: {"api": true}. |
{"url": "https://…", "dir": "D:\\Files", "name": "a.zip", "silent": true} |
Adiciona uma transferência, como o /d /p /f /n da linha de comandos faz ("later": true é /a); ok. "category" (uma chave do categories da lista) coloca-a na pasta dessa categoria em vez daquela que o seu tipo escolhe; "queue" (o nome de uma fila) é a fila em que espera com "later". Também com a API desativada, como a linha de comandos. |
{"start_queue": true} |
Inicia a fila de transferências principal; ok. |
Uma pergunta ou ação desconhecida é respondida com {"error": "…"}, assim como uma pergunta enquanto a API está desativada (então com "code": "api-off", para os programas verificarem: o texto do erro pode mudar). Um token errado é respondido com denied.
Cada pedido e resposta é descrito, campo a campo, num JSON Schema: automation-api.schema.json (também em https://misterdownloadmanager.com/automation-api.schema.json). É feito a partir do código com que a aplicação responde, para que se mantenha exato; os programas podem verificar o que enviam e leem em relação a ele, ou gerar os seus tipos a partir dele.
Exemplos
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 adicionar uma transferência, envie {"token": "…", "url": "https://example.com/a.zip", "silent": true}.
Gratuito, de código aberto, sem anúncios, sem período de avaliação.
Download GolinksPRO Download Manager