faster-whisper Text From Segments
Flatten a Whisper transcript into one string
- segments
- text
The shortcut node: if all you want out of a transcription is one flat block of text - no per-segment timing, no list processing - this takes the FASTER_WHISPER_SEGMENTS bundle straight off SDT_FasterWhisperTranscribe and joins every segment's text into a single string. Skip SDT_FasterWhisperListSegments and SDT_FasterWhisperSegmentProperty entirely if this is all you need.
How it works
It concatenates the text of every segment in the bundle, in order, using whatever separator string you give it. No timing information survives the join - this node throws away everything except the words, which is exactly the point when you just want a transcript rather than a dataset of timed clips.
The inputs and outputs that matter
segments(FASTER_WHISPER_SEGMENTS) - straight fromSDT_FasterWhisperTranscribe.sep(STRING, default"") - what goes between each segment's text when they're joined. Leave it empty for a continuous block of text, or set it to" "or"\n"if you want segments visibly separated - a newline per segment is a natural choice if you're treating each one as roughly a sentence or line.text(output,STRING) - the full joined transcript.
How to install it
ComfyUI Manager: search ComfyUI-speech-dataset-toolkit, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/kale4eat/ComfyUI-speech-dataset-toolkit
cd ComfyUI-speech-dataset-toolkit
pip install torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt
No extra dependencies - pure string joining, no ML runtime of its own beyond what the transcribe node upstream already needed.
Common issues & troubleshooting
Text runs together with no spacing between segments. That's the default sep value (empty string) doing exactly what it's set to do - set it to a space or newline if the joined transcript reads as one unbroken wall of text.
Wanted per-line timestamps and only have this flat string. This node deliberately discards timing - if you need it, go back to the segmented path instead: SDT_FasterWhisperListSegments → SDT_FasterWhisperSegmentProperty gets you start/end/text per line.
Transcript reads oddly at segment boundaries - repeated words or abrupt cuts. That's inherited from how Whisper split the audio into segments in the first place, not something this node introduces; it's just joining what SDT_FasterWhisperTranscribe already produced.
Which node to reach for depends on what you're building. If the end goal is a plain transcript - subtitling a video, generating a text log of a recording, feeding a summary model downstream - this node is the whole answer, and it's a one-node shortcut compared to the list-and-unpack path. If the end goal is a labeled dataset of individual clips (audio slice paired with its own line of text), you want the timestamps, which means this node isn't the one; go segment-by-segment instead. It's worth deciding that up front rather than wiring both paths into the same graph out of indecision.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| segments | FASTER_WHISPER_SEGMENTS | — | |
| sep | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |