External Image Batch (ComfyDeploy)
Feed your workflow a whole pile of images at once
- image
External Image Batch (ComfyDeploy) is the multi-image version of External Image from the ihmily/comfy-deploy pack. Where the single-image node takes one URL and hands back one tensor, this one takes a list of URLs, downloads all of them, and outputs a list of images. It's for deployed workflows that need more than one reference: IPAdapter with multiple style references, multi-angle character consistency, batch img2img.
It's also the odd one out in the family, and it pays to know why before you use it. Its default_value isn't an image - it's a string that holds a JSON-ish list of URLs. That quirk exists because a batch input is just a list of strings over the wire, so the node treats the value as text and parses it.
How it works
Open nodes/comfydeploy_external_image_batch.py and the parsing is deliberately loose:
- If the value is a JSON array (contains
["/["), it's parsed withjson.loads. - If it's a plain comma-separated list, it's split on commas.
- Empty entries are skipped.
Each URL is fetched with httpx (3 retries, 60s timeout, browser user-agent), then EXIF-transposed, converted to RGB (or RGBA if you enable keep_alpha_channel), and normalized to a 0–1 float tensor. The node returns a list of these tensors - that's what the is_list: true in its schema means. If every URL fails to load, it raises a RuntimeError rather than returning an empty batch.
Inputs and outputs that matter
- param_name (required, default
"input_image") - the request key; callers send a JSON array of image URLs under it. - keep_alpha_channel (required, default off) - same story as the single-image node: keep it off unless you genuinely need RGBA in the pipeline.
- default_value (optional, default
"[]") - for local testing you type URLs into this text widget, like["https://…/a.png", "https://…/b.png"].
The output is image, a list, so it wires into nodes that consume lists - an IPAdapter batch reference port, a node that iterates over images, or a for-each style structure. A regular single-image input will not accept it.
Installing it
One install gets the whole pack, and this node comes along:
cd ComfyUI/custom_nodes/
git clone https://github.com/ihmily/comfy-deploy.git
cd comfy-deploy
pip install -r requirements.txt
Or ComfyUI Manager, search "comfy-deploy" (author ihmily). No model downloads. The README's version gate applies: pack v1.0.1+ needs ComfyUI 0.3.67+. And as with every node here, the deploy half only works once you've got comfy-deploy-admin running and configured (endpoint + API key in the ComfyDeploy panel).
Gotchas
Same server-side reachability rule as the single-image node: every URL is fetched by the ComfyUI server, so localhost URLs or private-network paths fail in production - host images publicly or sign the URLs. And because parsing is loose, keep your input as a clean JSON array; a stray comma or a bare URL mixed with JSON is exactly the kind of thing that produces a confusing partial batch. Also note the default is the string "[]" - if a caller omits the parameter and you've left it empty, the node raises a RuntimeError because it loaded zero images. Set a sensible default batch if you want calls without the parameter to survive.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| param_name | STRING | input_image | — |
| keep_alpha_channel | BOOLEAN | false | — |
| default_valueopt | STRING | [] | — |
| display_nameopt | STRING | — | |
| descriptionopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |