Skip to content

RimeTTS

Convert text to speech using Rime's Coda, Arcana, and Mist models via a simple REST API.

Use RimeTTS when you want expressive, low-latency speech synthesis from Rime’s Coda, Arcana, and Mist model families via a simple REST call. Each synthesize() request returns the complete audio as a Blob — no WebSocket management required. The output format is selected with the audioFormat option, which maps to the request’s Accept header.

Prerequisites

  • A Rime API key or a CompositeVoice proxy server
  • No additional dependencies required. RimeTTS uses native fetch internally.

Basic setup

import { CompositeVoice, NativeSTT, AnthropicLLM, RimeTTS, BrowserAudioOutput } from 'composite-voice';

const voice = new CompositeVoice({
  providers: [
    new NativeSTT(),
    new AnthropicLLM({
      proxyUrl: '/api/proxy/anthropic',
      model: 'claude-haiku-4-5',
    }),
    new RimeTTS({
      proxyUrl: '/api/proxy/rime',
      speaker: 'astra',
      model: 'arcana',
      audioFormat: 'mp3',
    }),
    new BrowserAudioOutput(),
  ],
});

await voice.initialize();
await voice.startListening();

Configuration options

OptionTypeDefaultDescription
apiKeystringRime API key (direct mode)
proxyUrlstringProxy server URL (recommended for production)
speakerstringrequiredVoice identifier from Rime’s per-model voice catalogs
modelstring'arcana'coda, arcana, arcanav3, arcanav2, mistv3, mistv2
audioFormatstring'mp3'Output format: mp3, wav, ogg, webm, pcm, mulaw
languagestring'en' (server-side)ISO 639-1 or 639-2/3 code (e.g. en, spa), sent as lang
samplingRatenumber24000 (server-side)Output sampling rate in Hz
speedAlphanumberSpeech speed multiplier (mistv2; <1.0 faster, >1.0 slower)
noTextNormalizationbooleanSkip text normalization for lower latency (mistv2)
timeScaleFactornumber>1.0 slows audio, <1.0 speeds it up
endpointstringCustom API endpoint URL
maxRetriesnumber3Retry count for failed requests

Available voices

Voice availability depends on the selected model — browse the per-model catalogs in the Rime voices documentation. Voices like astra and celeste are good starting points.

Output formats

FormatUse case
mp3Good compression, wide browser support (default)
wavUncompressed 16-bit PCM with RIFF header
oggOpus in an OGG container, good compression
webmOpus in a WebM container, native browser streaming
pcmHeaderless 16-bit linear PCM (audio/L16)
mulawHeaderless G.711 mu-law (audio/PCMU), common in telephony

Complete example

import { CompositeVoice, MicrophoneInput, DeepgramSTT, AnthropicLLM, RimeTTS, BrowserAudioOutput } from 'composite-voice';

const tts = new RimeTTS({
  proxyUrl: '/api/proxy/rime',
  speaker: 'astra',
  model: 'arcana',
  audioFormat: 'mp3',
  language: 'en',
});

const voice = new CompositeVoice({
  providers: [
    new MicrophoneInput(),
    new DeepgramSTT({ proxyUrl: '/api/proxy/deepgram' }),
    new AnthropicLLM({
      proxyUrl: '/api/proxy/anthropic',
      model: 'claude-haiku-4-5',
    }),
    tts,
    new BrowserAudioOutput(),
  ],
});

voice.on('tts.start', () => console.log('Speaking...'));
voice.on('tts.end', () => console.log('Done speaking'));

await voice.initialize();
await voice.startListening();

Model selection

  • coda — Rime’s flagship conversational model with sub-100ms model latency and multilingual support. Best voice quality.
  • arcana / arcanav3 / arcanav2 — Highly expressive speech with emotional nuance. arcana is the default for RimeTTS.
  • mistv3 / mistv2 — The low-latency Mist family. mistv3 is the fastest; mistv2 supports custom pronunciation.

Tips

  • speedAlpha and noTextNormalization apply to mistv2. On speedAlpha, values below 1.0 are faster and values above 1.0 are slower. For speed control on other models, use timeScaleFactor (which works the other way: >1.0 slows audio down).
  • RimeTTS is REST-based, not streaming. The full audio Blob is returned after the API processes the entire input. For real-time streaming, consider DeepgramTTS.
  • The Rime API returns raw audio bytes in the format requested via the Accept header; RimeTTS wraps them in a playable Blob for you.
  • Use proxyUrl in production so your API key stays server-side — set rimeApiKey in your proxy config.

Further reading

© 2026 CompositeVoice. All rights reserved.

Font size
Contrast
Motion
Transparency