Nodes/DJZ-KokoroTTS/KokoroTTS Save Voice v1
ComfyUI Node

KokoroTTS Save Voice v1

Bake a blended voice to disk once, reuse it forever

By MushroomFleet·Created 2 years ago·Updated 4 months ago· 7
KokoroTTS Save Voice v1
    • saved_path
    voice1
    voice2
    blend_modesdefault
    slerp_t0.50
    save_namecustom_voice

    This node never makes a sound. No text input, no speed dial, no audio output - it's a utility node that blends two Kokoro voices exactly like KokoroTTS_v2 or v3 would, then writes the result to disk instead of generating speech with it. If you're going to use one specific blended voice across a whole project, this is the node that saves you from re-blending it on every single run.

    Why bother saving instead of just blending live

    KokoroTTS_v2 and v3 blend two voices at generation time, every time you run them. That's fine for a one-off test, but it's wasteful - and, depending on how deterministic the blend math is, potentially inconsistent - if you're narrating something long and want the exact same custom voice on every line. SaveVoice_v1 lets you do the blending work once, commit it to a file, and then generate from that fixed voice as many times as you want via KokoroTTS_LoadVoice_v1 → KokoroTTS_v4 (or KokoroTTS_v5, if you want to blend it further with another saved voice later). Blend once, reuse indefinitely - the same logic as baking a LoRA merge instead of re-merging on every generation.

    Inputs and outputs

    • voice1 / voice2 (enum, 46 choices each) - the two Kokoro presets to blend, same naming scheme as everywhere else in this pack: af_*/am_* American female/male, bf_*/bm_* British.
    • blend_modes (enum: default, slerp) - weighted-sum average or spherical interpolation, same choice as KokoroTTS_v3.
    • slerp_t (FLOAT, 0–1, default 0.5, step 0.01) - the mix ratio between voice1 and voice2.
    • save_name (STRING, default "custom_voice") - what the resulting .kkv file gets named. Change this if you're saving more than one blend, or the next save will overwrite it.

    One output: saved_path (STRING) - just the path the file got written to, useful for confirming the save worked or logging it. It's a string, not a VOICE value, so you can't wire this straight into a TTS node - that's what KokoroTTS_LoadVoice_v1 is for.

    Installing it

    • ComfyUI Manager - search "DJZ-KokoroTTS", install, restart.
    • Manual - cd ComfyUI/custom_nodes && git clone https://github.com/MushroomFleet/DJZ-KokoroTTS, then restart.

    On Windows portable builds, run the repo's install-portable.bat with ComfyUI closed first, so it can set up dependencies and paths cleanly.

    The pack also needs two model files in /comfyui/models/kokoro/ before any of its nodes work, including this one - the README links directly to the ONNX weights (kokoro.onnx, from taylorchu/kokoro-onnx's v0.2.0 release), but doesn't spell out the second file's exact name, so check the repo's models.json.

    Where people get stuck

    The thing most specific to this node: forgetting to change save_name before saving a second voice, which silently overwrites the first one - there's no confirmation prompt, just a new file at the same path. If you're building more than one custom voice, name each save deliberately.

    The other trap is downstream of this node rather than in it: saved_path is a string, and it's easy to assume you can just plug it into a TTS node. You can't - you need KokoroTTS_LoadVoice_v1 in between to actually read the file back in as a usable voice.

    Beyond that, this pack shares the same general caveats as any custom node collection: the model files need to be exactly in /comfyui/models/kokoro/ for anything to work (the README's own troubleshooting section flags this as the most common failure), and its requirements.txt installs into ComfyUI's shared Python environment with no isolation from whatever else you've got - a conflicting dependency version elsewhere is a more likely cause than the pack itself if the node won't load at all.

    Categorysd

    Inputs (5)

    NameTypeDefaultDescription
    voice1COMBO46 options: af_alloy, af_aoede, af_bella, af_heart, af_jessica, af_kore, +40
    voice2COMBO46 options: af_alloy, af_aoede, af_bella, af_heart, af_jessica, af_kore, +40
    blend_modesCOMBOdefault2 options: default, slerp
    slerp_tFLOAT0.500–1
    save_nameSTRINGcustom_voice

    Outputs (1)

    NameTypeDescription
    saved_pathSTRING