Load Images From URL List (Soze)
Paste a List of Image URLs, Get Nine IMAGE Outputs — No Keys, No Drama
- image1
- image2
- image3
- image4
- image5
- image6
- image7
- image8
- image9
- loaded_count
- status
Somewhere between "download one image" and "load a whole folder" there's a gap, and this node exists to fill it. You paste a list of image URLs - one per row, up to nine - and it fetches each one into its own IMAGE output. No API key, no account, no intermediate saving to disk. It's the laziest way to get a handful of reference images into a workflow when you can't be bothered to download them by hand first.
The name is honest and the behavior is simple. urls is a multiline string where every row is a URL. Row 1 becomes the image1 output, row 2 becomes image2, and so on through image9. Empty rows just output None, which matters more than you'd think: you can leave slots open and ComfyUI treats an unconnected IMAGE output as if the input isn't there. You also get a loaded_count integer and a status string so a downstream node can react if, say, only three of five URLs actually loaded.
Under the hood it's nothing fancy: requests streams each URL, PIL opens it, EXIF orientation gets applied, and the image is converted to RGB. Each URL is fetched independently, and one bad row doesn't take the others down with it - failures get logged into the status output and the rest keep loading. That resilience is the reason you'd reach for this over a single-image downloader when you're feeding references into an img2img, ControlNet, or character-consistency pass.
Where people get burned: the URL has to be a direct image link, not a page. Paste a Pinterest page or a Google Drive share link and you'll get an error row, because those hosts serve HTML, not pixels. Anything behind a hotlink block - many CDNs, some art sites - will 403 to a bare requests call with no browser headers. And only the first nine rows are read, so a tenth URL silently gets ignored. If you need more than nine, chain a second node or use the pack's folder loader instead.
Install
Everything lives in the Soze pack, so the setup is the same for all of them:
cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt
Or install ComfyUI Soze from ComfyUI Manager and let it pull the requirements for you. This particular node only really needs requests, which you almost certainly already have.
Wiring it up
Each image lands on its own output, not a single batch, so you decide what to do with them. Common patterns: drop image1 straight into a Load Image-style input, or fan them into a batch concatenation node so one prompt can see all your references. Because image1 through image9 are all the same IMAGE type, you can mix and match freely - feed one into an img2img pass, another into a ControlNet preprocessor, and ignore the rest.
One tip: this node has no retry logic and no timeout on the fetch, so a slow or half-dead host can stall a run. Point it at fast, reliable image hosts and your runs stay predictable.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| urls | STRING | One URL per row. Up to 9 rows are used; empty/missing rows output None. |
Outputs (11)
| Name | Type | Description |
|---|---|---|
| image1 | IMAGE | — |
| image2 | IMAGE | — |
| image3 | IMAGE | — |
| image4 | IMAGE | — |
| image5 | IMAGE | — |
| image6 | IMAGE | — |
| image7 | IMAGE | — |
| image8 | IMAGE | — |
| image9 | IMAGE | — |
| loaded_count | INT | — |
| status | STRING | — |