Wan VACE - Video Outpainting
Outpaint the frame in any direction
- video_file_path
- video_url
Image outpainting you know: take a photo, extend the canvas, and the model invents plausible scenery beyond the edges. WanVACEVideoOutpainting ("Wan VACE - Video Outpainting") from the ru4ls/ComfyUI_Wan pack does the same thing, but for video and on the hosted wan2.1-vace-plus model. Feed it a clip, tell it how much to expand on each side, and it scales the footage outward - new background material, same motion, all on Alibaba's DashScope API.
It's the least glamorous VACE node in the pack and one of the most useful in practice. Vertical video you need to crop to landscape? A portrait shot that needs room for a headline? Footage that's just too tight? That's this node's whole job.
How it works
The interface is dead simple - four scale dials and a prompt:
- top_scale / bottom_scale / left_scale / right_scale - each from 1.0 to 2.0, default 1.0 (no expansion). Set the sides you want to grow. Want a 1:1 clip widened to 16:9? Left and right to 1.5 or so. Want to add sky? Top to 1.2. This is the entire node.
- prompt - required. Describe the footage (and what should fill the new space, if you have an opinion). "Extend the scene naturally" is a valid prompt; "the camera pans wider to reveal a street market" is a better one.
- video_url - the source clip, which must be publicly accessible so Alibaba's servers can fetch it. No local paths.
- seed, prompt_extend, watermark, output_dir - the usual pack fare.
Outputs are video_file_path and video_url; preview by feeding the path into a "Load Video (Path)" node from ComfyUI-VideoHelperSuite. The async job pattern is standard for the pack: submit, poll every 10 seconds (up to 60 tries), download when done. Billed per job.
How to think about the scales
The scales are expansion factors, not final dimensions - and they compound in cost and quality the further you push. Going to 2.0 on every side is asking the model to invent a lot of new world, and that's where VACE outpainting starts showing its seams (backgrounds that don't quite match, motion that wobbles at the seam). In practice:
- Small expansions (1.1-1.4) on one or two sides look near-seamless.
- Aggressive expansion (1.8+) reads as "new scene that happens to share the foreground" more often than not.
- If you only need one direction, only touch that dial - the defaults handle the rest.
If a result comes back with a visible seam, the fix is usually more prompt direction ("matching brick wall continues to the left") rather than more scale.
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 minimal - requests, Pillow, numpy, python-dotenv - because the compute is remote.
The honest take
This is the quiet workhorse of the VACE family: modest, mechanical, and genuinely handy. It won't make headlines like the multi-image reference node, but "I need this clip wider" is a daily problem, and this node solves it without you touching a video editor. Just remember it's paid per job and that aggressive expansion is where quality leaves the building - small, directed scales are the sweet spot.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | wan2.1-vace-plus | 1 options: wan2.1-vace-plus |
| prompt | STRING | Outpaint the video with the following description | — |
| video_url | STRING | URL of the input video | |
| region | COMBO | international | 2 options: international, mainland_china |
| top_scaleopt | FLOAT | 1.01–2 | — |
| bottom_scaleopt | FLOAT | 1.01–2 | — |
| left_scaleopt | FLOAT | 1.01–2 | — |
| right_scaleopt | FLOAT | 1.01–2 | — |
| 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 | — |