Flux Load Image (Ace Data Cloud)
The one node in this pack that never needs your API key
- image
Flux Load Image is the back half of an API workflow. You generated an image on someone else's GPU, the service handed you a URL, and now you want that URL to become an actual IMAGE you can upscale, detail, or save. That's all this node does - no key, no request to the Flux API, no credits spent. It just downloads.
What it is
One input: media_url, a string. One output: image, a standard ComfyUI IMAGE.
Because it's a plain tensor out, it drops into any local graph the same way a LoadImage does: feed it a FaceDetailer, an upscaler, a save node, a ControlNet preprocessor, whatever. The difference from core LoadImage is that it reads from the network instead of your input/ folder - which is exactly why it exists, since nothing else in ComfyUI can pull in a cloud result.
How it works
Under the hood the pack (media.py) is deliberately fussy, and the fuss is the useful part:
- Host allowlist. Only
https://cdn.acedata.cloud,cdn.acedata2.cloud,platform.cdn.acedata.cloudandplatform2.cdn.acedata.cloudare accepted, with no embedded credentials. Anything else - your own web host, a random CDN, anhttp://link - is rejected outright. This is a security feature, not an oversight: an unrestricted "download this URL" node is a nice little SSRF toy. - 3 attempts, small backoff. Transient network blips are retried; redirects are not followed.
- 128 MiB ceiling, checked against
Content-Lengthand then enforced while streaming, so a lying header doesn't get you. - Decode: PIL opens it, converts to RGB, and you get a float32 tensor scaled to 0–1 with shape
[1, H, W, 3].
Two consequences worth knowing. Alpha is dropped - the conversion is to RGB, so transparent PNGs come back composited on black. And every byte lands in RAM before decoding, so a 120 MB PNG is 120 MB in memory plus the tensor.
Where the URL comes from
Wire first_media_url from Flux Retrieve Task (or Flux Retrieve Tasks) into media_url. If you're copying a URL out of the node's text panel by hand instead, make sure it's the full Ace CDN link - nothing else will pass the allowlist.
Install
ComfyUI Manager, search Flux, confirm publisher acedatacloud and package Flux by Ace Data Cloud (registry ID flux), install, restart. Source install is the usual:
cd ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/FluxComfyUI
python -m pip install -r requirements.txt
Then restart ComfyUI. The requirements are just requests and jsonschema - no models, no GPU, nothing to download. The README's claim that this pack needs no local model is true, and for this node it needs no API key either.
Common issues
"Task is pending; retrieve the same task ID again." You pointed this node at an empty media_url. There's nothing wrong with the loader - the generate step just hasn't finished, so there was no URL to pass. Go re-run the retrieve node (and read the next section of the error model: the retrieve node returning pending looks like a success, because it is one).
"Media URL must be an Ace Data Cloud HTTPS CDN link." The signature check failed, usually because the link is http://, or points at an intermediate host instead of the final CDN URL.
Downloads fail after three tries. Local network or DNS, not the node. Same error shape as an expired link.
The image looks black or oddly flattened. You downloaded a transparent PNG; RGB conversion ate the alpha.
This node is trivial, and that's the point. Everything interesting in this pack happens before it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| media_url | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |