Spex-TTS the engine.
1
engine behind every figure on this site
One model serves every request on this site, the console, the specimens, the benchmarks. This sheet is the engine: where it came from, and how a request steers it.

The signature
Spex, from speck, a single grain of sand. The material this site is built from, at its smallest unit: one grain, one engine, every voice it speaks.
The figures, the published figures, measured on the production API
fig. 01
word error rate, %
1.98
against a 2.17% human reference on the same scorer; first audio byte in 146 ms over the open internet, 116 ms p50 first audio, server side warm.
fig. 02
languages, one cloned reference
23
One reference, one identity, the inner tick is the eight with published, dated specimens.
Origin
Where it comes from
Spex-TTS grew up inside a production live-translation product speaking to thousands of people at once, the API exposes what that product forced into existence, nothing more.
Controls
Expression, per request
Numeric controls and inline transcript tags steer every read, on every surface, with no added latency.
request
one request, the delivery dialed in, full reference at /docs
{ "transcript": "Chapter Three: The <spell>SS</spell> Halcyon.‣ a spell-out tag reads the initials letter by letter <break time=\"600ms\"/> She sailed at dawn.",‣ a timed break, exactly where the chapter open needs air "voice": {"mode": "id", "id": "gandr-dane"}, "temperature": 0.9,‣ prosodic range, the melody itself "cfg_weight": 0.4,‣ unhurried pacing for the chapter open "seed": 42‣ the same take, every render}The request, the production curl, one complete request
The complete request, as it runs: the three expression fields ride inline in one POST body, and the same shape streams over SSE and WebSocket with only the path changed.
listing 01
curl -X POST https://tts.gandr.ai/v1/tts/bytes \
-H "x-api-key: gnd_yourkey" \
-H "content-type: application/json" \
-d '{
"transcript": "Your appointment moved to Thursday at ten. <break time=\"600ms\"/> The confirmation code is <spell>KH4T29</spell>. <break time=\"800ms\"/> Take your time, I’ll hold the line while you write it down.",
"temperature": 0.9,
"cfg_weight": 0.3,
"voice": {"mode": "id", "id": "gandr-jenny"},
"language": "en",
"output_format": {"sample_rate": 24000}
}' --output answer.wav
A key, one stream, your own script, nothing on it counted while you build.
Get a key, run your own script