APZmedia: Voice Library Save
Your voice identity, as a folder on disk
- audio
- voice_prompt
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_audioout of Voice Design, or anyAUDIOyou 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
narratorortutorial_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_textoutput. 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 frommetadata.json. Save without it and you'll be forced intox_vector_only_modelater. - description (optional) - human-readable notes. Wire Voice Design's
voice_descriptionoutput 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| name | STRING | my_voice | Subfolder name for this voice in the library. |
| library_path | STRING | Absolute folder for the voice library. Empty uses ComfyUI output/apzmedia_voice_library. | |
| voice_promptopt | VOICE_PROMPT | Speaker embedding from Voice Design. Stored so it can be cached — not serialized to disk (WAV is the durable format). | |
| ref_textopt | STRING | Transcript of the reference audio. Wire from Voice Design's reference_text output. | |
| descriptionopt | STRING | Human-readable notes. Wire from Voice Design's voice_description output to auto-populate. |
Outputs (0)
No outputs