InfiniteTalkMultiImage
One audio track, up to 20 images, and a node that does the timing math for you
- auto_start_time_list
- image1
- image2
- image3
- image4
- image5
- image6
- image7
- image8
- image9
- image10
- image11
- image12
- image13
- image14
- image15
- image16
- image17
- image18
- image19
- image20
- image_list
- frame_count_list
- real_start_time_list
- prompt_list
InfiniteTalk - the Wan-based talking-head model from MeiGen-AI - is brilliant at one thing: you give it a reference image and an audio track, and it produces a video of that person talking, lips and head movement synced to the audio, for as long as you can stand to wait. The community's take on it is basically "works right almost every time." Its weakness is that it's a one-image model. One person, one look, one clip. Want the narrator to change outfits mid-sentence, cut between two speakers on one track, or have the same character shift between scenes? You were stuck generating separate clips and stitching them by hand.
InfiniteTalkMultiImage is the node that makes that multi-image workflow a single run. It's the core of the ComfyUI-InfiniteTalk-MultiImage pack, and the honest description is that it's a scheduler, not a generator. It doesn't touch the diffusion model at all. What it does is take your raw material - an audio duration, up to 20 images, and one prompt per image - and work out exactly how long each image should be on screen, so the generation loop below it can chew through the video segment by segment.
Here's the mechanism. You feed it the total length of your audio (audio_duration), a start_time for each image (defaults march along at 0, 3, 6, 9...), and your prompts in prompt_list_input, one per line, matching each image. The node does the bookkeeping in Decimal precision and snaps every time to a multiple of 0.04 seconds - which is exactly one frame at 25 fps, so the math never drifts. Any image whose start time is past the end of the audio gets silently dropped. Then it computes, for each surviving image, the frame count of its segment: the gap to the next image's start time, or to the end of the audio for the last one, times 25. Prompts are aligned to the final image count - pad with blank lines if you're short, extras get truncated. If you'd rather not set twenty time widgets by hand, an optional auto_start_time_list overrides the manual times entirely.
The four outputs are all lists: image_list, frame_count_list, real_start_time_list, and prompt_list. In the pack's included workflow these feed a for-loop that hands one segment at a time to Kijai's WanVideoWrapper MultiTalk nodes - that's the "fully compatible with KJ nodes, no modification" claim in the README, and it's why this works at constant VRAM. Each segment generates its frames to disk, the loop advances, and the pack's own VideoFromPathsAndAudio node glues everything together at the end. Memory usage stops scaling with video length; only the disk fills up.
The inputs you'll actually touch: audio_duration (in seconds, step 0.04), prompt_list_input (one line per image), the start_time1–start_time20 widgets, and the optional image1–image20 slots. Wire image_list and friends downstream into the loop.
Installing is the same for the whole pack: ComfyUI Manager → search ComfyUI-InfiniteTalk-MultiImage → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/xuhongming251/ComfyUI-InfiniteTalk-MultiImage
The node's requirements.txt is empty - it's pure Python. The workflow it ships, though, is a different story: it needs Kijai's ComfyUI-WanVideoWrapper (the MultiTalk/InfiniteTalk nodes), the InfiniteTalk fp8 weights (Wan2_1-InfiniteTalk-Single_fp8_e4m3fn_scaled_KJ.safetensors), a Wan 2.1 I2V model, the VAE, a Wav2Vec2 model, MelBand RoFormer, plus Easy-Use, Inspire Pack and VHS for the loop scaffolding. Load the bundled workflow JSON (the Chinese-named InfiniteTalk 图片数字人--多图.json) and let Manager chase the missing nodes.
Where people get burned: a start time past the audio end drops the image with no error, so check your times against audio_duration. And set your expectations on speed - InfiniteTalk is not quick. Community reports put a ~28-second 720p clip at around two hours on a 3090. If you're on 16 GB, use the 低显存16G版本 workflow variant, which adds Wan block swapping to survive long runs.
Inputs (43)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_duration | FLOAT | 8.00 | — |
| prompt_list_input | STRING | — | |
| start_time1 | FLOAT | 0.00 | — |
| start_time2 | FLOAT | 3.00 | — |
| start_time3 | FLOAT | 6.00 | — |
| start_time4 | FLOAT | 9.00 | — |
| start_time5 | FLOAT | 12.00 | — |
| start_time6 | FLOAT | 15.00 | — |
| start_time7 | FLOAT | 18.00 | — |
| start_time8 | FLOAT | 21.00 | — |
| start_time9 | FLOAT | 24.00 | — |
| start_time10 | FLOAT | 27.00 | — |
| start_time11 | FLOAT | 30.00 | — |
| start_time12 | FLOAT | 33.00 | — |
| start_time13 | FLOAT | 36.00 | — |
| start_time14 | FLOAT | 39.00 | — |
| start_time15 | FLOAT | 42.00 | — |
| start_time16 | FLOAT | 45.00 | — |
| start_time17 | FLOAT | 48.00 | — |
| start_time18 | FLOAT | 51.00 | — |
| start_time19 | FLOAT | 54.00 | — |
| start_time20 | FLOAT | 57.00 | — |
| auto_start_time_listopt | START_TIME_LIST | — | |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| image4opt | IMAGE | — | |
| image5opt | IMAGE | — | |
| image6opt | IMAGE | — | |
| image7opt | IMAGE | — | |
| image8opt | IMAGE | — | |
| image9opt | IMAGE | — | |
| image10opt | IMAGE | — | |
| image11opt | IMAGE | — | |
| image12opt | IMAGE | — | |
| image13opt | IMAGE | — | |
| image14opt | IMAGE | — | |
| image15opt | IMAGE | — | |
| image16opt | IMAGE | — | |
| image17opt | IMAGE | — | |
| image18opt | IMAGE | — | |
| image19opt | IMAGE | — | |
| image20opt | IMAGE | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image_list | IMAGE | — |
| frame_count_list | INT | — |
| real_start_time_list | FLOAT | — |
| prompt_list | STRING | — |