Nodes/ComfyUI-VoiceBridge/VoiceBridge Audio List Merger by SRT
ComfyUI Node

VoiceBridge Audio List Merger by SRT

Stitch any TTS's sentences back into one synced track

By YanTianlong-01·Created 7 months ago·Updated 3 months ago· 11
VoiceBridge Audio List Merger by SRT
  • srt_items
  • audios
  • audio
  • adjusted_srt
tempo_limit1.5
mini_gap_ms100

The decoupled pipeline - the one that lets you use any TTS node - dumps a pile of per-sentence audio clips at its end, and this node is the stitching machine that turns that pile back into one synced track. If VoiceBridge SRT Splitter is what makes "any TTS" possible, this is what makes it useful: without it you'd have 200 loose audio clips and no way to line them up with the video.

How it works

It takes the srt_items metadata from VoiceBridge SRT Splitter (the original (index, start_ms, end_ms, text) timing) plus the audios list - the per-sentence AUDIO outputs from whatever TTS node you ran - and merges them into a single AUDIO placed at each subtitle's original timestamp. Then it applies the same duration-matching engine that the bundled SRT To Audio uses: if a clip is too long for its slot, it speeds it up (capped by tempo_limit), and if it still overflows it cascades the later subtitles forward to make room, always preserving the mini_gap_ms breathing room between cues.

Two implementation details worth knowing:

  • Sample rate is handled for you. It reads the sample rate from the first incoming AUDIO dict and resamples every other sentence to match. No manual rate-setting, no "why is half my audio pitched wrong" surprises.
  • It leans on ComfyUI's list-iteration. The audios input is declared as a list type, so the graph collects each TTS output automatically as the splitter feeds sentences through. You don't build the list by hand; the framework does it.

The inputs that matter

  • srt_items - from VoiceBridge SRT Splitter. The timing map; without it there's nothing to align to.
  • audios - the per-sentence AUDIO outputs from your TTS node. This is the "bring your own voice" slot: Qwen3-TTS, VoxCPM, Fish Audio S2, CosyVoice, anything that takes a string and returns an AUDIO.
  • tempo_limit (default 1.5, range 1.0–5.0) - max speed-up factor for clips that overflow their subtitle slot.
  • mini_gap_ms (default 100, range 0–10,000) - minimum gap preserved between subtitles.

Outputs

  • audio - the merged track in ComfyUI format (waveform, sample_rate), ready for a Save Audio / preview / VideoCombine.
  • adjusted_srt - the retimed SRT string reflecting the actual audio durations after tempo/shift corrections. Wire it to Save SRT From String to keep subtitles that match what the voice actually did.

Installing it

Part of the comfyui_voicebridge pack. ComfyUI Manager search "VoiceBridge", or:

cd ComfyUI/custom_nodes
git clone https://github.com/YanTianlong-01/comfyui_voicebridge.git
cd comfyui_voicebridge
pip install -r requirements.txt

Restart ComfyUI. This node itself runs no model - the TTS work happened upstream - so it's cheap to run.

The honest catch

This node is the payoff of a more complex graph, and the price is that "merge by list" means every downstream TTS call runs per-sentence. On a long subtitle file that's a slow render and a real memory question, which is precisely why the pack keeps the one-node SRT To Audio around for when you don't need a specific third-party voice. Pick the merger when voice choice matters more than simplicity; pick SRT To Audio when you just want it finished.

CategoryVoiceBridge

Inputs (4)

NameTypeDefaultDescription
srt_itemsVB_SRT_ITEMS
audiosAUDIO
tempo_limitoptFLOAT1.51–5Maximum speed-up factor for audio that exceeds subtitle duration
mini_gap_msoptINT1000–10000Minimum gap between subtitles in milliseconds

Outputs (2)

NameTypeDescription
audioAUDIO
adjusted_srtSTRING