Kling Load Video (Ace Data Cloud)
Turning an Ace CDN link into a native VIDEO
- video
The missing half of every API node
Generation nodes in this pack hand you URLs, not tensors. first_media_url is a string pointing at Ace Data Cloud's CDN, and a string on a canvas does nothing - you can't upscale it, interpolate it, or save it as an mp4. This node is the adapter: give it that URL and it hands back ComfyUI's native VIDEO type, which is what the rest of your graph (and ComfyUI's own save/preview nodes) expects.
It's the difference between "the API made me a clip" and "the API made me a clip and then my local pipeline did something to it." Chain Kling into a local upscaler, an interpolator, or a Wan re-pass, and the whole point of wiring Kling into ComfyUI lands.
How it works
The node takes media_url, downloads the bytes, and wraps them in ComfyUI's VideoFromFile. Two things about that download are worth knowing before they bite you, because both are enforced rather than advisory:
The host is allowlisted. Exactly four hosts are accepted - cdn.acedata.cloud, cdn.acedata2.cloud, platform.cdn.acedata.cloud and platform2.cdn.acedata.cloud - over HTTPS, with no embedded credentials. Anything else - a YouTube link, a random S3 bucket, your own NAS - fails with "Media URL must be an Ace Data Cloud HTTPS CDN link." Redirects are refused too, so a URL that 302s somewhere lands as an error. This loader is for Ace output, not a general video fetcher.
There's a 128 MiB ceiling. The download is streamed and counted, and the response's Content-Length is checked up front. Blow past the cap and you get "Media exceeds the 128 MiB limit." For short Kling clips that's a non-issue; for a long 1080p render it's real, and it's the one limitation people will hit before they expect to.
Downloads get three attempts with a short backoff. Authentication is irrelevant - the media URLs come back already signed and public, so no key is involved at this stage.
Inputs and outputs
media_url(STRING) - the Ace CDN URL. In practice you wire this fromfirst_media_urlon a generation node or a retrieve node.video(VIDEO) - native ComfyUI video, ready for a save node, a local upscaler, or another video model.
If media_url arrives empty, the node refuses with "Task is pending; retrieve the same task ID again." That message is the pack telling you the truth: an empty first_media_url means the render isn't done, not that the loader is broken. Don't wire it in and walk away expecting a failure to be silent - it won't be.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/KlingComfyUI
cd KlingComfyUI && python -m pip install -r requirements.txt
# restart ComfyUI
Manager route: search Kling, confirm publisher acedatacloud, package Kling by Ace Data Cloud (Registry ID kling).
This is the node where the version requirement actually bites. The pack's native media loaders need ComfyUI 0.39.0 or newer - that's the release where comfy_api.latest.VideoFromFile exists. On an older build the pack's pinned requirements will still install cleanly (it only lists requests and jsonschema) and the loader will fail at import time when it reaches for the video type. The pack deliberately reuses ComfyUI's existing image, audio and video libraries for decoding instead of shipping its own, which is why the dependency list is so short and why the ComfyUI version matters so much.
No key needed here - just the URL. But the generation node that produced the URL does need one:
export ACEDATACLOUD_API_KEY=your_key_here # then launch ComfyUI
Common issues
"This is an image, not a video." Worth knowing: this pack only registers VIDEO and AUDIO loaders. The source defines an image loader alongside them, but the enabled media types are video and audio, so there's no AceKlingLoadImage in the node menu. If a Kling job returns a still (Apparel, Virtual Try On and Goods Studio can), you paste the URL into a browser or reach for another pack's URL-image loader. Mildly annoying, and the kind of thing that reads as a bug when it isn't one.
A pending task, again. The loader doesn't poll. It downloads what it's given, immediately. If you want the workflow to wait, set wait_seconds on Kling Retrieve Task upstream.
Re-downloading on every run. The node has no cache. Every queue re-fetches the file from the CDN, and a ComfyUI workflow that re-runs the whole graph after a tweak will re-download every clip it touches. Cheap for one clip, tedious for a batch.
Browser links from your Kling account won't work - the allowlist is Ace's CDN specifically. Fine, you don't need them: the API hands you the file directly.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| media_url | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |