GDM can be driven without its window in three ways:
- La riga di comando dell'app, con le stesse opzioni di IDM: passa un download all'app in esecuzione da uno script, un file batch o un altro programma.
misterdownloadmanager-cli, uno strumento separato da usare nel terminale: scarica file, video e torrent mostrando l'avanzamento, senza aprire l'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.
Gli esempi usano i percorsi di Windows; su macOS e Linux i programmi hanno gli stessi nomi senza .exe.
La riga di comando dell'app
misterdownloadmanager.exe /d URL [/p folder] [/f name] [/a] [/n] [/s]
| Opzione | Cosa fa |
|---|---|
/d URL |
L'indirizzo da cui scaricare. |
/p folder |
Salvalo in questa cartella (altrimenti usa la cartella della categoria indicata in Opzioni → Salva in). |
/f name |
Salvalo con questo nome. |
/a |
Aggiungilo alla coda di download principale senza avviarlo. |
/n |
Modalità silenziosa: non mostrare la finestra Informazioni sul file da scaricare; il download inizia subito (o viene messo in coda, con /a). |
/s |
Avvia la coda di download principale. |
/exit |
Salva e chiudi l'app in esecuzione (il programma di installazione lo usa prima di un aggiornamento). |
/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 file .torrent o un collegamento 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 | Cosa fa |
|---|---|
get URL [-o folder\|file] [-c connections] [-H "Header: value"]... [--checksum hash] [--dns choice] [--adapter name] |
Scarica un file con un massimo di 8 connessioni (-c, da 1 a 128) e mostra l'avanzamento. Ctrl+C lo mette in pausa; resume lo riprende. --checksum verifica il file scaricato: calcola l'hash MD5, SHA-1, SHA-256, SHA-512 o CRC32, con un nome opzionale (sha256:…). --dns sceglie il DNS: system (quello predefinito); un servizio e il metodo per interrogarlo, cloudflare-https, quad9-tls, google-plain, adguard-https, nextdns-tls; gli indirizzi dei server DNS, 9.9.9.9,149.112.112.112; oppure un indirizzo DNS-over-HTTPS. Non ripiega mai sul DNS di sistema. --adapter instrada ogni connessione attraverso una scheda di rete specifica, scelta per nome (Ethernet, wg0) o per uno dei suoi indirizzi. Se la scheda non è connessa, non viene inviato nulla e il download non riesce. I collegamenti a un file hosting supportato da uno dei tuoi account debrid (Opzioni → Account) passano attraverso quell'account, come nell'app. get indica through Real-Debrid; --direct scarica direttamente l'indirizzo (Account del servizio debrid). |
resume file.mdm.json [-c connections] [-H ...] [--direct] |
Riprende un download in pausa o interrotto dal file .mdm.json che si trova accanto. Con un account debrid, funziona come get: se il vecchio collegamento è scaduto, il servizio ne fornisce uno nuovo; --direct riprende direttamente dall'indirizzo. |
install-gallery-dl |
Installa o aggiorna gallery-dl, il programma per scaricare gallerie di immagini. Il suo elenco dei checksum viene verificata con la chiave di firma dell'autore e il programma viene verificato con quell'elenco (Windows e Linux x86-64; sugli altri sistemi, installalo tu). |
gallery-get URL [-o folder] [--limit N] [--adapter name] |
Scarica le immagini di una galleria (una categoria di Wikimedia Commons, un album di Flickr, ...) in una cartella che prende il nome dalla galleria, dentro -o; --limit ne scarica al massimo il numero indicato, scegliendo le prime elencate dal sito. Se lo avvii di nuovo, scarica solo le immagini nuove. --adapter instrada le connessioni di gallery-dl attraverso una scheda di rete specifica, come get. |
video-info URL |
Indica quali video contiene una pagina (YouTube, Vimeo, ...) e le qualità disponibili. |
playlist-info URL [--from N] [--count N] |
Elenca i video di una playlist o di un canale, uno per riga nell'ordine in cui appaiono: posizione, durata, titolo e indirizzo. |
playlist-get URL [-f selector] [-o folder] [--from N] [--count N] |
Scarica i video di una playlist o di un canale uno dopo l'altro, in una cartella che prende il nome dall'elenco, dentro -o. -f imposta una sola qualità per tutti, come video-get (per impostazione predefinita, la migliore per ciascun video; bv*[height<=720]+ba/b[height<=720] = fino a 720p; ba = audio originale; mp3:320, opus:, flac: come per video-get). |
video-get URL [-f selector] [-o folder] [--subs langs] [--auto-subs] [--embed-subs] [--adapter name] |
Scarica un video; -f seleziona una qualità da video-info (b = il miglior file singolo; ba = solo l'audio nel formato del sito, senza conversione; mp3:320, mp3:256, mp3:192 o mp3:128 = audio in MP3 con quel bitrate; mp3:0 = audio al miglior bitrate variabile; opus: = audio in Opus; flac: = audio in FLAC, senza perdita di qualità, ma non migliore dell'audio del sito; per le conversioni serve ffmpeg). --subs salva i sottotitoli accanto al video: indica i codici delle lingue da video-info (en,fr), oppure usa all per scaricare tutti i sottotitoli forniti da chi ha caricato il video; --auto-subs usa invece i sottotitoli automatici del sito; --embed-subs li incorpora nel video (serve ffmpeg; MP4 o MKV). --adapter instrada le connessioni di yt-dlp e ffmpeg attraverso una scheda di rete specifica, come get. Se la scheda non è connessa, il download non si avvia. |
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, file (numerati) e dimensione di un torrent; SOURCE è un link magnet o un file .torrent. |
torrent-get SOURCE [-o folder] [--files 0,2] [--use-existing] |
Scarica un torrent o solo alcuni dei suoi file. Se alcuni sono già nella cartella, il comando si interrompe e li elenca; --use-existing li usa invece (i file corrispondenti vengono mantenuti, gli altri scaricati). |
torrent-create PATH -o file.torrent |
Crea un .torrent da un file o da una cartella (i peer lo trovano tramite la DHT). |
status |
I download dell'app in esecuzione, in formato JSON, con i relativi ID (l'API di automazione deve essere attiva). |
pause ID..., start ID... |
Mette in pausa i download in corso oppure avvia (riprende) quelli interrotti, in coda o non riusciti nell'app in esecuzione. |
remove ID..., delete ID... |
Rimuove i download dall'elenco dell'app in esecuzione: remove mantiene i relativi file, delete li elimina. Prima mette in pausa i download in corso (pause). |
api on, api off |
Attiva o disattiva l'API di automazione dell'app in esecuzione. |
misterdownloadmanager-cli help <command>mostra tutte le opzioni. Se un comando non riesce (l'app non è in esecuzione, risponde con un errore o un download si interrompe), termina con il codice 1. Per esempio:
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 per script e programmi
Con --json (prima o dopo il comando), ogni comando stampa JSON anziché testo, con un oggetto per riga, così che script e agenti AI possano leggerlo:
| Comando | Cosa stampa |
|---|---|
get, resume |
{"event": "through", "service"}prima, se il download passa attraverso un account debrid, poi una riga {"event": "progress", "downloaded", "size", "speed", "connections", "segments"} ogni mezzo secondo, poi {"event": "done", "path", "size", "seconds"} oppure {"event": "paused", "state"} dopo Ctrl+C (state è il file usato da resume). |
video-get |
{"event": "progress", "downloaded", "size", "speed"}righe, poi {"event": "done", "path", "subtitles", "subtitle_problems"}: i file dei sottotitoli salvati accanto al video e le lingue rifiutate dal sito ({"code", "name", "reason", "beside"}; beside: i sottotitoli sono stati scaricati al secondo tentativo, accanto al video anziché al suo interno). |
torrent-get |
{"event": "progress", "phase", "downloaded", "size", "speed", "peers", "peers_seen"}righe, poi {"event": "done", "path", "size"}, o {"event": "stopped", "downloaded", "seconds"} con --seconds. |
video-info |
{"title", "choices": [{"label", "format", "size"}], "subtitles": [{"code", "name", "automatic"}]}; format di una scelta indica cosa usa video-get -f, mentre code di un sottotitolo indica cosa usa --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 risposta dell'app, già in formato JSON (vedi sotto). |
Le dimensioni sono espresse in byte (null se sconosciute), la velocità in byte al secondo. In caso di errore stampa {"error": "…"} e termina con il codice 1. Per esempio:
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}
L'API di automazione
Altri programmi possono chiedere all'app in esecuzione cosa sta scaricando e mettere in pausa, avviare, rimuovere o eliminare i download. L'API è disattivata per impostazione predefinita; attivala con misterdownloadmanager-cli api on (e disattivala 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.
Cosa supporta
Campi (oltre a token) |
Risposta |
|---|---|
{"query": "list"} |
Ogni download e la velocità totale: {"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 o Error; size è null se sconosciuto; error (perché non è riuscito) è presente solo per un download in Error; category è il key di una categoria; free è lo spazio libero dove vanno i download (null se sconosciuto). Solo con l'API attiva. |
{"action": "pause", "ids": [3, 4]} |
Agisce sui download tramite ID: "pause", "start", "remove" (mantiene il file) o "delete" (elimina anche il file). Risponde {"done": [3], "skipped": [{"id": 4, "why": "not running"}]}; prima di rimuovere o eliminare un download in corso, è necessario metterlo in pausa. Solo quando l'API è attiva. |
{"action": "start_queue", "queue": "Main download queue"} |
Avvia (o con "stop_queue", interrompe) la coda con quel nome (un nome preso da queues dell'elenco). Risponde {"done": [], "skipped": []}, o {"error": …, "code": "unknown-queue"}. Solo con l'API attiva. |
{"api": true} / {"api": false} |
Attiva o disattiva l'API: {"api": true}. |
{"url": "https://…", "dir": "D:\\Files", "name": "a.zip", "silent": true} |
Aggiunge un download, come fanno le opzioni /d /p /f /n della riga di comando ("later": true è /a); ok. "category" (una chiave presa da categories dell'elenco) lo inserisce nella cartella di quella categoria invece di quella scelta dal suo tipo; "queue" (il nome di una coda) è la coda in cui attende con "later". Anche con l'API disattivata, come la riga di comando. |
{"start_queue": true} |
Avvia la coda di download principale; ok. |
Una domanda o azione sconosciuta riceve risposta {"error": "…"}, così come una domanda mentre l'API è disattivata (in quel caso con "code": "api-off", che i programmi possono controllare: il testo dell'errore potrebbe cambiare). Un token errato riceve risposta denied.
Ogni richiesta e risposta è descritta, campo per campo, in uno schema JSON: automation-api.schema.json (anche su https://misterdownloadmanager.com/automation-api.schema.json). È generato dal codice con cui l'app risponde, quindi resta sempre esatto; i programmi possono usarlo per verificare ciò che inviano e leggono, o per generare i propri tipi.
Esempi
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"])
Per aggiungere un download, invia {"token": "…", "url": "https://example.com/a.zip", "silent": true}.
Gratuito, open source, senza pubblicità, senza periodo di prova.
Download GolinksPRO Download Manager