$5 free credits when you sign up Claim now
Wan 2.2 Animate now available Test it!
Video Upscaling models now available Test it!
Z-Anime image model Test it!
Chatterbox TTS Guide: How to Control Emotion and 22 Languages with Text Alone
admin Jul 24, 2026 8 min read

Chatterbox TTS Guide: How to Control Emotion and 22 Languages with Text Alone

Most TTS models give you SSML tags and emotion sliders. Chatterbox ships with a text box and nothing else.

Built by Resemble AI on a ~0.5B parameter LLM backbone, Chatterbox learned prosody from massive amounts of natural speech. Punctuation and capitalization drive emotion directly – no markup language in between. In blind evaluations by Podonos, 63.75% of listeners preferred Chatterbox over ElevenLabs. It ships under MIT license with 22 languages and one default voice per language.

On deAPI, Chatterbox runs as a single API call. You pick a language, write your text, and get back an mp3 at 24 kHz.

When to Use Chatterbox (and When Not To)

deAPI offers three TTS models. Each fills a different role:

NeedModelWhy
Polished preset voices, zero configKokoro41 voices across 7 languages
Voice cloning or custom voice designQwen3 TTSClone from audio sample or design via text description
Multilingual + emotion from textChatterbox22 languages, CAPS as emphasis, one voice per language

Kokoro ignores CAPS entirely. Chatterbox treats them as emphasis. That single difference changes how you write for each model.

How Chatterbox Reads Your Text

Chatterbox is autoregressive – it generates audio tokens sequentially, like an LLM generating words. Its prosody comes from the text itself. Here’s what each punctuation mark does:

MarkEffect
.Long pause, falling intonation. Resets the sentence.
,Short breath pause. Keeps flow going.
...Suspended tone – uncertainty, drama, hesitation.
or --Strong parenthetical pause. Chatterbox reacts to em-dashes more visibly than most TTS models.
; :Intermediate pauses, between a comma and a period.
?Rising intonation on yes/no questions. Wh-questions (what, how, why) get a natural falling contour.
!Clear emphasis. Stack !! for extra intensity – the LLM backbone picks that up.
?!Surprise and disbelief – one of Chatterbox’s strongest inflections.

ALL CAPS = Emphasis

This is the big difference from Kokoro. Write I told you NOT to touch it! and Chatterbox will stress NOT with more volume and slower delivery. The LLM heritage means the model has seen enough text where CAPS imply shouting.

The rule: limit CAPS to 1-3 key words per sentence. A full-CAPS sentence fatigues prosody and distorts the output.

What Doesn’t Work

Emoji. Chatterbox reads :) as “colon paren” or drops it entirely. Strip all emoji before sending.

Emotion markers. [happy], [whisper], [sad] – not supported as commands. The model has no inline tag parser.

SSML. <break time="500ms"/> is read as literal text.

Writing for Emotion

Chatterbox has no emotion sliders or style tags. You control delivery through the text itself – word choice, punctuation, and capitalization. Compare these two versions of the same message:

That sounds limiting until you see how well it works. Compare these two versions of the same message:

Calm:

The results are in. We exceeded the target by twelve percent.

Excited:

The results are IN. We didn't just hit the target — we CRUSHED it by twelve percent!

Same information. CAPS on key words, an em-dash for dramatic pause, and a closing ! give Chatterbox enough signal to shift delivery.

Three techniques that consistently land:

Hesitation. Use ... to create pauses that sound like thinking mid-sentence. I thought it was... no, never mind. produces a genuine stall before the redirect.

Disbelief. ?! is Chatterbox’s sweet spot. You did WHAT?! sounds authentically shocked – the combination of CAPS and ?! stacks two emphasis signals at once.

Build-up. Em-dash before a reveal: The winner is — Sarah Chen. The marked pause before the name lands harder than writing it flat.

Numbers, Abbreviations, and Formatting

Chatterbox handles most common formats cleanly, but a few patterns need attention.

Numbers up to 4 digits read correctly. Years like 2024 and 1999 work as expected.

Large numbers (1,234,567) are safer spelled out. Write “one point two million” instead of hoping the model picks the right grouping.

Codes and PINs work better broken into individual digits: 5 5 5, 1 2 3 4 instead of 555-1234.

Common abbreviations (Mr., Dr., USA, NASA) expand correctly. Domain-specific abbreviations (MRR, ARR) – expand them yourself or expect letter-by-letter spelling.

Mixed languages in a single generation don’t work. Hello, nazywam się Piotr forces the model to pick one phoneme set and mangle the other. Run separate generations per language and stitch the audio in post-production.

Language Selection

Chatterbox supports 22 languages, each with a single default voice:

LanguageCodeLanguageCode
ArabicarKoreanko
Chinese (Mandarin)zhMalayms
DanishdaDutchnl
EnglishenNorwegianno
FinnishfiPolishpl
FrenchfrPortuguesept
GermandeRussianru
HebrewheSpanishes
HindihiSwahilisw
ItalianitSwedishsv
JapanesejaTurkishtr

Greek (el) is listed in the model card but has no voice in the current deployment – generation will fail for that language code.

Polish is worth noting specifically. Chatterbox is one of the few open-source TTS models with native Polish training data, making it a practical option if ElevenLabs pricing doesn’t fit your project.

API Call

Chatterbox runs on deAPI’s v2 audio endpoint. Here’s a complete request-and-poll flow:

Python:

import requests
import time

API_KEY = "your-api-key"
BASE = "<https://api.deapi.ai>"

# 1. Submit generation request
response = requests.post(
    f"{BASE}/api/v2/audio/speech",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Accept": "application/json"
    },
    data={
        "text": "The results are IN. We didn't just hit the target — we CRUSHED it!",
        "model": "Chatterbox",
        "mode": "custom_voice",
        "voice": "default",
        "lang": "en",
        "speed": 1,
        "format": "mp3",
        "sample_rate": 24000
    }
)

request_id = response.json()["data"]["request_id"]

# 2. Poll for result
while True:
    poll = requests.get(
        f"{BASE}/api/v1/client/request-status/{request_id}",
        headers={"Authorization": f"Bearer {API_KEY}"}
    ).json()

    status = poll["data"]["status"]
    if status == "done":
        audio_url = poll["data"]["result_url"]
        break
    elif status == "error":
        raise Exception("Generation failed")

    time.sleep(2)

# 3. Download audio
audio = requests.get(audio_url)
with open("output.mp3", "wb") as f:
    f.write(audio.content)

curl:

curl -X POST <https://api.deapi.ai/api/v2/audio/speech> \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -F "text=The results are IN. We didn't just hit the target — we CRUSHED it!" \
  -F "model=Chatterbox" \
  -F "mode=custom_voice" \
  -F "voice=default" \
  -F "lang=en" \
  -F "speed=1" \
  -F "format=mp3" \
  -F "sample_rate=24000"

A few things to note about the parameters:

  • mode must be custom_voice. Voice clone and voice design are not supported on Chatterbox.
  • voice is always default – one preset per language, no alternatives.
  • speed is fixed at 1. Changing it has no effect. For playback speed adjustments, post-process with ffmpeg’s atempo filter (preserves pitch).

Three Example Prompts

1. Commercial Voiceover – CAPS Emphasis

Lang: en | Voice: default

This Friday, everything changes. The new NovaPhone 12 — faster, lighter,
BRIGHTER than anything you've seen. Pre-order now and save 200 dollars.
This is NOT a drill.

Why it works: BRIGHTER and NOT get extra stress from the model. The em-dash introduces the feature reveal with a marked pause. Short sentences after a longer one break the pattern before the ear gets comfortable.

2. Character Dialogue – Emotion Through Punctuation

Two separate generations to simulate a conversation:

Character A (shocked):

You... you did WHAT?! Tell me you're joking. Please, tell me this is a joke.

Character B (calm reply):

I'm not joking. I signed the papers this morning. It's done.

Why it works: ... adds hesitation before the outburst. WHAT?! combines CAPS with question-exclamation for maximum disbelief. Character B contrasts with flat, period-terminated statements – same default voice, completely different energy. Since Chatterbox has one voice per language, you create character contrast through phrasing, not voice selection.

3. Podcast Intro – High Energy

Lang: en | Voice: default

Hey, hey, hey — welcome back to Deep End, the podcast where we ask the
questions nobody else dares to. I'm your host, and today? Today we go DEEP.
Strap in.

Why it works: Repeating “hey, hey, hey” builds rhythmic momentum. The ? after “today” followed by the emphatic Today we go DEEP. creates call-and-response energy. Strap in. closes with a two-word punch that works better than a full sentence would.

Common Mistakes

Text over ~1,500 characters. Chatterbox is autoregressive and can hallucinate or repeat words past that length. Break long content into 200-500 character chunks and generate each one separately.

No punctuation. hello how are you today my name is peter produces flat, robotic output. Chatterbox needs periods and commas to know where to breathe.

Mixing languages in one call. The model picks one phoneme set per generation. Anything in the other language gets mangled.

Emoji in text. Strip them before sending. The model tries to spell them out or drops them unpredictably.

Full-CAPS sentences. I CAN'T BELIEVE THIS IS HAPPENING RIGHT NOW fatigues prosody across the whole sentence. Use CAPS on 1-3 words that actually carry the emphasis.

Watermarking

Every Chatterbox generation includes Resemble AI’s PerTh watermark – an inaudible neural watermark embedded at inference time. It survives common audio processing (compression, format conversion) and doesn’t affect perceived quality. The watermark enables AI audio detection and provenance tracking.


Generate your first clip in 22 languages. $5 free credits, no card required.

No subscription No credit card required

Start building with AI in under a minute

Access all models from this article through a single REST API. Start with $5 free credits — no subscription, no credit card.

Migration assistance available talk to an engineer