MiniMax H3 Speech Assemble / 语音时间线 (EXP/T8)
Stitch rendered speech turns into one track and get the SRT for free
- speech_plan
- audio_segments
- audio
- timeline_json
- srt
- vtt
Render a multi-line dialogue and you end up with a pile of separate AUDIO clips - one per turn - and a timing problem: where exactly does each line start and end once they're all real audio? MiniMaxH3SpeechAssembleT8 is the pack's answer. It takes your speech_plan plus the rendered turn segments and assembles them into one continuous track on exact sample boundaries, then emits a timeline JSON and the SRT/VTT subtitles based on the actual audio boundaries - not the plan's wishes.
That last bit is the genuinely useful part. The SRT/VTT are built from where the audio actually starts and stops after assembly, so if H3 delivered a line half a second late, your subtitles reflect reality rather than the script. The tooltip on the node calls it "planned-text SRT/VTT" - the text comes from the plan, the timing comes from the real audio.
The inputs
speech_plan- theH3_T8_SPEECH_PLANthat defined the turns.audio_segments- an autogrow input (prefixaudio_segment_): connect each rendered turn's AUDIO in order, one wire per segment, up to 100.output_sample_rate(32000) - the H3-native rate; 44100/48000 available if your downstream needs them.crossfade_seconds(0.06) - tiny crossfade at turn seams so you don't hear clicks at boundaries.peak_limit_dbfs(-1) - a light limiter so the assembled track doesn't blow out when turns stack.
Outputs: audio (the assembled track), timeline_json, srt, and vtt.
The workflow around it
Turn rendering in this pack is: plan → MiniMaxH3SpeechConditioningT8 per segment → sampler → MiniMaxH3SpeechDecodeT8 → then all the decoded turns flow into this node. The two-speaker starter workflow examples/workflows/05-speech-dialogue/2026-08-09_H3_Speech_Dialogue_Two_Speaker_Stock20_EXP.json shows the whole thing, and the author's suggested order of operations is to nail a single described voice first, then add a reference voice, then go multi-speaker.
Install
Same pack, same drill - Manager search "MiniMax H3 Audio T8", or
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
then restart ComfyUI. No extra pip packages.
Things that bite
- Order matters. The segments wire into the autogrow list in a fixed order - segment 1 in
audio_segment_1, etc. Reorder the plan's turns and the assembly follows the wires, not your intent. - This is a mixer, not a verifier. If H3 garbled a line, the SRT still prints the planned text. The pack's whole speech-validation apparatus (fixed Whisper transcription scoring) exists precisely because you can't trust the plan's text was actually spoken. Check the transcript before you publish subtitles.
- Exact sample boundaries mean no sloppy gaps - but also no fancy ducking of music under dialogue. That's a mixing concern outside this node's job.
It's an experimental node in an experimental speech family, so treat the output as a draft to be listened to. What you get back - one synced track plus real-timing subtitles - is the kind of thing that usually takes a DAW and an afternoon, which is why it earns its place at the end of the speech chain.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| speech_plan | H3_T8_SPEECH_PLAN | — | |
| output_sample_rate | COMBO | 32000 | 3 options: 32000, 44100, 48000 |
| crossfade_seconds | FLOAT | 0.0600–0.5 | — |
| peak_limit_dbfs | FLOAT | -1.0-12–0 | — |
| audio_segments | COMFY_AUTOGROW_V3 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| timeline_json | STRING | — |
| srt | STRING | — |
| vtt | STRING | — |