WanDancerVideo
Wan-Dancer's conditioning node
- positive
- negative
- vae
- clip_vision_output
- clip_vision_output_ref
- start_image
- mask
- audio_encoder_output
- positive
- negative
- latent
Where WanDancerEncodeAudio turns your song into features, WanDancerVideo turns those features plus a picture of your dancer into a ready-to-sample video generation. This is the main event of the Wan-Dancer workflow: it builds the empty latent, anchors the character from your start image, attaches the audio, and hands the KSampler everything it needs to produce a character dancing to your track.
The mechanism is a Wan-family conditioning stack. It allocates an empty 16-channel latent at 8x spatial compression, sized from width/height/length - defaults 480×832 (portrait, the dance-video aspect) and 149 frames, which the tooltip flatly says should stay at 149 for Wan-Dancer. If you feed start_image, the node pads it to fill the clip, VAE-encodes it, and sets a concat_mask with 0 over the anchored frames - and if you also give it a mask, that mask controls local generation: white pixels stay, black pixels get regenerated, which is how you dance a character into an existing background. Two CLIP vision inputs can be wired in: clip_vision_output for the first frame and clip_vision_output_ref for the reference image of the character. And the star of the show, audio_encoder_output from WanDancerEncodeAudio, injects the audio features plus the fps and audio_inject_scale into both positive and negative conditioning. Outputs: positive, negative, and latent.
Inputs to care about: positive/negative (Wan text encode), vae, the three geometry ints (keep length at 149), start_image, the optional mask, the two optional CLIP vision outputs, and audio_encoder_output. That's a lot of optional wires, and the honest truth is the workflow only feels like Wan-Dancer when they're connected - start image + both CLIP vision encodes + the audio output is the full setup; skimp and you get a generic (and mediocre) I2V.
It's core (comfy_extras/nodes_wandancer.py), recent, no install. Load the Wan-Dancer-14B checkpoint with its VAE, and get audio in via WanDancerEncodeAudio.
The community signal is thin because Wan-Dancer only shipped in July 2026 - this is the early-adopter phase. What the source already tells you: the mask semantics are inverted from what most ComfyUI nodes do (white kept / black generated, and here it's explicitly for "local generations"), so if you're used to inpainting masks, double-check which side you're drawing on. And the 149-frame rule is a hard constraint, not a suggestion - the audio features and fps are computed against it. Deviate, and the choreography drifts off the beat you fed it.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 48016–16384 | — |
| height | INT | 83216–16384 | — |
| length | INT | 1491–16384 | The number of frames in the generated video. Should stay 149 for WanDancer. |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | The CLIP vision embeds for the first frame. | |
| clip_vision_output_refopt | CLIP_VISION_OUTPUT | The CLIP vision embeds for the reference image. | |
| start_imageopt | IMAGE | The initial image(s) to be encoded, can be any number of frames. | |
| maskopt | MASK | Image conditioning mask for the start image(s). White is kept, black is generated. Used for the local generations. | |
| audio_encoder_outputopt | AUDIO_ENCODER_OUTPUT | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | Empty latent. |