VibeVoice Save File
Make the SRT Actually Land on Disk, Not Just on the Canvas
- text_content
Display name says "VibeVoice Save File," which is a borrowed name (Microsoft's VibeVoice was the long-form multi-speaker TTS this pack's whole vibe is modeled on), but the job is simpler than the name: take any text, write it to a file in ComfyUI's output folder. If you've ever generated subtitles in a node graph and then spent five minutes hunting for where they went, this is the node that ends the hunt.
It belongs to ComfyUI-kaola-Qwen-TTS, the Qwen3-TTS wrapper pack, and it's the natural partner for the pack's Stage Manager node: Stage Manager emits srt_content as its last output, this node turns that into an actual .srt file you can drag into a video editor, a subtitle tool, or a Discord upload. It'll happily save any other string too - transcripts, batch prompts, JSON payloads for a downstream pipeline - which makes it a surprisingly useful generic text-dump node that happens to live in a TTS pack.
How it works
Nothing clever, which is the point. It grabs ComfyUI's output directory via the same path-finding folder_paths helper the core save nodes use, then writes your text as UTF-8. Filename collisions are handled by bumping a counter: vibe_output.srt, then vibe_output_1.srt, and so on - it never overwrites a file you already rendered. UTF-8 matters more here than in an image pack: Qwen3-TTS is genuinely multilingual and this author's own examples are Chinese, so your SRT will carry CJK characters, accents, and emoji without mojibake.
The inputs
text(STRING, multiline) - whatever you want on disk. Paste in Stage Manager'ssrt_content, a transcript, a prompt dump, anything.filename_prefix(STRING, defaultvibe_output) - the base name; the counter and extension get appended.extension- enum ofsrt,txt,csv,json.srtis the default and the one you'll actually use.
Output: text_content (STRING) - the same text passed straight through. That's the useful bit: this is not an output-only node, so you can drop it mid-chain to log a value and keep wiring the string onward.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/kana112233/ComfyUI-kaola-Qwen-TTS
cd ComfyUI-kaola-Qwen-TTS
pip install -r requirements.txt
Restart ComfyUI, or find ComfyUI-kaola-Qwen-TTS in ComfyUI Manager. Requirements are light - the official qwen-tts package, soundfile, torchaudio, numpy - though qwen-tts pins a specific transformers version, so installing this pack can shuffle your environment even if you never run a single TTS node.
Troubleshooting
The file goes to ComfyUI's output folder (ComfyUI/output/), not next to your workflow file and not in the models folder - use the "Open output folder" button in the UI to find it. It writes what you give it: there's no validation that the content matches the extension, so a CSV-in-an-srt-file is on you, and it's happy to dump raw SRT text into a .txt if that's what your pipeline wants. One honest limitation: it saves text only. The actual audio tracks come out of the other nodes in the pack, and this node won't touch them - pair it with SaveAudio (or Stage Manager's built-in save_to_file toggle, which writes per-role WAVs to the same output folder).
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| filename_prefix | STRING | vibe_output | — |
| extension | COMBO | srt | 4 options: srt, txt, csv, json |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text_content | STRING | — |