Nodes/KIE.ai Nodes Next/KIE • Upload Video
ComfyUI Node

KIE • Upload Video

One socket in, one URL out

By felipederosilva·Created about a month ago·Updated about 22 hours ago· 3
KIE • Upload Video
  • video
  • config
  • url

Video in, URL out. That's the whole node. It's the least glamorous thing in the pack and one of the more useful, because video URLs are what KIE's video endpoints actually want.

Most of the time you don't need it. This pack's video nodes take native VIDEO sockets and handle the upload themselves, which is a nicer experience than any other API wrapper I've used for video. You reach for this node when you're talking to a field typed as a string, when you're feeding KIE • Universal Market Task (Advanced) a $video_url, or when the video you want to send was produced somewhere the polished nodes can't see.

How it works

The pack writes your VIDEO object to a temporary MP4 inside ComfyUI's temp directory and multipart-uploads it to KIE's file service under a comfyui/videos path, then returns the hosted URL. It checks that the export produced a non-empty file and fails with a clear message if ComfyUI handed it nothing - a small thing that saves you from debugging a provider rejection when the real problem was an empty render.

Worth knowing: this is a plain export. The stricter 8-bit SDR H.264 normalisation you'll read about lives in the Topaz video node specifically, because that provider's decoder is fussy. Here you're sending whatever COMFYUI produces, so the source characteristics (including 10-bit if your build carries them) go up as-is. If a provider rejects the file, that's usually why, and re-encoding locally before uploading is the fix.

Inputs and outputs

video is required and is a native VIDEO socket - a real ComfyUI video object from a loader or a generator, not a file path. The pack's own persistent video loader is the friendly way to get one from disk, and it remembers the selection across restarts, which the core Load Video widget does not.

config is optional; it expects a KIE_CONFIG connection. Normal ComfyUI installs should leave it unwired, since the key saved once in Settings is used automatically, with KIE_API_KEY overriding it for server deployments.

url is the only output. Wire it into a string field that wants a video URL, or into $video_url in the universal task node.

Install

ComfyUI Manager → search KIE.ai Nodes Next → install → restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt

Then set the key once under Settings → KIE.ai Nodes Next → Connection. The pack validates it before saving, shows a masked fingerprint, and reports CONNECTED along with the credit balance. Requirements are requests, Pillow, numpy, PyYAML; nothing to download locally because nothing runs locally.

If it fails

"Unsupported VIDEO object. Update ComfyUI to a build with VideoInput.save_to()." - that's the honest error message you get on an older ComfyUI, and the fix is literally the message. The video runtime is what makes this node possible; a stale build can't produce the file.

"ComfyUI produced an empty video file before KIE upload." - the upstream render or save produced nothing. Look at the node feeding this one, not at KIE.

Uploads from disk are slow for long clips, and this is the node where that bites, because a five-minute video is a lot of bytes over a home connection before the actual generation even starts. Trim first if you only need a section.

And on provenance: a video is often the most personal thing in your graph. This node sends it to a third-party reseller's storage. The pack is careful about credentials - the full API key stays backend-only and never lands in your workflow JSON - but no pack can be careful on your behalf about what you upload. That's a decision you make, not a bug you report.

CategoryKIE Next/Utility/Media

Inputs (2)

NameTypeDefaultDescription
videoVIDEO—
configoptKIE_CONFIG—

Outputs (1)

NameTypeDescription
urlSTRING—