LiveKit docs › Models › TTS › ElevenLabs

---

# ElevenLabs TTS

> How to use ElevenLabs TTS with LiveKit Agents.

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

## Overview

ElevenLabs text-to-speech is available in LiveKit Agents through [LiveKit Inference](https://docs.livekit.io/agents/models/inference.md) and the [ElevenLabs 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 ElevenLabs TTS without a separate ElevenLabs API key.

| Model ID | Languages |
| -------- | --------- |
| `elevenlabs/eleven_flash_v2` | `en` |
| `elevenlabs/eleven_flash_v2_5` | `en`, `ja`, `zh`, `de`, `hi`, `fr`, `ko`, `pt`, `it`, `es`, `id`, `nl`, `tr`, `fil`, `pl`, `sv`, `bg`, `ro`, `ar`, `cs`, `el`, `fi`, `hr`, `ms`, `sk`, `da`, `ta`, `uk`, `ru`, `hu`, `no`, `vi` |
| `elevenlabs/eleven_multilingual_v2` | `en`, `ja`, `zh`, `de`, `hi`, `fr`, `ko`, `pt`, `it`, `es`, `id`, `nl`, `tr`, `fil`, `pl`, `sv`, `bg`, `ro`, `ar`, `cs`, `el`, `fi`, `hr`, `ms`, `sk`, `da`, `ta`, `uk`, `ru` |
| `elevenlabs/eleven_turbo_v2` | `en` |
| `elevenlabs/eleven_turbo_v2_5` | `en`, `ja`, `zh`, `de`, `hi`, `fr`, `ko`, `pt`, `it`, `es`, `id`, `nl`, `tr`, `fil`, `pl`, `sv`, `bg`, `ro`, `ar`, `cs`, `el`, `fi`, `hr`, `ms`, `sk`, `da`, `ta`, `uk`, `ru`, `hu`, `no`, `vi` |
| `elevenlabs/eleven_v3` | `en`, `ja`, `zh`, `de`, `hi`, `fr`, `ko`, `pt`, `it`, `es`, `id`, `nl`, `tr`, `fil`, `pl`, `sv`, `bg`, `ro`, `ar`, `cs`, `el`, `fi`, `hr`, `ms`, `sk`, `da`, `ta`, `uk`, `ru`, `hu`, `no`, `vi` |

### Usage

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

**Python**:

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

session = AgentSession(
    tts=inference.TTS(
        model="elevenlabs/eleven_turbo_v2_5", 
        voice="Xb7hH8MSUJpSbSDYk0k2", 
        language="en"
    ),
    # ... llm, stt, vad, turn_handling, etc.
)

```

---

**Node.js**:

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

session = new AgentSession({
    tts: new inference.TTS({
        model: "elevenlabs/eleven_turbo_v2_5", 
        voice: "Xb7hH8MSUJpSbSDYk0k2", 
        language: "en" 
    }),
    // ... llm, 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. If not set, the model default applies.

- **`extra_kwargs`** _(dict)_ (optional): Additional parameters to pass to the ElevenLabs 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):

| Parameter | Type | Default | Notes |
| inactivity_timeout | `int` | `60` | Seconds of inactivity before the session closes. Valid range: `5`–`180`. |
| apply_text_normalization | `"auto" | "off" | "on"` | `"auto"` | Whether to normalize text before synthesis (expand numbers, abbreviations, etc.). For language-specific rules, see `apply_language_text_normalization`. |
| apply_language_text_normalization | `bool` |  | Whether to apply language-specific text normalization rules. Helps with proper pronunciation in supported languages. Distinct from `apply_text_normalization`, which controls general normalization. |
| auto_mode | `bool` |  | Enable auto mode for optimized streaming. Reduces latency by automatically determining chunk sizes. |
| enable_logging | `bool` |  | Whether to enable request logging on the ElevenLabs side. |
| enable_ssml_parsing | `bool` |  | Whether to parse SSML tags in the input text. Allows [custom pronunciation](#customizing-pronunciation) using SSML. |
| sync_alignment | `bool` |  | Whether to return word-level alignment data with each audio chunk. |
| language_code | `str` |  | Language code for the output audio (for example, `"en"`, `"fr"`). Overrides the top-level `language` parameter for the ElevenLabs API call. |
| stability | `float` |  | Voice stability. Higher values produce more consistent output; lower values allow more expressive variation. Valid range: `0`–`1`. |
| similarity_boost | `float` |  | How closely the output should match the original voice. Higher values increase similarity but might introduce artifacts. Valid range: `0`–`1`. |
| style | `float` |  | Style strength of the voice. Valid range: `0`–`1`. |
| speed | `float` |  | Speaking speed. Valid range: `0.25`–`4`. |
| use_speaker_boost | `bool` |  | Whether to boost speaker clarity and target speaker similarity. |
| chunk_length_schedule | `list[float]` |  | List of chunk sizes in characters that controls when audio is flushed during streaming. Valid values per entry: `50`–`500`. |
| preferred_alignment | `str` |  | Preferred alignment mode for word-level timestamps. |

### Voices

LiveKit Inference supports all of the default voices available in the ElevenLabs API. You can explore the available voices in the [ElevenLabs voice library](https://elevenlabs.io/app/default-voices) (free account required), and use the voice by copying its ID into your LiveKit agent session.

> ℹ️ **Custom & community voices**
> 
> Pre-existing custom and community ElevenLabs voices are not available through LiveKit Inference. To use these, create your own ElevenLabs account and use the [ElevenLabs plugin](https://docs.livekit.io/agents/models/tts/elevenlabs.md#plugin).

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

| Provider | Name | Description | Language | ID |
| -------- | ---- | ----------- | -------- | -------- |
| ElevenLabs | Alice | Clear and engaging, friendly British woman | `en-GB` | `elevenlabs/eleven_turbo_v2_5:Xb7hH8MSUJpSbSDYk0k2` |
| ElevenLabs | Chris | Natural and real American male | `en-US` | `elevenlabs/eleven_turbo_v2_5:iP95p4xoKVk53GoZ742B` |
| ElevenLabs | Eric | A smooth tenor Mexican male | `es-MX` | `elevenlabs/eleven_turbo_v2_5:cjVigY5qzO86Huf0OWal` |
| ElevenLabs | Jessica | Young and popular, playful American female | `en-US` | `elevenlabs/eleven_turbo_v2_5:cgSgspJ2msm6clMCkdW9` |

### 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="elevenlabs/eleven_turbo_v2_5:Xb7hH8MSUJpSbSDYk0k2",
    # ... llm, stt, vad, turn_handling, etc.
)

```

---

**Node.js**:

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

session = new AgentSession({
    tts: "elevenlabs/eleven_turbo_v2_5:Xb7hH8MSUJpSbSDYk0k2",
    // ... tts, stt, vad, turnHandling, etc.
});

```

## Plugin

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

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

### Installation

Install the plugin from PyPI:

**Python**:

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

```

---

**Node.js**:

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

```

### Authentication

The ElevenLabs plugin requires an [ElevenLabs API key](https://elevenlabs.io/app/settings/api-keys).

Set `ELEVEN_API_KEY` in your `.env` file.

### Usage

Use ElevenLabs 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 elevenlabs

session = AgentSession(
   tts=elevenlabs.TTS(
      voice_id="ODq5zmih8GrVes37Dizd",
      model="eleven_multilingual_v2"
   )
   # ... llm, stt, etc.
)

```

---

**Node.js**:

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

const session = new voice.AgentSession({
    tts: new elevenlabs.TTS(
      voice: { id: "ODq5zmih8GrVes37Dizd" },
      model: "eleven_multilingual_v2"
    ),
    // ... llm, stt, etc.
});

```

### Parameters

This section describes some of the parameters you can set when you create an ElevenLabs TTS. See the plugin reference links in the [Additional resources](#additional-resources) section for a complete list of all available parameters.

- **`model`** _(string)_ (optional) - Default: `eleven_flash_v2_5`: ID of the model to use for generation. To learn more, see the [ElevenLabs documentation](https://elevenlabs.io/docs/api-reference/text-to-speech/convert#/docs/api-reference/text-to-speech/convert#request.body.model_id).

- **`voice_id`** _(string)_ (optional) - Default: `EXAVITQu4vr4xnSDxMaL`: ID of the voice to use for generation. To learn more, see the [ElevenLabs documentation](https://elevenlabs.io/docs/api-reference/text-to-speech/convert).

- **`voice_settings`** _(VoiceSettings)_ (optional): Voice configuration. To learn more, see the [ElevenLabs documentation](https://elevenlabs.io/docs/api-reference/text-to-speech/convert#request.body.voice_settings).

- - **`stability`** _(float)_ (optional):
- - **`similarity_boost`** _(float)_ (optional):
- - **`style`** _(float)_ (optional):
- - **`use_speaker_boost`** _(bool)_ (optional):
- - **`speed`** _(float)_ (optional):

- **`language`** _(LanguageCode)_ (optional) - Default: `en`: [Language code](https://docs.livekit.io/agents/models/tts.md#language-codes) for the output audio. To learn more, see the [ElevenLabs documentation](https://elevenlabs.io/docs/api-reference/text-to-speech/convert#request.body.language_code).

- **`streaming_latency`** _(int)_ (optional) - Default: `3`: Latency in seconds for streaming.

- **`enable_ssml_parsing`** _(bool)_ (optional) - Default: `false`: Enable Speech Synthesis Markup Language (SSML) parsing for input text. Set to `true` to [customize pronunciation](#customizing-pronunciation) using SSML.

- **`chunk_length_schedule`** _(list[int])_ (optional) - Default: `[80, 120, 200, 260]`: Schedule for chunk lengths. Valid values range from `50` to `500`.

## SSML and audio tags

ElevenLabs supports SSML and audio tags for more natural-sounding speech, including custom pronunciation, pauses, non-verbal sounds, and emotional delivery. SSML tags require `enable_ssml_parsing=true`.

- For custom pronunciation of specific words with SSML `phoneme` tags, see [Pronunciation](https://elevenlabs.io/docs/best-practices/prompting#pronunciation) in the ElevenLabs docs.
- For prompting techniques that incorporate these tags into agent responses, see [Voice realism](https://docs.livekit.io/agents/start/prompting.md#voice-realism) in the prompting guide.

## Transcription timing

ElevenLabs TTS supports aligned transcription forwarding, which improves transcription synchronization in your frontend. Set `use_tts_aligned_transcript=True` in your `AgentSession` configuration to enable this feature. To learn more, see [the docs](https://docs.livekit.io/agents/build/text.md#tts-aligned-transcriptions).

## Additional resources

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

- **[ElevenLabs docs](https://elevenlabs.io/docs)**: ElevenLabs TTS docs.

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

---

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

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