Stack_WanVaceToVideo
Stack_WanVaceToVideo
- control_video
- control_masks
- reference_image
- Vace
VACE is Alibaba's official control framework for Wan - reference-to-video, video extension, and inpainting driven by a control video, all from the same model family. It's the reason Wan, which has no native ControlNet of its own, still gets pose-and-depth-guided clips. Stack_WanVaceToVideo is the Apt_Preset way to feed a VACE condition into the pack's Wan controller: you set the geometry and the strength, attach a control video, a mask, and a reference, and it hands sum_stack_Wan a ready-made WANVACE token.
This is one of the more usable nodes in the pack's 😺backup Wan set, because VACE is well-trodden ground - it's been out since May 2025 and the community knows what works. It's also the node most likely to teach you why VACE gets a bad rap from people who skipped the mask.
What it actually does
Same packager pattern as its siblings: bundle (width, height, length, strength, control_video, control_masks, reference_image) into a WANVACE token, feed it to sum_stack_Wan → Vace. The stack then converts it into the VACE conditioning. Your creative decisions - how hard the control applies, what the reference identity is - happen on this node.
The inputs that matter
- control_video - the video that drives the generation: a pose sequence, a depth render, a motion reference. This is VACE's whole point; without it, you're doing plain img2vid.
- control_masks - where the control actually applies. If you're doing localized edits (only the character, not the background), this limits the influence to the masked region.
- reference_image - the subject whose appearance you want to carry into the new clip. This is what separates reference-to-video from plain motion transfer.
- strength - how hard the control bites. Default 1.0; the range goes to 1000 but you'll live in the 0.4–1.2 neighborhood. Too low and the model wanders, too high and the video goes stiff and copy-pastey.
- width / height / length - frame geometry, default 832×480×81, Wan's native comfort zone.
One output: Vace (WANVACE), into sum_stack_Wan → Vace.
Wiring it in
Standard spine: sum_load_simple (Wan 2.2 Unet + clip1) → conditioning → sum_stack_Wan with this node's Vace token attached → sum_Ksampler. The stack's vace_trim_latent output tells you where the VACE-constrained segment ends, handy when you're chaining an edited clip back into a longer take.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git
cd ComfyUI-Apt_Preset
pip install -r requirements.txt # Windows: double-click install.bat
Or ComfyUI Manager → search ComfyUI-Apt_Preset. VACE itself is an Apache 2.0 Alibaba model on HuggingFace (Wan-AI/Wan2.1-VACE-14B); grab the 14B or 1.3B weights and drop them in models/unet.
Common issues
The community's VACE pain is almost always masks. From the Fun VACE threads that still circulate: the mask must be a complete area - disconnected or branched mask regions silently produce bad results, because VACE treats the mask as a contiguous region to reconstruct. Also, VACE is control-heavy: if your clip looks like it's rehashing the control video frame by frame, dial strength down toward 0.6 rather than blaming the model. And as with the whole 😺backup family, this node renders nothing on its own - no token output visible means the fault is upstream (mask generation, control video) or downstream (sum_stack_Wan missing).
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 83216–4096 | — |
| height | INT | 48016–4096 | — |
| length | INT | 811–4096 | — |
| strength | FLOAT | 1.000–1000 | — |
| control_videoopt | IMAGE | — | |
| control_masksopt | MASK | — | |
| reference_imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Vace | WANVACE | — |