Upscale Video (VIDU)
It doesn't take a video file, it takes an ID
- video_url
- cover_url
- task_id
If you searched "upscale video ComfyUI" and landed here expecting a local ESRGAN-style node you feed a video file into, stop and read this first: that's not what this is. This node doesn't accept a video at all - it takes a creation_id, which only exists if Vidu itself already generated the clip for you. It's the upscale step of Vidu's own pipeline, exposed as a ComfyUI node, not a general-purpose video upscaler.
What it actually is
This node ships as part of comfyui-vidu-nodes, a small wrapper pack around Vidu's cloud video API. Vidu is a real, working closed-source video-generation service - in community shorthand it gets lumped in with Kling and Hailuo as one of the Chinese labs that ships nothing open, API only. That matters here because "closed-source" isn't just a licensing footnote: it means every node in this pack, this one included, does zero local compute. No model download, no GPU work in your ComfyUI process. You send a request to Vidu's servers, they do the upscaling, you get back a URL.
So the workflow this node belongs to always starts with one of the pack's other generators - Text to Video, Image to Video, Character to Video, or Start-End to Video - each of which hands you back a task_id/creation_id for whatever it just made. This node is strictly the second step: take that ID, ask Vidu to upscale the result.
The inputs and outputs that matter
Only two required fields and one optional one:
creation_id- the ID of a video Vidu already generated for your account. You can't get one any other way; it comes out of a prior Vidu generation node in the same pack.token- your Vidu API token, same one every node in this pack needs. Vidu doesn't hand these out automatically; you get it by contacting Vidu directly, and the pack's own docs don't say more than that.model(optional) - the upscale model to use. Right now the pack only exposes one choice,stable, so there isn't really a decision to make yet.
Outputs are video_url, cover_url (a thumbnail), and task_id. All three are plain strings pointing at Vidu-hosted URLs - nothing lands on your disk. That's the catch worth knowing up front: Vidu's generated-video links are only valid for one hour. If you don't do something with video_url before that window closes, it's gone. The obvious next step is wiring video_url straight into the pack's Video Downloader node to pull it onto your own storage before it expires.
Installing it
Same as every node in this pack - there's nothing upscale-specific to set up. In ComfyUI Manager, search for ComfyUI VIDU and install. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/1zhangyy1/comfyui-vidu-nodes
Restart ComfyUI. No requirements.txt gymnastics, no weight downloads - this is one of the rare packs where "install" really does mean "clone it and go," precisely because there's no local inference happening. The only prerequisite that isn't a pip package is your Vidu API token.
Where people get stuck
The pack's own README documents its real failure modes, and they're worth knowing before you assume something's broken on your end:
- 404 Not Found usually means a bad API path or an invalid token, not a problem with your
creation_id. - JSON parse errors almost always trace back to a bad or expired token - the server stops returning JSON and returns an HTML error page instead, which the node can't parse.
- Task status query failures are network issues or a
creation_id/task_idthat doesn't match anything on Vidu's side (most often because you copied the wrong output field from the generator node).
Every node in this pack logs to the ComfyUI console with a [Vidu <node name>] prefix, including the full request URL, parameters, and response - that log is genuinely the fastest way to diagnose any of the above, faster than guessing from the ComfyUI error toast alone. And because this is a thin, unofficial wrapper maintained by one person rather than Vidu itself, if Vidu changes their upscale API on their end, this node breaks until someone patches it - worth keeping in mind if it suddenly stops working with no change on your side.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| creation_id | STRING | — | |
| token | STRING | — | |
| modelopt | COMBO | 1 options: stable |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| cover_url | STRING | — |
| task_id | STRING | — |