Boyo VACE Injector
VACE Control Without a Single Conditioning Node
- control_image
- model
- wanvideomodel
- vae
- model
VACE is the video-editing control system from the Wan family - it's how you guide a video generation with structure (an edited frame, a pose sequence, a depth map) rather than a prompt alone. Normally you'd do that through VACE conditioning nodes that feed the control data alongside the conditioning. BoyoVACEInjector takes a completely different path: it stuffs the control data directly onto the model as attributes, bypassing the conditioning pipeline entirely. Same destination, no conditioning wiring.
This matters in practice because some Wan workflows - especially the WanVideoWrapper WANVIDEOMODEL ones the node explicitly supports - read control data from the model object itself rather than from conditioning. If you've fought a workflow where VACE control simply didn't arrive, this injection style is often the version that works.
What you feed it
control_image- your control frame(s); up tonum_framesof them are taken from the batch.vace_strength(0–2, default 1) - how hard the control pushes.vace_start_percent/vace_end_percent- the denoising window the control applies to (defaults 0 → 1, the whole sample). Shorten to 0 → 0.5 and it only guides the composition phase, same philosophy as ControlNet guidance start/end.num_frames(1–10) - how many control frames feed the temporal context.- Optionally
model,wanvideomodel, orvae. Give it avaeand it encodes the control through it (video VAE if available, else frame-by-frame); without one it falls back to direct tensor processing.
How it works
The control image is resized to VAE-compatible dimensions (multiples of 16), arranged into a [B, C, T, H, W] tensor, and encoded into a VACE context. VACE expects a 96-channel representation, so if the encoded output has fewer channels it's zero-padded up to 96. That context - plus the strength and start/end percentages - is then written onto the model object where VACE-aware samplers look for it. Output is a single patched model (or the Wan wrapper model) that you pass straight to your sampler.
Where it fits
Wan video-editing and image-to-video pipelines where you'd otherwise be juggling VACE conditioning nodes. The BoyoResearch category is a hint: this is experimental, author-tuned tooling for their own workflows, not a polished one-size-fits-all node. Expect to tune vace_strength and the start/end window per job.
Installing it
Ships with Boyonodes (DragonDiffusionbyBoyo):
cd ComfyUI/custom_nodes
git clone https://github.com/DragonDiffusionbyBoyo/Boyonodes
Restart ComfyUI or install "Boyonodes" via ComfyUI Manager. No extra deps beyond the pack; the Wan bits come from ComfyUI core or WanVideoWrapper.
Gotchas
- If the control "does nothing," check
vace_start_percent/vace_end_percent- a narrow or mistyped window can make the control effectively invisible. - It clamps the image to
num_framesframes; feeding a single still as control withnum_frames> 1 just repeats it into the context. - The 96-channel padding is a pragmatic bridge to the VACE expectation - if your model was trained with a different control format, results may be weaker than the native nodes.
Not a node for beginners to Wan, but for anyone elbow-deep in VACE control, having a conditioning-free injection path is a genuinely useful tool to have in the drawer.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| control_image | IMAGE | — | |
| vace_strength | FLOAT | 1.000–2 | — |
| vace_start_percent | FLOAT | 0.000–1 | — |
| vace_end_percent | FLOAT | 1.000–1 | — |
| num_frames | INT | 11–10 | — |
| modelopt | MODEL | — | |
| wanvideomodelopt | WANVIDEOMODEL | — | |
| vaeopt | VAE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |