Skip to main content
By default (normalize: true) Geko expands machine-y text — numbers, currency, percentages, dates, times — into how a Kazakh speaker would actually say it, before synthesis. This is why 152 comes out as words, not “one-five-two”.

What it handles

  • Numbers152 → spoken cardinal form.
  • Currency5500 ₸ → the amount in words + “теңге”.
  • Percentages15% → “…пайыз”.
  • Dates & times — written forms → spoken forms.
  • Common abbreviations and symbols.
The normalizer is Kazakh-specific (it lives in serve/normalize.py). As more languages ship, each gets its own normalizer.

When to turn it off

Set normalize: false if:
  • Your text is already written exactly as it should be spoken.
  • You’re feeding pre-processed text from your own pipeline.
  • You want digits read out literally by your own rules.
CLI:
Keep punctuation — it guides phrasing and pauses. A trailing . / ! / ? helps the model finish the last word cleanly (the server adds one if you omit it).
If a specific number or name is mispronounced, try spelling it phonetically in the text with normalize: false, or open an issue with the example.

Next steps

TypeScript SDK

The normalize param and the full synthesis surface.

Playing & saving audio

Turn the synthesized WAV into files or playback.

Latency & quality

Tune the nfe dial for speed or fidelity.