Model reference · open weights

TeraTTS

Available as managed deployment Audio TeraSpace · community Text→speech 1 variants 2k dl/mo

TeraTTS is an open-weight audio or speech model from TeraSpace. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.

Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.

What it is

Released byTeraSpace
TypeAudio & music
TaskText→speech
Runs withtransformers
Released2026-08-07
Popularity2k downloads / month
LicenceUnknown

About

What TeraTTS is

TeraTTSv2 is a self-contained ONNX Runtime text-to-speech release with selectable diffusion samplers, ten voice styles, Russian stress marking, and streamed audio output.

This release uses the clean English/Russian 25-second teacher and its matching eight-step CFG-3 distilled student.

Important — Russian stress is automatic. Text inside receives stress markers automatically by default. Explicit + markers always win.

Important — cross-language prompts. When an English reference voice is speaking Russian, experiment with duration_scale below 1 (for example 0.8). It is usually a better starting point than the default 1.

Recommended voices: ru_f1 and ru_m5 are the preferred Russian voice prompts.

Read the full model card

Installation

pip install -r requirements.txt

sounddevice is only required for direct speaker playback. On Linux, install the system PortAudio library if it is not already present.

Load with Transformers

from transformers import AutoModel

tts = AutoModel.from_pretrained(
    "TeraSpace/TeraTTSv2",
    trust_remote_code=True,
    provider="CPUExecutionProvider",
    threads=6
)

waveform = tts.generate_speech(
    "Привет от TeraTTS.",
    voice="ru_f1",
    duration_scale=1,
)
tts.save_wav("teratts.wav", waveform)

waveform is a mono float32 NumPy array at 44,100 Hz. save_wav writes standard signed-16-bit PCM WAV without an extra audio package.

To inspect the exact text passed to the encoder after number expansion, stress marking, and Unicode normalization, call tts.normalize_text(text).

Controls

ControlValuesEffect
voiceru_f1 ★, ru_m5 ★, ru_f2, ru_m1, eng_f3, eng_f4_whisper, eng_f5, eng_m2_whisper, eng_m3, eng_m4Selects a bundled precomputed voice style named after its reference audio. ★ marks the recommended Russian prompts.
duration_scalePositive float, default 1Higher values produce slower, longer speech.
diffusion_modeldistilled (default), teacherDistilled is faster; teacher supports adjustable CFG.
ruaccent_modefull (default), dictionaryFull uses RUAccent neural ONNX graphs plus dictionaries; dictionary mode loads dictionaries only.

The default diffusion_model="distilled" is the fast eight-step sampler. To use the teacher sampler, choose it while loading:

teacher_tts = AutoModel.from_pretrained(
    "TeraSpace/TeraTTSv2",
    trust_remote_code=True,
    provider="CPUExecutionProvider",
    threads=6,
    diffusion_model="teacher",
)

guidance can be adjusted when generating with the teacher sampler. The distilled sampler has CFG 3 baked into its graph.

Language tags, numbers, and Russian stress

Language tags are required: wrap text in or . The runtime rejects untagged or unbalanced input with a tag-specific error. Before number expansion and stress marking, it inserts spaces after punctuation and between a number and a following word. Characters outside the model vocabulary are skipped with a runtime warning. Numbers inside language tags are expanded to words in the matching language before synthesis:

waveform = tts.generate_speech(
    "У меня 21 яблоко. I have 42 apples.",
    voice="ru_f1",
    duration_scale=1,
)

Russian text is automatically stress-marked by the bundled RUAccent-derived runtime. Manual + markers remain authoritative. For a lower-memory, deterministic dictionary-only path, choose the mode while loading:

dictionary_tts = AutoModel.from_pretrained(
    "TeraSpace/TeraTTSv2",
    trust_remote_code=True,
    provider="CPUExecutionProvider",
    threads=6,
    ruaccent_mode="dictionary",
)

Dictionary mode does not load RUAccent neural ONNX graphs. It marks known words and applies deterministic ё replacements, while unknown words and ambiguous homographs are left unchanged. Set russian_stress=False to disable automatic Russian stress processing entirely.

When using an English voice such as eng_f3 for Russian text, start by trying duration_scale=0.8 and adjust by ear:

waveform = tts.generate_speech(
    "Это русский текст английским голосом.",
    voice="eng_f3",
    duration_scale=0.8,
)

Stream audio

for chunk in tts.generate_speech_stream(
    "Streaming speech is ready.",
    voice="eng_f3",
    duration_scale=1,
):
    # Send float32 mono chunks (44,100 Hz) to a player or network client.
    consume(chunk)

The remote code loads only the selected sampler graph plus shared ONNX graphs. For security, pin a specific Hub commit when using trust_remote_code=True.

Attribution

The local Russian stress annotator and its assets are adapted from RUAccent, Copyright 2026 Denis Petrov, under the MIT License. See RUACCENT_NOTICE.txt.

From the published model card. Full card on the HuggingFace links in the sidebar.

Using it via the API

Call it like any OpenAI endpoint

Once AxForge deploys teratts for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (teratts below is illustrative; you get the exact model name on deployment.)

$ curl -sS https://api.axforge.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $AXFORGE_API_KEY" \
  -F model="teratts" -F file=@audio.mp3

Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms