PainterAI2V
PainterAI2V fixes InfiniteTalk's 25fps trap
- model_high_noise
- model_low_noise
- model_patch
- positive
- negative
- vae
- audio_encoder_output_1
- clip_vision_output
- start_image
- end_image
- previous_frames
- high_model
- low_model
- positive
- negative
- latent
- trim_image
InfiniteTalk is ComfyUI's official audio-driven talking-head tech: feed it a face and a voice track and the model animates the mouth to match. It's genuinely good, and it has one infuriating quirk - the audio timing is tied to a hardcoded 25fps, so generate at any other rate and your lips start drifting off the words. PainterAI2V is a community rework (by the Chinese creator 绘画小子 / "Painter Kid") that fixes exactly that and bolts first/last-frame control on top, aimed squarely at Wan 2.2's two-model workflow. It's the lip-sync node to reach for when you want output that isn't locked to 25fps.
The name is a giveaway of what it is not: AI2V doesn't generate video. It's a "patch and pass through" node. You hand it your Wan 2.2 high-noise and low-noise models, the InfiniteTalk patch model, audio from the audio encoder, and images to anchor on - it patches everything and hands patched models, conditioning, and a latent back out to your samplers. The actual sampling happens downstream in the KSampler nodes, which is why it drops into the official Wan 2.2 dual-model flow without changing how you sample (high-noise pass for steps 0–2, low-noise pass for steps 2–4, per the model tooltips).
Mechanically the interesting part is the audio. The encoder emits features at 50fps, and the node linearly interpolates them to whatever video_fps you set before projecting them through the patch model's audio projection and embedding them into the transformer. That's the whole fix: the official node assumes 25fps, this one makes the mouth actually match the footage you'll render. If you've been staring at an AI character whose lips are a beat behind the words, this is the node that solves it.
The inputs that matter
video_fps- the star of the show. 1–120, default 20, and the audio syncs to it. Set it to your render rate, not to 25 out of habit.model_high_noise/model_low_noise- the two Wan 2.2 passes. The bundled workflow runs high-noise on a Wan 2.2 14B and low-noise on a Wan 2.1 14B, so don't feel locked to a specific pairing.mode-single_speakerortwo_speakers. Two-speaker adds a secondaudio_encoder_output_2plusmask_1/mask_2, and it hard-raises if you give it two audio tracks without masks.start_image/end_image- anchor the first frame, the last frame, or both for a controlled transition. The middle gets filled with neutral gray and masked for the VAE, so the model knows what to hold.previous_frames+motion_frame- continuation. Feed the tail of your last clip and it extends rather than restarting.
Outputs are high_model, low_model, positive, negative, latent, and trim_image. The first five wire straight into your two KSamplers and conditioning. trim_image is the subtle one: when you pass previous_frames it equals motion_frame, telling you how many leading frames to crop off the decoded result - that's the context overlap you don't want in your final video.
Two footguns worth knowing before you start. First, length follows the Wan VAE's 4n+1 rule (81 default): time compresses ~4x in the latent, so pick frame counts like 49, 81, 121 unless you enjoy your clip coming back two frames short. Second, previous_frames needs at least motion_frame frames or it refuses with a clear error. And set expectations on cost: lip-sync is not fast. Wan clips are 81-frame windows and people run these on 4090-class cards for hours; a two-minute talking video is an overnight project, not a coffee break.
Installing it
ComfyUI Manager (search "ComfyUI-PainterAI2V"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterAI2V
Restart ComfyUI. There are no pip dependencies - this is pure Python over ComfyUI core - but the catch is which ComfyUI: it imports comfy.ldm.wan.model_multitalk, so you need a build new enough to have InfiniteTalk and the audio encoder nodes built in. If you see "No module named comfy.ldm.wan.model_multitalk", update ComfyUI, not the node.
The models aren't in the repo. From the shipped workflows you'll need the Wan 2.2 high/low noise I2V UNets (plus a Wan 2.1 14B if you copy their low-noise choice), the InfiniteTalk patch (Wan2_1-InfiniTetalk-Single_fp16.safetensors), the wav2vec2 audio encoder, and a Wan VAE - all pullable via ComfyUI Manager or the official InfiniteTalk setup. One trap: the example workflows also reference sibling nodes like PainterAudioCut and PainterVideoCombine that aren't in this pack, so you'll either grab the author's other Painter nodes or rebuild those bits from stock ones.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | 2 options: [object Object], [object Object] | |
| model_high_noise | MODEL | Wan2.2 high noise model (steps 0-2) | |
| model_low_noise | MODEL | Wan2.2 low noise model (steps 2-4) | |
| model_patch | MODEL_PATCH | InfiniteTalk patch model | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 811–16384 | — |
| video_fps | FLOAT | 20.001–120 | Video output frame rate - audio lip-sync will match this |
| audio_encoder_output_1 | AUDIO_ENCODER_OUTPUT | — | |
| motion_frame | 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 | — | |
| end_imageopt | IMAGE | — | |
| previous_framesopt | IMAGE | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| high_model | MODEL | — |
| low_model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| trim_image | INT | — |