Internal briefing · Jarvis voice

Keep Kokoro. None of the native candidates clears the full voice gate.

KittenTTS v0.8 runs in stock Sherpa and stays inside the memory ceiling, but its fastest useful checkpoint reaches audible PCM in 725 ms and cancels in 745 ms. Correctly pinned Piper Plus v1.13.0 is much faster and smaller than Kokoro, but its canonical English-capable voice scores 18.5% WER, fails the one-word prompt, and streams only at sentence boundaries.

Verdict

Stop this pass without changing production

Native fitKitten v0.8

Small runtime, strong intelligibility

All four Kitten checkpoints execute through Jarvis's pinned Sherpa 1.13.6 runtime. No Sherpa patch or second inference engine is needed. Nano FP32 is the best trade: 0.13 RTF, 433 MiB peak RSS, a 61 MiB prepared model package, and 2.2% WER.

RejectInteraction latency

Still too late for conversational voice

Nano FP32 misses the 250 ms warm-audio target by 475 ms and takes 745 ms to return after cancellation is requested. Mini, Micro, and Nano INT8 are slower. INT8 is also slower and heavier than Nano FP32 on this CPU.

IncompatiblePiper Plus

Not a stock-Sherpa model

The canonical Piper Plus graph needs seven inputs, including language, prosody, and speaker-embedding tensors. Sherpa's standard Piper/VITS runner supplies only the standard inputs plus optional speaker or language IDs. Supporting it there would require a new frontend and model contract, not a small metadata patch.

Promising engineNative C++

The checkpoint and stream granularity fail the full gate

The pinned v1.13.0 C++ runtime reaches audible PCM in 117 ms warm, peaks at 303 MiB, and releases to 64 MiB without a Python TTS environment. The public Tsukuyomi checkpoint scores 18.5% WER and produces no recognized word for “Done.” Cancellation returns after 272 ms, but only after emitting two sentence chunks containing 14.5 seconds of audio.

Measured matrix

Same prompts, machine, process isolation, and cancellation trigger

Latency values are medians. Peak, resident idle, and released RSS are maxima so the repeated-turn process is not hidden by the two cold-only processes. CPU is percent of one logical core; about 200% means both pinned cores were busy.

EngineWarm audibleCold audibleRTFCPUPeak RSSIdle RSSReleased RSSCancelChunks
Kokoro current1,924 ms4,101 ms1.07199%845 MiB822 MiB179 MiB3,978 ms4
Pocket official FP32236 ms4,288 ms0.30170%1,188 MiB1,163 MiB931 MiB8 ms107
Pocket official INT8160 ms4,692 ms0.25180%1,133 MiB1,003 MiB724 MiB9 ms106
Pocket Sherpa January3,053 ms5,374 ms0.75199%669 MiB655 MiB68 MiB1,902 ms8
Pocket current native prototype1,747 ms3,361 ms0.94199%579 MiB579 MiB68 MiB957 ms9
Supertonic 3 Sherpa INT83,652 ms4,630 ms0.41199%430 MiB400 MiB73 MiB8,039 ms1
Kitten v0.8 Mini Sherpa1,572 ms2,283 ms0.65199%687 MiB659 MiB71 MiB3,340 ms4
Kitten v0.8 Micro Sherpa844 ms1,609 ms0.27199%547 MiB504 MiB72 MiB1,880 ms4
Kitten v0.8 Nano FP32 Sherpa725 ms1,251 ms0.13199%433 MiB389 MiB71 MiB745 ms4
Kitten v0.8 Nano INT8 Sherpa1,201 ms1,829 ms0.30199%553 MiB510 MiB71 MiB1,707 ms4
Piper Plus v1.13 native C++117 ms1,190 ms0.04199%303 MiB303 MiB64 MiB272 ms4

Repeated-turn memory and stream granularity

The four Kitten variants allocate ONNX arena memory during the first two variable-length cycles, then settle. Piper Plus received a separate 20-turn soak: after its first allocator warm-up, RSS moved from 292.34 MiB to 294.58 MiB, a 2.24 MiB increase over the next 19 typical turns. Its 25-word response arrives in four sentence chunks, but the first chunk itself contains about 1.58 seconds of audio. The long prompt's first chunk contains about 4.36 seconds.

Intelligibility

Piper's engine is fast; its available English voice is the problem

Jarvis Parakeet transcribed the exact saved output after resampling to 16 kHz, without hotwords. WER is an objective intelligibility proxy, not a naturalness score. Human listening is still required for timbre, prosody, and preference.

EngineWERTypical promptInterpretation
Kokoro current6.5%PerfectProduction baseline
Pocket official FP324.3%PerfectReference only
Pocket official INT85.4%PerfectReference only
Pocket current native5.4%PerfectClear but slow
Supertonic 36.5%PerfectClear but non-streaming
Kitten Mini2.2%PerfectBest WER, slowest Kitten
Kitten Micro5.4%8.0%Slower and less accurate than Nano FP32
Kitten Nano FP322.2%PerfectBest Kitten trade
Kitten Nano INT82.2%PerfectQuantization regresses speed and memory
Piper Plus v1.13 native, published settings18.5%20.0%“Done.” yields no ASR word; Japanese-accented checkpoint needs human review

Method and compatibility

What these numbers include

Each engine ran in a fresh process pinned to CPUs 0 and 2 with two inference threads. Each first process ran five warm repetitions of the same one-word, 25-word, and 66-word prompts. Two more processes supplied cold-start samples. Model files were local and eligible for the OS page cache. Physical DAC and speaker buffering were excluded.

Warm first audio is request-to-first audible PCM, where audible means the first 10 ms window at or above −45 dBFS. Cancellation was requested 250 ms into the long prompt and ended when synthesis returned. RSS came from Linux /proc/self/status. Released RSS was measured after deleting model references, garbage collection, and malloc_trim.

Kitten used stock Sherpa 1.13.6 and Sherpa's upstream v0.8 metadata-packaging script. The decision-grade Piper run used the official v1.13.0 tag at 7d3aa34, built as its native C API library, with ONNX Runtime 1.20 and the release's own C++ English dictionary. The model was tsukuyomi-chan-6lang-fp16.onnx with speaker 0, automatic language detection, noise_scale=0.667, length_scale=1.5, and noise_w=0.8. A separate explicit-English run scored worse at 25.0% WER.

The benchmark host process adds about 23 MiB of Python and NumPy baseline memory, but all Piper phonemization and inference in the reported row run in the pinned C++ library; there is no Python TTS dependency. The earlier moving-branch Python result is superseded because it used package 2.0.0 and the config's length_scale=1.0, not the checkpoint's published invocation.

Raw files are under /home/abstergo/Documents/Jarvis-pockettts-benchmark/benchmarks/tts-candidates. Eight focused benchmark tests pass, all JSON parses, and git diff --check is clean.

Sources checked 5 September 2026

Models and native support

KittenML KittenTTS documents the v0.8 checkpoints. Sherpa issue 3196 tracks v0.8 ONNX2 compatibility.

Piper Plus v1.13.0 is the pinned native runtime. The Tsukuyomi model card supplies the canonical public checkpoint and the published inference settings used here.

Sherpa PocketTTS, current Pocket compatibility issue, and Sherpa Supertonic support the earlier rows.