WanInfiniteTalkToVideo
Make a person talk forever from one photo and one audio file
- model
- model_patch
- positive
- negative
- vae
- audio_encoder_output_1
- clip_vision_output
- start_image
- previous_frames
- model
- positive
- negative
- latent
- trim_image
This is the node that makes a face talk in sync with an audio track - lips, head movement, expression - for as long as the audio lasts, and then keeps going past it. InfiniteTalk is MeiGen-AI's model (the same team behind MultiTalk), built on Wan 2.1, and while it can do the obvious "photo + voice clip = talking head," the fun version is feeding it previous frames and letting it extend a clip until you run out of patience. It's a conditioning node, like every Wan video node: it doesn't sample anything. It hands you a patched model, conditioning, and a latent, and a KSampler does the actual denoising.
How it works
InfiniteTalk patches a base Wan image-to-video model. You give it three pieces: the base checkpoint, the InfiniteTalk model patch (the file that contains the audio projection layers - loaded separately as a MODEL_PATCH), and the output of an audio encoder. The node projects the encoded audio into the model via the patch's audio projection network, then hooks cross-attention so the audio literally steers what the mouth and head do during sampling.
The interesting part is the two-speaker mode. Switch mode to two_speakers and the node grows a second audio input plus two masks - you paint a mask over each speaker's face in the frame, and the model routes each voice to the right region via a cross-attention target mask. Two people, two voices, one conversation. That's the party trick, and it's the reason this node exists at all.
For long generations you feed previous_frames (the last N frames of the video you already made) and set motion_frame_count to how many of those to use as motion context. That's the "infinite" in the name - you loop, chaining chunks. The trim_image output tells you how many frames to slice off the front of the new chunk so chunks butt together cleanly.
The inputs that matter
- model - a base Wan 2.1 I2V checkpoint (the 480P variant is the officially paired one).
- model_patch - the InfiniteTalk weights, loaded from
models/model_patches. This is the file everyone forgets; without it the node produces audio-free Wan video and you'll wonder what you're missing. - audio_encoder_output_1 - feed this from
AudioEncoderEncode, fed by a loaded audio encoder. InfiniteTalk uses a wav2vec2-based encoder (the Chinese wav2vec2 base, inmodels/audio_encoders). - positive / negative - text prompts describing the scene, same as any Wan I2V.
- start_image - the first frame. Omit it and you get a blank latent.
- audio_scale - how hard the audio pulls on the generation. Default 1.0; negative values exist but are an experiment.
- length - frames per chunk (default 81, the Wan-native clip).
Outputs: the patched model, positive, negative, and latent all go into a KSampler; trim_image is an int for your chunk-joining logic.
Getting it
It ships with ComfyUI core - nothing to install, just update. Native support landed in January 2026 (PR #10179). Model files to grab: the Wan 2.1 I2V checkpoint, the InfiniteTalk patch from MeiGen-AI/InfiniteTalk into models/model_patches, and the wav2vec2 audio encoder into models/audio_encoders. All Apache 2.0 and ungated.
Common issues
The error you'll actually hit is Not enough previous frames provided - you fed fewer previous_frames than motion_frame_count. Feed the whole tail, not a couple of frames. Two-speaker mode is strict: pick it and the node demands both masks plus the second audio, and it raises if you give a second audio without masks. And budget your time: long takes are slow, and the community's first runs clocked 30+ minutes for extended clips even with distilled-step LoRAs. Test on a short chunk first.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | 2 options: [object Object], [object Object] | |
| model | MODEL | — | |
| model_patch | MODEL_PATCH | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 811–16384 | — |
| audio_encoder_output_1 | AUDIO_ENCODER_OUTPUT | — | |
| motion_frame_count | INT | 91–33 | Number of previous frames to use as motion context. |
| audio_scale | FLOAT | 1.00-10–10 | — |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | — | |
| start_imageopt | IMAGE | — | |
| previous_framesopt | IMAGE | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| trim_image | INT | — |