Nodes/ComfyUI-MAINodes/H3 Audio Smear (hold-map stretch, pitch kept) [alpha]
ComfyUI Node

H3 Audio Smear (hold-map stretch, pitch kept) [alpha]

The audio seed that keeps dialogue honest through a de-rope

By matlowai·Created 17 days ago·Updated about 17 hours ago· 112
H3 Audio Smear (hold-map stretch, pitch kept) [alpha]
  • audio
  • AUDIO
hold_map
fps24

H3 Audio Smear is the audio twin of H3 Time Smear, and it exists to fix one of the sneakiest failures in this pack. Let's set it up properly, because the node makes no sense until you've hit the failure.

The de-rope regenerates your clip as a slowed version of itself. The picture gets an init - the smeared frames tell pass 2 to move slowly, and it does. The audio gets nothing. It starts from zeros, so pass 2 writes a fresh performance at natural speaking rate and moves the mouth to match it. Then recovery compresses everything back to real time. The body comes back at the right speed because it really was slowed. The mouth doesn't, because it never was. Result: held regions sound rushed, the tail sounds fine, and you spend an evening blaming the wrong node.

What it does

Audio Smear is that missing init. It stretches the baseline clip's audio (the pass-1 track, already on the world clock) onto the same dilated timeline the smeared video init lives on - using the same hold map, so both halves of the latent agree about where the slowdowns are. Pitch is preserved; like its sibling, it's a phase vocoder, so fine detail gets rough. That's fine: the injection strength in the sampler is what re-renders detail, not this node.

Wire it in and pass 2 really does render a slowed performance, so H3 Exact Recover and H3 Audio Recover end up compressing something that genuinely was slow. That's the whole point - you can't correctly compress audio that was never stretched.

The wiring

Three inputs, all required: audio (the baseline/pass-1 audio - from your first pass's VAEDecodeAudio, not pass 2's), hold_map (the same map you gave H3 Time Smear), and fps (24, the frame rate holds are counted in). Single AUDIO output.

The chain the README recommends for a graph you already have:

  1. H3 Audio Smear - baseline audio in, hold_map from the same Time Smear output you already feed to H3 Audio Recover.
  2. VAEEncodeAudio - smear's output through your audio VAE.
  3. H3 V2V Init - wire audio_latent from that encode, set audio_mode to follow the original performance (0.5).

Nothing else changes, and both new inputs default to the old behavior, so a graph without them behaves exactly as before. This is the pattern the pack follows everywhere: the audio-init path is opt-in.

Two honest caveats

The audio seed is alpha. It's been measured on a handful of clips - sword-fight material, two speakers trading lines over fast motion, hold factors around 4. Single-speaker clips, speech over music, and non-anime footage are untested. Listen to the tail of a clip as well as the start, because the tail is where an unheld region will sound normal whether or not anything's wrong.

And the seed isn't free on the output side: pass 2's foley comes back through two phase-vocoder passes and a VAE round trip, which costs about a third of the presence band between 3.4 and 8 kHz. That's why the safe default on H3 Audio Recover is to ship the original track and let the seed's job be making the picture agree with it.

Installing it

Pure Python, no pip deps:

cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes

Restart, find it under audio/minimax/motion. Example graphs also want ComfyUI-KJNodes; the pack's own nodes run without it. You'll need MiniMax H3 on hand - community license, so check your territory (US, EU, UK, South Korea are excluded) before building a pipeline on it.

Categoryaudio/minimax/motion

Inputs (3)

NameTypeDefaultDescription
audioAUDIObaseline (pass-1) audio, on the world clock
hold_mapSTRING
fpsINT241–120

Outputs (1)

NameTypeDescription
AUDIOAUDIO