ComfyUI Node

Kokoro ZH Run

The Chinese TTS node that handles the English mixed in

By billwuhao·Created 2 years ago·Updated about a year ago· 33
Kokoro ZH Run
    • audio
    voicezf_001.pt
    text
    unload_modeltrue
    enable_dialoguefalse
    voice_s2zf_002.pt

    If you've ever run an open TTS model on Chinese text, you know the drill: the Mandarin is fine until the script drops in an English word - a brand name, "AI", a tech term - and the model mangles it into something that sounds like a robot reading pinyin with a cold. KokoroZHRun is the same pack's answer to that. It's the Chinese specialist: instead of the base v1.0 model, it drives the dedicated Kokoro-82M-v1.1-zh checkpoint, which ships 100 Chinese voices (zf_ female, zm_ male - zf_001.pt through zm_100.pt).

    It's the sibling of KokoroRun in the ComfyUI_KokoroTTS_MW pack, so installation, output format, and dialogue support are the same. The difference is where the code spends its effort making Chinese sound right.

    How it works

    The node loads kokoro-v1_1-zh.pth from ComfyUI/models/Kokorotts/Kokoro-82M-v1.1-zh/ and builds a Chinese KPipeline. Two things set it apart from the general-purpose node:

    • An English handler inside Chinese text. An en_callable intercepts words and gets their proper English phonemes from a separate English pipeline, so "AI" and brand names get pronounced like a bilingual speaker would, not like pinyin. The author even hardcodes pronunciations for "Kokoro" and "Sol" because the model kept mangling the model's own name - a detail that tells you how this thing was built: by running it and fixing what broke.
    • Auto-speed adjustment. Chinese can be information-dense, so long lines get nudged slower. The code sets speed 1.1× for short utterances, then eases back toward ~0.88× as a line gets long, keeping rapid-fire long sentences intelligible. Short lines stay punchy.

    There's also a deliberate ~5000-sample silence gap inserted between chunks, which gives multi-sentence reads natural breathing room instead of one breathless run-on.

    Inputs and outputs

    Same shape as KokoroRun:

    • voice - 100 Chinese voices, default zf_001.pt. zf_ are female, zm_ male.
    • text - the script. It's forceInput: true, so feed it from a text node (MultiLinePromptKK or any STRING source); you can't type directly into the widget.
    • unload_model - default true; frees the model and CUDA cache after each run.
    • enable_dialogue - off by default. Turn it on and mark turns with [S1] / [S2] in the text for a two-voice conversation.
    • voice_s2 - second speaker, default zf_002.pt.

    Output is one audio socket (AUDIO, 24000 Hz) → core PreviewAudio or SaveAudio/SaveAudioMP3.

    Install and models

    Same as the whole pack - ComfyUI Manager search ComfyUI_KokoroTTS_MW, or git clone https://github.com/billwuhao/ComfyUI_KokoroTTS_MW into custom_nodes and pip install -r requirements.txt (Python-embedded users: ./python_embeded/python.exe -m pip install -r requirements.txt).

    The zh checkpoint is a separate manual download - Kokoro-82M alone won't cut it:

    ComfyUI/models/Kokorotts/Kokoro-82M-v1.1-zh/
    ├── voices/
    ├── config.json
    └── kokoro-v1_1-zh.pth
    

    Where people get burned

    Mostly the same traps as KokoroRun: forget the zh model download and you get a file-not-found wall, enable dialogue without [S1]/[S2] tags and the parser throws "No speaker tags found", and CPU-only runs are slow. One extra gotcha specific to this node: it keeps an English phonemizer pipeline loaded alongside the Chinese model, so it's a touch heavier in memory than the base node - give unload_model a minute of thought if your VRAM is tight. And if your script is mostly English with a line of Chinese, you'd actually be better served by KokoroRun; this node's whole personality is "Chinese first, English guests welcome."

    Category🎤MW/MW-KokoroTTS

    Inputs (5)

    NameTypeDefaultDescription
    voiceCOMBOzf_001.pt100 options: zf_001.pt, zf_002.pt, zf_003.pt, zf_004.pt, zf_005.pt, zf_006.pt, +94
    textSTRING
    unload_modelBOOLEANtrue
    enable_dialogueoptBOOLEANfalse
    voice_s2optCOMBOzf_002.pt100 options: zf_001.pt, zf_002.pt, zf_003.pt, zf_004.pt, zf_005.pt, zf_006.pt, +94

    Outputs (1)

    NameTypeDescription
    audioAUDIO