Kokoro ZH Run
The Chinese TTS node that handles the English mixed in
- audio
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_callableintercepts 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."
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| voice | COMBO | zf_001.pt | 100 options: zf_001.pt, zf_002.pt, zf_003.pt, zf_004.pt, zf_005.pt, zf_006.pt, +94 |
| text | STRING | — | |
| unload_model | BOOLEAN | true | — |
| enable_dialogueopt | BOOLEAN | false | — |
| voice_s2opt | COMBO | zf_002.pt | 100 options: zf_001.pt, zf_002.pt, zf_003.pt, zf_004.pt, zf_005.pt, zf_006.pt, +94 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |