Wan VACE - Video Extension
Extend a video with cloud Wan VACE
- video_file_path
- video_url
Every Wan clip has the same ceiling: roughly five seconds before the model starts degrading. The community's answer has been VACE extension - generate new frames that continue coherently from the end of an existing clip, chain them, and you get long-form video without the quality cliff. WanVACEVideoExtension ("Wan VACE - Video Extension") from the ru4ls/ComfyUI_Wan pack is that technique on Alibaba's hosted wan2.1-vace-plus model. It's the node you reach for when your story is longer than one clip.
The KB's Wan essay documents the local version of this trick - people extending in chunks, each extension picking up where the last left off - and it works the same way here, minus the local render. You're renting Alibaba's compute, billed per job, and getting a model that knows how to keep a scene going instead of restarting it.
How it works
You don't feed it a whole video. You feed it the edges of what you want to continue, and the model fills the new middle:
- first_frame_url / last_frame_url - images for the start and end of the extended segment.
- first_clip_url / last_clip_url - optionally, actual video segments to continue from or into.
- video_url - the reference video for motion features, if you want the extension to inherit its movement.
- control_condition - posebodyface, posebody, depth, or scribble, to extract motion/composition from that reference and steer the extension.
The core idea from the community playbook: keep a few seconds of overlap between what you generated and what you're extending, so the model has context to hold onto. The README's example prompts - "extend the video with the following description" - plus your own motion prose is what steers the continuation. Every URL input must be publicly reachable by Alibaba's servers; local paths won't work.
Otherwise the inputs are the pack standard: prompt (required), seed, prompt_extend, watermark, output_dir. Outputs are video_file_path and video_url; preview by feeding the path into a "Load Video (Path)" node from ComfyUI-VideoHelperSuite.
The practical rhythm
Extension is a loop, not a one-shot. Generate a clip, feed its tail into this node as first_clip_url (or grab its last frame as first_frame_url), extend, repeat. Each extension is another billed job, so the cost adds up - but so does the runtime you'd otherwise spend letting a 14B model chew through the same frames locally. If you're planning a multi-clip sequence, map out the extensions before you start, because each one compounds the previous result.
Install
ComfyUI Manager, search ComfyUI_Wan, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ru4ls/ComfyUI_Wan.git
pip install -r ComfyUI_Wan/requirements.txt
Restart, then copy config/.env.template to config/.env in the pack folder and set DASHSCOPE_API_KEY (plus DASHSCOPE_API_KEY_CHINA for the mainland China region). Dependencies are light - requests, Pillow, numpy, python-dotenv - since the generation runs remotely.
The honest caveat
Extension quality degrades over distance, same as every approach to long video. The first extension from a strong clip usually looks great; the fourth or fifth can drift in style or lighting. That's the model, not a setup error - keep extensions short, keep overlap generous, and if a link in the chain drifts, re-roll that segment rather than pushing forward. Think of this node as the bridge builder: it works, but the bridges get shakier the further you go.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | wan2.1-vace-plus | 1 options: wan2.1-vace-plus |
| prompt | STRING | Extend the video with the following description | — |
| region | COMBO | international | 2 options: international, mainland_china |
| first_frame_urlopt | STRING | URL of the first frame image | |
| last_frame_urlopt | STRING | URL of the last frame image | |
| first_clip_urlopt | STRING | URL of the first video segment | |
| last_clip_urlopt | STRING | URL of the last video segment | |
| video_urlopt | STRING | URL of the reference video for motion features | |
| control_conditionopt | COMBO | 5 options: , posebodyface, posebody, depth, scribble | |
| seedopt | INT | 00–2147483647 | — |
| prompt_extendopt | BOOLEAN | false | — |
| watermarkopt | BOOLEAN | false | — |
| output_diropt | STRING | ./videos | Directory where the generated video will be saved. Browse to select a custom directory. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_file_path | STRING | — |
| video_url | STRING | — |