LiveKit docs › Models › TTS › Inworld

---

# Inworld TTS

> How to use Inworld TTS with LiveKit Agents.

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

## Overview

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

| Model ID | Languages |
| -------- | --------- |
| `inworld/inworld-tts-2` | `en`, `zh`, `ja`, `ko`, `ru`, `it`, `es`, `pt`, `fr`, `de`, `pl`, `nl`, `hi`, `he`, `ar` |
| `inworld/inworld-tts-1` | `en`, `es`, `fr`, `ko`, `nl`, `zh`, `de`, `it`, `ja`, `pl`, `pt`, `ru`, `hi`, `he`, `ar` |
| `inworld/inworld-tts-1-max` | `en`, `es`, `fr`, `ko`, `nl`, `zh`, `de`, `it`, `ja`, `pl`, `pt`, `ru`, `hi`, `he`, `ar` |
| `inworld/inworld-tts-1.5-max` | `en`, `zh`, `ja`, `ko`, `ru`, `it`, `es`, `pt`, `fr`, `de`, `pl`, `nl`, `hi`, `he`, `ar` |
| `inworld/inworld-tts-1.5-mini` | `en`, `zh`, `ja`, `ko`, `ru`, `it`, `es`, `pt`, `fr`, `de`, `pl`, `nl`, `hi`, `he`, `ar` |

### Usage

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

**Python**:

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

session = AgentSession(
    tts=inference.TTS(
        model="inworld/inworld-tts-2", 
        voice="Ashley", 
        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: "inworld/inworld-tts-2",
        voice: "Ashley", 
        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 Inworld 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 |
| speaking_rate | `float` |  | Speaking rate multiplier. `1.0` is normal speed. Valid range: `0.5`–`1.5`. |
| temperature | `float` |  | Controls randomness in the generated voice. Higher values produce more variation. Valid range: `0`–`2`. |
| timestamp_type | `"TIMESTAMP_TYPE_UNSPECIFIED" | "WORD" | "CHARACTER"` |  | Granularity of timestamps returned with the audio. |
| apply_text_normalization | `"APPLY_TEXT_NORMALIZATION_UNSPECIFIED" | "ON" | "OFF"` |  | Whether to normalize text before synthesis (expand numbers, abbreviations, etc.). |

### Voices

LiveKit Inference supports all of the default voices available in the Inworld API. You can explore the available voices in the [Inworld TTS Playground](https://docs.inworld.ai/docs/tts/tts-playground) (free account required), and use the voice by copying its name into your LiveKit agent session.

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

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

| Provider | Name | Description | Language | ID |
| -------- | ---- | ----------- | -------- | -------- |
| Inworld | Ashley | Warm, natural American female | `en-US` | `inworld/inworld-tts-1:Ashley` |
| Inworld | Diego | Soothing, gentle Mexican male | `es-MX` | `inworld/inworld-tts-1:Diego ` |
| Inworld | Edward | Fast-talking, emphatic American male | `en-US` | `inworld/inworld-tts-1:Edward` |
| Inworld | Olivia | Upbeat, friendly British female | `en-GB` | `inworld/inworld-tts-1:Olivia` |

### 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="inworld/inworld-tts-2:Ashley",
    # ... llm, stt, vad, turn_handling, etc.
)

```

---

**Node.js**:

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

session = new AgentSession({
    tts: "inworld/inworld-tts-2:Ashley",
    // ... llm, stt, vad, turnHandling, etc.
});

```

## Plugin

LiveKit's plugin support for Inworld lets you connect directly to Inworld's 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[inworld]~=1.5"

```

---

**Node.js**:

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

```

### Authentication

The Inworld plugin requires a Base64-encoded [Inworld API key](https://platform.inworld.ai/login).

Set `INWORLD_API_KEY` in your `.env` file.

### Usage

Use Inworld 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 inworld

session = AgentSession(
   tts=inworld.TTS(model="inworld-tts-2", voice="Ashley")
   # ... llm, stt, etc.
)

```

---

**Node.js**:

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

const session = new voice.AgentSession({
    tts: inworld.TTS(
        model: "inworld-tts-2",
        voice: "Ashley",
    ),
    // ... llm, stt, etc.
});

```

### Parameters

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

- **`model`** _(string)_ (optional) - Default: `"inworld-tts-2"`: ID of the model to use for generation. See [supported models](https://docs.inworld.ai/docs/models#tts).

- **`voice`** _(string)_ (optional) - Default: `"Ashley"`: ID of the voice to use for generation. Use the [List voices API endpoint](https://docs.inworld.ai/api-reference/ttsAPI/texttospeech/list-voices) for possible values.

- **`temperature`** _(float)_ (optional) - Default: `1.1`: Controls randomness in the output. Recommended to set between 0.6 and 1.1. See [docs](https://docs.inworld.ai/docs/tts/tts#additional-configurations).

- **`speaking_rate`** _(float)_ (optional) - Default: `1.0`: Controls how fast the voice speaks. 1.0 is the normal native speed, while 0.5 is half the normal speed and 1.5 is 1.5x faster than the normal speed. See [docs](https://docs.inworld.ai/docs/tts/tts#additional-configurations).

- **`text_normalization`** _(string)_ (optional) - Default: `ON`: Controls text normalization. When "ON", numbers, dates, and abbreviations are expanded (e.g., "Dr." -> "Doctor"). When "OFF", text is read exactly as written. See [docs](https://docs.inworld.ai/docs/tts/tts#additional-configurations).

## Customizing pronunciation

Inworld TTS supports customizing pronunciation. To learn more, see [Custom Pronunciation guide](https://docs.inworld.ai/docs/tts/capabilities/custom-pronunciation).

## Additional resources

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

- **[Python package](https://pypi.org/project/livekit-plugins-inworld/)**: The `livekit-plugins-inworld` package on PyPI.

- **[Plugin reference](https://docs.livekit.io/reference/python/livekit/plugins/inworld/index.html.md#livekit.plugins.inworld.TTS)**: Reference for the Inworld TTS plugin.

- **[GitHub repo](https://github.com/livekit/agents/tree/main/livekit-plugins/livekit-plugins-inworld)**: View the source or contribute to the LiveKit Inworld TTS plugin.

- **[Inworld docs](https://docs.inworld.ai/docs/introduction)**: Inworld TTS docs.

- **[Inworld STT](https://docs.livekit.io/agents/models/stt/inworld.md)**: Guide to the Inworld STT plugin with LiveKit Agents.

---

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

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