Nodes/ComfyUI-PainterNodes/Painter Humo AV2V
ComfyUI Node

Painter Humo AV2V

Re-lip-sync an existing video in 2 steps

By princepainter·Created 7 months ago·Updated 5 days ago· 194
Painter Humo AV2V
  • positive
  • negative
  • vae
  • video
  • audio_encoder_output
  • start_image
  • end_image
  • positive
  • negative
  • latent
width832
height480
length97
fps25.0

Sometimes the video already exists and the voice doesn't match it. That's the problem PainterHumoAV2V is built for: audio-to-video lipsync on footage you already have. It takes a video, drives it with an audio encoder output, and hands you the conditioning and latent for a two-step Humo sampling pass - the "Wan 2.2 + Humo" recipe, aimed specifically at re-animating the mouth to a new track rather than generating motion from scratch.

What it is

The sibling to PainterHumoAI2V (image-to-video) in the same conditioning/video_models category. Where AI2V starts from a still, this one starts from a clip: feed in video, plus prompt conditioning, a vae, resolution, and the audio, and get back positive, negative, and latent ready for a two-step sampler. The author's changelog describes it plainly: "Humo model 2-step sampling for video lip-sync, custom audio talking frame rate (16–30 recommended)."

How it works

The video input is the footage to re-animate, the audio_encoder_output carries the new speech, and the node builds the conditioning that tells the model to re-sync the mouth to that track. Like its sibling it exposes a fps control (default 25, range 1–60) for the talking frame rate - keep it in the 16–30 band the README recommends for natural lip motion. The optional start_image / end_image inputs let you pin the first and/or last frame so the re-sync doesn't drift the shot's endpoints.

Two steps is the whole point: Humo's 2-step sampling is the speed story here, trading a little fidelity for dramatically faster lipsync than running a full multi-step pass. That's the "faster than InfiniteTalk" claim in the pack's changelog - the same niche, one pack.

Inputs and outputs that matter

  • video - the clip to re-lip-sync (required).
  • audio_encoder_output - the driving audio; expects the output of your Wan audio encoder.
  • fps - talking frame rate; 16–30 is the sweet spot.
  • width / height / length - target resolution and frame count (length default 97, stepped by 4).
  • start_image / end_image - optional anchors to hold the shot's endpoints.
  • Outputs: positive / negative into the sampler, latent into its latent port.

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 example graph lives in the pack's workflows/video_humo-AV2V.json - load it to see the full two-step sampler wiring, since the node itself only covers conditioning and latent.

Common issues

  • Mouth moves but doesn't match - fps outside 16–30, or the source clip's own audio still in the graph fighting the new track. Mute the original before you judge the result.
  • The whole video drifts, not just the lips - that's the model re-interpreting motion, not a bug. Pinning start_image/end_image reins it in when the shot needs to stay put.
  • Two steps looks soft - expected trade-off of the speed pass. If the faces look mushy, the usual fix is a face detail pass after decode rather than cranking steps back up and losing the speed.

This is the node to grab when you've got a clip and a new voice line and you want the mouth to cooperate. It's small, it's focused, and it's fast - which is the entire pitch.

Categoryconditioning/video_models

Inputs (11)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
videoIMAGE
widthINT83216–16384
heightINT48016–16384
lengthINT971–16384
fpsFLOAT25.01–60
audio_encoder_outputoptAUDIO_ENCODER_OUTPUT
start_imageoptIMAGE
end_imageoptIMAGE

Outputs (3)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
latentLATENT