PainterHumoAI2V
Make a still talk, dance, and sing
- positive
- negative
- vae
- audio_encoder
- start_image
- end_image
- high_positive
- high_negative
- low_positive
- low_negative
- latent
Audio-driven video is where open models finally caught up to the paid services: you feed in audio, the model makes the subject's lips, face, and body follow it. PainterHumoAI2V is the PainterNodes take on that, built on the Wan 2.2 + Humo combination - a two-step-sampling pipeline that animates a still image (or a first/last-frame pair) from an audio track. This is the node for "I have a portrait and a voice line, give me a talking video."
What it is
A conditioning-and-latent builder in conditioning/video_models. It takes your prompt conditioning, a vae, resolution settings, an optional audio encoder output, and either a start_image or start_image+end_image pair - and produces everything a Wan 2.2-style sampler needs, including the audio-driven conditioning. The author's changelog frames it as three jobs in one: audio-driven image-to-video, audio-driven first/last-frame video, and - if you disconnect the images and swap the high-noise model and LoRA for Wan 2.2's T2V ones - audio-driven text-to-video.
How it works
The tell is in the outputs: high_positive/high_negative and low_positive/low_negative. Wan 2.2 is a two-expert Mixture-of-Experts - a high-noise model that handles motion and composition and a low-noise model that refines detail. This node hands you separate conditioning for each expert, which is exactly the split you need if you're applying speed LoRAs to only the low-noise pass, the community's favorite compromise. The audio_encoder input (an AUDIO_ENCODER_OUTPUT, so it expects the output of a Wan-style audio encoder) is what carries the speech that drives the lips.
The README's tuning note is the practical gold: set the audio "talking frame rate" - fps - between 16 and 30. That's the range where lip-sync lands naturally; too low and the mouth looks lazy, too high and it gets jittery.
Inputs and outputs that matter
- start_image / end_image - the visual anchor(s). Just a start image for I2V, both for first/last-frame animation.
- audio_encoder - the audio that drives everything. Feed it the encoder output from your Wan audio stack.
- fps - talking frame rate; keep it 16–30.
- length - default 97 frames, stepped by 4.
- Outputs:
high_positive/high_negativeinto the high-noise sampler,low_positive/low_negativeinto the low-noise pass, andlatentinto both. Wire each expert pair to its own KSampler and you're done.
Install
Part of the PainterNodes pack. ComfyUI Manager → search "PainterNodes" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterNodes
cd ComfyUI-PainterNodes
pip install -r requirements.txt
The Wan 2.2 checkpoints, Humo models/LoRAs, and audio encoder come from elsewhere (the pack's own workflows/wan2.2+humo AI2V 2026.json shows the full graph and what connects where).
Common issues
- Lips don't match the audio - almost always an
fpsoutside the 16–30 sweet spot, or the audio encoder output not actually connected. Check both before re-sampling. - It's slow - Wan 2.2 is Wan 2.2. Two experts means two sampler passes; this is normal, and the low-noise-only speed LoRA trick works here because the node hands you the split conditioning.
- No audio in the output - the node builds the conditioning; the audio still has to come out of your sampler/decoder stack. If your graph ends at a video-only decode, the track is lost downstream, not by this node.
If you've been meaning to try audio-driven video but bounced off the multi-pack assembly, this node collapses the conditioning half into one box. The split expert outputs are the bonus - you get the Wan 2.2 architecture's best trick for free.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 971–16384 | — |
| batch_size | INT | 11–4096 | — |
| fps | FLOAT | 25.01–120 | — |
| audio_encoderopt | AUDIO_ENCODER_OUTPUT | — | |
| start_imageopt | IMAGE | — | |
| end_imageopt | IMAGE | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| high_positive | CONDITIONING | — |
| high_negative | CONDITIONING | — |
| low_positive | CONDITIONING | — |
| low_negative | CONDITIONING | — |
| latent | LATENT | — |