ChatTTS Save Speaker Profile
Saving a ChatTTS speaker you like
- speaker_params
You finally found the voice - a seed that sounds right, or an extracted embedding that nails the character. Then you update the pack, rebuild the workflow, and it's gone, because ChatTTS voices are just points in embedding space and nothing guarantees they survive a model change. This node is the insurance: it takes a speaker DICT and writes it to disk so the voice outlives the moment.
It's a dead-simple output node. Two inputs, no outputs, nothing to wire onward - it's the end of a branch.
What you set
speaker_params- aDICT, which in practice comes from one of three places: the Seed-Based Speaker node (a seed-driven voice), the Voice Extractor (a voice pulled from a reference recording), or a profile you loaded earlier and re-saved. This dict holds thespk_embembedding plus its source and seed.filename- defaults tospeaker_profile.pt. It saves into your ComfyUI output folder (the same one where generated images land), and it appends.ptfor you if you forget the extension, somy_narratorbecomesmy_narrator.pt.
That's the whole node. Run it once and the profile exists on disk.
How it works
Under the hood it's a torch.save() of the whole speaker dict to ComfyUI/output/<filename>.pt. No magic, no model weights - just the embedding and its metadata, a few kilobytes. The counterpart node in the same pack, ChatTTS Load Speaker Profile, reads it back into a DICT so you can feed it straight into the Sampler on a fresh run.
When you'd reach for it
- Locking in a seed voice you auditioned. Play with seeds until one clicks, save it, and never hunt for it again.
- Persisting an extracted voice. The Voice Extractor needs the reference audio every run unless you save the profile - then it doesn't.
- Sharing a character across workflows. Same
DICTin, same voice out, as long as the model is the same version.
The one honest caveat is the same one from the Seed-Based Speaker article: a saved embedding is a point in a specific model's speaker space. If you update ChatTTS weights, an old profile may not map to the same voice. Profiles are your safety net, not a forever guarantee - which is exactly why the node exists.
The mental model: if DICT is the voice in flight, the .pt file is the voice at rest. Save early, save often, and name files like you'll need them again in a month - because you will.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| speaker_params | DICT | — | |
| filename | STRING | speaker_profile.pt | — |
Outputs (0)
No outputs