H3 Audio Smear (hold-map stretch, pitch kept) [alpha]
The audio seed that keeps dialogue honest through a de-rope
- audio
- AUDIO
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:
- H3 Audio Smear - baseline audio in,
hold_mapfrom the same Time Smear output you already feed to H3 Audio Recover. - VAEEncodeAudio - smear's output through your audio VAE.
- H3 V2V Init - wire
audio_latentfrom that encode, setaudio_modetofollow 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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | baseline (pass-1) audio, on the world clock | |
| hold_map | STRING | — | |
| fps | INT | 241–120 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |