Nodes/Image Misc/Image Download and Load
ComfyUI Node

Image Download and Load

A Load Image that fetches its own file, so your workflow travels

By set-soft·Created about a year ago·Updated 8 months ago· 2
Image Download and Load
  • image_bypass
  • mask_bypass
  • image
  • alpha_mask
base_urlhttps://raw.githubusercontent.com/set-soft/AudioSeparation/refs/heads/main/example_workflows/
filenameaudioseparation_logo.jpg
local_name
embed_transparencyfalse

Every shared ComfyUI workflow dies the same death: the other person loads it, the Load Image node shows "missing file," and the nice example image you embedded is nowhere to be found. Image Download and Load exists to kill that failure mode. You give it a URL and a filename, it downloads the image into ComfyUI/input/ on first run, and from then on behaves exactly like a normal Load Image - the file is already there, cached locally, no network required.

This is the original node of the Image Misc pack (it was the whole of v1.0) and it's still the author's go-to pattern for shipping self-contained workflows with example inputs.

How it works

The mechanism is simple and robust. It joins base_url + filename into a URL, checks whether the file already exists in your input directory, and only downloads if it's missing - so re-running a workflow doesn't re-download anything. The download itself goes through the author's seconohe helper, which uses the requests library when it's installed (it usually is, as an indirect ComfyUI dependency) and falls back to Python's built-in urllib otherwise. It writes to a .partial file and resumes interrupted transfers, which is more care than most custom node downloads bother with. Once the file lands, the node literally delegates to ComfyUI's own LoadImage class, so the image handling, orientation and everything else matches what you're used to.

The inputs and outputs that matter

  • base_url - the folder URL, e.g. https://example.com/images/. A trailing slash is added for you.
  • filename - e.g. photo.jpg. Also the local cache name unless you set local_name.
  • local_name (optional) - save it under a different name locally. Leave empty to use filename.
  • image_bypass / mask_bypass (optional) - wire a real image/mask in here to use it instead of the download. This is the shareable-workflow trick: the other person mutes your bypassed Load Image and the node downloads; you keep your own image connected.
  • embed_transparency - if the PNG has transparency, output an RGBA image (4 channels) rather than image + separate mask. Note not every downstream node accepts RGBA.

Outputs are image and alpha_mask. The node is marked as an output node, so it can run standalone and previews its result.

Installing it

Image Misc via ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/set-soft/ComfyUI-ImageMisc
cd ComfyUI-ImageMisc && pip install -r requirements.txt

Restart, and it sits under image/io. Nothing to download beyond the pack itself; requests is optional and only makes downloads more robust.

Where people get burned

The bypass inputs are all-or-nothing: connect only image_bypass and the node warns and hands you an empty mask on the other output. Connect both or ignore them entirely. The other gotcha is that the URL has to be a direct file link - a GitHub blob page or a page that renders the image will fail; use the raw URL. And since it caches by filename, if the file changes upstream, you're stuck with the old local copy until you delete it from input/. The default base_url points at the author's AudioSeparation example workflows, so it's a working example out of the box - just replace it with your own host.

Categoryimage/io

Inputs (6)

NameTypeDefaultDescription
base_urlSTRINGhttps://raw.githubusercontent.com/set-soft/AudioSeparation/refs/heads/main/example_workflows/The base URL where the image file is located.
filenameSTRINGaudioseparation_logo.jpgThe name of the image file to download (e.g., photo.jpg, art.png).
image_bypassoptIMAGEIf this image is present will be used instead of the downloaded one
mask_bypassoptMASKIf this mask is present will be used instead of the downloaded one
local_nameoptSTRINGThe name used locally. Leave empty to use `filename`
embed_transparencyoptBOOLEANfalseCreate RGBA images when they have transparency.

Outputs (2)

NameTypeDescription
imageIMAGE
alpha_maskMASK