Nodes/APZmedia Qwen TTS Nodes/APZmedia: Voice Library Save
ComfyUI Node

APZmedia: Voice Library Save

Your voice identity, as a folder on disk

By APZmedia·Created 5 months ago·Updated 5 months ago· 1
APZmedia: Voice Library Save
  • audio
  • voice_prompt
    namemy_voice
    library_path
    ref_text
    description

    APZmedia: Voice Library Save is how the pack makes your designed voices permanent. Feed it the reference_audio from Voice Design, give the voice a name, and it writes a folder to disk containing the WAV plus a metadata.json with the name, description, creation timestamp, sample rate, and transcript. That folder is the durable artifact - the one thing you can't lose and still rebuild everything.

    The on-disk layout is simple and boring, which is the point:

    apzmedia_voice_library/
      narrator_warm/
        reference.wav
        metadata.json
      nervous_teen/
        reference.wav
        metadata.json
    

    Inputs

    • audio - required, the reference clip to save. Wire reference_audio out of Voice Design, or any AUDIO you want as a voice seed.
    • name - the subfolder name. Sanitized for filesystem safety, so spaces and slashes get turned into underscores. Pick something you'd recognize in a dropdown later, like narrator or tutorial_guy.
    • library_path - the absolute folder for the library. Leave it empty and it defaults to ComfyUI/output/apzmedia_voice_library/ - which is genuinely the right answer for most people, since it's inside your output directory and gets backed up along with everything else.
    • ref_text (optional) - the transcript of the reference clip. Wire it from Voice Design's reference_text output. This matters more than it looks. The Voice Library Loader rebuilds a speaker embedding from the saved WAV, and in the non-x-vector path it needs the transcript from metadata.json. Save without it and you'll be forced into x_vector_only_mode later.
    • description (optional) - human-readable notes. Wire Voice Design's voice_description output here and your library effectively documents itself; Voice Library List will show you it later.
    • voice_prompt (optional) - the embedding from Voice Design. The tooltip says it plainly: this is "stored so it can be cached - not serialized to disk (WAV is the durable format)." So yes, you can wire it, but don't imagine it's a shortcut. The WAV is what survives.

    There are no outputs - this is an output node, the end of a branch. It writes the files and returns nothing.

    Where it fits

    The full loop is: Voice Design (create identity) → Voice Library Save (persist it) → later, Voice Library Loader (rebuild embedding) → Voice Clone Generate (use it). That's the pack's flagship "design once, use forever" workflow, and this node is the seam where your voices stop being ephemeral GPU state and become files you own.

    Gotchas

    Because the embedding isn't serialized, the metadata is load-bearing. If you save a voice without ref_text, the loader can't do full in-context learning for it - you'll be limited to the x-vector path, which is faster but less faithful. Cheap fix: always wire both ref_text and description from Voice Design when you save.

    One more: the pack pins numpy<2.0.0 and auto-installs its requirements on import. If you've got another node demanding numpy 2.x, the environment tug-of-war can throw before you ever get to save - fix the numpy conflict, then re-run.

    CategoryAPZmedia/TTS

    Inputs (6)

    NameTypeDefaultDescription
    audioAUDIO
    nameSTRINGmy_voiceSubfolder name for this voice in the library.
    library_pathSTRINGAbsolute folder for the voice library. Empty uses ComfyUI output/apzmedia_voice_library.
    voice_promptoptVOICE_PROMPTSpeaker embedding from Voice Design. Stored so it can be cached — not serialized to disk (WAV is the durable format).
    ref_textoptSTRINGTranscript of the reference audio. Wire from Voice Design's reference_text output.
    descriptionoptSTRINGHuman-readable notes. Wire from Voice Design's voice_description output to auto-populate.

    Outputs (0)

    No outputs