Face Transform Load Image (Ace Data Cloud)
Turning Ace's returned URL into an actual ComfyUI IMAGE
- image
What it's for
The Face Transform node is an API wrapper, and API wrappers return strings. first_media_url is a https://cdn.acedata.cloud/... link, and ComfyUI's Save Image, Preview Image, upscalers and detailers all want an IMAGE tensor. This node is the adapter: paste the URL, get a normal ComfyUI image out. One input, one output, no model, no key.
How it works
It's a bounded HTTPS download plus a decode. The download is fussy on purpose: the URL must be https, its hostname must be one of cdn.acedata.cloud, cdn.acedata2.cloud, platform.cdn.acedata.cloud or platform2.cdn.acedata.cloud, it must not embed a username or password, and redirects are refused outright. It streams with a 10-second connect and 90-second read timeout, retries up to three times on a network error with a short backoff, and gives up past 128 MiB. Then the bytes go through PIL: open, convert("RGB"), scale to a float32 array divided by 255, and wrap in torch.from_numpy(...).unsqueeze(0).
That last line tells you what you're getting: a standard ComfyUI IMAGE - batch size 1, values 0–1, channels in RGB order, alpha dropped if the source had any. It behaves like anything a Checkpoint Loader or VAE Decode would hand you, which is the whole point.
The input and the output
media_url (STRING) is the only input, and it's meant to be fed from first_media_url on the transform node. image (IMAGE) is the only output. Nothing else to configure, and no ACEDATACLOUD_API_KEY needed - the loader never touches the API, it just fetches the CDN file. Downloading a result you already paid for shouldn't cost another credit either.
Wire image into Save Image, Preview Image, an upscaler, or a detail pass if you want to clean up what the service returned before you keep it. This is also the only way to see what a swap or beautify came back with inside ComfyUI, since the transform node's own outputs are all text.
Install
Same pack, same steps - Manager, search Face Transform, publisher acedatacloud, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/FaceTransformComfyUI
cd FaceTransformComfyUI && pip install -r requirements.txt
The pack pulls only requests and jsonschema; the loader's numeric and image work rides on numpy, torch and PIL, which ComfyUI already ships. The README's ComfyUI 0.39.0 requirement is about the native media loaders generally - the image path in this pack has no version-specific import, so an older build will run it fine. There's nothing to download and no model folder to populate.
Common issues
Task is pending; retrieve the same task ID again. That's the message for an empty media_url, which in practice means you wired first_media_url in and there's nothing there yet. Either the task hasn't finished, or the action you picked never produces media - keypoints and liveness are analysis, so their answer lives in result_json, not in a URL. Read status and task_id on the transform node before blaming this one.
Media URL must be an Ace Data Cloud HTTPS CDN link. You pasted something that isn't Ace's CDN - a Google Drive share link, an imgur page, your own web server, a shortener. The hostname allowlist and the no-redirect rule both reject these, deliberately: it's the guard that stops a found node from being pointed at arbitrary internal addresses. Use the URL the service returned, unmodified.
Download failures on a URL that looks right. Three retries happen on network errors, then it surfaces as a generic media download failure rather than hanging. If it keeps happening, confirm the link hasn't expired - these CDN links aren't permanent, and a stale one in a saved workflow is a very easy way to spend twenty minutes debugging the wrong thing.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| media_url | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |