Skip to content

v0.5.0 — direct the performance, not just the words

Choose a tag to compare

@fire17 fire17 released this 02 Aug 15:57
· 130 commits to main since this release

tts can now be told how to say something, not just what. Still on your subscription, still no API key, still zero dependencies.

tts --as "excited, laughing" I cannot believe you actually pulled that off
tts --as "whispering, conspiratorial" --voice cedar keep this between us
tts --as "furious, shouting" the server has been down for three days
tts --as "a grizzled pirate captain, gravelly and theatrical" --voice ash land ho
tts --as-file director-notes.md the long monologue

--style, --emotion and --direction are synonyms. Free text — a character works as readily as an emotion, and so does an arc ("start deadpan, then crack up halfway"). Any language.

Why this was missing

v0.4.0 told the model "Read the following text aloud, verbatim, and say nothing else — no greeting, no comment." gpt-realtime is a conversational speech model, so that instruction was not neutral: it suppressed the expressiveness the model already had. The steering channel was open the whole time; we were holding it shut.

It measurably performs

One identical line, direction the only variable:

--as seconds loudness (RMS)
(none — baseline) 3.70 0.0997
excited, laughing out loud 4.65 0.1364
whispering, conspiratorial 3.75 0.0572
furious, shouting 3.85 0.1354
very slowly, heartbroken, tearful 9.15 0.0509

A whisper is 2.7× quieter than a laugh; a heartbroken read runs 2.5× longer than the baseline. Asked to laugh, it laughs — 3/3 runs put a real [laughs] into the model's own transcript, which is how this was verified objectively: duration, RMS amplitude, and the transcript's own record of non-speech vocalisations.

Whisper repeated 3/3 in a tight band (RMS 0.033–0.042, against 0.096–0.106 for the laughing takes).

Honest limit

Whether inline bracketed cues ([laughs] written mid-sentence) are performed rather than read aloud is consistent with the duration and transcript, but was not verified by ear. DARWIN.md round 20 records the whole method, including that gap.

Without --as, the strict verbatim path is unchanged — the direction is opt-in, and four new tests hold it from leaking into the spoken words.

122 tests · 7/7 budgets · CI green on ubuntu, macos and windows.