Nodes/Customizable API Call Nodes by BillBum/Load Image from URL (BillBum)
ComfyUI Node

Load Image from URL (BillBum)

The glue node that turns API image URLs back into actual ComfyUI images

By AhBumm·Created 2 years ago·Updated 3 months ago· 11
Load Image from URL (BillBum)
    • IMAGE
    url

    Every node in BillBum's pack that generates an image returns a string - a URL or a base64 data URL - not a tensor you can preview or wire into a VAE decode. That's where Load Image from URL (BillBum) comes in. It's the last mile: take that string, hand it to this node, and get a real IMAGE out the other side that you can preview, save, upscale, or feed into the next node. If you use any of the pack's image API nodes, you'll be reaching for this constantly.

    How it works

    It's aggressively tolerant, which is the nice part. The url input accepts three things:

    • A plain http:// or https:// URL - it fetches it with requests (10 second timeout, a few retries on connection hiccups).
    • A data: URL - the data:image/png;base64,.... blobs that the pack's DALL-E, Flux, and Ideogram nodes hand you.
    • Raw base64 with no prefix at all. It just tries to decode it.

    It decodes with PIL, converts everything to RGBA, and normalizes to the 0–1 float range ComfyUI expects. Two genuinely handy details: you can paste multiple URLs separated by newlines (or commas) and it returns a batch image, and it pads all images to the same size so the batch stacks cleanly. That's the kind of thing that usually breaks in hand-rolled nodes, so it's nice to have built in.

    The inputs and outputs that matter

    There's exactly one input, url (a STRING), and one output, IMAGE. That's the whole node. If the string is empty it returns None, so it's safe to leave dangling.

    The output IMAGE plugs straight into a Preview Image, Save Image, or anything downstream that expects a tensor. In a typical workflow it sits between an API node like Custom Flux API Node (which outputs base64_url) and your preview/save stack.

    Installing it

    This is one of ~28 nodes in the AhBumm/ComfyUI_BillBum_APIset_Nodes pack, so you don't install it alone. ComfyUI Manager is the easy path: search "billbum" and install "Customizable API Call Nodes by BillBum". Or clone it manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/AhBumm/ComfyUI_BillBum_APIset_Nodes.git
    cd ComfyUI_BillBum_APIset_Nodes
    pip install -r requirements.txt
    

    Then restart ComfyUI. Dependencies are light - requests, pillow, numpy, torch (which you already have), plus tenacity for retries. No model downloads, nothing heavy.

    Common issues

    The two things that bite people:

    • The URL has to be directly fetchable. This node fetches server-side, so CORS doesn't matter, but a URL behind a login, an expiring presigned URL, or a hotlink-protected host will fail with an HTTP error. If you're pulling from a service that signed the URL, grab a fresh one.
    • It's fetch-and-decide, not stream-and-preview. Big images take a moment; it downloads the whole thing before handing you a tensor. For normal sizes that's a non-issue.

    One small trap: it retries on connection errors and timeouts but not on HTTP error codes, so a 403 comes straight back at you. That's correct behavior - a 403 won't fix itself - just don't expect it to power through auth failures.

    If you already have base64 data rather than a URL, this same node handles it, but the pack also ships a dedicated Base64 URL to Image node if you want the explicit split. Either way, this is the node that makes the whole API-call-and-see-the-picture loop feel like it's part of ComfyUI instead of a detour to a browser.

    CategoryBillBum_API/Utils

    Inputs (1)

    NameTypeDefaultDescription
    urlSTRING

    Outputs (1)

    NameTypeDescription
    IMAGEIMAGE