Nodes/ComfyUI-Fossiel-WAN-Additional-Tilers/Wan22 Sound Image To Video (Tiled VAE Encode)
ComfyUI Node

Wan22 Sound Image To Video (Tiled VAE Encode)

Make a talking video from one image and an audio track — without the VRAM wall

By Fossiel·Created 9 months ago·Updated 9 months ago· 2
Wan22 Sound Image To Video (Tiled VAE Encode)
  • positive
  • negative
  • vae
  • audio_encoder_output
  • ref_image
  • control_video
  • ref_motion
  • positive
  • negative
  • latent
width832
height480
length77
batch_size1
tile_size512
overlap64
temporal_size64
temporal_overlap8

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.

Categoryconditioning/video_models

Inputs (15)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT771–16384
batch_sizeINT11–4096
tile_sizeINT51264–4096
overlapINT640–4096
temporal_sizeINT648–4096Amount of frames to encode at a time.
temporal_overlapINT84–4096Amount of frames to overlap.
audio_encoder_outputoptAUDIO_ENCODER_OUTPUT
ref_imageoptIMAGE
control_videooptIMAGE
ref_motionoptIMAGE

Outputs (3)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
latentLATENT