沐阳 H3 · 音频接缝平滑
Your long H3 video clicks at every join. This is the node that kills the click.
- previous_audio
- next_audio
- next_images
- previous_audio
- next_audio
- report
MiniMax H3 generates 4-15 second clips with the soundtrack baked into the same pass as the picture. That's genuinely rare - the Video ecosystem spent years bolting audio on afterwards - but it also means there's no separate audio pipeline you can nudge. A ten-second clip is a take. A two-minute video is a chain of takes, and every chain has seams.
You can hide a picture seam with a dissolve. Audio seams are meaner: a click, a room-tone step, a breath that gets cut in half. H3AudioSeam is the node that fixes that without changing your timing by a single frame.
What it actually does
The trick is that the duplicate already exists. When Myang carries the tail of segment N into segment N+1, that's trim_frames worth of pinned context at the head of the new segment - the exact same audio that's sitting at the end of the previous one. Normally you just throw it away when you trim to the delivered duration.
This node uses it. It rewrites the last fade_ms of the previous segment by crossfading it toward the anchor audio sitting immediately before the new segment's trim point, matches levels with an RMS gain clamped between 0.75 and 1.33 so a transient can't yank the volume, then ramps the retained part of the new segment back to unity over the same window. Two things fall out of that: no click at the cut, and no second loudness edge right after it.
The important part for your sanity: total duration doesn't change. The report output says so, and the numbers back it up - "音频接缝:80 ms(N samples),总时长不变".
Inputs and outputs
Six inputs, all required, and only two need thought:
previous_audio- the previous segment's delivered audio. Its tail gets rewritten.next_audio- the new segment's audio including the pinned anchor at its head. Don't trim it yourself first.next_images- the new segment's decoded frames. It only reads the frame count, to work out how much audio the delivered portion should be.trim_frames(default 22) - how many head frames get dropped. This must match your context length, i.e. the same value asH3LongVideo.context_lengthin a hand-wired graph.fade_ms(default 80, 0-500) - blend length. 80ms is a good default; go to 150-200 for a scene-level ambience change, and down to 20-30 if a hard consonant sits on the cut.fps(default 24) - H3's timeline is 24fps. Leave it.
Outputs are previous_audio (tail rewritten), next_audio (head trimmed to the delivered length), and report (a string - handy to preview when a seam sounds wrong and you want to know whether it ran at all).
Wire both audio outputs into whatever you're using to concatenate. The node doesn't join anything itself; it hands you two corrected tracks.
Install
It ships with the pack, so:
cd ComfyUI/custom_nodes
git clone https://github.com/civilcoco/ComfyUI-MiniMaxH3-Myang
Restart ComfyUI, hard-refresh the browser, and look under 沐阳 H3/音频. Or search "ComfyUI MiniMax H3 Myang" in ComfyUI Manager. No Python dependencies - the pack's pyproject.toml declares an empty dependency list, and the audio math is plain torch (it resamples by linear interpolation rather than pulling in torchaudio).
You need your own H3 model, Qwen text encoder, video VAE and audio VAE. Nothing is bundled.
Where people get burned
Sample rate. The node resamples the incoming waveform to previous_audio's rate, so mismatched rates won't crash - but if you've run one segment through something that changed its rate, the pitch relationship between the two sides can get weird. Feed it tracks from the same decode path.
Channel/batch mismatch is handled (mono is duplicated to match stereo), but it's a patch over a routing mistake rather than a feature.
And the one that bites everybody once: trim_frames that doesn't match the real overlap. Set it to 12 when your context is actually 22 and the node will happily cut 12 frames of audio off a head that's 22 frames long - the rest of the anchor plays as duplicated sound. This is a config mismatch, not a bug, and it sounds like an echo.
For a two-segment test, just eyeball the defaults. Once the join is clean, push the segment count. Details in audio generation if you're wiring the seam into a wider AV pipeline.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| previous_audio | AUDIO | — | |
| next_audio | AUDIO | — | |
| next_images | IMAGE | — | |
| trim_frames | INT | 220–4096 | — |
| fade_ms | FLOAT | 800–500 | — |
| fps | FLOAT | 24.001–240 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| previous_audio | AUDIO | — |
| next_audio | AUDIO | — |
| report | STRING | — |