InfiniTalk AutoScale
One node for any-length InfiniTalk — stop hand-wiring 60 segment nodes
- model
- model_patch
- positive
- negative
- vae
- audio_encoder_output_1
- start_image
- video_frames
Wan 2.1's InfiniTalk adapter turns a single image into a lip-synced talking head, driven by whatever audio you feed it. The catch: it generates in ~3.2-second chunks (81 frames), and for anything longer than that the stock workflow makes you chain WanInfiniteTalkToVideo nodes together with previous_frames wiring. A 30-second voiceover means ten segments, each with its own sampler nodes copied and connected by hand - roughly 60 nodes on the canvas, and heaven help you if you need to change a setting because you get to edit all of them. InfiniTalk AutoScale replaces that entire chain with one node. Feed it the audio, the image, and the models, and it figures out how many segments it needs and loops internally. Drop audio, hit queue, done.
How it works
The node leans entirely on ComfyUI's built-in Wan machinery - the same InfiniteTalkOuterSampleWrapper and MultiTalkCrossAttnPatch that the stock WanInfiniteTalkToVideo uses - so it isn't reimplementing anything, just orchestrating it. It takes the audio encoder's output, interpolates the embeddings from 50fps to 25fps to get a frame count, then computes segments as ceil((total_frames - frame_window) / (frame_window - motion_frames)) + 1. Each pass windows the audio to that segment's time range, reuses the last few decoded frames as motion context for continuity, samples with your chosen sampler and scheduler, VAE-decodes, trims the overlap, and concatenates into one big frame tensor. Each segment gets seed + segment_index, so the whole run is still reproducible from a single seed.
The inputs that matter
Most inputs are just the plumbing you'd wire to the stock node anyway: model, model_patch (the InfiniTalk adapter from ModelPatchLoader), positive/negative conditioning, vae, start_image, and audio_encoder_output_1 straight out of AudioEncoderEncode. The ones you actually think about:
steps- 4 with the LightX2V distill LoRA loaded, 20–30 without. These defaults assume the distilled setup, so don't copy them onto the full 14B model and wonder why it looks broken.cfg- 1.0 for distilled, higher for the full model.frame_window(81) andmotion_frame_count(9) - segment size and the overlap that keeps transitions smooth. The defaults are right; the tooltips even tell you 81 must be 4n+1.max_segments(0) - 0 means "match the audio," or set a hard cap to stop runaway renders.audio_scale(1.0) - how hard the audio drives lip sync. This is the first knob to turn when sync feels weak.
It emits one output, video_frames (an IMAGE tensor of every frame), which you wire into CreateVideo → SaveVideo with your audio attached.
Installing it
ComfyUI Manager (search "InfiniTalk AutoScale") or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/Biyikgokhan/ComfyUI-InfiniTalk-AutoScale.git
Restart, and it appears under video/infinitalk. No extra Python dependencies - the pack is just __init__.py plus node.py, and it needs ComfyUI 0.18+ because it imports the Wan InfiniTalk classes from core. The model requirements are all standard Wan2.1 InfiniTalk files (14B I2V checkpoint, the wan2.1_infiniteTalk_multi_fp16 patch, wav2vec2 audio encoder, Wan VAE, umt5 CLIP), so if you've run InfiniTalk at all you already own them. The author tested on a 32GB RTX 5090 and says 24GB+ should manage.
Where people get burned
- Lip sync quality is model-dependent, not node-dependent. People rave about InfiniTalk on realistic faces and complain it's mushy on flat cartoon art. That's the adapter, not this node -
audio_scalenudges it, it won't fix it. - Length is approximate. Segment math doesn't land exactly on the audio; the README's own table shows a 60s clip coming out ~58s. That's a few frames to trim in your editor, not a bug.
- Compute scales linearly. A one-minute clip is ~20 full denoising passes. Even at 4 steps with the distill LoRA, don't queue it casually on a small card.
- The "do you even need this?" debate. When the author posted this on r/comfyui, someone countered that InfiniTalk isn't limited to short clips and you don't need segment chaining at all. That's true if you start from a wrapper workflow like Kijai's. It's very much not true for ComfyUI's stock reference template, which is exactly the copy-paste hell this kills. Know which starting point you're on.
Honest verdict: it's a single-purpose convenience node - no API calls, no model downloads of its own, and it's been confirmed working on a 10-segment render in the wild. If chaining segments is your daily annoyance, it's a small download that deletes a big one. The author's planning a two-speaker mode next.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| model_patch | MODEL_PATCH | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| audio_encoder_output_1 | AUDIO_ENCODER_OUTPUT | — | |
| start_image | IMAGE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| frame_window | INT | 8117–257 | Frames per segment (must be 4n+1). 81 = ~3.2s per segment. |
| motion_frame_count | INT | 91–33 | Overlap frames between segments for temporal continuity. |
| max_segments | INT | 00–100 | Max segments (0 = auto from audio length, no limit). |
| steps | INT | 41–100 | — |
| cfg | FLOAT | 1.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| seed | INT | 00–18446744073709550000 | — |
| audio_scale | FLOAT | 1.00-10–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_frames | IMAGE | — |