Skip to content

capability

verified July 2026

Delivery is a request parameter.

Most engines give you a voice and a volume knob. This one exposes the prosody itself: intensity, melodic range, pacing, speed and gain, each a continuous field on the ordinary request. The figures on this page are what those fields actually did when we measured them.

01

The dial that decides how a line lands

temperature sets prosodic variation — pitch range and melody — from 0.1 to 1.2. It is the control a listener actually perceives as the difference between a line recited and a line performed, and unlike a preset it is continuous.

Measured: one voice, one sentence, three seeds at each setting, rendered on the production API on 2026-07-21. Pitch range read from an autocorrelation pitch track as the p5–p95 spread in semitones. At 0.3 the read holds a 10.08-semitone range; at 0.9 it opens to 17.99 — a 7.91-semitone difference in melodic range from one field, on the same voice saying the same words. The curve is not monotonic: it peaks near 0.9 and comes back to 13.30 at the 1.2 ceiling, which is the kind of thing you only learn by measuring rather than by reading a range in a doc.

measured 2026-07-21 · gandr-mia · 3 seeds per setting
temperature   pitch range (p5-p95, semitones)
0.1                  10.65
0.3                  10.08   <- flattest
0.5                  10.60
0.7                  14.73
0.9                  17.99   <- widest
1.2                  13.30

# same voice, same sentence, expressiveness 0.9, cfg_weight 0.3

02

The rest of the surface

The dials interact, and the interaction is the part worth knowing. Intensity alone, driven to its maximum against tight guidance, measurably FLATTENS a read: we measured 10.93 semitones of range at maximum intensity against 13.69 on a lower intensity paired with loosened guidance, three seeds each. Raise expressiveness and lower cfg_weight together, or the bigger delivery only gets hurried.

  • expressiveness — emotional intensity, 0.25 flat to 2.0 animated. Default 0.5.
  • cfg_weight — guidance strength, which also sets pacing: 0.2 slow and spacious to 1.0 tight and brisk.
  • speed — 0.6 to 1.5, applied after synthesis, so wording and voice are untouched.
  • volume — 0.5 to 2.0, applied after mastering with a soft ceiling, so it never hard-clips.
  • seed — an integer that makes a render reproducible: the same seed, text, voice and parameters return the same audio, which is what lets you regression-test a prompt change without the voice moving underneath you.

03

The emotion field, and what it actually is

A body field names an emotional read — calm, apologetic, excited, curious and others — and sets tuned dial values under the hood. Explicit numeric fields always override it.

It is a shortcut over the dials, not a separate capability, and we measured how many distinct reads sit behind the names: sixteen accepted names resolve to eight distinct presets, with several names sharing one (bored, calm and tired return byte-identical audio at a fixed seed, as do angry and surprised). Their measured pitch range spans 9.94 to 13.72 semitones — real separation, but a narrower span than the dials reach on their own. We publish that because it is what the measurement says: reach for the presets when you want a sensible read in one field, and for the dials when you want a specific one.

the eight distinct presets behind sixteen names
neutral      = sending no emotion field at all
calm         = bored = tired
angry        = surprised
confident    = curious = happy
frustrated   = scared
apologetic   = content
anxious      · excited · sad     (distinct)

# fixed seed, one voice, one sentence; grouped by identical
# output. 49 takes, measurements.csv published alongside.

04

And the detail you place by hand

These ride inline on every surface — bytes, SSE and WebSocket alike — and none of them costs a round trip or a preprocessing step. They are read at synthesis time, and first audio holds its published 107 ms p50 with every field on this page set.

  • <spell>TKT4829XB</spell> — reads character by character, with letter and digit groups paced naturally. For confirmation codes, order IDs and serials.
  • <break time="800ms"/> — a real pause, rendered as a natural beat, exactly where the read needs air. The tag is never spoken.
  • pronunciation_dict — per-request sounds-like replacements for proper nouns and domain terms, so a brand name is right on the first call, not after a support ticket.

05

Notes — an engineer's checklist

01How much can the delivery actually change?

Measured on one voice and one sentence, three seeds per setting: the prosody dial moves pitch range from 10.08 semitones at its flattest to 17.99 at its widest, a 7.91-semitone spread. That is the melodic difference between a recited line and a performed one, from a single request field. The full table and the audio are published on this page.

02Is expression a separate model or a slower path?

Neither. Every control here is a field on the ordinary synthesis request, conditioning the same voice on the same endpoint. There is no expressive tier and no second model to route to — first audio holds its published 107 ms p50 with the fields set.

03How many distinct emotional presets are there?

Sixteen names are accepted and they resolve to eight distinct presets — several names share one, which we verified by rendering all sixteen at a fixed seed and grouping byte-identical output. The presets are a convenience over the numeric dials; the dials themselves are continuous and reach a wider range.

04Can I reproduce an exact take?

Yes. Send a seed: the same seed, text, voice and parameters return the same audio, per serving region. Omit it for a fresh natural take on every call. That is what lets you diff a prompt change without the voice moving underneath you.

05Do these controls work on a cloned voice?

Yes, on ready-made and cloned voices alike, and across all 23 languages. The reference clip supplies the identity; these fields direct the performance of it.

06What sample rate does the audio come back at?

24 kHz mono PCM by default. Set output_sample_rate if your stack wants something else — 8 kHz for a telephony trunk, for instance — so no transcode sits in the hot path. The default is the full-rate audio, not the telephony rate.

See also — related sheets

A key, one seat, your own script — nothing on it counted while you build.

Request access — run your own script