Changelog¶
Dated, newest first. Product changes to the API and portal; engine and server internals live in the repositories' DECISIONS.md.
2026-11-05 — English (IN): eight Indian English voices¶
- A third language, English (IN), on the same API and key:
ananya(the female default),aditi,anika,avni(female) andarjun,aarav,aditya(the default),ayaan(male). 24 kHz, streaming, the same price. See Voices. GET /v1/voicesnow lists 47 voices: 21 Hinglish (languagehi-IN+en-IN), 18 English (US) (en) and 8 English (IN) (en-IN).- English (IN) reads text with Indian conventions: repeated digits as double and triple (OTP 699884 → six double nine double eight four), amounts in lakh and crore with rupees (Rs 2,50,000 → two lakh fifty thousand rupees), times as five P M, e-mails and links spelled out (support at example dot com). See Text normalisation.
- All eight English (IN) voices speak at 1× (
speed1.0 inGET /v1/voices), the male ones included. digitsapplies to Hinglish voices; English voices ignore it. No other API change.
2026-10-31 — Pace is fixed per voice; 21,657 more lexicon words¶
- Pace. Every voice now speaks at a fixed pace: female voices 1×, male voices 1.15×, except
mohitandmanishat 1×. Thespeed/pacerequest field is accepted and ignored;GET /v1/voicesreports each voice'sspeed. The portal's pace slider is a label. - Lexicon. 21,657 English words that had no entry (chemistry, chemical, character, mechanic, psychology, architect, chef …) are now read with their Indian pronunciation instead of letter by letter.
2026-10-31 — Hinglish v2.1: the last word is always spoken, repeats read once¶
- The Hinglish voices are now served by v2.1 (
pocket-tts-hinglish-v2.1-E-s2000). Two faults of v2.0 are fixed at the source: the final word of a sentence was sometimes cut ("keep the microphone close" ended at "microphone"), and a repeated phrase ("red blue green; red blue green") was sometimes read three times or once. Measured on the raw model across eight voices and six seeds, the last word now survives in 48 of 48 takes (v2.0: 28 of 48) and the repeat reads exactly twice in 47 of 48. - Cleaner English inside Hindi sentences: on the held-out customer paragraphs the English-word score rose from 63 to 70 and alphanumeric codes from 50 to 54, with openings and Hindi unchanged.
- Sentences now end with a slightly longer, natural stop (about 0.4 s of silence after the last word, v2.0: 0.27 s).
- No API change. Voices, expressions,
style, roman-letter input, numbers, codes and the lexicon behave as in v2.0. Samples on Voices are re-recorded with v2.1.
2026-10-29 — Hinglish v2.0: twenty-one voices and three expressions¶
- The Hinglish voices are now served by v2.0 (
pocket-tts-hinglish-v2.0-sft3000). Nineteen new voices join Saanvi and Sahil:meera,mahi,mitali,manasi,madhavi,mohini,malvika,mansi,mukta(female) andmanav,mohan,mihir,madhav,mayank,manish,mukul,mohit,milan,mahesh(male), from the deepest (Madhav) to the brightest (Mitali). Register and samples on Voices. - Expressions. A new optional request field
style(excited·sad·whisper) onPOST /v1/ttsand the WebSocket message;saanviandsahilcarry all three. A voice without an expression plays neutral (no error); an unknown name is400 unknown style.GET /v1/voiceslists each voice'sstyles. The portal playground has an Expression control. - Retired:
belaandbarunare no longer served (400 unknown voice). Update hard-coded ids and key allow-lists that name them;saanvi,sahiland the English (US) voices are unchanged. Keys created with "all voices" get the new voices automatically.
2026-10-23 — Hinglish v1.5: Hinglish typed in roman letters, clearer English¶
- The four Hinglish voices are now served by v1.5. Hinglish typed in roman letters is read as Hindi:
"namaste, aapki EMI 12,450 rupaye hai, jo 5 november ko due hai"now sounds the same as the Devanagari sentence. A request with no Devanagari in it is normalised as usual, then converted to the spelling the model reads; requests with Devanagari are unchanged. English voices are not affected. - English words inside Hindi sentences are clearer: v1.5 learned from about 3 hours of English speech in all four voices, every clip checked by speech recognition before training, so Bela and Barun get the English practice that only Saanvi and Sahil had before.
- On our release gate, roman input scores as well as Devanagari (saanvi 0.666 roman vs 0.727 Devanagari on the production engine; lower is better), where v1.4 could not read it at all. Voice ids, prompts and the API are unchanged. Samples on Voices are fresh v1.5 renders.
- Endings: the engine now ends each reply on a quiet frame with a short fade, so a sentence no longer stops mid-sound.
2026-10-22 — Hinglish v1.4: English pronunciation inside Hindi¶
- The four Hinglish voices are now served by v1.4, fine-tuned on top of v1.3 with a pronunciation batch: English consonant clusters, c/g/ch/th rules, -tion/-sion endings, vowel spellings and silent letters, stress shifts and heteronyms (record, present, read, lead), and natural Hindi–English switching. Everything v1.3 learned (numbers, codes, short replies) stayed in training and was checked as a floor.
- On our release gate the share of English words recognised went up on every voice (for example sahil 0.876 → 0.892, bela 0.830 → 0.896 on the production engine), with Hindi accuracy and one-word replies holding. Voice ids, prompts and the normaliser are unchanged; nothing changes for callers. Samples on Voices are fresh v1.4 renders.
2026-10-22 — Speaking pace: speed in the request¶
speed(aliaspace) now changes how fast a voice speaks, from0.5to2.0, in REST and WebSocket requests, for every voice. The pitch and the voice stay the same; only the duration changes.1.0(the default) is unchanged audio, byte for byte. It used to accept only1.0.- Measured on the production node: durations scale exactly (a 7.12 s Hinglish line becomes 9.49 s at
0.75and 4.75 s at1.5), Whisper hears the same words at every speed from0.75to1.5, and the first audio arrives no later. - Billing is per character, so the pace does not change the price.
2026-10-21 — Per-character pricing, credits, monthly plans, password and Google sign-in¶
- Priced per character: 10 paise per 1,000 characters (₹100 per million), replacing per-minute metering. Billed characters are
the Unicode code points of the trimmed
text, counted before normalisation (digits as typed; every Devanagari vowel sign, halant and nukta is one character, so नमस्ते is 6). Each WebSocket message is billed the same way; a cancelled request is billed for its full text./v1/normalizeand/v1/voicesstay free. Roughly 1,000 characters is a minute of speech. Roadmap: 5 paise per 1,000 in about six months, under 1 paisa per 1,000 in about a year. See Pricing. - Pay as you go is prepaid: top up ₹100–₹1,00,000 in the portal through Razorpay Checkout (no card on file, a GST invoice per
top-up). At a zero balance the API returns
402(WebSocket: anerrorevent with"status":402) until the next top-up. - Launch offer: the first 1,000 sign-ups get 10 lakh (1,000,000) characters of free credit once their e-mail is verified.
- Monthly commitment plans: ₹10,000 / month with 12.5 crore characters included (8 paise per 1,000; then 8 paise per 1,000) and ₹25,000 / month with 40 crore included (6.25 paise per 1,000; then 6 paise per 1,000). The first month is paid up front; the fee is then charged on the 1st with the previous month's overage, by e-mandate up to ₹15,000 or by payment link above that. Unused characters do not roll over; committed organisations are never cut off. These replace the prepaid minute blocks.
- Usage shows
billed_charsper request, and the portal API's request rows and usage totals carry it. New portal endpoints:PUT /portal/v1/me/profile,GET /portal/v1/signup-offer,POST /portal/v1/billing/topup,POST /portal/v1/billing/plan; see the portal API. - Sign-in: e-mail and password (with verification and password reset) or Continue with Google. Sign-up at tts.vartalaap.si/signup asks for name, company, phone (optional), use case and expected volume. Magic links are no longer sent; old ones still work.
- "English" is now "English (US)" in the docs and the portal. Voice ids, model ids and the
enlanguage code are unchanged.
2026-10-20 — Output chain: consistent loudness, no clipping, a telephony profile¶
- Every stream is now post-processed after the decoder (
postfx, defaulttrue): a 70 Hz high-pass, per-voice loudness to −16 LUFS (BS.1770, slow and gated, so short replies do not pump), a 10 ms fade-in and a true-peak limiter at −1 dBTP. Voices that used to differ by about 2 LU are now within 1 LU of each other, and the inter-sample overs the raw decoder produced on about half of all sentences are gone. Latency is unchanged (1 ms of look-ahead inside the first frame)."postfx": falsereturns the raw decoder output, exactly what the API sent before. See Audio formats → Output chain. "profile": "telephony"(opt-in) adds a 300 Hz high-pass, a +3 dB presence band at 2.5–4 kHz and a soft de-esser for audio that goes out over 8 kHz μ-law / PSTN.- WebSocket
startevents carrypostfx(the profile in effect, ornull).
2026-10-20 — Hinglish v1.3: numbers, dates and codes¶
- The four Hinglish voices (
saanvi,sahil,bela,barun) are now served by v1.3, retrained on 185 hours of recordings of numbers, amounts, dates, times, OTPs, phone numbers, e-mails and URLs. On our release gate the four-voice mean error moved from 0.705 to 0.622 (lower is better), with the biggest gains on the two newest voices; one-word replies are unchanged. Voice ids, prompts and the normaliser are unchanged, so nothing changes for callers. Samples on Voices and in the portal are fresh renders from v1.3.
2026-10-20 — Plans and online payments¶
- Three plans: pay as you go at 23 paise per audio-minute; commit ₹10,000 for 10,000 included minutes then 18 paise; commit ₹25,000 for 25,000 minutes then 10 paise. A commitment is a prepaid block valid 12 months, drawn down by each month's usage, auto-renewed when used up if you choose. See Pricing.
- Payments through Razorpay from the portal's Billing page: blocks are bought with Checkout; a saved card (e-mandate) pays monthly usage invoices automatically up to ₹15,000; larger amounts get a payment link and a Pay-now button. Every payment is verified server-side before anything is credited.
- GST invoices with your legal name and GSTIN, monthly on the 1st (IST) and on every block purchase, printable from the portal.
2026-10-20 — Eighteen English voices¶
- English voices, nine female and nine male, Western English (US and UK accents):
kiara(the English default),kenna,kate,kyra,kelsey,kristen,kaia,kimberly,kira,kevin(the male default),kyle,kieran,kenneth,kurt,kai,keith,kelvin,kristof. Same endpoints, same key, same price. A second engine process serves them behind the same API host; nothing changes for callers. See Voices. - English normaliser: numbers, dates, times, money (
$,£,€), codes, URLs and e-mails are read out in English with Western grouping; casing is kept (the model is case-aware).digitsdoes not apply to English voices.POST /v1/normalizetakesvoiceto preview the right normaliser. GET /v1/voicesnow carrieslanguage,gender,styleandmodelper voice.- Portal: a language and male/female picker in the playground and the voice gallery, with a sample for every voice.
2026-10-17 — Price: 10 paise per audio-minute¶
- List price is now 10 paise per audio-minute (was 20), metered per audio-second, same for every endpoint, voice and format. Roadmap: 5 paise in about six months, under a paisa within a year. Prices only go down and apply from the next calendar month.
2026-10-16 — Developer portal and docs¶
- Portal at tts.vartalaap.si: e-mail magic-link sign-in, organisations and projects, API keys with per-key voice allow-lists (shown once, hashed at rest), a playground that streams over REST or WebSocket with a live time-to-first-audio timer and the normaliser's output, usage (per-day audio, requests, p50/p95 TTFA, RTF; by key, voice and endpoint; CSV), billing at 20 paise per audio-minute, a voice gallery and a "train your voice" request form.
- API:
POST /v1/normalizepreviews the Hinglish normaliser and the chunking without synthesising.WS /v1/tts/streamaccepts the key as?api_key=for browsers. Keys created in the portal (vt_live_…) and short-lived playground keys (vt_pg_…) join the server's key check; a server with the portal enabled is never open. - Docs at docs.vartalaap.si (this site).
2026-10-16 — Production server¶
- Rust server over the native C++ engine:
POST /v1/tts(wav / pcm16 / opus, chunked from the first 80 ms frame),WS /v1/tts/stream(JSON events + binary audio, many utterances per connection),GET /v1/voices,/healthz,/readyz,/metrics. - Hinglish normaliser ported byte-exact from the training pipeline (66 canonical cases),
en_digitsoption for codes. - 503 +
Retry-Afterwhen every worker is busy; per-request JSON log withttfa_ms,rtf,audio_s,chars. - Measured in Mumbai on a c3-standard-4: 41 ms end-to-end first audio warm (18 ms engine-side with a cached prefill), 12.4 audio-seconds per wall-second at four streams.
2026-10-15 — Voices¶
belaandbarunonpocket-tts-hinglish-v1, 24 kHz.