π€ HuggingFace Model Downloader Pro
Download HuggingFace models without leaving the graph
- status_report
- download_history
Getting a model into ComfyUI usually means: find the file on HuggingFace, click through folders, hit download, wait, then move the file into the right models/ subfolder and restart. If you've done that a few dozen times you start to hate it, which is why every model-downloader node exists. HuggingFaceDownloader ("HuggingFace Model Downloader Pro") is a reasonably polished take on the genre: paste multiple direct file URLs, and it downloads them straight into the right ComfyUI model folders, threaded, with resume support and progress output.
This one is not a huggingface_hub wrapper. It uses plain requests with streaming downloads - which means it works with any direct file URL, not just HF's API, and it's why there's no extra huggingface_hub dependency to install. It also means it's only as polite as you are: no fancy repo-resolution, no diff/allowlist logic. You give it exact file links and it fetches them.
The format
download_links is a multiline box, one download per line, whitespace-separated:
https://huggingface.co/org/model/resolve/main/file.safetensors vae my_vae.safetensors
https://huggingface.co/org/other/resolve/main/model.ckpt checkpoints
That's URL folder [filename]. The folder is relative to your ComfyUI models/ directory, and the filename defaults to whatever's at the end of the URL if you omit it. The default example line (flux_vae.safetensors vae) should make the pattern click immediately - this is the "fetch the one file I need" workflow.
Inputs that matter
download_links- the list, as above. Each line needs at least URL and folder.auto_download(default on) - off means it just checks and reports what would download. Handy for dry-running a list.max_concurrent_downloads(1β10) - how many threads run at once. 3 is fine; big files benefit from a couple of parallel streams, not ten.max_download_speed_mbps(default 0) - 0 means unlimited. Set it if you're saturating a shared connection.enable_resume(default on) - interrupted downloads continue from where they stopped via a.tmpfile and an HTTP Range request. This one earns its keep on multi-gigabyte checkpoints.auto_organize(default off) - when on, the node routes files by extension:.safetensors,.ckpt,.pt,.bin,.pthall go tocheckpoints/, and it falls back to filename keyword matching forvae,loras/lycoris,controlnet,embeddings. It's a nice touch, but read the mapping before trusting it - every.ptfile in your list is going to checkpoints, whether it's a LoRA or not.hf_token(optional) - needed for gated repos. Sent as a Bearer header. Same caveat as any token stored in workflow JSON: it's in plaintext in the file.
Outputs are status_report (per-line results) and download_history (a summary the node keeps in .hf_download_history.json inside your models dir). Both are strings; stick them in a text display to read the report in the UI.
Where people trip up
The whitespace-separated format is the main footgun: a filename or folder with a space breaks parsing, so rename or rename-while-downloading (vae my file.safetensors won't work - use my_file.safetensors). Also note it skips files that already exist unless validate_files is on, and even then validation is by byte size (with an optional SHA-256 check). Size mismatch β it re-downloads, which is usually what you want for a truncated file.
And a realism note: this node downloads files you paste URLs for, not "the latest Flux dev" by name. If you want repo-level resolution or model search, this isn't it - it's the paste-a-link-and-walk-away tool, and it's good at that narrow job.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/comfyuistudio/ComfyUI-Studio-nodes
Restart and it's under "STUDIO NODES". It needs requests, which ComfyUI already ships - nothing extra to install. Small pack, single commit, skim huggingfacedownloader.py if you want to confirm the resume and auth behavior before handing it a token.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| download_links | STRING | https://huggingface.co/StableDiffusionVN/Flux/resolve/main/Vae/flux_vae.safetensors vae flux_vae.safetensors | β |
| auto_download | BOOLEAN | true | β |
| max_concurrent_downloads | INT | 31β10 | β |
| max_download_speed_mbps | FLOAT | 0.00β1000 | β |
| enable_resume | BOOLEAN | true | β |
| validate_files | BOOLEAN | false | β |
| enable_notifications | BOOLEAN | true | β |
| auto_organize | BOOLEAN | false | β |
| hf_tokenopt | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| status_report | STRING | β |
| download_history | STRING | β |