Character to Video (VIDU)
Animate one photo of a character through Vidu's API
- character_image
- video_url
- cover_url
- task_id
Feed this node one image of a character and a prompt, and it asks Vidu's cloud model to animate that character - not "image to video" in the generic sense, but a mode specifically tuned for keeping a character's identity intact while they move. If you've been fighting local models to keep a face from drifting across a clip, this is the node built to skip that fight entirely, at the cost of sending your image to someone else's server and paying per generation.
Why this exists, and why it's not local
This node is part of comfyui-vidu-nodes, a thin wrapper around Vidu's REST API. Vidu is a real closed-source Chinese video generation company - in a community thread cataloguing which labs still ship open weights, Vidu gets named in the same breath as Kling and Hailuo: "Vidu, Kling, Hailuo, all closed source." Nothing about this node runs on your GPU. It uploads your character image and prompt to Vidu, polls until the job finishes, and hands you back a URL - the character-consistency work happens entirely on their infrastructure, which is exactly why it can do things local checkpoints currently struggle with.
That gap is real, not just marketing. In a thread from someone shipping an AI-animated series, they specifically credited Vidu's newer models for expression fidelity that local Wan 2.2 and LTX 2.3 workflows "only get maybe 60-70% of the way" toward - the subtle eye and ear movement that sells a character reaction. It's not free: they put the cost of an episode's worth of generation (Vidu plus Kling, with a 4K upscale) at roughly $200-250. That's the trade this node makes on your behalf - quality you can't easily get locally, billed per clip.
One honest caveat: that praise was specifically about Vidu's newest model line. This node's model_version dropdown only exposes 1.5 and 2.0 - if Vidu has shipped something newer since, you won't see it here until the pack's maintainer (a solo dev, going by the repo) updates the code to expose it.
The inputs and outputs that matter
Required fields:
character_image- your reference photo. Vidu's own limits apply: JPG/PNG (the pack's v2 upload path also accepts JPEG/WebP), under 50MB, and for this specific node the image can't be smaller than 128×128 and its aspect ratio has to stay under 1:16 or 16:1 - looser than the general image limit, since character crops are often extreme.prompt- a multiline text description of what the character should do.duration-4or8seconds.token- your Vidu API token, obtained from Vidu directly.api_base- defaults tohttps://api.vidu.cn; leave it unless Vidu's told you otherwise.model_version-1.5or2.0.resolution-512,720p, or1080p.
Worth setting from the optional block: aspect_ratio (16:9 / 9:16 / 1:1) and movement_amplitude (auto / small / medium / large, controlling how much motion Vidu injects). enhance (prompt enhancement, on by default) and moderation (content moderation, on by default) you can usually leave alone. seed is there if you want reproducibility across runs.
Outputs are video_url, cover_url (thumbnail), and task_id. Route video_url into the pack's Video Downloader node promptly - Vidu's generated links expire after one hour.
Installing it
ComfyUI Manager: search ComfyUI VIDU. Or by hand: cd ComfyUI/custom_nodes && git clone https://github.com/1zhangyy1/comfyui-vidu-nodes, then restart. No model weights to download since nothing runs locally - the only setup step that isn't automatic is getting your own API token from Vidu.
Where people get stuck
Character to Video's image constraints are the tightest in the pack, so most failures trace back to those: an image under 128×128, or one whose aspect ratio blows past the 1:16 limit, gets rejected before generation even starts. Beyond that, the pack's documented failure modes apply here same as everywhere else in it - a 404 or JSON parse error almost always means a bad or expired token, and upload failures point to image format or size. Check the console for the [Vidu Character2Video]-prefixed log line; it prints the actual request and response Vidu sent back, which is more informative than the error ComfyUI surfaces in the UI.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| character_image | IMAGE | — | |
| prompt | STRING | — | |
| duration | COMBO | 2 options: 4, 8 | |
| token | STRING | — | |
| api_base | STRING | https://api.vidu.cn | — |
| model_version | COMBO | 2 options: 1.5, 2.0 | |
| resolution | COMBO | 3 options: 512, 720p, 1080p | |
| enhanceopt | BOOLEAN | true | — |
| moderationopt | BOOLEAN | true | — |
| seedopt | INT | 00–2147483647 | — |
| aspect_ratioopt | COMBO | 3 options: 16:9, 9:16, 1:1 | |
| movement_amplitudeopt | COMBO | 4 options: auto, small, medium, large |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| cover_url | STRING | — |
| task_id | STRING | — |