WanVacePhantomDual
Pose in one hand, depth in the other
- 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
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.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 811–16384 | — |
| batch_size | INT | 11–4096 | — |
| control_videoopt | IMAGE | — | |
| control_video2opt | IMAGE | — | |
| control_masksopt | MASK | — | |
| control_masks2opt | MASK | — | |
| vace_referenceopt | IMAGE | — | |
| vace_reference_2opt | IMAGE | — | |
| vace_strengthopt | FLOAT | 1.000–1000 | — |
| vace_strength2opt | FLOAT | 1.000–1000 | — |
| vace_ref_strengthopt | FLOAT | 1.000–1000 | — |
| vace_ref_strength2opt | FLOAT | 1.000–1000 | — |
| phantom_imagesopt | IMAGE | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| neg_phant_img | CONDITIONING | — |
| latent | LATENT | — |
| trim_latent | INT | — |