Skip to main content
resemble-ai avatar

Chatterbox TTS API

resemble-ai/chatterbox/text-to-speech

Turn text into expressive speech and clone any voice from a short reference recording, with fine control over emotional intensity.

0.000375 per second of output video

Model Input

Input

The text to synthesize into speech. Up to 5000 characters. Supports inline emotive tags such as <laugh>, <sigh>, <gasp>, and <cough> to shape delivery.

Optional reference recording whose voice and style are cloned. Provide a clean, single-speaker clip to clone that voice; leave it unset to use the built-in default voice.

Min: 0 - Max: 1

Emotion and intensity exaggeration. Higher values produce more dramatic, expressive delivery; lower values are calmer and more measured.

Min: 0.05 - Max: 2

Sampling temperature. Lower is steadier and more predictable; higher adds variation to prosody and delivery.

Min: 0.1 - Max: 1

Classifier-free guidance weight. Higher values track the reference voice and prompt more closely; lower values give the model more freedom.

Random seed for reproducibility. Set a fixed integer to repeat a generation; 0 or unset uses a random seed.

You need to be logged in to run this model and view results.
Log in

Model Output

Output

Loading
Generated in 8.952 seconds
Logs (1 lines)

Model Example Requests

Examples

Chatterbox TTS API

Chatterbox TTS is a sound AI model by resemble-ai. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at $0.000375 per second of audio.

POST https://queue.modelrunner.run/resemble-ai/chatterbox/text-to-speech

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/resemble-ai/chatterbox/text-to-speech \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "cfg": 0.5,
    "text": "Pack light, move fast, and never book the same hotel twice. That is how you find the stories worth telling.",
    "audio_url": "https://media.modelrunner.ai/LgBvbcVQn74cCGHEvWfzT.mp3",
    "temperature": 0.7,
    "exaggeration": 0.25,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/resemble-ai/chatterbox/text-to-speech/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/resemble-ai/chatterbox/text-to-speech/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("resemble-ai/chatterbox/text-to-speech", {
  input: {
    "cfg": 0.5,
    "text": "Pack light, move fast, and never book the same hotel twice. That is how you find the stories worth telling.",
    "audio_url": "https://media.modelrunner.ai/LgBvbcVQn74cCGHEvWfzT.mp3",
    "temperature": 0.7,
    "exaggeration": 0.25
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/resemble-ai/chatterbox/text-to-speech",
    headers=headers,
    json={
      "cfg": 0.5,
      "text": "Pack light, move fast, and never book the same hotel twice. That is how you find the stories worth telling.",
      "audio_url": "https://media.modelrunner.ai/LgBvbcVQn74cCGHEvWfzT.mp3",
      "temperature": 0.7,
      "exaggeration": 0.25
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

NameTypeRequiredDescription
textstringyesThe text to synthesize into speech. Up to 5000 characters. Supports inline emotive tags such as <laugh>, <sigh>, <gasp>, and <cough> to shape delivery.
audio_urlstringnoOptional reference recording whose voice and style are cloned. Provide a clean, single-speaker clip to clone that voice; leave it unset to use the built-in default voice.
exaggerationnumbernoEmotion and intensity exaggeration. Higher values produce more dramatic, expressive delivery; lower values are calmer and more measured. Default: 0.25.
temperaturenumbernoSampling temperature. Lower is steadier and more predictable; higher adds variation to prosody and delivery. Default: 0.7.
cfgnumbernoClassifier-free guidance weight. Higher values track the reference voice and prompt more closely; lower values give the model more freedom. Default: 0.5.
seedintegernoRandom seed for reproducibility. Set a fixed integer to repeat a generation; 0 or unset uses a random seed.

Machine-readable: OpenAPI schema · llms.txt

Use Chatterbox TTS from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Chatterbox TTS becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint resemble-ai/chatterbox/text-to-speech.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run resemble-ai/chatterbox/text-to-speech on ModelRunner to generate sound”. MCP setup guide.

Model Details

Model Details

Chatterbox converts written text into natural, expressive spoken audio and returns a hosted WAV. Its standout strength is zero-shot voice cloning: supply a short reference recording and it speaks your text in that voice, no training or enrollment step required. Leave the reference out and it uses a built-in default voice. An `exaggeration` control dials emotional intensity up or down, and the input text accepts inline emotive tags like `<laugh>`, `<sigh>`, `<gasp>`, and `<cough>` to punctuate delivery. That makes it a strong default for character dialogue, narration in a specific person's voice, and expressive reads where a flat, neutral TTS would fall short.

## Best for - Cloning a specific voice from a short sample for narration or character dialogue - Expressive, emotionally-shaded reads where you want laughs, sighs, or gasps in the delivery - Voiceover and dramatized content that needs personality rather than a flat read - Prototyping a custom voice quickly without a training or enrollment step

## Choose another model when - You need a large library of named, pre-built voices rather than cloning your own — use a catalog-voice TTS model - You want a music track with melody and instrumentation — use a music-generation model - You want generic sound effects or ambience rather than spoken words — use a text-to-audio sound-effects model - You need to transcribe speech into text rather than generate it — use a speech-to-text model

## Tips - To clone a voice, pass `audio_url` with a clean, single-speaker reference clip; omit it to use the built-in default voice. - Add inline tags such as `<laugh>`, `<sigh>`, `<gasp>`, or `<cough>` directly in `text` to shape delivery at specific points. - Raise `exaggeration` (0.0–1.0, default 0.25) for more dramatic, emotional delivery; keep it low for calm, measured reads. - Punctuate the input text the way you want it read — commas and periods drive pauses and intonation.

## Advanced Configuration - `temperature` (0.05–2.0, default 0.7): sampling temperature. Lower is steadier and more predictable; higher adds variation to prosody and delivery. - `cfg` (0.1–1.0, default 0.5): classifier-free guidance weight. Higher values track the reference voice and prompt more closely; lower values give the model more freedom. - `seed` (default unset, 0 = random): set a fixed integer to make a generation reproducible.

To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("resemble-ai/chatterbox/text-to-speech", { input: { text: "Welcome to ModelRunner. This voice was cloned from a short reference clip. <laugh>", audio_url: "https://media.modelrunner.ai/LgBvbcVQn74cCGHEvWfzT.mp3", exaggeration: 0.25, }, }); ```