Nodes/ComfyUI Model Batch Downloader/Model Download Batch (JSON)
ComfyUI Node

Model Download Batch (JSON)

Same batch downloader, but the JSON is the interface

By watarika·Created 2 months ago·Updated 2 months ago· 0
Model Download Batch (JSON)
  • passthrough
  • passthrough
  • download_result
manifest_json[]

Model Download Batch (JSON) is the exact same download node as Model Download Batch, minus the table UI. Instead of a list editor with Add/Remove buttons, you get a plain multiline text box where you type - or paste, or have another node generate - the manifest JSON directly. Same core, same aria2c engine, same download_result output that feeds the pack's "(Downloaded)" loaders.

So why does this variant exist? Three reasons.

Sharing. A table UI doesn't travel. A JSON block does. If you're sending someone a workflow that needs six models, you can paste the manifest into a comment, a gist, or a code block in your README, and they paste it straight in.

Scripting and generation. You can have a node build the manifest for you - a URL-list node, a text processor, whatever - and feed its string output into this node's manifest_json input. The plain version's widget is a hand-operated table; this one is a programmable input.

Versioning. Manifests are config. Keeping them as text you can diff beats remembering what you clicked in a table.

The manifest schema

It's a JSON array with at least one object per file. The fields, from the README:

  • url (required) - HTTP/HTTPS URL, e.g. https://huggingface.co/owner/repo/resolve/main/anima-model.safetensors
  • model_type (required) - one of the thirteen categories: checkpoints, diffusion_models, text_encoders, vae, loras, controlnet, embeddings, upscale_models, onnx, sam3, llm, ultralytics_bbox, ultralytics_segm
  • subfolder - nests the file under the model root, e.g. "anima"
  • filename - defaults to whatever the server's response or URL resolves to
  • id - how the loaders reference this file; defaults to the filename without its final extension
  • split - 1–16, default 16; parallel connections per file for aria2

For the JSON version, the README recommends always setting an explicit id. The reason: if you leave it out and the URL resolves to model.fp16.safetensors, your ID becomes model.fp16 - and the loaders match on that string. An explicit, stable id is the difference between a manifest that quietly breaks when a filename changes and one that doesn't.

Civitai URLs need special handling here, since the API URL tells you nothing about the filename. The table UI has a "Resolve filename / ID" button for exactly that; in the JSON version you're on your own, which is another argument for spelling out id and filename by hand for Civitai entries.

Wiring it up

Inputs: manifest_json (the JSON) and an optional arbitrary-type passthrough. Outputs: passthrough (passes its input through untouched) and download_result, which you connect to any "(Downloaded)" loader with the matching id. Like its sibling it's an output node that reruns every queue, so the downloads fire on each run - and existing files get skipped, not re-downloaded.

Install and gotchas

Same as the pack's other nodes: ComfyUI Manager search for "ComfyUI Model Batch Downloader", or git clone https://github.com/watarika/ComfyUI-Model-Batch-Downloader.git into ComfyUI/custom_nodes, then restart. No pip dependencies. You do need aria2c on the PATH that starts ComfyUI - that's the one external requirement and it isn't installed for you.

Troubleshooting is the shared pack list: aria2c is required means install the binary; Hugging Face 401/403 means check HF_TOKEN in the environment; Civitai 403 means use the civitai.red/api/download/models/{id} URL and check CIVITAI_API_TOKEN. And duplicate id means two entries claim the same ID - assign one a unique id. Invalid JSON gets rejected up front with a clear error, which is the nicest part of the text-input life.

Categorymodel/download

Inputs (2)

NameTypeDefaultDescription
manifest_jsonSTRING[]
passthroughopt*

Outputs (2)

NameTypeDescription
passthrough*
download_resultDOWNLOAD_RESULT