Model Downloader
Fetch a 7GB checkpoint without leaving the graph
- status
- file_path
- message
- progress_percentage
Downloading models is the part of ComfyUI nobody enjoys. You find a checkpoint, copy a URL, open a terminal, curl it into models/checkpoints/, and pray the filename isn't mangled. HMT_ModelDownloader exists to kill that whole detour: it's an output node that pulls a file - or an entire GitHub repo - straight into your models/ folder when you hit Queue. Paste a URL, pick a destination, run. That's the pitch.
It comes from the HMT Suite pack by tuyenhm68, a small utility pack whose flagship is this node. The pack only hard-depends on requests, so nothing heavy sneaks in with it.
How it works
Pick a download_type and the node hands off to one of two backends:
file- a direct URL. The downloader usesrequests, splits the transfer across a few parallel connections, and includes resume, disk-space checking, and file-size verification. It's more careful than your average "grab a URL" node.github- it parses the URL and handles repos,blob/file links, raw URLs, and release assets. A repo URL gets downloaded as a zip and (by default) extracted; a file link lands in your chosen folder.
Progress is tracked per download and pushed to the console every 10%, and it keeps a live record you can read from Python via ModelDownloaderNode.get_download_progress(). In the UI you just watch the progress_percentage output tick up.
The inputs that matter
urlanddownload_type- the source and its kind. Obvious, but the source of most errors, so double-check the link.destination_folder- a name relative toComfyUI/models/:checkpoints,loras,vae,unet, whatever. It creates the folder if needed.filename- leave blank to auto-detect from the URL, or override to rename.overwrite- the trap. With itfalse(default), if the file or extracted folder already exists the node skips the download and returns success with a note about the existing size. That's a feature - it makes re-running a workflow cheap - but it's also how you think you fetched a new model and actually got the old one. If you changed a URL and it "succeeded" suspiciously fast, checkoverwrite.
Two optional inputs are worth knowing: hf_token lets you grab private or gated Hugging Face models, and extract_repo (default true) controls whether a GitHub repo is unzipped or kept as a zip.
Outputs
Four: status (success/error), file_path, message, and progress_percentage. For a download node these are mostly read-only - you wire nothing downstream. It runs the moment the queue starts, so put it first and let it do its thing while the rest of the graph waits.
Install
The standard HMT Suite install (this is one pack, so all its nodes come together):
cd ComfyUI/custom_nodes
git clone https://github.com/tuyenhm68/ComfyUI-HMT-Suite.git
cd ComfyUI-HMT-Suite
pip install -r requirements.txt
Restart ComfyUI and you'll find it under HMT Suite > Utils > Model Downloader. Or just search "ComfyUI-HMT-Suite" in ComfyUI Manager and install there - same result, no terminal.
Common issues
- Download fails with a network error - some servers (and Cloudflare fronts) block scripted downloads. Verify the URL works in a browser first.
- "File not found after download" - it went where you told it:
ComfyUI/models/<destination_folder>/. Check write permissions there too. - "Skipped" when you expected a download -
overwritewas false and the file already exists, as above.
Where people actually get burned: a half-finished download on a flaky connection, then re-running with overwrite: false skips the corrupt file. If your model loads as garbage, delete the file and re-download with overwrite: true. Minor, but it'll save you an hour someday.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| download_type | COMBO | file | 2 options: file, github |
| url | STRING | — | |
| destination_folder | STRING | checkpoints | — |
| filename | STRING | — | |
| overwrite | BOOLEAN | false | — |
| hf_tokenopt | STRING | — | |
| extract_repoopt | BOOLEAN | true | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| file_path | STRING | — |
| message | STRING | — |
| progress_percentage | INT | — |