Express Voice

Text to speech in seven English voices, male and female: two SpeechT5 fine-tunes

Released Serving seven voices since 2026-09-14; on one GPU service since 2026-09-16 Default Voice v1.1.0

Version 1.1.0 · Updated 2026-09-16 · Express · Model 02 / 03

← Overview page

On this page

Overview #

Express Voice reads a short line of English text aloud in a clear, consistent voice, and since 2026-09-14 the host chooses that voice from seven: the original lj, three female and three male. You give it the text and, optionally, a voice id; it gives back an audio file of the line spoken. Use it for confirmations, prompts and short replies: it is the Express voice model, and it is in service now.

Express Voice is a text-to-speech model: it reads up to 600 characters of English text and returns the spoken text as 16 kHz mono WAV in the requested voice. Every voice is a fine-tune of SpeechT5, an open encoder–decoder speech model released under the MIT licence, with the waveform from the matching HiFi-GAN vocoder, also MIT. The voice lj — the default when voice is omitted, and the only voice until 2026-09-14 — is a 12,000-step fine-tune on LJSpeech, a public-domain corpus of about 24 hours of read English from one speaker, serving behind /v1/speak since 2026-09-13 and unchanged by this release. The six new voices, female-1, female-2, female-3, male-1, male-2 and male-3, come from a second fine-tune of the same base on six narrators of the Hi-Fi Multi-Speaker English TTS corpus, audiobook narration released under CC BY 4.0, and serve from a second CPU service since 2026-09-14.

It is the Default and only member of the Voice family: one model, one catalogue of seven entries, one route. Express Cue, the series' Sound model, renders non-verbal cues from descriptions and does not speak.

The voices are fixed. Express Voice cannot clone a voice from a sample, cannot vary emotion or style on request, and does not accept reference audio: a request carries text and, optionally, one of the seven voice ids from the catalogue that GET /v1/voices publishes.

Intended use #

  • Reading a short reply aloud in a host that speaks to its user: a confirmation, a status line, a one- or two-sentence answer.
  • Spoken prompts and notifications in one stable, recognisable voice across a product, chosen once from the male and female voices in the catalogue.
  • Prototyping a voice interface before a production voice is licensed or recorded.

Out of scope #

  • Long passages: the request limit is 600 characters. A host splits longer text at sentence boundaries and calls once per piece.
  • Voice cloning, impersonation, or matching a particular person's voice.
  • Languages other than English, singing, or expressive control — emotion, emphasis, pace — beyond what punctuation gives.
  • Streaming: the route returns one whole WAV per request.

Choose Express Voice when #

  • A consistent voice picked from a small catalogue is enough and the host wants the line back in a couple of seconds.
  • The text is short English prose to be read plainly.
  • Otherwise choose Express Cue when the sound needed is a cue rather than speech.

Architecture #

Parameters144,431,684 — the SpeechT5 TTS base count; each full fine-tune keeps its size
Base modelmicrosoft/speecht5_tts — SpeechT5 in its text-to-speech configuration, MIT licence
Vocodermicrosoft/speecht5_hifigan — HiFi-GAN, MIT licence; log-mel spectrogram to 16 kHz waveform
Speaker embeddingOne x-vector per voice from speechbrain/spkrec-xvect-voxceleb (Apache-2.0), computed once from each training speaker and stored with the weights
Training corporaLJSpeech — one English speaker, about 24 hours of read speech, public domain; Hi-Fi Multi-Speaker English TTS — audiobook narration, six narrators used, CC BY 4.0, 44.1 kHz resampled to 16 kHz
Recipelj: 12,000 steps at lr 5e-6, effective batch 32, bf16, seed 7. Six voices: lr 2e-5, batch 16 × 2, early-stopped at 15,000 of 20,000 steps, speaker-balanced sampler, about 18,000 clips
WeightsTwo exports: model.safetensors of 577,789,320 bytes with the x-vector for lj, and the six-voice export of run duo-v3x3-lr2e-5-20260914-170056 with its six x-vectors
VoicesSeven: lj, female-1, female-2, female-3, male-1, male-2, male-3
Output16 kHz mono WAV
Text limit600 characters per request, spoken as phrases of at most 12 words
RuntimeOne GPU service (NVIDIA L4, kept warm) holding both fine-tunes, routed by voice id

Express Voice is a fine-tune, not a model trained from scratch. The base is SpeechT5 in the text-to-speech configuration: a shared transformer encoder–decoder with a text pre-net on the input side and a speech post-net on the output side. The text pre-net turns characters into embeddings — SpeechT5 tokenises at the character level, so there is no word vocabulary to fall outside of — and the encoder reads them. The decoder generates log-mel spectrogram frames one step at a time, each step conditioned on the frames so far, on the encoder output, and on a speaker embedding added at the decoder pre-net. A stop head decides when the utterance ends.

The speaker embedding is an x-vector: a fixed-length vector that summarises a speaker's voice, produced by a separate speaker-recognition network, speechbrain/spkrec-xvect-voxceleb, licensed Apache-2.0. Express Voice computes one x-vector per training speaker from that speaker's recordings before training, uses it for every training utterance of that speaker and stores it with the weights; at inference the stored vector for the requested voice conditions the request, which is what makes each voice consistent from call to call. No x-vector is computed at request time.

There are two sets of weights behind the seven voices. The LJSpeech fine-tune holds the one x-vector for lj. The Hi-Fi fine-tune, trained on six narrators with a speaker-balanced sampler, holds six x-vectors, one per narrator; the voice id selects which vector is added at the decoder pre-net, and the ids are ordered by clip count within each gender. Gender was assigned by measured median pitch (librosa pyin over each narrator's clips), not by corpus metadata: the female voices sit at about 222 Hz (female-1), 237 Hz (female-2) and 169 Hz (female-3), the male voices at about 138 Hz (male-1), 116 Hz (male-2) and 152 Hz (male-3).

The spectrogram becomes audio through the HiFi-GAN vocoder published with SpeechT5, microsoft/speecht5_hifigan, which maps log-mel frames to a 16 kHz waveform. The vocoder is used as published and is not fine-tuned. The base has 144,431,684 parameters — about 144M, as its model card says — and each full fine-tune keeps that count; the figure is the one recorded in the checkpoint metadata.

What is deliberately absent: no reference-audio input and no speaker encoder in the serving path, so no cloning; no prosody, emotion or speed controls; no language beyond English; no streaming decoder.

Inputs & outputs #

Input #

FieldTypeRequiredDescriptionLimit
textstringYesThe English text to speak. Whitespace is collapsed and the ends are trimmed before the length is checked; the service then splits the text into phrases of at most 12 words before synthesis.600 characters
voicestringNoA voice id from the catalogue that GET /v1/voices publishes: one of lj (the default when the field is absent), female-1, female-2, female-3, male-1, male-2 or male-3. Any other id answers 400 unknown_voice with the list of ids.one of seven catalogue ids; default lj

The text is plain English prose. The service collapses runs of whitespace to one space and trims the ends before the length is checked; text that is empty after trimming is rejected, and text longer than 600 characters is rejected rather than cut. Before synthesis the service splits the text into phrases of at most 12 words at punctuation and, failing that, at word boundaries, synthesises each phrase and joins the audio; the split is a safety net, not a limit a host has to work around. A request:

json
{
  "text": "Your table is ready. Please make your way to the front desk.",
  "voice": "male-3"
}

Limits:

  • text is at most 600 characters after whitespace is collapsed. The limit is the reference client's guard; the service applies the same one.
  • Punctuation shapes the phrasing: sentence ends produce pauses and a falling contour, commas short breaks. There is no other control over delivery.
  • Numbers, abbreviations and symbols are read as the characters the model saw in training read them; a host that needs “2026” read as a year spells it out.
  • voice, when present, must be one of the seven catalogue ids — lj, female-1, female-2, female-3, male-1, male-2, male-3; absent, lj speaks. Any other value answers 400 unknown_voice, and the error body lists the ids.

Output #

FieldTypeDescription
enginestringThe fixed string express-voice.
voicestringThe id of the voice that spoke, whether requested or the default lj.
duration_secondsnumberLength of the spoken audio.
wav_base64stringThe speech as a base64-encoded RIFF/WAVE file, 16 kHz, one channel.

The response carries the audio, the voice that spoke and the duration. An illustrative response — the shape is fixed; voice echoes the id that spoke, lj when none was requested; the duration is that of the audio returned:

json
{
  "ok": true,
  "engine": "express-voice",
  "voice": "male-3",
  "duration_seconds": 3.5,
  "wav_base64": "UklGR…"
}

wav_base64 decodes to a RIFF/WAVE file at 16 kHz with one channel, whichever voice spoke. The reference client reads the sample rate and length back from the RIFF header and uses duration_seconds when the envelope carries it. There are no labels and no confidences: the output is audio.

Training #

Express Voice is two full fine-tunes of SpeechT5 TTS. No recordings of users are used in either. Before each training run, one x-vector is computed per speaker with speechbrain/spkrec-xvect-voxceleb and averaged over that speaker's utterances; every training example is conditioned on its speaker's vector, and the same vectors are stored with the weights for inference. The recipe follows the base model's own: text is normalised and tokenised at the character level, the target is the log-mel spectrogram of the recording, and the loss is the base's spectrogram reconstruction loss plus the stop-token loss. The vocoder is not trained.

The voice **lj is trained on LJSpeech, a public-domain corpus of about 24 hours of English read by one speaker, for 12,000 steps as the learning-rate 5e-6 run of a three-way sweep (5e-6, 1e-5, 2e-5) on Vertex AI** started on 2026-09-13: 500 warm-up steps, batch 16 with two-step gradient accumulation (effective batch 32), bf16 precision, seed 7, over 12,969 training clips with 131 held out, evaluated every 1,000 steps, in 5,574 s of wall time; its held-out loss at step 12,000 is 0.3689. These weights are unchanged by the 1.1.0 release.

The six voices are trained on the Hi-Fi Multi-Speaker English TTS corpus — audiobook narration released under CC BY 4.0, recorded at 44.1 kHz and resampled to 16 kHz for the base. Three male and three female narrators were selected, with gender assigned by measured median pitch rather than by the corpus metadata, and at most 3,000 clips per narrator of 3 to 14 seconds and 6 to 40 words, about 18,000 clips in all. The run is scheduled for 20,000 steps at learning rate 2e-5, batch 16 with two-step gradient accumulation, under a speaker-balanced sampler so that no narrator dominates a batch, and early-stopped at 15,000 steps, on one NVIDIA A100 40 GB in about 2 h 10 min plus 30 min of data build; its held-out loss is 0.401. It is the best of an eight-run sweep on 2026-09-14 over learning rates 5e-6, 1e-5 and 2e-5, four against six voices, 3,000 against 6,000 clips per narrator, and 20,000 against 40,000 steps, at a total cost of about 110 USD; the selection was made on held-out loss and on the GPU evaluation below, run for every export, and the deployed export is the final confirmation run of the sweep.

What it is not trained on: any voice other than the LJSpeech speaker and the six Hi-Fi narrators, any language other than English, conversational or expressive speech, or any recording of a user.

Evaluation #

MetricValueSource
lj — held-out spectrogram eval loss (131 LJSpeech clips, step 12,000)0.3689eval_loss in the checkpoint's meta.json and the step-12,000 evaluation in its trainer_state.json (lr 5e-6 run of the sweep)
lj — word error rate, held-out (100 LJSpeech sentences, open recogniser)1.2 %wer_heldout.corpus in the 2026-09-13 GPU evaluation results (Whisper small.en transcripts vs the normalised script)
lj — word error rate, listening set (5 shipped clips)4.2 %wer_listening.corpus in the same evaluation
lj — MOS proxy (UTMOS, mean of 105 clips)3.68 (min 2.89)utmos.mean / utmos.min in the same evaluation
lj — real-time factor on an NVIDIA L40.31 (2.2 s per sentence)rtf.rtf_total / rtf.seconds_per_utt in the same evaluation
Six voices — held-out spectrogram eval loss (step 15,000, early-stopped)0.401results.json of run duo-v3x3-lr2e-5-20260914-170056
Six voices — word error rate, held-out (5 LJSpeech held-out sentences × 6 voices, 30 clips)1.6 %results.json of run duo-v3x3-lr2e-5-20260914-170056 (Whisper small.en transcripts vs the normalised script)
Six voices — word error rate per voice, held-outfemale-1 2.1 %, female-2 1.1 %, female-3 1.1 %, male-1 1.1 %, male-2 1.1 %, male-3 1.1 %results.json of run duo-v3x3-lr2e-5-20260914-170056
Six voices — word error rate, listening set3.7 %results.json of run duo-v3x3-lr2e-5-20260914-170056
Six voices — MOS proxy (UTMOS, mean)3.76 (min 3.26)results.json of run duo-v3x3-lr2e-5-20260914-170056
Six voices — speaker similarity (x-vector cosine, own reference vs other voices)0.96–0.98 own, 0.88–0.90 othersresults.json of run duo-v3x3-lr2e-5-20260914-170056 (speechbrain x-vectors scored locally)
Six voices — real-time factor on an NVIDIA L40.32results.json of run duo-v3x3-lr2e-5-20260914-170056

Both exports are evaluated by the same method, on a GPU, against the exact weights that serve. Intelligibility is the word error rate of an open speech recogniser (Whisper small.en) transcribing rendered speech against the input text, after the same text normalisation on both sides. The MOS proxy is UTMOS, an automatic naturalness estimator on a 1 to 5 scale. The real-time factor is synthesis time over audio time on an NVIDIA L4. For the six voices, speaker similarity is the cosine between the x-vector of a rendered clip and each voice's stored reference, using the same speechbrain speaker network, scored locally.

**lj** (evaluated 2026-09-13): held-out spectrogram loss 0.3689 at step 12,000 on 131 LJSpeech clips the run never trained on, read from eval_loss in the checkpoint’s meta.json; word error rate 1.2 % over 100 sentences from the held-out LJSpeech split and 4.2 % over the five shipped listening clips (one substitution in 24 words); UTMOS mean 3.68 over 105 clips, lowest clip 2.89; 0.31× real time. A fixed listening set of five sentences (3.1 to 8.0 s each, 28.3 s in all) rendered in lj immediately after training is stored with the weights as a reference for voice consistency; it is a set of recordings, not a score.

The six voices (run duo-v3x3-lr2e-5-20260914-170056, evaluated 2026-09-14): held-out loss 0.401; word error rate 1.6 % over 30 clips — five LJSpeech held-out sentences rendered in each of the six voices — and 3.7 % over the listening set; UTMOS mean 3.76, lowest clip 3.26, slightly above lj; 0.32× real time on the L4. Speaker similarity is 0.96 to 0.98 between each voice and its own reference x-vector and 0.88 to 0.90 to the other voices, so the six are distinct and each is stable across sentences.

Per voice, the held-out word error rates are female-1 2.1 %, female-2 1.1 %, female-3 1.1 %, male-1 1.1 %, male-2 1.1 % and male-3 1.1 %: all six voices sit within 1.1 to 2.1 %, on a par with lj, and no voice needs to be avoided for intelligibility. In the lower-learning-rate runs of the sweep the two deepest male voices, male-1 and male-2, were the hardest to fit, at 6.8 to 7.8 % word error rate, mostly on contractions and punctuation the recogniser counted against them; the higher learning rate of the selected run fixed it.

Long sentences are the case that sank the earlier multi-voice attempt: a sibling fine-tuned on all 109 speakers of the CSTR VCTK Corpus (two 40,000-step runs, 2026-09-13) sounded natural (UTMOS 3.71) but lost its place on sentences longer than about ten words, for a held-out word error rate of 38.7 %, and was withdrawn without being served. The new voices do not share the fault: on a hard-sentence set of 14- to 20-word sentences, synthesised whole and unchunked, they read the sentences intact at 3 to 4 % word error rate. The phrase split in the service is a safety net on top of that, not a workaround for it.

Known gaps #

The spectrogram loss is a training objective, not a listening judgement; a lower loss does not by itself mean a more natural or more intelligible voice, and no human listening study has been run for any voice. The six-voice held-out word error rate rests on 30 clips, five sentences per voice, so a single voice's figure moves by about a percentage point per mis-heard word, and the per-voice figures are indicative rather than precise. UTMOS is a proxy, not a listener panel, and the word error rate says whether words survive, not whether prosody is right. Speaker similarity is scored with the same network that produced the reference x-vectors, which favours it. Every figure that is published names its split.

API #

EndpointAuthBody limitDescription
POST /v1/speakBearer preview key (fln_) or session token (fls_)text ≤ 600 charactersSpeak one text in the voice named by voice (default lj) and return the WAV.
GET /v1/voicesBearer preview key (fln_) or session token (fls_)List the voice catalogue: the seven ids lj, female-1 to female-3 and male-1 to male-3.

Route /v1/speak · quota bucket audio.

Express Voice is exposed through the Falcon API at /v1/speak, with the voice catalogue at /v1/voices. Requests to /v1/speak count against the audio preview quota bucket; /v1/voices is not metered. The route has served lj since 2026-09-13 and the six Hi-Fi voices since 2026-09-14; /v1/voices lists all seven. The API reads the voice id and passes the request to the voice service, which holds all seven voices; /v1/voices publishes the catalogue. The base URL, envelope, authentication, rate limits and retry guidance are documented in API conventions.

http
POST /v1/speak HTTP/1.1
Authorization: Bearer fln_…
Content-Type: application/json
json
{
  "text": "Your table is ready. Please make your way to the front desk.",
  "voice": "male-3"
}
json
{
  "ok": true,
  "engine": "express-voice",
  "voice": "male-3",
  "duration_seconds": 3.5,
  "wav_base64": "UklGR…"
}

GET /v1/voices returns the catalogue: ok, engine, default (the id spoken when a request omits voice) and voices. Each entry carries exactly id, label, gender (F or M, as assigned by measured pitch), accent and region — the recording source, LJSpeech for lj and LibriVox audiobook for the six Hi-Fi voices. The payload carries no licence text: the Hi-Fi Multi-Speaker English TTS corpus is CC BY 4.0, and its attribution is carried on this page and in the Express series notes, not in the API. The reference client accepts either the object below or a bare array of entries and drops any entry without an id:

json
{
  "ok": true,
  "engine": "express-voice",
  "default": "lj",
  "voices": [
    {"id": "lj", "label": "en-US female 1", "gender": "F", "accent": "American", "region": "LJSpeech"},
    {"id": "female-1", "label": "Female voice 1 (audiobook, en-US)", "gender": "F", "accent": "American", "region": "LibriVox audiobook"},
    {"id": "female-2", "label": "Female voice 2 (audiobook, en-US)", "gender": "F", "accent": "American", "region": "LibriVox audiobook"},
    {"id": "female-3", "label": "Female voice 3 (audiobook, en-US)", "gender": "F", "accent": "American", "region": "LibriVox audiobook"},
    {"id": "male-1", "label": "Male voice 1 (audiobook, en-US)", "gender": "M", "accent": "American", "region": "LibriVox audiobook"},
    {"id": "male-2", "label": "Male voice 2 (audiobook, en-US)", "gender": "M", "accent": "American", "region": "LibriVox audiobook"},
    {"id": "male-3", "label": "Male voice 3 (audiobook, en-US)", "gender": "M", "accent": "American", "region": "LibriVox audiobook"}
  ]
}

Errors:

StatusCodeMeaning
400bad_jsonThe body is not valid JSON.
400text_requiredtext is missing or empty after trimming.
400text_too_longtext exceeds 600 characters.
400unknown_voicevoice is not an id in the catalogue; voices lists the seven ids.
401invalid_credentialsMissing, malformed or revoked bearer credential.
402payment_requiredThe credential's owner is not in good standing with the preview.
429quota_exceededThe audio bucket for the current UTC calendar month is exhausted; kind is audio.
500internalUnhandled server error; safe to retry once.
502speech_failedThe voice service failed after a valid request.
503speak_warmingThe voice service is loading (a replacement instance, not normal use: the service is kept warm); Retry-After: 30.
503speech_unavailableNo voice service is configured for the requested voice.

The unknown_voice, 502 and 503 codes follow the series pattern and are fixed with the route.

Runtime & deployment #

KindGPU service
ResidentOne GPU container holding both fine-tunes — the LJSpeech weights with the stored x-vector for lj and the Hi-Fi weights with six stored x-vectors — plus the HiFi-GAN vocoder, on one NVIDIA L4 with 16 GiB memory and 4 vCPU
ServingOne Express Voice GPU service behind the Falcon API routes /v1/speak and /v1/voices, selected by voice id
Cold startNone in normal use: one minimum instance keeps the service warm. 503 speak_warming with Retry-After: 30 while a replacement instance loads; the reference client retries once after 2.5 s
ConcurrencyOne utterance per request; spectrogram frames are generated autoregressively, phrase by phrase
Timeout45 s in the reference client, then one retry

Express Voice runs as one GPU service on Cloud Run with one NVIDIA L4 (4 vCPU / 16 GiB alongside the GPU), fronted by the Falcon API at /v1/speak. Since 2026-09-16 the container holds both fine-tunes — the LJSpeech weights with the x-vector for lj, and the Hi-Fi weights with the six x-vectors for the male and female voices — and the vocoder; the two CPU services that served them before are retired. The service runs with one minimum instance, so it is always warm and a request in normal use never waits for a cold start. The API reads the voice field, passes the request to the service, and publishes the catalogue on /v1/voices; nothing about the routes changed for callers. The hosted endpoint has served lj since 2026-09-13 and the six voices since 2026-09-14.

  • Service contract. The service exposes GET /health; POST /v1/speak taking {text, voice?} and returning the WAV — as audio/wav by default, or as the JSON envelope above when the request carries Accept: application/json; GET /v1/voices returning the seven-entry catalogue.
  • Loading. Both models load onto the GPU when an instance starts. The minimum instance means that happens at deploy time rather than on a request; while a replacement instance is loading the API answers 503 speak_warming with Retry-After: 30. The reference client waits 2.5 s and retries once, and gives up on a request after 45 s; a host that sees speak_warming on the second attempt should wait the Retry-After interval before trying again.
  • Cost. Spectrogram frames are generated one at a time, so the response time grows with the length of the text; the 600-character limit bounds it, and the phrase split keeps each decoder pass to at most 12 words. Measured through the Falcon API on the GPU service, a 14-word sentence renders in about 2.2–2.5 s (it took 11–30 s on the CPU services) and a short line such as “Your order is confirmed.” in about 0.7 s; the real-time factors in Evaluation, 0.31× for lj and 0.32× for the six voices, are the same L4.
  • Selection. The voice field selects the voice: absent, lj speaks; any of the seven catalogue ids selects that fine-tune and x-vector; any other id answers 400 unknown_voice with the list. The service reports itself as express-voice in engine.
  • What the host provides. The text, split at sentence boundaries when it is long, the voice id it has chosen for its product, and a player or file sink for the WAV. The host owns the decision to speak at all, and what is said.

Limits & safety #

Express Voice does not hear anything: it reads text, and it does not see who wrote it, who will hear it, or any audio. It does not see earlier requests, so two calls with the same text and voice produce the same speech and nothing in between carries over.

  • It does not clone voices: there is no reference-audio input, and the seven x-vectors it uses are stored with the weights. It cannot be made to sound like a particular person.
  • It does not speak languages other than English; other text is read as English letters and sounds wrong.
  • It does not take emotion, emphasis, speed or pitch instructions; punctuation is the only lever, and the pitch of a voice is a property of the voice, not a control.
  • It does not read more than 600 characters per request; longer text is rejected, not cut.
  • It does not guarantee pronunciation of names, acronyms or numbers; a host that needs a particular reading spells it out.
  • It does not know what it is saying: any text within the limit is spoken, so the host is responsible for the content it sends.
  • It is trained on read sentences, and long or unusual sentences remain the weaker case; the listening-set word error rates (4.2 % for lj, 3.7 % for the six voices) against the held-out figures (1.2 % and 1.6 %) are the measure of that so far, and the service's phrase split of 12 words is the safety net.

Out of scope. Express Voice is not for impersonation, for presenting synthetic speech as a real person's, or for any use where the listener would reasonably believe a human is speaking without being told. The six Hi-Fi voices are trained on the recordings of six audiobook narrators under CC BY 4.0: the corpus attribution is carried on this page and in the Express series notes, and the voices are not to be presented as those narrators' own endorsement or speech. It is not a screen reader, not a streaming voice and not a conversational agent.

Fixed weights per version; the model does not learn from requests.

Versions #

VersionDateStatusNote
1.1.0ReleasedSix male and female voices added: a second fine-tune of the same base on six Hi-Fi TTS narrators (lr 2e-5, 15,000 steps, held-out loss 0.401) on a second CPU service. The voice lj is unchanged.
1.0.0ReleasedThe lr 5e-6 run of the sweep: 12,000 steps, held-out eval loss 0.3689, serving the single voice lj.

Version numbers follow the series convention: a major bump changes the input or output contract — the request fields, the sample rate, the response shape or the identity of an existing voice; a minor bump is a retrain with the same contract, or, as with 1.1.0, new voices added to the catalogue without changing an existing one; a patch bump changes metadata or runtime only and never changes the audio.

Current weights: version 1.1.0, two exports. The voice lj is the 1.0.0 model.safetensors of 577,789,320 bytes with its stored x-vector, written on 2026-09-13 by the learning-rate 5e-6 run of the LJSpeech sweep (held-out eval loss 0.3689), unchanged. The six voices are the export of run duo-v3x3-lr2e-5-20260914-170056, written on 2026-09-14 by the best of the eight-run Hi-Fi sweep (lr 2e-5, early-stopped at 15,000 of 20,000 steps, held-out loss 0.401) with its six stored x-vectors. A retrain of either export that keeps every voice's identity is a minor bump recorded on the changelog with the new loss; a change that alters how any of the seven voices sounds is a major one.

Base SpeechT5 TTS and HiFi-GAN vocoder under MIT; speaker encoder under Apache-2.0; LJSpeech is public domain; the Hi-Fi Multi-Speaker English TTS corpus behind the six other voices is CC BY 4.0, attributed here and in the Express series notes; weights are not distributed during the private preview.