Kling AI Cloud Uploader
The Upload Node That Asks You to Read the Fine Print
- audio
- image
- url
Kling AI Cloud Uploader pushes media to a public paste-bin host - catbox, litterbox, 0x0, uguu, tmpfiles - and hands you back a URL. Why would a ComfyUI node want to do that? Because several Kling API calls (lip-sync, avatar audio, video extend) take media as a URL, and if your file isn't already hosted somewhere Kling can fetch, something has to put it on the internet. This node is that something.
Read that first paragraph twice, because the tradeoff is right there in the name: public. These are unauthenticated hosts. Anyone who gets the URL - indexers, scrapers, anyone - can download the file. Catbox and 0x0 are permanent; they stay up until manually deleted. That's why the node has a required i_understand_uploads_are_public boolean, and it refuses to run unless you tick it - the source raises an error if you don't. This is one of the rare cases where a consent gate isn't theater; the pack was clearly burned (or watched others get burned) and built the warning in.
How it works
Inputs:
provider- which host to use.auto(default) tries catbox → litterbox → 0x0 → uguu → tmpfiles in order, which is the recommended setting. The others let you force a specific host and, for litterbox, a lifetime (1h / 24h / 72h). Tooltip sums it up: catbox = permanent, 0x0 = permanent, uguu = 24h, tmpfiles = unreliable.i_understand_uploads_are_public- the consent tick. Required.- Then the content, any one of:
audio(AUDIO tensor),image(IMAGE tensor), orfile_path(a local file path). - Two audio controls:
preserve_audio_quality(default True - keep original sample rate/channels; set False to downshift to 16kHz mono, which only matters if Kling TTS will ingest it) andaudio_format(wav / mp3 / flac).
Output is a single url STRING - the public URL of your uploaded file, ready to paste into any URL-based Kling input.
Where it fits
The canonical flow: you render a video or audio clip locally, need Kling to lip-sync or animate from it, but Kling wants a URL. Cloud Uploader gets the file somewhere Kling can reach, you wire the url into a lip-sync or avatar node's *_url field, done. It's also handy when you're feeding Kling from files that aren't on a server Kling can already see.
The privacy reality
The pack's own docs are blunt about this, and I'll repeat it: do not upload sensitive images, voice clones, or copyrighted material. A voice clone especially - the pack ships voice-clone nodes, and shoving a clone out to a permanent public host is how you get your own voice living on the internet. If the file shouldn't be public, this is the wrong node. Use Kling's own Asset Upload (which stays inside Kling's system) or skip the URL path entirely.
Also: tmpfiles is labeled unreliable in the tooltip, for good reason. If auto eventually lands there you may get a short-lived or flaky URL. Prefer catbox for durability, litterbox for ephemeral.
Common issues
- "refusing to upload. Tick 'i_understand_uploads_are_public'" - the consent gate. Tick it, but only after you've actually read what it means.
- Upload "succeeds" but Kling can't fetch the URL - the host may be rate-limiting, or the file extension/type mismatched what Kling expects. The node sets MIME from the content, so a
.pngupload to avideo-expecting endpoint will fail on Kling's side. - Audio comes back at the wrong quality - leave
preserve_audio_qualityTrue unless you specifically need Kling-TTS-friendly 16kHz mono.
Install
Ships in ComfyUI-Kling-Direct:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-Kling-Direct
or ComfyUI Manager → search "Kling Direct" → install → restart. No models, no GPU, no extra dependencies. Just remember: this node's job is to make things public. Use it like it does that.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| provider | COMBO | auto | Cloud host. 'auto' tries catbox -> litterbox -> 0x0 -> uguu -> tmpfiles (recommended). catbox = permanent. litterbox = 1/24/72h temp. 0x0 = permanent. uguu = 24h. tmpfiles = unreliable. |
| i_understand_uploads_are_public | BOOLEAN | false | REQUIRED. Uploads go to a public host — anyone with the URL can view. catbox & 0x0 are permanent. Do NOT upload sensitive content. |
| audioopt | AUDIO | — | |
| imageopt | IMAGE | — | |
| file_pathopt | STRING | Path to a local file to upload. | |
| preserve_audio_qualityopt | BOOLEAN | true | If True, uploads audio at original sample rate and channels (no downsampling). If False, downsamples to 16kHz mono (old behavior — only useful if the audio will be fed back into Kling TTS input). |
| audio_formatopt | COMBO | wav | Audio encoding format. wav = lossless uncompressed (large). flac = lossless compressed. mp3 = lossy but small. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |