Nodes/ComfyUI-WanVaceAdvanced/WanVacePhantomExperimental
ComfyUI Node

WanVacePhantomExperimental

The kitchen-sink VACE node with the honest name

By drozbay·Created about a year ago·Updated 7 months ago· 95
WanVacePhantomExperimental
  • 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
phantom_mask_value1.00
phantom_control_value0.00
phantom_vace_strength0.00

The name is doing real work here. "Experimental" doesn't mean broken - it means this is the WanVaceAdvanced pack's kitchen sink, the node that throws two VACE control contexts and the Phantom embedding region controls at you all at once. If you found this page you're probably either looking at someone else's workflow that uses it, or you started with WanVacePhantomSimple, hit its limits, and want the dual-control version. Both are good reasons to be here.

Quick context if you're new to the pack: Wan is Alibaba's Apache 2.0 video model, VACE is its video-conditioning system (think ControlNet for video - you feed it a pose/depth control video plus a reference image of the subject), and Phantom embeddings are a separate trick for locking character identity from still images. This pack's whole job is making VACE's per-frame strength control and Phantom combination precise. The README's own summary: it gives you "fine-grained control over Vace frame strengths with reference images, control videos, and optional phantom embeddings."

What makes this one different

Compared to the plain WanVacePhantomSimple, this node adds a full second VACE channel (control_video2, control_masks2, vace_reference_2, vace_strength2, vace_ref_strength2) - handy when you want pose from one video and depth from another at the same time. And it exposes the three Phantom region knobs you don't get elsewhere:

  • phantom_mask_value - the VACE mask value used for the Phantom embed region (default 1.0).
  • phantom_control_value - the padded value for the VACE-embedded latents in that region (default 0.0).
  • phantom_vace_strength - and this one's worth reading twice, because the author added a tooltip to stop you misreading it: it's the strength of the VACE embedding applied to the Phantom region, not the strength of the Phantom embeds themselves.

The rest of the inputs

Required are positive, negative, vae, and the frame geometry (width 832, height 480, length 81, batch_size 1). Note length is in video frames - each latent frame covers 4 video frames. The regular strength inputs (vace_strength, vace_ref_strength) accept a plain float, and with a patched model they'll also take a list of floats for per-frame control - e.g. [1.0, 1.0, 1.0, 0.5, 0.5, ...] to hold character strength high for the first few frames of a continuation, then ease off. Feed a list from this pack's own StringToFloatListRanged or Kijai's String to Float List.

Outputs are positive, negative, neg_phant_img (the extra negative you should Conditioning Combine into your main negative when using Phantom - the README says to), a latent, and trim_latent (an INT telling you how many reference frames got eaten, so downstream nodes can stay aligned).

The catch: it doesn't patch the model itself

This original-family node has no model input. To get per-frame strength lists working you must patch the model separately with VaceAdvancedModelPatch (the V2 nodes fold this in automatically). The patch is safe - untouched workflows behave identically - but forget it here and strength lists silently degrade. That's the single most common way people get confused by this node.

Install

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

Or search "ComfyUI-WanVaceAdvanced" in ComfyUI Manager. Dependencies are light - just numpy and scipy - but you'll want Kijai's ComfyUI-KJNodes for Wan model loading and VideoHelperSuite for video I/O, plus the VACE module + Phantom 14B weights (the pre-merged InnerReflections Wan2.1_VACE_Phantom checkpoint is the easy route).

One honest warning from the community: combining Phantom and VACE is where workflows get fiddly, and people do hit weaker character consistency during inpainting with this stack. Don't blame the node first - check your CFG (Phantom needs > 1.0, 1.5–3.5 typical), your negative combining, and that your subject reference isn't cluttered. If you don't need the second control channel, WanVacePhantomSimpleV2 is the calmer default.

CategoryWanVaceAdvanced

Inputs (21)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT811–16384
batch_sizeINT11–4096
control_videooptIMAGE
control_video2optIMAGESecond control video input
control_masksoptMASK
control_masks2optMASKSecond control masks input
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
phantom_mask_valueoptFLOAT1.000–1Vace mask value for the Phantom embed region.
phantom_control_valueoptFLOAT0.000–1Padded vace embedded latents value for the Phantom embed region.
phantom_vace_strengthoptFLOAT0.000–1000Vace strength value for the Phantom embed region. (Read: *NOT* the strength of the Phantom embeds, just the strength of the Vace embedding applied to the Phantom region.)

Outputs (5)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
neg_phant_imgCONDITIONING
latentLATENT
trim_latentINT