Nodes/Boyonodes/Boyo VACE Injector
ComfyUI Node

Boyo VACE Injector

VACE Control Without a Single Conditioning Node

By DragonDiffusionbyBoyo·Created 2 years ago·Updated 26 days ago· 16
Boyo VACE Injector
  • control_image
  • model
  • wanvideomodel
  • vae
  • model
vace_strength1.00
vace_start_percent0.00
vace_end_percent1.00
num_frames1

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 to num_frames of 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, or vae. Give it a vae and 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_frames frames; feeding a single still as control with num_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.

CategoryBoyoResearch

Inputs (8)

NameTypeDefaultDescription
control_imageIMAGE
vace_strengthFLOAT1.000–2
vace_start_percentFLOAT0.000–1
vace_end_percentFLOAT1.000–1
num_framesINT11–10
modeloptMODEL
wanvideomodeloptWANVIDEOMODEL
vaeoptVAE

Outputs (1)

NameTypeDescription
modelMODEL