Skip to content

Text-to-Speech (Local Engines)

TomoriBot treats speech as a custom endpoint capability. Local engines run outside the bot as HTTP servers and implement POST /synthesize; clone engines receive text plus the configured reference audio sample, while VoiceDesign-capable engines can also receive natural-language instructions.

Available Engines

Setup Flow

  1. Pick one engine from the cards above and set up its wrapper from servers/tts/.
  2. In /providers, choose Add New Custom Endpoint and use API Compatibility tts-clone.
  3. Select the saved endpoint and use its model dropdown to add its Speech model, Voice Source Mode, and Script Markup.
  4. Open /config > Models > Switch Models and select the registered Speech model.

Persona Voice Flow

For clone engines, add and assign one voice sample per persona:

  1. Prepare a clean 10-20 second clip with one speaker and no background music.
  2. Open /config under Models > TTS Parameters & Voices and upload the sample. Any audio format is accepted; TomoriBot converts it to mono WAV.
  3. Provide a matching transcript when the engine benefits from it. Fish S2 Pro forwards the stored reference transcript into the cloning request, and VoxCPM2 uses it for higher-fidelity Ultimate Cloning.
  4. Open /config under Persona > Voice, then choose the persona and voice sample.

For Qwen3-TTS, MOSS-VoiceGenerator, IrodoriTTS, or VoxCPM2 VoiceDesign, skip the audio sample and use Persona > Voice in /config to save a natural-language voice description for the persona. CosyVoice 3 uses Clone mode with a reference sample and accepts one-off delivery direction through voice_instructions.

ElevenLabs users should choose Add New Provider and ElevenLabs in /providers; it registers the speech and transcription endpoints together.

TomoriBot strips Discord custom emoji syntax such as :pepega: or <:pepega:123456789012345678> from generated voice scripts before synthesis. Unicode emojis are also stripped unless the speech endpoint uses emoji markup, which is intended for IrodoriTTS. Bracket tags are preserved for endpoints such as Chatterbox Turbo and Fish S2 Pro when their Script Markup is set to Bracket Tags.

VoxCPM2 uses Plain Script Markup. Its Voice Design and speaking-style controls travel through TomoriBot’s instruct field, and the VoxCPM2 wrapper converts them to the model’s native parenthesized natural-language control syntax.

CosyVoice 3 also uses Plain Script Markup. It maps transcript-backed references to zero-shot cloning, transcript-free references to cross-lingual cloning, and voice_instructions to its instruction-conditioned path. Inline bracket tags are removed because CosyVoice instructions apply to the whole utterance.

Engine Comparison

For side-by-side empirical latency benchmarks, audio sample playback, and a detailed feature matrix comparing all supported sidecars, see TTS Engine Comparison.