LoadImageFromUrlNode
Load images from the web, base64, or your own folders — all from one text box
- images
- masks
- has_image
Core ComfyUI's Load Image only reads from your input folder, which is limiting the moment you want to pull images from the internet, from base64, or from arbitrary local paths. This node is the generalist replacement: one multiline text box, one URL or path per line, and it handles http/https, file://, data:image/... base64 URIs, ComfyUI's own /view?filename=... references, and plain local paths. It's a modified fork of the well-known comfyui-art-venture LoadImageFromUrl, and honestly the most broadly useful node in this pack.
How it works
It reads each line, figures out the source type, fetches the bytes, runs ImageOps.exif_transpose so phone photos don't come out sideways, and converts everything to RGB or RGBA tensors. Alpha gets special treatment: it extracts the alpha channel as a separate mask output, so transparent PNGs keep their transparency data even when you're working in RGB.
One genuinely nice detail: if the text box is empty, it doesn't error - it hands you a small blank 64x64 image with has_image: false. That makes it safe to use as an optional input where a downstream node can handle a blank.
Inputs that matter
- image - one source per line. This is the whole show; paste URLs, paths, or base64 blobs.
- keep_alpha_channel - keep the RGBA channels instead of flattening to RGB. You usually also want the mask output in this case.
- output_mode - batch (default) merges everything into a single batch tensor; list keeps each image separate. Here's the trap: batch mode requires all images to be the same size and throws an error otherwise. If your URLs point at mixed-size images, switch to list mode. That error message is cryptic the first time you hit it.
Outputs
images (list of IMAGE), masks (list of MASK - extracted alpha, or a zero mask when there's no alpha), and has_image (BOOLEAN). Wire images into a batch pipeline or a VAE Encode, and use has_image for conditional routing.
The README lies a little
The pack README boasts a "configurable network request timeout," but the actual code hardcodes timeout=5 seconds for http fetches. Fine for normal images, painful for a slow CDN serving multi-megabyte PNGs - expect the odd timeout there. Also worth knowing: there's no IS_CHANGED override for local files, but network URLs get a timestamp injected so the node re-fetches them on every run. Local files that change on disk won't re-load unless you touch an input. Standard ComfyUI caching, just annoying here.
Installing
Part of the ZMG pack. ComfyUI Manager → search "ZMG" / "ComfyUI-ZMG-Nodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/vanche1212/ComfyUI-ZMG-Nodes
cd ComfyUI-ZMG-Nodes
pip install -r requirements.txt
Restart, find it under ZMGNodes/image. Needs the pack's base deps (Pillow, numpy, torch, requests) - all in requirements.txt. Batch-load from URLs, watch the size-matching rule, and this becomes a staple.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | STRING | — | |
| keep_alpha_channelopt | BOOLEAN | false | — |
| output_modeopt | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| masks | MASK | — |
| has_image | BOOLEAN | — |