Nodes/MiniMax H3 Audio T8/MiniMax H3 Speech ADR Exact Fit / 配音精确时长 (EXP/T8)
ComfyUI Node

MiniMax H3 Speech ADR Exact Fit / 配音精确时长 (EXP/T8)

Make a voiceover land on the exact frame count the scene needs

By T8mars·Created 20 days ago·Updated a day ago· 807
MiniMax H3 Speech ADR Exact Fit / 配音精确时长 (EXP/T8)
  • audio
  • audio
  • report_json
target_duration_seconds5.000
fit_modesafe_time_stretch
minimum_rate0.90
maximum_rate1.10
pitch_semitones0.0

ADR - automated dialogue replacement, the polite name for "dub the line so it fits the actor's mouth on screen" - is mostly a duration problem. The scene needs the line to occupy exactly 4.82 seconds and your rendered take runs 5.1. MiniMaxH3SpeechADRFitT8 is the pack's utility for that: it fits an AUDIO clip to an exact target duration, down to the sample count.

The one-line honesty note, straight from the author: exact duration is not a lip-sync claim. Getting a line to the right length is necessary for good ADR but nowhere near sufficient - actual phoneme-perfect sync needs a dedicated lip/facial retarget pass on the video side. This node just makes the audio obey the clock.

How it fits audio

target_duration_seconds is what you're aiming for. Then fit_mode decides the strategy:

  • safe_time_stretch (default) - bounded phase-vocoder time-stretch. It changes length without changing pitch, within a tight rate window.
  • pad_or_trim - the blunt option: pad with silence or chop the tail.
  • refuse_if_mismatch - won't touch the audio; if the length doesn't match, it refuses and reports.

The stretch is deliberately conservative: minimum_rate 0.9 and maximum_rate 1.1 (±10%). You can nudge further (0.1–4.0) but the author's default boundary exists because stretching past ±10% is where phase-vocoder artifacts start sounding like the audio is melting. pitch_semitones (0) is there if you also need a pitch shift.

Outputs: the fitted audio and a report_json describing what it did.

Where it sits

In the speech pipeline (examples/workflows/05-speech-dialogue/, see 2026-08-10_H3_Speech_Performance_ADR_Stock20_EXP.json) it's a post-decode step: render → MiniMaxH3SpeechDecodeT8ADRFitMiniMaxH3SpeechAssembleT8. You fit each take to its target duration before assembly so the master timeline lines up.

Install

Pack standard:

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8

then restart ComfyUI (or Manager, search "MiniMax H3 Audio T8"). No extra pip packages, no models.

The traps

  • Stretch artifacts. Stay inside the default ±10% where you can. If the line is way off, the honest move is to re-render the take with a better render_seconds in Conditioning, not to squeeze it 30%.
  • It doesn't move the audio on the timeline. This node changes duration; it's SpeechAssemble that places the result on the exact boundary the scene needs.
  • Length ≠ sync. If your concern is the actor's lips, this node is only step one. The pack says it outright - broadcast-grade lip sync requires dedicated lip-tracking after H3.

For a thin utility, it's well-behaved: refuse, pad/trim, or bounded stretch - your choice, no silent hacks. Just remember the boundary between "fits the timeline" and "looks like it was dubbed" is a much bigger project than this node, and this node knows it.

CategoryT8/MiniMax H3/Speech/Experimental

Inputs (6)

NameTypeDefaultDescription
audioAUDIO
target_duration_secondsFLOAT5.0000.001–36000
fit_modeCOMBOsafe_time_stretch3 options: refuse_if_mismatch, pad_or_trim, safe_time_stretch
minimum_rateFLOAT0.900.1–4
maximum_rateFLOAT1.100.1–4
pitch_semitonesFLOAT0.0-12–12

Outputs (2)

NameTypeDescription
audioAUDIO
report_jsonSTRING