GDM can be driven without its window in three ways:
- De eigen opdrachtregel van de app, met dezelfde opties als IDM: stuur vanuit een script, batchbestand of ander programma een download naar de app als die al actief is.
misterdownloadmanager-cli, een afzonderlijk opdrachtregelprogramma: download bestanden, video's en torrents in een terminal, met voortgang, zonder de app.- 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.
De voorbeelden gebruiken Windows-paden; op macOS en Linux hebben de programma's dezelfde namen zonder .exe.
De opdrachtregel van de app
misterdownloadmanager.exe /d URL [/p folder] [/f name] [/a] [/n] [/s]
| Optie | Wat het doet |
|---|---|
/d URL |
Het adres om te downloaden. |
/p folder |
Opslaan in deze map (anders in de map voor deze categorie uit Opties → Opslaan in). |
/f name |
Sla het op onder deze naam. |
/a |
Toevoegen aan de hoofddownloadwachtrij zonder de download te starten. |
/n |
Stil: geen venster Bestandsinfo downloaden; de download start meteen (of wordt in de wachtrij geplaatst met /a). |
/s |
Start de hoofddownloadwachtrij. |
/exit |
Sla de draaiende app op en sluit deze (de installatie gebruikt dit voor een upgrade). |
/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. |
een bestand .torrent of 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.
| Opdracht | Wat het doet |
|---|---|
get URL [-o folder\|file] [-c connections] [-H "Header: value"]... [--checksum hash] [--dns choice] [--adapter name] |
Een bestand downloaden met maximaal 8 verbindingen (-c, 1 tot 128) en de voortgang weergeven. Ctrl+C pauzeert de download; resume hervat deze. --checksum controleert het voltooide bestand op hex MD5, SHA-1, SHA-256, SHA-512 of CRC32, eventueel met een naam (sha256:…). --dns kiest de DNS: system (de standaardinstelling); een dienst en de manier waarop die wordt aangesproken, cloudflare-https, quad9-tls, google-plain, adguard-https, nextdns-tls; DNS-serveradressen, 9.9.9.9,149.112.112.112; of een DNS-over-HTTPS-adres. Er wordt nooit teruggevallen op de DNS van het systeem. --adapter stuurt elke verbinding via één netwerkadapter, op basis van de naam (Ethernet, wg0) of een van de adressen. Als de adapter niet is verbonden, wordt er niets verzonden en mislukt de download. Een link van een bestandshost die door een van uw debrid-accounts wordt ondersteund (Opties → Accounts), wordt net als in de app via dat account geopend. get geeft through Real-Debrid aan; --direct downloadt het adres zelf (Debrid-serviceaccounts). |
resume file.mdm.json [-c connections] [-H ...] [--direct] |
Een gepauzeerde of onderbroken download hervatten vanaf het bestand .mdm.json dat ernaast staat. Via een debrid-account, zoals met get: de dienst geeft een nieuwe link als de oude is verlopen; --direct gaat verder vanaf het adres zelf. |
install-gallery-dl |
gallery-dl voor afbeeldingsgalerijen installeren of bijwerken: de controlesomlijst wordt gecontroleerd met de ondertekeningssleutel van de auteur en het programma met die lijst (Windows en Linux x86-64; op andere systemen installeert u het zelf). |
gallery-get URL [-o folder] [--limit N] [--adapter name] |
De afbeeldingen van een galerij downloaden (een categorie op Wikimedia Commons, een Flickr-album, ...) naar een map met de naam van de galerij in -o. --limit stelt een maximum in op het aantal afbeeldingen; de eerste afbeeldingen die op de site worden vermeld, worden gedownload. Bij een nieuwe start worden alleen nieuwe afbeeldingen opgehaald. --adapter stuurt de verbindingen van gallery-dl via één netwerkadapter, net als bij get. |
video-info URL |
Welke video een pagina bevat (YouTube, Vimeo, ...) en uit welke kwaliteiten u kunt kiezen. |
playlist-info URL [--from N] [--count N] |
De video's van een afspeellijst of kanaal, één per regel en in de volgorde waarin ze worden vermeld: de positie, duur, titel en het adres. |
playlist-get URL [-f selector] [-o folder] [--from N] [--count N] |
De video's van een afspeellijst of kanaal één voor één downloaden naar een map met de naam van de lijst in -o. -f stelt één kwaliteit in voor alle video's, net als bij video-get (standaard de beste kwaliteit voor elke video; bv*[height<=720]+ba/b[height<=720] = maximaal 720p; ba = alleen het oorspronkelijke geluid; mp3:320, opus: en flac: werken hetzelfde als bij video-get). |
video-get URL [-f selector] [-o folder] [--subs langs] [--auto-subs] [--embed-subs] [--adapter name] |
Een video downloaden; -f gebruikt een kwaliteitskeuze uit video-info (b = het beste losse bestand; ba = alleen het geluid zoals de site het aanbiedt, zonder conversie; mp3:320, mp3:256, mp3:192 of mp3:128 = het geluid als MP3 met die bitrate; mp3:0 = met de beste variabele bitrate; opus: = als Opus; flac: = als FLAC, zonder kwaliteitsverlies maar niet beter dan het geluid van de site; voor conversies is ffmpeg nodig). --subs slaat ondertitels ernaast op: taalcodes uit video-info (en,fr), of all voor alle ondertitels die de uploader heeft toegevoegd; --auto-subs gebruikt in plaats daarvan de automatische ondertiteling van de site; --embed-subs voegt de ondertitels in de video in (hiervoor is ffmpeg nodig; MP4 of MKV). --adapter stuurt de verbindingen van yt-dlp (en ffmpeg) via één netwerkadapter, net als bij get; als de adapter niet is verbonden, start er niets. |
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 |
De naam, bestanden (genummerd) en grootte van een torrent; SOURCE is een magneetlink of een .torrent bestand. |
torrent-get SOURCE [-o folder] [--files 0,2] [--use-existing] |
Download een torrent, of slechts enkele van de bestanden. Als sommige bestanden al in de map staan, stopt het programma en noemt ze; --use-existing gebruikt ze dan in plaats daarvan (wat overeenkomt, wordt behouden, de rest gedownload). |
torrent-create PATH -o file.torrent |
Maak een .torrent van een bestand of map (peers vinden het via de DHT). |
status |
De downloads van de draaiende app, als JSON, met hun ID's (de automatiserings-API moet zijn ingeschakeld). |
pause ID..., start ID... |
Pauzeer actieve downloads, of start (hervat) gestopte, in de wachtrij geplaatste of mislukte downloads in de actieve app. |
remove ID..., delete ID... |
Verwijder downloads uit de lijst van de actieve app: remove behoudt de bestanden, delete verwijdert ze ook. Een actieve download wordt eerst gepauzeerd (pause). |
api on, api off |
Schakel de automatiserings-API van de actieve app in of uit. |
misterdownloadmanager-cli help <command>toont elke optie. Een commando dat mislukt (de app draait niet, antwoordt met een fout, een download stopt) sluit af met code 1. Bijvoorbeeld:
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 voor scripts en programma's
Met --json (voor of na het commando) print elk commando JSON in plaats van tekst, één object per regel, zodat scripts en AI-agents het kunnen lezen:
| Opdracht | |
|---|---|
get, resume |
{"event": "through", "service"}eerst wanneer de download via een debrid-account gaat, dan elke halve seconde een {"event": "progress", "downloaded", "size", "speed", "connections", "segments"}-regel, dan {"event": "done", "path", "size", "seconds"}, of {"event": "paused", "state"} na Ctrl+C (state is het bestand dat resume neemt). |
video-get |
{"event": "progress", "downloaded", "size", "speed"}regels, dan {"event": "done", "path", "subtitles", "subtitle_problems"}: de ondertitelbestanden die ernaast zijn opgeslagen, en de talen die de site weigerde ({"code", "name", "reason", "beside"}; beside: ze kwamen bij een tweede poging, naast de video in plaats van erin). |
torrent-get |
{"event": "progress", "phase", "downloaded", "size", "speed", "peers", "peers_seen"}regels, dan {"event": "done", "path", "size"}, of {"event": "stopped", "downloaded", "seconds"} met --seconds. |
video-info |
{"title", "choices": [{"label", "format", "size"}], "subtitles": [{"code", "name", "automatic"}]}; de format van een keuze is wat video-get -f neemt, de code van een ondertitel is wat --subs neemt. |
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 |
Het antwoord van de app, dat al JSON is (zie hieronder). |
Groottes zijn in bytes (null terwijl onbekend), snelheden in bytes per seconde. Een mislukking print {"error": "…"} en sluit af met code 1. Bijvoorbeeld:
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}
De automatiserings-API
Andere programma's kunnen de actieve app vragen wat deze downloadt, en downloads pauzeren, starten, verwijderen of wissen. De API is standaard uitgeschakeld; schakel deze in met misterdownloadmanager-cli api on (en uit met 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.
Wat het begrijpt
Velden (naast token) |
Antwoord |
|---|---|
{"query": "list"} |
Elke download en de totale snelheid: {"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 is Queued, Downloading, Stopped, Complete of Error; size is null wanneer onbekend; error (waarom het mislukte) is er alleen voor een download in Error; category is de key van een categorie; free is de vrije ruimte waar downloads naartoe gaan (null wanneer onbekend). Alleen als de API is ingeschakeld. |
{"action": "pause", "ids": [3, 4]} |
Handelt op downloads per ID: "pause", "start", "remove" (bestand behouden) of "delete" (bestand ook verwijderd). Antwoordt {"done": [3], "skipped": [{"id": 4, "why": "not running"}]}; een actieve download moet gepauzeerd worden voordat deze wordt verwijderd of gewist. Alleen terwijl de API aan staat. |
{"action": "start_queue", "queue": "Main download queue"} |
Start (of met "stop_queue", stopt) de wachtrij met die naam (een naam uit de queues van de lijst). Antwoordt {"done": [], "skipped": []}, of {"error": …, "code": "unknown-queue"}. Alleen als de API is ingeschakeld. |
{"api": true} / {"api": false} |
Schakelt de API in of uit: {"api": true}. |
{"url": "https://…", "dir": "D:\\Files", "name": "a.zip", "silent": true} |
Voegt een download toe, zoals de /d /p /f /n van de opdrachtregel doen ("later": true is /a); ok. "category" (een sleutel uit de categories van de lijst) plaatst het in de map van die categorie in plaats van degene die het type kiest; "queue" (de naam van een wachtrij) is de wachtrij waarin het wacht met "later". Ook met de API uitgeschakeld, net als de opdrachtregel. |
{"start_queue": true} |
Start de hoofddownloadwachtrij; ok. |
Een onbekende vraag of actie krijgt als antwoord {"error": "…"}. Dat geldt ook voor een vraag wanneer de API is uitgeschakeld (dan is het antwoord "code": "api-off", zodat programma's dit kunnen controleren: de fouttekst kan veranderen). Een ongeldig token krijgt als antwoord denied.
Elke aanvraag en elk antwoord wordt veld voor veld beschreven in een JSON Schema: automation-api.schema.json (ook op https://misterdownloadmanager.com/automation-api.schema.json). Het is gemaakt van de code waarmee de app antwoordt, dus het blijft exact; programma's kunnen controleren wat ze verzenden en lezen, of hun typen ervan genereren.
Voorbeelden
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"])
Om in plaats daarvan een download toe te voegen, stuurt u {"token": "…", "url": "https://example.com/a.zip", "silent": true}.
Gratis, open source, geen advertenties, geen proefversie.
Download GolinksPRO Download Manager