TTS Engine Comparison
TomoriBot supports multiple local Text-to-Speech sidecars, each suited for different languages, hardware profiles, and latency requirements.
This page provides empirical benchmark results, synthesis timings, and audio comparison clips recorded in an identical test environment with matching voice cloning references.
Multilingual & English Voice Cloning
Section titled “Multilingual & English Voice Cloning”Benchmark Prompts
Section titled “Benchmark Prompts”- Standard Prompt (used for Chatterbox Standard/Turbo/Nano, MOSS-TTS, CosyVoice 3, VoxCPM2, Qwen3-TTS):
“Pain and pleasure are two sides of the same coin. Go on now… flip it. Either way, I’ll let you feel all of me.”
- Fish Audio S2 Pro Prompt (tested with bracket expression tags):
“Pain and pleasure are two sides of the same coin. [laughs] Go on now… flip it. [whispers] Either way, I’ll let you feel all of me.”
Performance & Audio Comparison
Section titled “Performance & Audio Comparison”Timings report both the full generation time (total wall-clock seconds from request to finished audio) and the Real-Time Factor (RTF), defined as generation time divided by audio duration:
- RTF < 1.0 (bold): The engine generates speech faster than real time (for example,
0.50× RTFrenders a 10-second clip in 5 seconds). Only these engines could keep up with a live voice call, which TomoriBot does not implement today. - RTF > 1.0: Generation takes longer than the spoken audio. TomoriBot sends each voice message as a complete file, so a higher RTF only means a longer wait.
| Engine | Windows Native(1) (RTX 4070 Ti SUPER) | Linux / WSL2 | macOS (Apple Silicon) | Audio Sample |
|---|---|---|---|---|
| Fish Audio S2 Pro | ~8-10 min(2) (~65× RTF) | Untested | Untested | |
| Chatterbox (Turbo, Default) | ~5.0s (8.7s clip) 0.57× RTF | Untested | Untested | |
| Chatterbox (Nano) | ~3.0s (8.0s clip) 0.38× RTF | Untested | Untested | |
| Chatterbox (Standard) | ~6.0s (7.8s clip) 0.77× RTF | Untested | Untested | |
| MOSS-TTS | ~12.0s (8.8s clip) 1.36× RTF | Untested | Untested | |
| CosyVoice 3 | ~6.0s (13.9s clip) 0.43× RTF | Untested | Untested | |
| VoxCPM2 | ~8.0s (7.4s clip) 1.09× RTF | Untested | Untested | |
| Qwen3-TTS | ~10.0s (9.2s clip) 1.09× RTF | Untested | Untested |
- (1) Test Environment: NVIDIA GeForce RTX 4070 Ti SUPER (16 GB GDDR6X, Ada Lovelace) on Windows 11 (native execution) using a 26.6-second 24 kHz mono reference audio sample with matching verbatim transcript.
- (2) Fish Audio S2 Pro: Windows execution runs in uncompiled eager mode (~65× RTF) due to CUDA kernel launch latency across its 76 layer evaluations per token. Running on Linux or WSL2 with OpenAI Triton compiler fusion (
torch.compile) is recommended to avoid this dispatch stall.
Japanese Voice Cloning
Section titled “Japanese Voice Cloning”Japanese Benchmark Prompt
Section titled “Japanese Benchmark Prompt”「そんな顔して……ほんとは私にやられたいんでしょ?ざぁこざぁこ~♡」
Japanese Performance & Audio Comparison
Section titled “Japanese Performance & Audio Comparison”| Engine | Windows Native(1) (RTX 4070 Ti SUPER) | Linux / WSL2 | macOS (Apple Silicon) | Audio Sample |
|---|---|---|---|---|
| IrodoriTTS | ~4.0s (8.5s clip) 0.47× RTF | Untested | Untested |
- (1) Measured in the same RTX 4070 Ti SUPER Windows 11 test environment.
Which Engine Should You Choose?
Section titled “Which Engine Should You Choose?”- Choose Fish Audio S2 Pro if you want the highest possible vocal fidelity, fine-grained expressive bracket tags (
[whisper],[laughs],[sigh]), and you have access to Linux or WSL2 where Triton compiler fusion can be enabled. - Choose Chatterbox (Turbo / Nano / Standard) for English voice cloning with small VRAM footprint. Nano (~3.0s, 0.38× RTF) provides maximum speed on CPU/GPU, Turbo (~5.0s, 0.57× RTF) supports paralinguistic event tags (
[laughter],[sigh]), and Standard (~6.0s, 0.77× RTF) enables creative CFG guidance and emotional exaggeration tuning. - Choose MOSS-TTS for experimental multi-modal voice cloning and text-described English/Chinese voice generation.
- Choose CosyVoice 3 if you need high-quality multilingual zero-shot cloning with natural language delivery direction (
"Speak in English with excitement"). - Choose VoxCPM2 if you need comprehensive multilingual support (30 languages), transcript-assisted Ultimate Cloning, and natural voice design.
- Choose Qwen3-TTS if you want clean multi-language cloning with flexible voice design and stable prompt adherence.
- Choose IrodoriTTS if your bot speaks Japanese. It was the only Japanese-only engine measured (~4s, 0.47× RTF on Windows) and natively parses Unicode emojis (
😊,😢,😡) to modulate character emotion.
Compare the Engines
Section titled “Compare the Engines”All TomoriBot sidecars currently return a complete WAV to the bot. “Streaming path” means the upstream model or a separate serving backend has one; it does not mean Discord voice-chat streaming is implemented. Sizes are model parameters, not VRAM or download sizes, and the 16 GB column is setup guidance rather than a measured peak. The speed column describes each engine’s intended trade-off; the measured timings above come from one Windows machine and do not rank the engines on Linux.
| Engine | Model size; 16 GB GPU | Languages | Voice sources and controls | Speed / streaming path | Choose it for |
|---|---|---|---|---|---|
| Chatterbox | 350M Turbo (default), 110M Nano, or 500M Standard; yes, Nano can use CPU | English | Reference cloning, supported event tags; standard model offers CFG/exaggeration | Fast/small focus; wrapper returns full WAV | Small English clone setup or CPU experiments |
| Qwen3-TTS | 1.7B per mode; yes, models swap | 10, including English/Japanese | Clone or text-described VoiceDesign | Quality-focused; upstream streaming, wrapper buffers | General-purpose multilingual clone and Japanese VoiceDesign |
| MOSS-TTS | 4B clone + ~1.7B design, swapped; 16 GB is a trial target, not verified; 8B flagship likely no | Clone: 31, including Japanese; design: English/Chinese | Clone or text-described VoiceGenerator; clone language tags | Experimental; Local clone has upstream streaming backend, wrapper buffers | Compare MOSS clone quality or English/Chinese voice design |
| IrodoriTTS | ~0.8B current v4.1 Small; ~3-4 GB VRAM observed in one local run | Japanese only | Clone or VoiceDesign; emoji style cues | Sampling steps trade quality for speed; wrapper buffers | Small-footprint Japanese voices and emoji-driven delivery |
| Fish S2 Pro | 4B; official BF16 default (~16-18 GB), optional INT8 for 16 GB | 83 claimed upstream | Reference cloning (requires ref transcript), free-form bracket expression tags | Heavy Dual-AR model; requires Linux/WSL2 with Triton for fast synthesis (~65× RTF on Windows eager mode) | Fine-grained expressive cloning; check research-license terms |
| VoxCPM2 | 2B; ~8 GB BF16 reported upstream | 30 | Clone, Voice Design, transcript-assisted Ultimate Cloning, delivery instructions | ~0.30 RTF on upstream RTX 4090; upstream streaming, wrapper buffers | One multilingual model with the broadest voice-source controls |
| CosyVoice 3 | 0.5B core; 16 GB comfortable, download/runtime larger | 9, including Japanese, plus Chinese dialects | Clone, cross-lingual clone, natural-language delivery | Low-latency focus; native text/audio streaming upstream, wrapper buffers | A future streaming candidate with cross-lingual cloning |
Model size and language counts follow the Chatterbox, Qwen3-TTS, MOSS, Irodori, Fish S2 Pro, VoxCPM2, and CosyVoice 3 upstream pages. Check each guide for OS, driver, license, model revision, and memory details. A 16 GB GPU cannot necessarily host a TTS model and a large local LLM simultaneously.
The Irodori VRAM figure is a single local observation, not a published minimum or cross-engine benchmark. Memory use varies with the runtime, precision, script length, and other GPU workloads.
The first Qwen3-TTS auto request includes model loading. MOSS pre-downloads both models during setup and warms the clone model at startup by default, but either auto server still has to load the other model after a mode switch. TomoriBot waits up to TTS_SYNTHESIZE_TIMEOUT_MS (default 240000 ms) for each complete response.