STT: Transcriptions → Text
Whisper gave you segments — this node gives you the actual sentence
- transcriptions
- text
The faster-whisper transcription node doesn't hand you text. It hands you TRANSCRIPTIONS - a structured list of segments, each one a dict with start, end, and text. That's great when you want subtitles, and mildly annoying when you just want the words: a script, a caption, a prompt, or a string to feed into a TTS node so it can re-speak what it heard. TranscriptionsToText is the tiny joiner that turns that list into one plain STRING. If the display name "STT: Transcriptions → Text" sounds like a one-trick pony, that's because it is - and that's exactly the point.
This is a format-conversion node in the purest sense, the plumbing layer of the STT pipeline. It exists because the pack's two outputs don't overlap: FasterWhisperToSubtitle renders your transcript into .srt or .vtt files (timestamped, subtitle-tool-ready), while this node gives you the raw transcript for everything else. In the included ARENA_VOICE_CLONING workflow it's the string bridge inside a voice-clone loop - transcribe a reference clip, pipe the text into a TTS clone node's target_text, and the clone speaks the same line. You can wire its output into anything that takes a STRING: a prompt box, an LLM node, a save node, a display.
How it works
The implementation is short enough to read in one sitting. It walks the transcriptions list, takes each segment's text, strips whitespace, and skips segments that end up empty. Then it joins the survivors with your separator string and returns the result. That's the whole mechanism - no timestamps, no token math, no model call. It's worth knowing it skips empty segments rather than emitting empty strings, which is why you don't get a wall of blank lines when a segment contains only silence or a hallucinated pause.
The inputs that matter
- transcriptions (
TRANSCRIPTIONS) - plug this fromFasterWhisperTranscription's output. Nothing else produces that type, so the wiring is unambiguous. - separator (
STRING, default a single space) - the glue between segments. Default is right for prose. Set it to"\n"to get one segment per line, useful for caption blocks or line-by-line reading.
Output: text (STRING) - the joined transcript. One wire, plain text, ready for anything.
Where it sits in the workflow
FasterWhisperTranscription → TranscriptionsToText → [text]
(TRANSCRIPTIONS) (STRING)
Branch the same TRANSCRIPTIONS output into both this node and FasterWhisperToSubtitle and you get text and subtitles from one transcription run - which is the setup most people end up wanting: an .srt for the video and a plain transcript for everything else.
Installing it
Same pack, same install as its sibling AudioToWavFilepath. ComfyUI Manager: search ComfyUI-faster-whisper. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/ai-joe-git/ComfyUI-faster-whisper
cd ComfyUI-faster-whisper
pip install -r requirements.txt
Portable builds use python_embeded\python.exe -m pip install -r .... The heavy lift is faster-whisper itself (and its CTranslate2 dependency) plus soundfile and numpy; models auto-download to ComfyUI/models/faster-whisper on first use.
Gotchas
- No timestamps, on purpose. If you need timecodes, this isn't your node -
FasterWhisperToSubtitleis. Don't burn time hunting for a setting here; there isn't one. - Whisper accuracy is upstream of this node. Faster Whisper is the community's go-to for local subtitles and it's genuinely good, but it's weakest on multilingual audio and music, where hallucinated repeats happen. If your transcript reads weird, fix the transcription settings (
vad_filter,language,initial_prompt), not the joiner. - README is the upstream's copy - clone from
ai-joe-git/ComfyUI-faster-whisper; the originaljhj0517repo doesn't ship these two glue nodes.
For a workflow that lives entirely in-graph - audio in, transcript text out - this is the node that closes the loop.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| transcriptions | TRANSCRIPTIONS | — | |
| separator | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |