Nodes/ComfyUI-ChatTTS/ChatTTS Save Speaker Profile
ComfyUI Node

ChatTTS Save Speaker Profile

Saving a ChatTTS speaker you like

By neverbiasu·Created about a year ago·Updated about a year ago· 4
ChatTTS Save Speaker Profile
  • speaker_params
    filenamespeaker_profile.pt

    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 - a DICT, 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 the spk_emb embedding plus its source and seed.
    • filename - defaults to speaker_profile.pt. It saves into your ComfyUI output folder (the same one where generated images land), and it appends .pt for you if you forget the extension, so my_narrator becomes my_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 DICT in, 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.

    Categorychattts

    Inputs (2)

    NameTypeDefaultDescription
    speaker_paramsDICT
    filenameSTRINGspeaker_profile.pt

    Outputs (0)

    No outputs