Nodes/ComfyUI-WanVaceAdvanced/WanVacePhantomDual
ComfyUI Node

WanVacePhantomDual

Pose in one hand, depth in the other

By drozbay·Created about a year ago·Updated 7 months ago· 95
WanVacePhantomDual
  • positive
  • negative
  • vae
  • control_video
  • control_video2
  • control_masks
  • control_masks2
  • vace_reference
  • vace_reference_2
  • phantom_images
  • positive
  • negative
  • neg_phant_img
  • latent
  • trim_latent
width832
height480
length81
batch_size1
vace_strength1.00
vace_strength21.00
vace_ref_strength1.00
vace_ref_strength21.00

Sometimes one VACE context isn't enough. WanVacePhantomDual is the original "two at once" node: it builds two independent VACE contexts in a single pass, so you can drive one part of the frame with pose and another with depth, or lock a character with a reference while a control video handles camera movement. The name says it all - it's the dual-context sibling of WanVacePhantomSimple.

Why would you bother with two contexts instead of just chaining two nodes? Control separation. A single VACE context mixes all of its signals into one embedding; two contexts let you apply different strengths to each. The canonical setup from the VACE playbook: one context carrying your pose/depth control video, the other carrying a reference image, each with its own vace_strength and vace_ref_strength so you can push the pose hard while keeping the likeness dialed way back.

Inputs

This is a V1 node, so the required set is the full classic: positive, negative, vae, plus width (default 832), height (480), length (81), and batch_size. Then two parallel sets of optional inputs:

  • Context 1: control_video, control_masks, vace_reference, vace_strength, vace_ref_strength
  • Context 2: control_video2, control_masks2, vace_reference_2, vace_strength2, vace_ref_strength2
  • phantom_images - shared by both contexts for character anchoring.

That's honestly the whole mental model: everything with a 2 on the end is the second context. Both contexts accumulate into the conditioning, and each strength input can also take a float list for per-frame control once the model is patched.

The one thing to know before you wire it up

WanVacePhantomDual does not patch the model. There's no model input here - that's a V2 feature. You must run your Wan model through VaceAdvancedModelPatch first, otherwise the per-frame strength machinery silently does nothing useful. The README is blunt that the V2 nodes ("all features from SimpleV2") are the more complete path, and this node exists mostly for people running existing workflows or who want the classic required-input layout. If you're starting fresh, reach for WanVacePhantomDualV2 instead - same dual contexts, but with model patching, latent_in continuation, and context-window alignment built in.

Outputs are the standard set: positive, negative, neg_phant_img, latent, and trim_latent (the INT telling you how many frames went to references).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/drozbay/ComfyUI-WanVaceAdvanced
# restart ComfyUI

You'll need the Phantom 14B weights plus a VACE module (Wan2_1-VACE_module_14B_bf16 or fp8 from Kijai/WanVideo_comfy), or the pre-merged Wan2.1_VACE_Phantom. Phantom wants CFG above 1.0 (1.5–3.5) - skip that and the character consistency that makes dual-context control worthwhile just evaporates. Where people get burned with two contexts: they stack two videos that fight each other at full strength. Turn vace_strength2 down when contexts overlap and you'll get a lot less mush.

The pack is by drozbay - the same AbleJones whose WanTests sampler comparisons are a small legend in the Wan/VACE community and who's been carrying the RES4LYF node pack since early 2026. The example workflows in the repo are worth opening even if you swap out his sampler choices.

CategoryWanVaceAdvanced

Inputs (18)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT811–16384
batch_sizeINT11–4096
control_videooptIMAGE
control_video2optIMAGE
control_masksoptMASK
control_masks2optMASK
vace_referenceoptIMAGE
vace_reference_2optIMAGE
vace_strengthoptFLOAT1.000–1000
vace_strength2optFLOAT1.000–1000
vace_ref_strengthoptFLOAT1.000–1000
vace_ref_strength2optFLOAT1.000–1000
phantom_imagesoptIMAGE

Outputs (5)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
neg_phant_imgCONDITIONING
latentLATENT
trim_latentINT