Summary
Chatterbox Turbo has nineteen paralinguistic tokens. Voicebox exposes nine of them — every one a sound effect. The ten missing ones are the delivery tokens, and they are the half that controls how a line is performed rather than what noise the speaker makes.
They work today. Nothing surfaces them, so nobody uses them.
The full set
From added_tokens.json in ResembleAI/chatterbox-turbo:
Exposed (9), sound:
[laugh] [chuckle] [gasp] [cough] [sigh] [groan] [sniff] [shush] [clear throat]
Not exposed (10), delivery:
[angry] [crying] [dramatic] [fear] [happy] [narration] [sarcastic] [surprised] [whispering] [advertisement]
Where
app/src/components/Generation/ParalinguisticInput.tsx:
const TAG_REGEX = /\[(laugh|chuckle|gasp|cough|sigh|groan|sniff|shush|clear throat)\]/gi;
with a matching nine-entry badge array. The backend log line on model load (Turbo model supports paralinguistic tags: [...]) reports the same nine, and the docs name only [laugh], [sigh], [gasp] as examples without listing the set.
Worth noting the same nine-item list appears in the reference gradio_tts_turbo_app.py demo (EVENT_TAGS) and in at least one third-party server, which suggests it has been copied from the demo rather than read from the tokenizer. The demo array is a set of UI buttons, not the model's vocabulary.
They work
Measured on a cloned profile, Chatterbox Turbo, n=2 per tag, against an untagged control of the same sentence:
| tag |
mean F0 |
speaking rate |
dynamic range |
| control |
220 Hz |
20.2 c/s |
11.8 dB |
[surprised] |
+36 Hz |
-3.1 |
-1.3 |
[whispering] |
-27 Hz |
-2.1 |
+0.7 |
[dramatic] |
+9 |
-4.4 |
+1.5 |
[sarcastic] |
+12 |
-4.5 |
-0.2 |
[angry] |
+16 |
-0.7 |
-2.2 |
[happy] |
+15 |
-3.2 |
+0.1 |
Each moves in the direction its name implies — whispering drops pitch, surprised raises it, dramatic and sarcastic slow delivery by about 20%.
Why it matters beyond discoverability
Spelling is exact and unforgiving: [laugh] is a reserved token, [laughs] is not and is read aloud as the word. A user who cannot see the list guesses, and a near miss is pronounced rather than rejected — which is also the failure mode your own docs describe in voice-personalities.mdx ("If you see [laughs] in TTS output...").
Suggested fix
Extend TAG_REGEX and the badge array to the full nineteen, ideally grouped as sound vs delivery since they are used differently. Reading them from the model's added_tokens.json at load time would keep the list correct across future model revisions instead of pinning today's set.
Summary
Chatterbox Turbo has nineteen paralinguistic tokens. Voicebox exposes nine of them — every one a sound effect. The ten missing ones are the delivery tokens, and they are the half that controls how a line is performed rather than what noise the speaker makes.
They work today. Nothing surfaces them, so nobody uses them.
The full set
From
added_tokens.jsoninResembleAI/chatterbox-turbo:Exposed (9), sound:
[laugh][chuckle][gasp][cough][sigh][groan][sniff][shush][clear throat]Not exposed (10), delivery:
[angry][crying][dramatic][fear][happy][narration][sarcastic][surprised][whispering][advertisement]Where
app/src/components/Generation/ParalinguisticInput.tsx:with a matching nine-entry badge array. The backend log line on model load (
Turbo model supports paralinguistic tags: [...]) reports the same nine, and the docs name only[laugh],[sigh],[gasp]as examples without listing the set.Worth noting the same nine-item list appears in the reference
gradio_tts_turbo_app.pydemo (EVENT_TAGS) and in at least one third-party server, which suggests it has been copied from the demo rather than read from the tokenizer. The demo array is a set of UI buttons, not the model's vocabulary.They work
Measured on a cloned profile, Chatterbox Turbo, n=2 per tag, against an untagged control of the same sentence:
[surprised][whispering][dramatic][sarcastic][angry][happy]Each moves in the direction its name implies — whispering drops pitch, surprised raises it, dramatic and sarcastic slow delivery by about 20%.
Why it matters beyond discoverability
Spelling is exact and unforgiving:
[laugh]is a reserved token,[laughs]is not and is read aloud as the word. A user who cannot see the list guesses, and a near miss is pronounced rather than rejected — which is also the failure mode your own docs describe invoice-personalities.mdx("If you see[laughs]in TTS output...").Suggested fix
Extend
TAG_REGEXand the badge array to the full nineteen, ideally grouped as sound vs delivery since they are used differently. Reading them from the model'sadded_tokens.jsonat load time would keep the list correct across future model revisions instead of pinning today's set.