Nodes/TTS Audio Suite/๐Ÿ’พ Save Character Voice
ComfyUI Node

๐Ÿ’พ Save Character Voice

Stop re-uploading the same reference clip every workflow

By diodiogodยทCreated about a year agoยทUpdated 22 days agoยท 1,098
๐Ÿ’พ Save Character Voice
  • opt_narrator
  • opt_narrator
  • character_name
  • save_info
โ—„character_nameโ–บ
โ—„overwrite_characterfalseโ–บ

Once you've dialed in a voice you like - cloned from a reference clip, or designed from a text prompt - you don't want to rebuild it in every graph. This node writes it to disk as a reusable character voice so you can just call it by name later. Think of it as the "save" button for voices in TTS Audio Suite's character system.

That character system is what powers the [Alice] / [Bob] bracket tags you sprinkle through your text to switch speakers mid-sentence. A saved character is exactly what those tags resolve to. Save a voice as Alice, and from then on [Alice] Hi there in any TTS Text or SRT node speaks in that voice.

How it works

The node takes a NARRATOR_VOICE - the suite's internal package of reference audio plus its transcript - and persists it under models/voices/ in a three-file layout: name.wav (the audio), name.reference.txt (the exact transcription of that audio), and name.txt (metadata). That trio is what the character switcher looks for. Because the transcript rides along, cloning engines that need reference text (like Qwen3-TTS in its best-quality mode) get everything they need from one saved name.

It only accepts opt_narrator on purpose - persistence is kept separate from voice construction. You build the voice elsewhere, then hand it here to save.

The inputs and outputs that matter

  • opt_narrator (NARRATOR_VOICE) - the voice to save. This comes from Character Voices (feed it your reference audio + its exact transcription) or from Voice Designer (a described voice from Qwen/MOSS/OmniVoice). Whatever produces a NARRATOR_VOICE goes here.
  • character_name (STRING) - what to call it. This is the name you'll later type in [brackets]. Keep it simple, no spaces headaches - narrator, alice, deep_male.
  • overwrite_character (BOOLEAN) - off by default, so it won't clobber an existing voice of the same name unless you say so. Flip it on when you're deliberately updating one.

Outputs pass the voice straight through so you can keep building: opt_narrator (the same voice, for chaining), character_name (STRING), and save_info (STRING) - a short report of what got written and where. This is an output node, so it actually fires the save when the graph runs.

How to install it

It's part of TTS Audio Suite. ComfyUI Manager: search TTS Audio Suite, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/diodiogod/TTS-Audio-Suite.git
cd TTS-Audio-Suite
python install.py

then restart. On Linux, sudo apt-get install portaudio19-dev libsamplerate0-dev before running the installer. This particular node writes small files and doesn't download any model of its own - the heavy lifting is in whatever engine produced the voice.

Common issues & troubleshooting

It didn't save / re-running does nothing. Check overwrite_character. With it off, a name that already exists is left alone. Turn it on to replace, or pick a new name.

The saved voice sounds wrong when I clone with it. The reference text matters as much as the audio. If the name.reference.txt doesn't match what's actually spoken in name.wav, cloning quality drops - that's why the recommended path is Character Voices with the exact transcription, not a guess.

My [CharacterName] tag isn't picked up. Names are matched against the files in models/voices/. Make sure the tag matches the character_name you saved (the suite is forgiving about case, but not about typos). If a character isn't found, the suite falls back to the narrator voice rather than erroring, so a silent "wrong voice" usually means a name mismatch.

CategoryTTS Audio Suite/๐ŸŽญ Voice & Character

Inputs (3)

NameTypeDefaultDescription
opt_narratorNARRATOR_VOICECharacter voice to save. Connect opt_narrator from Character Voices or a Voice Designer. Audio and the exact transcription are reused automatically.
character_nameSTRINGFilename and [Character] tag name for the saved voice.
overwrite_characterBOOLEANfalseOverwrite existing character files. When disabled, an identical deterministic voice-design generation reuses the existing character; otherwise an existing name is saved as name_1, name_2, etc.

Outputs (3)

NameTypeDescription
opt_narratorNARRATOR_VOICEโ€”
character_nameSTRINGโ€”
save_infoSTRINGโ€”