Wan22 Sound Image To Video (Tiled VAE Encode)
Make a talking video from one image and an audio track — without the VRAM wall
- positive
- negative
- vae
- audio_encoder_output
- ref_image
- control_video
- ref_motion
- positive
- negative
- latent
Wan 2.2's speech-to-video model (S2V-14B) will animate a still image to match an audio clip - lips, head motion, all synced to the track. The native ComfyUI conditioner does it in one VAE encode of a fairly long reference-motion sequence, and that's exactly where a low-VRAM card runs out of road. This node is the native S2V conditioner with a tiled encode, so you can finally run S2V on the same card that runs your I2V.
What it actually does
It's the stock Wan22SoundImageToVideo node, with every vae.encode() call swapped for encode_tiled(). You feed it a ref_image (your subject), an audio_encoder_output (the audio features from the Wan audio encoder - that's the AUDIO_ENCODER_OUTPUT type), and optionally a control_video for pose driving and ref_motion to keep an existing clip's motion going. The node timestamps the audio embeddings to the video frames, encodes the reference image as reference_latents, turns the last ~73 frames of ref_motion into a reference_motion condition, and packages everything into the conditioning for the sampler.
The ref_image encode is a single-frame tiled encode; the control_video and ref_motion encodes are temporal tiled encodes using your temporal_size / temporal_overlap. Those are the memory hogs, and tiling is what keeps them from spiking.
Inputs and outputs
Required: positive / negative conditioning, vae, width / height / length (default 77) / batch_size, and the tiling quartet (tile_size 512, overlap 64, temporal_size 64, temporal_overlap 8). Optional: audio_encoder_output, ref_image, control_video, ref_motion.
Outputs: positive, negative, latent. Wire the conditioning and latent into your KSampler and you're off - you'll then decode the frames, and the audio itself is handled by whatever audio pipeline you paired with the encoder (the video side carries the sync conditioning, not the audio file).
Installing it
ComfyUI Manager → search Fossiel or WAN-Additional-Tilers, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Fossiel/ComfyUI-Fossiel-WAN-Additional-Tilers
Restart ComfyUI. No Python dependencies beyond ComfyUI, no models bundled - you need the Wan 2.2 S2V weights, CLIP, VAE, and the audio encoder model.
Gotchas
Two real ones. First, the S2V model's native length is short - 77 frames is roughly five seconds - and the audio-sync conditioning is computed for exactly the length you request, so if you extend it the tail can drift off-sync. Second, the standing pack rule: keep ComfyUI reasonably current, since the temporal tiling arguments on encode_tiled() need a recent build. If you're still near your memory ceiling, drop tile_size to 384 or 256 before cutting resolution.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 771–16384 | — |
| batch_size | INT | 11–4096 | — |
| tile_size | INT | 51264–4096 | — |
| overlap | INT | 640–4096 | — |
| temporal_size | INT | 648–4096 | Amount of frames to encode at a time. |
| temporal_overlap | INT | 84–4096 | Amount of frames to overlap. |
| audio_encoder_outputopt | AUDIO_ENCODER_OUTPUT | — | |
| ref_imageopt | IMAGE | — | |
| control_videoopt | IMAGE | — | |
| ref_motionopt | IMAGE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |