Nodes/DaimalyadNodes/Model Downloader (DaimalyadNodes)
ComfyUI Node

Model Downloader (DaimalyadNodes)

Model Downloader (DaimalyadNodes) — a polite wget that lives inside your graph

By apeirography·Created about a year ago·Updated about a year ago· 0
Model Downloader (DaimalyadNodes)
    • path
    url
    subfoldercheckpoints
    filename
    overwritetrue
    sha256
    timeout_s120
    retries3
    user_agentComfyUI-DaimalyadModelDownloader/1.0

    The name sounds fancier than the reality, and that's a good thing. DaimalyadModelDownloader doesn't call any API, needs no key, and has no opinion about which model host you use. It's a small, careful downloader that lives inside your ComfyUI graph: give it a URL and a folder, and it fetches the file into ComfyUI/models/<subfolder>/, then hands you back the absolute path as a string.

    Why would you want that inside the graph at all? If you're sharing a workflow that depends on a specific checkpoint, LoRA, or VAE, the usual failure mode is the recipient hitting "missing model" - the same "downloading models and installing missing nodes 90% of the time" grind the ecosystem runs on. Slap a downloader node in front of the loader and the workflow can fetch what it needs on first run. It's also handy on headless or remote boxes where you'd rather do everything from one workflow than from a terminal.

    How it works (I read the source so you don't have to): it streams to a temp file right next to the destination and atomically renames it into place, so a dropped connection never leaves a half-written model where a loader can trip over it. Transient network errors get retried with exponential backoff (2s, 4s, 8s...), progress prints to the console every 16 MiB with a speed estimate, and there are a few genuinely thoughtful guardrails: it sniffs the first chunk for HTML/JSON error pages (so a Cloudflare "prove you're human" page doesn't get saved as a 200KB safetensors), checks free disk space against Content-Length, refuses to write 0-byte files, and sanitizes the filename and subfolder so a weird URL can't path-traverse out of /models.

    The inputs that matter. Only two are required:

    • url - the HTTP(S) URL. Must start with http:// or https://; the node errors otherwise.
    • subfolder - relative path under /models, nested is fine (controlnet/myset, upscale_models, whatever your loader scans).

    Everything else is optional. filename defaults to the URL basename. overwrite defaults to True, and that's the one that bites: with the default, every queue run re-downloads the file even when it already exists. Flip it off for fetch-once behavior. sha256 takes a 64-hex hash for integrity checking; on a mismatch the node deletes the bad file and errors out rather than leaving you a corrupted model. timeout_s (default 120), retries (default 3), and user_agent are self-explanatory and usually fine as-is.

    The output is a string, not a model. path is the absolute path to the file - handy for logging or passing on, but you can't plug it into Load Checkpoint. The download lands in a folder ComfyUI already scans, so once it finishes (and you refresh the loader dropdown), your normal loaders see it. That's the pattern: fetch with this node, load with your regular loader.

    Install. Via ComfyUI Manager: Manager → Install Custom Nodes → search daimalyadnodes → Install, then restart. Or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/apeirography/DaimalyadNodes.git
    

    Restart ComfyUI. That's it - requirements.txt is empty and the code uses only the Python standard library (urllib, hashlib, ssl), so there are no pip deps, no CUDA, nothing heavy, and no bundled model downloads. Two honest gotchas: the README's own clone URL still points at the old daimalyad/DaimalyadNodes repo while the pack is tracked as apeirography/DaimalyadNodes (the org appears to have been renamed), and this is a small, low-traffic pack - zero search impressions and essentially no community footprint. Standard custom-node hygiene applies: skim the source before you trust it.

    Troubleshooting is mostly the guardrails doing their job:

    • SHA-256 mismatch - double-check you pasted the full 64-hex hash from the model card; a truncated hash is the usual culprit, and the node deletes the download on mismatch.
    • Download hangs - raise timeout_s past 120 for slow hosts; big files off congested mirrors are the usual case.
    • "Server returned HTML" - the host served a login or error page; gated downloads need cookies or headers the node doesn't support, so you usually can't fix this inside the graph.
    • "Subfolder resolves outside /models" - the path sanitizer caught you putting ../ or an absolute path in there. Keep it relative.
    • On Windows, antivirus can transiently lock the final rename; the node retries 30 times before giving up, so a brief AV scan just costs a few seconds.

    The honest verdict: it's not a download manager - one URL at a time, no parallel or resume magic - but for "make my workflow self-fetch its models," it's small, dependency-free, and does exactly what it claims.

    Categoryutils

    Inputs (8)

    NameTypeDefaultDescription
    urlSTRING
    subfolderSTRINGcheckpointsRelative path under /models (nested OK). Examples: checkpoints, loras, vae, controlnet/myset, clip, unet, upscale_models
    filenameoptSTRING
    overwriteoptBOOLEANtrue
    sha256optSTRING(Optional) 64-hex SHA-256 for integrity check
    timeout_soptINT1205–86400
    retriesoptINT30–10
    user_agentoptSTRINGComfyUI-DaimalyadModelDownloader/1.0

    Outputs (1)

    NameTypeDescription
    pathSTRING