Nodes/KIE.ai Nodes Next/Topaz - Video Upscale
ComfyUI Node

Topaz - Video Upscale

The API node that asks you to transcode first

By felipederosilva·Created about a month ago·Updated a day ago· 3
Topaz - Video Upscale
  • video_url
  • video
  • url
  • all_urls_json
  • task_id
  • raw_json
  • credits_consumed
  • credits_left
◄upscale_factor2►
◄timeout_seconds1200►
◄callback_url►

Video upscaling is the one job where "just pay for Topaz" has held up longest, mostly because doing it locally means renting or owning serious GPU time. This node rents Topaz's engine per clip instead - and, unusually for an API wrapper, it does a fair bit of local work to make your video acceptable to the remote decoder.

Reach for it when you have a finished clip that's soft, compressed, or 720p when you need 1080p, and you'd rather not spend your evening on SeedVR2. Reach for local instead if you're iterating - per-clip billing punishes experimentation, and a two-minute 4K pass is a much larger invoice than a still.

The mechanism, which is the interesting part

Under the hood it's one KIE Market task with retry handling bolted on, but before that there's a conversion step. Modern ComfyUI can carry 10-bit and HDR characteristics through its VIDEO objects, and Topaz's remote decoder is stricter than the generation providers. So the pack deliberately exports your clip as a canonical 8-bit SDR H.264 MP4 (crf 18, sRGB, medium preset) before uploading it.

Two consequences follow. First, you need a reasonably current ComfyUI - the export path uses the video runtime's save_to with explicit bit-depth settings, and on an older build you'll get a message telling you to update rather than an obscure ffmpeg error. Second, a raw file path is rejected outright for this node: it wants a real ComfyUI VIDEO object from a loader or a video-generating node, not a string.

Then the actual submission: create the task, poll KIE's record endpoint, download the finished clip into output/KIE-Results/videos/ with a content-addressed filename so it survives temp cleanup. If the provider fails with an internal-server style error, the node retries once automatically - Topaz sometimes accepts a task and dies seconds later.

Inputs

video_url is required and is a native VIDEO socket despite the name. Wire it from a loader, a video-generating node's output, or a previous KIE video node. Note the pack has a persistent video loader worth knowing about if your existing Load Video widget keeps forgetting its selection.

upscale_factor is optional here, an enum of 1, 2 or 4 with a default of 2. The node normalises what it sends (it'll strip a trailing .0 or x off a stray legacy value) and rejects anything that isn't 1, 2 or 4 with a specific error, so you can't silently send nonsense to a paid endpoint. 2x on 1080p is already a 4K-class job; be deliberate about 4x.

timeout_seconds defaults to 1200 seconds and matters far more than it does on image nodes - video tasks are long, and the wait window is what decides whether a slow-but-fine job becomes a timeout. callback_url stays empty for normal ComfyUI use.

Outputs: video (a native VIDEO object, ready for a save or preview node), plus url, all_urls_json, task_id, raw_json, credits_consumed and credits_left. The task ID is worth keeping in a note node if the job fails - the node's error message quotes it.

Install

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

Restart, then set your key once under Settings → KIE.ai Nodes Next → Connection (masked fingerprint, CONNECTED status, live balance; KIE_API_KEY overrides it for servers). ComfyUI Manager can do all of that for you - search "KIE.ai Nodes Next". Requirements are only requests, Pillow, numpy, PyYAML; no local model weights.

Troubleshooting, in the order you'll hit it

If it fails after the task was accepted, you'll get a long message naming two task IDs and saying the remote Topaz provider failed during processing, not that your GPU ran out of memory. Believe it - that error is explicit that it's a provider-side failure after a retry, and it suggests the right experiment: try a short H.264 MP4 at 2x. If that succeeds, the problem is your source file's format, and transcoding it to H.264/MP4 before upscaling is the fix.

If you get "requires a current ComfyUI VideoInput implementation", update ComfyUI. The 8-bit SDR export is not optional and there's no fallback that preserves the input as-is.

If the run times out, raise timeout_seconds rather than resubmitting - and check KIE • Task Status with the task ID first. A job that was actually finished doesn't deserve a second invoice.

CategoryKIE Next/Video/Topaz

Inputs (4)

NameTypeDefaultDescription
video_urlVIDEO—
upscale_factoroptCOMBO2Factor to upscale the video by (e.g. 2.0 doubles width and height)
timeout_secondsoptINT120030–7200—
callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

Outputs (7)

NameTypeDescription
videoVIDEO—
urlSTRING—
all_urls_jsonSTRING—
task_idSTRING—
raw_jsonSTRING—
credits_consumedFLOAT—
credits_leftFLOAT—