Wan VACE - Video Repainting
Restyle a whole video and keep the motion (cloud Wan VACE repaint)
- video_file_path
- video_url
Repainting is the VACE mode for "same video, different look." You feed in a clip of a dancer, prompt it with a watercolor painting of the same scene, and out comes that exact motion re-rendered in the new style. No mask to draw, no region to babysit - the whole frame gets regenerated, and the movement is carried over. WanVACEVideoRepainting from the ru4ls/ComfyUI_Wan pack is that, running on the Wan 2.1 VACE model over Alibaba's DashScope API rather than on your GPU.
If WanVACEVideoEdit is the surgical scalpel (mask out one thing, change it), repainting is the spray gun: everything changes, the motion doesn't. It's the right tool for style transfer, recolorings, changing day to night, or swapping a scene's whole look while keeping the choreography.
The two knobs that matter
- control_condition - how the model extracts features from the source video to hang the repaint on. Default is
depth, which preserves the scene's structure and is the safe general-purpose choice.posebodyfaceandposebodyanchor on human motion instead (better for people-heavy clips where you care about movement fidelity), andscribbleuses line-art structure. - strength - how strongly that extracted condition is applied, 0.0 to 1.0, default 1.0. This is your "how faithful to the original" dial. At 1.0 the motion is locked in tight; dial it down toward 0.5-0.7 and the model gets more freedom, which can look more creative or more drift-y depending on your clip. When a repaint comes back with weird morphing, strength is the first thing to lower.
There's also an optional ref_images_url for a single reference image - useful if you want the repaint to match a specific style or character from a still. And the standard prompt describes what the new look should be. Seed, prompt_extend, and watermark behave like the rest of the pack.
How it works
Same async pattern as every node in this pack: submit the job to DashScope, poll until it's done (videos poll every 10 seconds, up to 60 tries), then the mp4 is downloaded to your local output_dir. Your two outputs are video_file_path and video_url. To preview, wire video_file_path into a "Load Video (Path)" node from ComfyUI-VideoHelperSuite - the README's standard instruction for all the video nodes here.
The one thing to remember is that the input video_url must be publicly reachable by Alibaba's servers. A file:// path or a local-only address won't work. Host the clip somewhere with a real URL first.
Install
Search ComfyUI_Wan in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ru4ls/ComfyUI_Wan.git
pip install -r ComfyUI_Wan/requirements.txt
Restart ComfyUI, then set the API key in config/.env (DASHSCOPE_API_KEY, plus DASHSCOPE_API_KEY_CHINA if you'll use the mainland China region). Dependencies are minimal - requests, Pillow, numpy, python-dotenv - because the generation runs on Alibaba's hardware. Which also means it's a paid API: every repaint is billed.
Honest expectations: cloud VACE repaint is fast and clean on straightforward clips, but "restyle the dancer" with posebodyface at full strength can get jittery on fast cuts. When that happens, drop strength to 0.6-ish and re-run. Repainting is a two-or-three-tries affair more often than a one-shot - treat the first run as a cheap test.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | wan2.1-vace-plus | 1 options: wan2.1-vace-plus |
| prompt | STRING | Repaint the video with the following description | — |
| video_url | STRING | URL of the input video | |
| region | COMBO | international | 2 options: international, mainland_china |
| ref_images_urlopt | STRING | Newline-separated URLs for reference images (only 1 image supported) | |
| control_conditionopt | COMBO | depth | 4 options: posebodyface, posebody, depth, scribble |
| strengthopt | FLOAT | 1.00–1 | — |
| 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 | — |