LiveKit docs › Models › TTS › Rime

---

# Rime TTS

> How to use Rime TTS with LiveKit Agents.

- **[Use in Agent Builder](https://cloud.livekit.io/projects/p_/agents/builder/new?tts=rime%2Farcana)**: Create a new agent in your browser using rime/arcana

## Overview

Rime text-to-speech is available in LiveKit Agents through [LiveKit Inference](https://docs.livekit.io/agents/models/inference.md) and the [Rime plugin](#plugin). With LiveKit Inference, your agent runs on LiveKit's infrastructure to minimize latency. No separate provider API key is required, and usage and rate limits are managed through LiveKit Cloud. Use the plugin instead if you want to manage your own billing and rate limits. Pricing for LiveKit Inference is available on the [pricing page](https://livekit.com/pricing/inference#tts).

## LiveKit Inference

Use [LiveKit Inference](https://docs.livekit.io/agents/models/inference.md) to access Rime TTS without a separate Rime API key.

| Model ID | Languages |
| -------- | --------- |
| `rime/arcana` | `en`, `es`, `fr`, `de`, `hi`, `he`, `ja`, `pt`, `ar` |
| `rime/coda` | `en`, `es`, `fr`, `de`, `pt`, `ja` |
| `rime/mist` | `en` |
| `rime/mistv2` | `en`, `es`, `fr`, `de` |
| `rime/mistv3` | `en`, `es`, `fr`, `de`, `hi` |

### Usage

To use Rime, use the `TTS` class from the `inference` module:

**Python**:

```python
from livekit.agents import AgentSession, inference

session = AgentSession(
    tts=inference.TTS(
        model="rime/arcana",
        voice="celeste",
        language="en"
    ),
    # ... tts, stt, vad, turn_handling, etc.
)

```

---

**Node.js**:

```typescript
import { AgentSession, inference } from '@livekit/agents';

session = new AgentSession({
    tts: new inference.TTS({
        model: "rime/arcana",
        voice: "celeste",
        language: "en"
    }),
    // ... tts, stt, vad, turnHandling, etc.
});

```

### Parameters

- **`model`** _(string)_: The model ID from the [models list](#inference).

- **`voice`** _(string)_: See [voices](#voices) for guidance on selecting a voice.

- **`language`** _(LanguageCode)_ (optional): [Language code](https://docs.livekit.io/agents/models/tts.md#language-codes) for the input text. The framework automatically converts to the format expected by the Rime API.

- **`extra_kwargs`** _(dict)_ (optional): Additional parameters to pass to the Rime TTS API. See [model parameters](#model-parameters) for supported fields.

In Node.js this parameter is called `modelOptions`.

#### Model parameters

Pass the following parameters inside `extra_kwargs` (Python) or `modelOptions` (Node.js). Each parameter applies only to the models listed in the **Models** column.

| Parameter | Type | Default | Models | Notes |
| speed_alpha | `float` | `1.0` | `mist`, `mistv2`, `mistv3` | Speed multiplier. Values less than `1.0` produce faster speech; values greater than `1.0` produce slower speech. |
| pause_between_brackets | `bool` | `False` | `mist`, `mistv2`, `mistv3` | Whether to insert a pause at bracket positions in the text. |
| phonemize_between_brackets | `bool` | `False` | `mist`, `mistv2`, `mistv3` | Whether to interpret text between brackets as phonemes for [custom pronunciation](https://docs.rime.ai/api-reference/custom-pronunciation). |
| inline_speed_alpha | `str` |  | `mist`, `mistv2`, `mistv3` | Comma-separated list of speed multipliers applied inline to segments of text. |
| no_text_normalization | `bool` | `False` | `mist`, `mistv2`, `mistv3` | Whether to skip text normalization (disabling expansion of numbers, abbreviations, etc.). Might reduce latency but can affect pronunciation of digits and abbreviations. |
| time_scale_factor | `float` | `1.0` | `arcana`, `coda`, `mistv3` | Controls audio playback speed. Values greater than `1.0` slow the audio; values less than `1.0` speed it up. Serialized as `timeScaleFactor` to match the Rime API. |

### Voices

LiveKit Inference supports all of the voices available in the Rime API. You can view the default voices and explore the wider set in the API in the [Rime voices documentation](https://docs.rime.ai/api-reference/voices), and use the voice by copying its name into your LiveKit agent session.

The following is a small sample of the Rime voices available in LiveKit Inference.

| Provider | Name | Description | Language | ID |
| -------- | ---- | ----------- | -------- | -------- |
| Rime | Astra | Chipper, upbeat American female | `en-US` | `rime/arcana:astra` |
| Rime | Celeste | Chill Gen-Z American female | `en-US` | `rime/arcana:celeste` |
| Rime | Luna | Chill but excitable American female | `en-US` | `rime/arcana:luna` |
| Rime | Ursa | Young, emo American male | `en-US` | `rime/arcana:ursa` |

### String descriptors

As a shortcut, you can also pass a descriptor with the [model ID](#inference) and voice directly to the `tts` argument in your `AgentSession`:

**Python**:

```python
from livekit.agents import AgentSession

session = AgentSession(
    tts="rime/arcana:celeste",
    # ... llm, stt, vad, turn_handling, etc.
)

```

---

**Node.js**:

```typescript
import { AgentSession } from '@livekit/agents';

session = new AgentSession({
    tts: "rime/arcana:celeste",
    // ... tts, stt, vad, turnHandling, etc.
});

```

## Plugin

LiveKit's plugin support for Rime lets you connect directly to Rime's TTS API with your own API key.

Available in:
- [x] Node.js
- [x] Python

### Installation

Install the plugin:

**Python**:

```shell
uv add "livekit-agents[rime]~=1.5"

```

---

**Node.js**:

```shell
pnpm add @livekit/agents-plugin-rime@1.x

```

### Authentication

The Rime plugin requires a [Rime API key](https://rime.ai/).

Set `RIME_API_KEY` in your `.env` file.

### Usage

Use Rime TTS within an `AgentSession` or as a standalone speech generator. For example, you can use this TTS in the [Voice AI quickstart](https://docs.livekit.io/agents/start/voice-ai.md).

**Python**:

```python
from livekit.plugins import rime

session = AgentSession(
   tts=rime.TTS(
      model="arcana",
      speaker="celeste",
      speed_alpha=0.9,
   ),
   # ... llm, stt, etc.
)

```

---

**Node.js**:

```typescript
import * as rime from '@livekit/agents-plugin-rime';

const session = new voice.AgentSession({
    tts: new rime.TTS({
      modelId: "arcana",
      speaker: "celeste",
      speedAlpha: 0.9,
    }),
    // ... llm, tts, etc.
});

```

#### WebSocket streaming

By default, the plugin synthesizes speech over Rime's HTTP API. Set `use_websocket=True` to opt into WebSocket streaming, which lowers latency and emits word-level timestamps for [TTS-aligned transcriptions](https://docs.livekit.io/agents/multimodality/text.md#tts-aligned-transcriptions). Streaming and aligned transcripts are enabled automatically when WebSocket mode is active.

**Python**:

```python
from livekit.plugins import rime

session = AgentSession(
   tts=rime.TTS(
      model="arcana",
      speaker="celeste",
      use_websocket=True,
      segment="bySentence",
   ),
   # ... llm, stt, etc.
)

```

---

**Node.js**:

```typescript
import * as rime from '@livekit/agents-plugin-rime';

const session = new voice.AgentSession({
    tts: new rime.TTS({
      modelId: "arcana",
      speaker: "celeste",
      useWebsocket: true,
      segment: "bySentence",
    }),
    // ... llm, tts, etc.
});

```

### Parameters

This section describes some of the available parameters. See the [plugin reference](https://docs.livekit.io/reference/python/livekit/plugins/rime/index.html.md#livekit.plugins.rime.TTS) for a complete list of all available parameters.

> ℹ️ **Coda model**
> 
> When `model="coda"`, the default speaker is `lyra`. The `coda` model ignores Rime parameters such as `speed_alpha`, `reduce_latency`, `pause_between_brackets`, `phonemize_between_brackets`, `temperature`, `top_p`, and `repetition_penalty`.

- **`model`** _(string)_ (optional) - Default: `arcana`: ID of the model to use. To learn more, see [Models](https://docs.rime.ai/api-reference/models).

- **`speaker`** _(string)_ (optional): ID of the voice to use for speech generation. If unset, the SDK selects a default voice based on the model. To learn more, see [Voices](https://docs.rime.ai/api-reference/voices).

- **`audio_format`** _(TTSEncoding)_ (optional) - Default: `pcm`: Audio format to use. Valid values are: `pcm` and `mp3`.

- **`sample_rate`** _(integer)_ (optional) - Default: `16000`: Sample rate of the generated audio. Set this rate to best match your application needs. To learn more, see [Recommendations for reducing response time](https://docs.rime.ai/api-reference/latency#recommendations-for-reducing-response-time).

- **`speed_alpha`** _(float)_ (optional) - Default: `1.0`: Adjusts the speed of speech. Lower than `1.0` results in faster speech while higher than `1.0` results in slower speech. Supported on the mist models (`mist`, `mistv2`, `mistv3`) only.

- **`time_scale_factor`** _(float)_ (optional) - Default: `1.0`: Controls audio playback speed. Values greater than `1.0` slow the audio while values less than `1.0` speed it up. Supported on the `arcana`, `coda`, and `mistv3` models only. Passing it with `mistv2` raises an error.

In Node.js, this parameter is called `timeScaleFactor`.

- **`reduce_latency`** _(boolean)_ (optional) - Default: `false`: When set to `true`, turns off text normalization to reduce the amount of time spent preparing input text for TTS inference. This might result in the mispronunciation of digits and abbreviations. Supported on `mistv2` only. To learn more, see [Recommendations for reducing response time](https://docs.rime.ai/api-reference/latency#recommendations-for-reducing-response-time).

- **`phonemize_between_brackets`** _(boolean)_ (optional) - Default: `false`: When set to `true`, allows the use of custom pronunciation strings in text. To learn more, see [Custom pronunciation](https://docs.rime.ai/api-reference/custom-pronunciation). Supported on the mist models (`mist`, `mistv2`, `mistv3`) only.

- **`api_key`** _(string)_ (optional) - Environment: `RIME_API_KEY`: Rime API Key. Required if the environment variable isn't set.

- **`use_websocket`** _(boolean)_ (optional) - Default: `false`: Opts into WebSocket streaming. When `false`, the plugin uses Rime's HTTP API. WebSocket mode enables streaming and word-level timestamps automatically. To learn more, see [WebSockets](https://docs.rime.ai/docs/websockets).

In Node.js, this parameter is called `useWebsocket`.

- **`base_url`** _(string)_ (optional): Overrides the Rime endpoint URL. Defaults to `https://users.rime.ai/v1/rime-tts` for HTTP synthesis and `wss://users-ws.rime.ai` for WebSocket streaming. Passing a `ws://` or `wss://` URL sets `use_websocket=True`.

In Node.js, this parameter is called `baseURL`.

- **`segment`** _(string)_ (optional) - Default: `bySentence`: Requires `use_websocket=True`. Controls server-side text segmentation:

- `"bySentence"` (default) synthesizes at sentence boundaries.
- `"immediate"` synthesizes as soon as text arrives in the buffer.
- `"never"` waits for explicit flush commands.
To learn more, see [Segment values](https://docs.rime.ai/docs/websockets-segment).

- **`tokenizer`** _(SentenceTokenizer)_ (optional): Requires `use_websocket=True`. Client-side sentence tokenizer used to split text into sentences before streaming to Rime. Defaults to the SDK's built-in sentence tokenizer.

## Customizing pronunciation

Rime TTS supports customizing pronunciation. To learn more, see [Custom Pronunciation guide](https://docs.rime.ai/api-reference/custom-pronunciation).

## Additional resources

The following resources provide more information about using Rime with LiveKit Agents.

- **[Rime docs](https://docs.rime.ai)**: Rime TTS docs.

- **[Voice AI quickstart](https://docs.livekit.io/agents/start/voice-ai.md)**: Get started with LiveKit Agents and Rime TTS.

---

This document was rendered at 2026-06-07T11:36:47.345Z.
For the latest version of this document, see [https://docs.livekit.io/agents/models/tts/rime.md](https://docs.livekit.io/agents/models/tts/rime.md).

To explore all LiveKit documentation, see [llms.txt](https://docs.livekit.io/llms.txt).