🌐 Universal Asset Downloader
Paste a model link and let this node decide which ComfyUI folder it belongs in
- download_message
The joke in this community is that ComfyUI's real hobby is downloading models and installing missing nodes - the r/comfyui classic is a thread about spending "90% of the time" on exactly that. Universal Asset Downloader shaves off one slice: paste a Hugging Face or Civitai link into the node, and it figures out what the file actually is - LoRA, VAE, checkpoint, ControlNet, whatever - and drops it into the correct folder under ComfyUI/models. No shell commands, no "is this .safetensors a LoRA or a checkpoint?" guesswork, no file landing in the wrong models subfolder.
The name is a slight lie, in the best way. There's no single "universal asset"; the trick is that a model link is rarely one file. A Hugging Face repo can bundle a diffusion model, a LoRA, a VAE, a text encoder, and a couple of alternate checkpoints in one place. A Civitai URL can point at a model, a specific version, or an image recipe. This node turns that mess into an install plan before it touches your disk.
How it works
It's an output node under utilities/downloaders - not part of your generation graph. You run it once like a utility, and the file lands where your loaders will find it.
The flow is analyze-first. Hit Analyze and it fetches provider metadata only - nothing downloads yet. For Hugging Face it uses the Hub's native stack (huggingface_hub's hf_hub_download plus hf_xet, the Xet adaptive-concurrency backend), which is a real upgrade over the old streamed requests loop this pack shipped before v2.1. Then it classifies the file's role from provider declarations and filename signatures, each scored with a confidence value in the source. High-confidence files get routed straight to the right folder. Anything too murky gets dumped in models/unclassified for you to eyeball rather than silently installed as a checkpoint - guessing wrong on a multi-gigabyte file is worse than asking for one confirmation.
Only after classification does it download: staging into a temp file, checking provider size and SHA256 when available, running a basic format check, and only then atomically promoting the file into place with os.replace. A failed verification deletes the half-download instead of leaving it in your models folder.
Inputs and outputs that matter
Three required fields, and honestly only one of them is you:
- asset_url - paste the Hugging Face, Civitai, or MEGA link. Multiline, so several links at once works.
- asset_type - defaults to Auto, and Auto is the whole point. You override it (Checkpoint, LoRA, VAE, ControlNet, Upscale Model, CLIP, UNET, TextualInversion) only when the classifier guesses wrong and you know better; it force-routes with full confidence.
- force_download - off by default. Turn it on to re-download and repair something that's already on disk instead of skipping it.
Optional stuff: civitai_api_key and hf_token unlock gated or private assets (tokens go only to their matching provider). selection_json is for programmatic selection. And base_path is a ghost - it's kept so old workflows deserialize, but v2 ignores it and always writes beneath ComfyUI/models.
The single output, download_message, is a STRING that reads like ✓ model.safetensors → models/checkpoints (2.3 GB, downloaded + verified). Nothing wires onward from an output node - the text is the report.
Installing it
ComfyUI Manager → search "Universal Asset Downloader" and install the Registry version. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/thaakeno/comfyui-universal-asset-downloader.git
cd comfyui-universal-asset-downloader
python -m pip install -r requirements.txt
Then restart ComfyUI and hard-refresh the browser. Its real dependencies are requests, huggingface_hub>=0.36.2, and hf_xet>=1.5.2 - no bundled model files, nothing heavy like torch gets pulled in. It's AGPLv3.
Gotchas
Where people get burned:
- A plain graph run on a multi-file repo refuses to guess. If your URL resolves to several files with no clear primary, the node returns "Use Analyze in the v2 node UI and choose" rather than installing the wrong thing. That's a feature - click Analyze, tick the boxes you want, hit Install selected.
- MEGA is recognized but installs are refused. MEGA doesn't expose trustworthy metadata or hashes, so v2 won't safely route it. Grab MEGA files manually.
- Something landed in
models/unclassified. Check there first before assuming the download failed; it's the conservative bucket, not an error state. - New files don't appear in your checkpoint/LoRA pickers until you refresh them (or restart ComfyUI). The download is fine; the picker just needs to rescan.
One last thing: the pack exposes a small backend API that other nodes - MiniMax H3 Studio's Model Setup panel, for instance - call to install models on your behalf, so you may meet UAD working silently in the background. For everything else, it's the friendliest way to go from a model link to a working ComfyUI install without touching a terminal.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| asset_url | STRING | — | |
| asset_type | COMBO | Auto | 9 options: Auto, Checkpoint, LoRA, VAE, ControlNet, Upscale Model, +3 |
| force_download | BOOLEAN | false | — |
| selection_jsonopt | STRING | — | |
| civitai_api_keyopt | STRING | — | |
| hf_tokenopt | STRING | — | |
| base_pathopt | STRING | ./ | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| download_message | STRING | — |