Zero-shot voice cloning7 languagesStyleTTS2 + CAMPPlus

Kokoro Ninja

Clone a voice from a few seconds of audio, then speak seven languages in it — at 18× realtime on a single GPU. Everything below is the model's own output. Judge it with your ears.

Hear it against the alternatives

Six held-out speakers from the VIVOS test set — voices no model saw in training. Every system got the same reference clip and the same sentence, on the same L4 GPU. The dashed cards are the anchors: what the model was given, and what the person actually sounds like. Playing one stops the others, so the comparison stays honest.

Speaker 01

trưởng công an xã chạy sang can ngăn cũng bị tuyến đánh tiếp

Reference clipthe 5s of voice every model was given
Kokoro Ninja0.055 RTF · 18.2× realtime
VieNeu v3 Turbo0.718 RTF
omnivoice-vietnamese0.437 RTF
VieNeu v3 Nano0.468 RTF · CPU
Human recordingwhat the speaker really sounds like
Speaker 02

cũng thuộc loại dày đặc nhất trong hệ mặt trời

Reference clipthe 5s of voice every model was given
Kokoro Ninja0.055 RTF · 18.2× realtime
VieNeu v3 Turbo0.718 RTF
omnivoice-vietnamese0.437 RTF
VieNeu v3 Nano0.468 RTF · CPU
Human recordingwhat the speaker really sounds like
Speaker 03

bác vẫn chưa trả tiền cho tôi đây nhé

Reference clipthe 5s of voice every model was given
Kokoro Ninja0.055 RTF · 18.2× realtime
VieNeu v3 Turbo0.718 RTF
omnivoice-vietnamese0.437 RTF
VieNeu v3 Nano0.468 RTF · CPU
Human recordingwhat the speaker really sounds like
Speaker 04

hoặc chỉ biểu hiện bằng các rối loạn co bóp

Reference clipthe 5s of voice every model was given
Kokoro Ninja0.055 RTF · 18.2× realtime
VieNeu v3 Turbo0.718 RTF
omnivoice-vietnamese0.437 RTF
VieNeu v3 Nano0.468 RTF · CPU
Human recordingwhat the speaker really sounds like
Speaker 05

làm hỏng các thiết bị của tên lửa

Reference clipthe 5s of voice every model was given
Kokoro Ninja0.055 RTF · 18.2× realtime
VieNeu v3 Turbo0.718 RTF
omnivoice-vietnamese0.437 RTF
VieNeu v3 Nano0.468 RTF · CPU
Human recordingwhat the speaker really sounds like
Speaker 06

lương ba cọc ba đồng thì nuôi được ai

Reference clipthe 5s of voice every model was given
Kokoro Ninja0.055 RTF · 18.2× realtime
VieNeu v3 Turbo0.718 RTF
omnivoice-vietnamese0.437 RTF
VieNeu v3 Nano0.468 RTF · CPU
Human recordingwhat the speaker really sounds like

One voice, seven languages

The speaker embedding is language-agnostic: a single Vietnamese reference clip carries into English, Chinese, French, German, Japanese and Korean — though the measured cloning fidelity outside Vietnamese is weak (see the English table below), so judge these by ear. Japanese input must be kana — the phonemizer reads kana correctly but drops kanji, so convert with a kanji→kana step first.

Reference clipone voice → all seven languages
viTiếng Việt

Xin chào, đây là giọng nói được nhân bản từ một đoạn ghi âm ngắn.

Tiếng Việt
enEnglish

Hello, this is a cloned voice speaking English.

English
zh中文

你好,这是一个克隆的声音。

中文
frFrançais

Bonjour, ceci est une voix clonée.

Français
deDeutsch

Hallo, dies ist eine geklonte Stimme.

Deutsch
ja日本語

こんにちは、これはクローンされたこえです。

日本語
ko한국어

안녕하세요, 이것은 복제된 목소리입니다.

한국어

Benchmarks

One NVIDIA L4, all 65 VIVOS speakers (130 utterances), identical references and sentences for every system. RTF is full-utterance compute ÷ audio duration — not time-to-first-audio, which is what most speed claims quote. clone% rescales SECS between the cross-speaker floor (0.725, two different speakers) and the human ceiling (0.936).

SystemRTF ↓×realtimeSECS ↑clone% ↑UTMOSv2 ↑WER ↓
Kokoro Ninja0.05518.2×0.90987%2.6233.6%
omnivoice-vietnamese0.3992.5×0.93399%2.7141.4%
VieNeu v3 Turbo0.7361.4×0.93499%2.5163.9%
Human recording——0.936100%2.8601.6%
Where we win and where we lose. We are 7.3× faster than omnivoice-vietnamese and 13.4× faster than VieNeu v3 Turbo on the same GPU, and we edge out VieNeu Turbo on both intelligibility (3.6% vs 3.9% WER) and naturalness (2.62 vs 2.52). We lose on speaker similarity: 87% of the human ceiling against their 99%. If you need maximum timbre fidelity from one clip rather than throughput, VieNeu v3 Turbo is still the better model. We publish this because a benchmark that only flatters its author isn't a benchmark.

English — 40 LibriSpeech speakers

SystemRTF ↓×realtimeSECS ↑clone% ↑UTMOSv2 ↑WER ↓
Kokoro Ninja0.04721.1×0.7069%2.8329.1%
Human recording——0.960100%3.2494.2%
English does not clone well — read this before using it. The output is fast and broadly intelligible, but at 9% of the usable similarity range (floor 0.681, ceiling 0.960) it sits barely above “different speaker”. The model speaks English; it does not reliably carry a voice into it. We checked this was not an artifact of our own eval — matching the English reference-duration window to Vietnamese moved SECS by 0.001. Treat the six non-Vietnamese languages as speech synthesis, not voice cloning, until this improves.

SECS is scored with WavLM-base-plus-sv rather than CAMPPlus — scoring with the encoder this model is conditioned on would flatter it. WER is PhoWhisper back-transcription, which catches wrong tones, because a wrong tone is a different Vietnamese word. UTMOSv2 is English/Japanese-trained, so on Vietnamese it's a proxy; the human row is the calibration. It is also nondeterministic — rescoring identical audio moves it by up to 0.08, so treat small MOS gaps as noise. SECS and WER are exactly reproducible.

Why Vietnamese needs its own phonemizer

espeak-ng's Vietnamese voice collapses phonemically distinct onsets into a single IPA token. When two different sounds arrive as the same symbol, the model cannot learn the difference — it is not a tuning problem, the information is already gone.

Writtenespeak givesShould be
trtʃɴ
chtʃtʃ
ssʂ
xss
rzʐ
d / gizz

We phonemize per syllable, look at the written onset and remap the colliding phoneme to the correct retroflex — which already exists in the vocabulary, so nothing about the model has to change. The remap is guarded: it only fires when espeak actually emitted the colliding token. c/k/q → k is left alone, because that one is a genuine merger in Vietnamese.

One practical quirk: the model is trained on sentence-final punctuation and is sensitive to it — text without a terminal mark tends to clip or run on at the end. synthesize() adds one when your text lacks it. On this very benchmark, adding the missing period moved WER from 5.1% to 3.9% and predicted MOS from 2.47 to 2.66.

Honest limitations