GDM can be driven without its window in three ways:
- Die Befehlszeile der App verwendet dieselben Schalter wie IDM. Damit lässt sich ein Download von einem Skript, einer Batch-Datei oder einem anderen Programm an die laufende App übergeben.
misterdownloadmanager-cliist ein separates Befehlszeilenprogramm. Damit lassen sich Dateien, Videos und Torrents im Terminal mit Fortschrittsanzeige herunterladen, ohne die App zu verwenden.- 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.
Die Beispiele verwenden Windows-Pfade. Unter macOS und Linux haben die Programme dieselben Namen, nur ohne .exe.
Die Befehlszeile der App
misterdownloadmanager.exe /d URL [/p folder] [/f name] [/a] [/n] [/s]
| Schalter | Beschreibung |
|---|---|
/d URL |
Die herunterzuladende Adresse. |
/p folder |
In diesem Ordner speichern (sonst im Ordner der Kategorie unter Optionen → Speichern unter). |
/f name |
Unter diesem Namen speichern. |
/a |
Zur Hauptwarteschlange hinzufügen, ohne den Download zu starten. |
/n |
Ohne Fenster Dateiinformationen herunterladen starten oder den Download sofort in die Warteschlange stellen (/a). |
/s |
Starten Sie die Haupt-Download-Warteschlange. |
/exit |
Laufende App speichern und schließen (wird vom Installationsprogramm vor einem Upgrade verwendet). |
/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. |
eine .torrent-Datei oder einen magnet:-Link |
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.
| Befehl | Beschreibung |
|---|---|
get URL [-o folder\|file] [-c connections] [-H "Header: value"]... [--checksum hash] [--dns choice] [--adapter name] |
Lädt eine Datei mit bis zu 8 Verbindungen (-c, 1 bis 128) herunter und zeigt den Fortschritt an. Ctrl+C pausiert den Download; resume setzt ihn fort. --checksum prüft die fertige Datei auf Hex-MD5, SHA-1, SHA-256, SHA-512 oder CRC32, optional mit Namen (sha256:…). --dns legt den DNS fest: system (Standard); einen Dienst und die Art der Abfrage, cloudflare-https, quad9-tls, google-plain, adguard-https, nextdns-tls; DNS-Server-Adressen, 9.9.9.9,149.112.112.112; oder eine DNS-over-HTTPS-Adresse. Es wird nicht auf den System-DNS zurückgegriffen. --adapter leitet jede Verbindung über einen Netzwerkadapter, angegeben anhand seines Namens (Ethernet, wg0) oder einer seiner Adressen. Ist der Adapter nicht verbunden, wird nichts gesendet und der Download schlägt fehl. Ein Link von einem Dateihost, der von einem Ihrer Debrid-Konten (Optionen → Konten) unterstützt wird, wird wie in der App über dieses Konto aufgerufen. get gibt through Real-Debrid aus; --direct lädt die Adresse selbst herunter (Debrid-Dienstkonten). |
resume file.mdm.json [-c connections] [-H ...] [--direct] |
Setzt einen pausierten oder unterbrochenen Download anhand der danebenliegenden .mdm.json-Datei fort. Über ein Debrid-Konto wie bei get stellt der Dienst einen neuen Link bereit, wenn der alte abgelaufen ist. --direct setzt den Download über die Adresse selbst fort. |
install-gallery-dl |
Installiert oder aktualisiert gallery-dl für Bildergalerien. Die Prüfsummenliste wird mit dem Signierschlüssel des Autors abgeglichen, das Programm mit dieser Liste (Windows und Linux x86-64; auf anderen Systemen selbst installieren). |
gallery-get URL [-o folder] [--limit N] [--adapter name] |
Lädt die Bilder einer Galerie (einer Wikimedia-Commons-Kategorie, eines Flickr-Albums usw.) in einen nach der Galerie benannten Ordner innerhalb von -o herunter. --limit begrenzt die Anzahl auf die ersten Bilder, die die Website auflistet. Bei einem erneuten Start werden nur neue Bilder abgerufen. --adapter leitet die Verbindungen von gallery-dl wie bei get über einen Netzwerkadapter. |
video-info URL |
Welche Videos eine Seite enthält (YouTube, Vimeo usw.) und welche Qualitätsstufen verfügbar sind. |
playlist-info URL [--from N] [--count N] |
Die Videos einer Wiedergabeliste oder eines Kanals, jeweils in einer Zeile in der aufgeführten Reihenfolge: Position, Länge, Titel und Adresse. |
playlist-get URL [-f selector] [-o folder] [--from N] [--count N] |
Lädt die Videos einer Wiedergabeliste oder eines Kanals nacheinander in einen nach der Liste benannten Ordner innerhalb von -o herunter. -f legt wie bei video-get eine Qualität für alle Videos fest (standardmäßig die beste Qualität für jedes Video; bv*[height<=720]+ba/b[height<=720] = bis zu 720p; ba = Originalton; mp3:320, opus:, flac: wie bei video-get). |
video-get URL [-f selector] [-o folder] [--subs langs] [--auto-subs] [--embed-subs] [--adapter name] |
Lädt ein Video herunter. -f übernimmt eine Qualitätsauswahl aus video-info (b = die beste einzelne Datei; ba = nur der Ton in der Originalfassung der Website, ohne Konvertierung; mp3:320, mp3:256, mp3:192 oder mp3:128 = Ton als MP3 mit der angegebenen Bitrate, mp3:0 mit der besten variablen Bitrate; opus: = als Opus; flac: = als FLAC, verlustfrei, aber nicht besser als der Ton der Website; für Konvertierungen wird ffmpeg benötigt). --subs speichert Untertitel daneben: Sprachcodes aus video-info (en,fr) oder all für alle vom Uploader bereitgestellten Untertitel. --auto-subs verwendet stattdessen die automatischen Untertitel der Website; --embed-subs fügt sie in das Video ein (benötigt ffmpeg, MP4 oder MKV). --adapter leitet die Verbindungen von yt-dlp (und ffmpeg) wie bei get über einen Netzwerkadapter. Ist dieser nicht verbunden, wird kein Download gestartet. |
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 |
Name, Dateien (nummeriert) und Größe eines Torrents; SOURCE ist ein Magnet-Link oder eine .torrent-Datei. |
torrent-get SOURCE [-o folder] [--files 0,2] [--use-existing] |
Lädt einen Torrent oder nur einige seiner Dateien herunter. Wenn einige Dateien bereits im Ordner vorhanden sind, wird der Vorgang angehalten und die Dateien werden aufgelistet; --use-existing verwendet sie stattdessen (übereinstimmende Dateien bleiben erhalten, der Rest wird heruntergeladen). |
torrent-create PATH -o file.torrent |
Erstellen Sie einen .torrent für eine Datei oder einen Ordner (Peers finden ihn über das DHT). |
status |
Die Downloads der laufenden App als JSON, mit ihren IDs (die Automatisierungs-API muss aktiviert sein). |
pause ID..., start ID... |
Laufende Downloads anhalten oder gestoppte, in der Warteschlange befindliche oder fehlgeschlagene Downloads in der laufenden App starten (fortsetzen). |
remove ID..., delete ID... |
Downloads aus der Liste der laufenden App entfernen: remove behält die Dateien, delete löscht sie ebenfalls. Ein laufender Download wird zuerst angehalten (pause). |
api on, api off |
Die Automatisierungs-API der laufenden App ein- oder ausschalten. |
misterdownloadmanager-cli help <command>zeigt alle Optionen. Ein fehlgeschlagener Befehl (die App läuft nicht, sie antwortet mit einem Fehler oder ein Download bricht ab) wird mit dem Code 1 beendet. Zum Beispiel:
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 für Skripte und Programme
Mit --json (vor oder nach dem Befehl) gibt jeder Befehl JSON anstelle von Text aus, ein Objekt pro Zeile, damit Skripte und KI-Agenten es lesen können:
| Befehl | Gibt aus |
|---|---|
get, resume |
{"event": "through", "service"}zuerst, wenn der Download über ein Debrid-Konto läuft, dann alle halbe Sekunde eine {"event": "progress", "downloaded", "size", "speed", "connections", "segments"}-Zeile, dann {"event": "done", "path", "size", "seconds"} oder {"event": "paused", "state"} nach Ctrl+C (state ist die Datei, die resume verwendet). |
video-get |
{"event": "progress", "downloaded", "size", "speed"}Zeilen, dann {"event": "done", "path", "subtitles", "subtitle_problems"}: die daneben gespeicherten Untertiteldateien und die Sprachen, die die Website abgelehnt hat ({"code", "name", "reason", "beside"}; beside: Sie wurden beim zweiten Versuch heruntergeladen und neben dem Video statt darin gespeichert). |
torrent-get |
{"event": "progress", "phase", "downloaded", "size", "speed", "peers", "peers_seen"}Zeilen, dann {"event": "done", "path", "size"}, oder {"event": "stopped", "downloaded", "seconds"} mit --seconds. |
video-info |
{"title", "choices": [{"label", "format", "size"}], "subtitles": [{"code", "name", "automatic"}]}; format einer Auswahl ist das, was video-get -f verwendet, code eines Untertitels das, was --subs verwendet. |
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 |
Die Antwort der App, die bereits JSON ist (siehe unten). |
Größen werden in Bytes angegeben (null, solange unbekannt), Geschwindigkeiten in Bytes pro Sekunde. Bei einem Fehler wird {"error": "…"} ausgegeben und der Prozess mit Code 1 beendet. Zum Beispiel:
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}
Die Automatisierungs-API
Andere Programme können die laufende App fragen, was sie herunterlädt, und Downloads anhalten, starten, entfernen oder löschen. Die API ist standardmäßig ausgeschaltet; schalten Sie sie mit misterdownloadmanager-cli api on ein (und mit api off aus).
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.
Was es versteht
Felder (außer token) |
Antwort |
|---|---|
{"query": "list"} |
Jeder Download und die Gesamtgeschwindigkeit: {"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 ist Queued, Downloading, Stopped, Complete oder Error; size ist null, wenn unbekannt; error (warum es fehlgeschlagen ist) ist nur für einen Download in Error vorhanden; category ist der key einer Kategorie; free ist der freie Speicherplatz, auf den Downloads gehen (null, wenn unbekannt). Nur wenn die API eingeschaltet ist. |
{"action": "pause", "ids": [3, 4]} |
Führt Aktionen für Downloads anhand ihrer ID aus: "pause", "start", "remove" (Datei behalten) oder "delete" (Datei ebenfalls löschen). Antwortet mit {"done": [3], "skipped": [{"id": 4, "why": "not running"}]}; ein laufender Download muss angehalten werden, bevor er entfernt oder gelöscht wird. Nur wenn die API eingeschaltet ist. |
{"action": "start_queue", "queue": "Main download queue"} |
Startet (oder mit "stop_queue" stoppt) die Warteschlange dieses Namens (ein Name aus der queues der Liste). Antwortet {"done": [], "skipped": []} oder {"error": …, "code": "unknown-queue"}. Nur wenn die API eingeschaltet ist. |
{"api": true} / {"api": false} |
Schaltet die API ein oder aus: {"api": true}. |
{"url": "https://…", "dir": "D:\\Files", "name": "a.zip", "silent": true} |
Fügt einen Download hinzu, wie es die /d /p /f /n der Befehlszeile tun ("later": true ist /a); ok. "category" (ein Schlüssel aus der categories der Liste) legt ihn in den Ordner dieser Kategorie anstelle des Ordners, den sein Typ auswählt; "queue" (der Name einer Warteschlange) ist die Warteschlange, in der er mit "later" wartet. Auch wenn die API ausgeschaltet ist, wie bei der Befehlszeile. |
{"start_queue": true} |
Startet die Haupt-Download-Warteschlange; ok. |
Eine unbekannte Frage oder Aktion wird mit {"error": "…"} beantwortet, ebenso eine Frage, während die API ausgeschaltet ist (dann mit "code": "api-off", damit Programme dies überprüfen können: der Fehlertext kann sich ändern). Ein falsches Token wird mit denied beantwortet.
Jede Anfrage und Antwort wird Feld für Feld in einem JSON-Schema beschrieben: automation-api.schema.json (auch unter https://misterdownloadmanager.com/automation-api.schema.json). Es wird aus dem Code erstellt, mit dem die App antwortet, sodass es genau bleibt; Programme können überprüfen, was sie senden und lesen, oder ihre Typen daraus generieren.
Beispiele
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"])
Um stattdessen einen Download hinzuzufügen, senden Sie {"token": "…", "url": "https://example.com/a.zip", "silent": true}.
Kostenlos, Open Source, keine Werbung, keine Testversion.
Download GolinksPRO Download Manager