Nodes/ComfyUI-PainterNodes/PainterHumoAI2V
ComfyUI Node

PainterHumoAI2V

Make a still talk, dance, and sing

By princepainter·Created 7 months ago·Updated 5 days ago· 194
PainterHumoAI2V
  • positive
  • negative
  • vae
  • audio_encoder
  • start_image
  • end_image
  • high_positive
  • high_negative
  • low_positive
  • low_negative
  • latent
width832
height480
length97
batch_size1
fps25.0

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_negative into the high-noise sampler, low_positive/low_negative into the low-noise pass, and latent into 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 fps outside 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.

Categoryconditioning/video_models

Inputs (11)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT971–16384
batch_sizeINT11–4096
fpsFLOAT25.01–120
audio_encoderoptAUDIO_ENCODER_OUTPUT
start_imageoptIMAGE
end_imageoptIMAGE

Outputs (5)

NameTypeDescription
high_positiveCONDITIONING
high_negativeCONDITIONING
low_positiveCONDITIONING
low_negativeCONDITIONING
latentLATENT