maya2-native / README.md
bharathkumarK's picture
Add Nikil Thalapaneni to the team credits
1d17905 verified
|
Raw History Blame Contribute Delete
32 kB
metadata
license: apache-2.0
language:
  - as
  - bn
  - en
  - gu
  - hi
  - kn
  - ml
  - mr
  - or
  - pa
  - ta
  - te
library_name: maya3
pipeline_tag: text-to-speech
base_model: Qwen/Qwen3-1.7B-Base
tags:
  - text-to-speech
  - tts
  - indic
  - multilingual
  - voice-cloning
  - streaming
  - mimi

Maya 2 Native

Open speech. Native voices.

Streaming text-to-speech for 11 Indic languages and English.

12 languages · 20 voices · Voice cloning · Apache-2.0

Listen · Get started · Explore voices · Benchmarks · Evaluation · Code

Maya 2 Native brings streaming speech generation to the languages people use every day. Built by Maya Research, it generates 24 kHz speech in 12 languages, with 20 built-in voices and zero-shot voice cloning from 3–10 seconds of reference audio. A voice can speak across languages: a Hindi reference can become Tamil speech.

Use it to give a voice agent its next turn, read a story in a familiar language, or build a multilingual interface you can host yourself. The release includes open weights and inference code, with a Python API, an OpenAI-compatible speech endpoint, and WebSocket streaming. Continuous batching and CUDA graphs support concurrent generation.

Watch Maya in action

Open the video · View on Google Drive

VoiceArena benchmark

Ranked #2 for Hindi among real-time TTS models on VoiceArena, with the category set to All. Checked October 27, 2026.

Displayed rank Creator Model Bradley–Terry Elo 95% CI Samples
1 Cartesia Sonic-3.6 1094 ±13 1,289
2 (2–4) Maya Research Maya-2-Native 1047 ±11 2,268
3 (2–5) Cartesia Sonic-3.5 1035 ±12 1,802
4 (2–5) Smallest AI Lightning 3.1 Pro 1024 ±12 1,870
5 (3–5) Murf AI Falcon 2 1021 ±14 1,352
6 (6–7) Cartesia Sonic-3 961 ±9 4,256
7 (6–7) Sarvam AI Bulbul-V3 957 ±9 3,882
8 xAI Grok TTS 890 ±9 3,689
9 Microsoft Azure Dragon HD Omni 855 ±9 3,611

Source: VoiceArena Hindi TTS leaderboard · Filters: Hindi / All / Real-time only · Methodology.

Parentheses reproduce the published rank intervals. Scores and ranks change as samples are added, and overlapping intervals should be considered when comparing nearby models. This result is scoped to the selected Hindi leaderboard. VoiceArena dates the Maya-2-Native entry to July 2026 and does not identify an exact checkpoint revision on the page.

View the supplied leaderboard snapshot VoiceArena Hindi TTS leaderboard, All categories, Real-time only: Maya-2-Native is ranked second with Elo 1049, 95% CI plus or minus 10, and 2171 samples.

The supplied screenshot shows #2, Elo 1049 ±10, 2,171 samples, and rank interval 2–3. It is preserved here as a snapshot; its capture date is not shown. The table above records the live check on October 27, 2026.

At a glance

Model at a glance
Languages Assamese, Bengali, English, Gujarati, Hindi, Kannada, Malayalam, Marathi, Odia, Punjabi, Tamil, Telugu
Model size 2.50B unique parameters; approximately 5.0 GB of BF16 weights
Audio 24 kHz, mono; streaming in 80 ms audio frames
Voices 20 built-in voices; zero-shot and cross-lingual voice cloning
Interfaces Python, OpenAI-compatible speech endpoint, WebSocket streaming
License Apache-2.0; see component licenses
Checkpoint release 1.0 · October 25, 2026

For developers: the model is Maya 2 Native. The existing package, Python class, and configuration filename remain maya3, Maya3TTS, and maya3_config.json. Use the identifiers shown in the examples.

Listen in 12 languages

Listen to one example in each supported language. These are existing, unedited outputs from the release benchmark, generated with text normalization enabled and sampled decoding. The displayed text is the original input, before normalization.

Selection: these twelve clips were chosen from outputs with character error rate below 2% under all three ASR judges. They illustrate the model's capabilities; the full benchmark results describe average performance and harder cases.

Language, voice, and input Audio
Hindi · Ritvik
क्या आपका वर्तमान पता 45, एमजी रोड, अंधेरी ईस्ट, मुंबई 400069 है? यदि हाँ, तो 1 दबाएं।

Open WAV
Assamese · Nakul
এন ই এফ টি লেনদেনটো সম্পূৰ্ণ হ'বলৈ প্ৰায় 2 ঘণ্টা 30 মিনিট সময় লাগিব পাৰে।

Open WAV
Bengali · Jahnavi
12/08/2023 তারিখে আপনার 1,500 টাকার refund process হয়ে গেছে, status update চেক করুন।

Open WAV
English · Siddhant
The EMI for your home loan is due by 12-10-24; please ensure your account has sufficient funds.

Open WAV
Gujarati · Vaidehi
જી બિલકુલ, મને સિસ્ટમમાં દેખાય છે કે તમારું ₹2,500 નું પેમેન્ટ 15મી તારીખે સક્સેસફુલ થઈ ગયું છે.

Open WAV
Kannada · Satvik
ಹೌದಾ... ಅದು ನಿಜಕ್ಕೂ ಕಷ್ಟ. ನಿಮ್ಮ ಅಂತಿಮ ಬಿಲ್ ₹45,000 ಆಗಿದೆ, ಅದರಲ್ಲಿ ಇನ್ಶೂರೆನ್ಸ್ ಕವರ್ ಆಗಿದೆಯಾ ಅಂತ ಚೆಕ್ ಮಾಡ್ತೀನಿ.

Open WAV
Malayalam · Anirban
റദ്ദാക്കിയ ടിക്കറ്റിന്റെ റീഫണ്ട് തുകയായ ₹1,800 മൂന്ന് ദിവസത്തിനുള്ളിൽ ലഭിക്കും.

Open WAV
Marathi · Charvi
मला 98765 43210 या नंबरवर OTP आला नाही, कृपया पुन्हा resend करा.

Open WAV
Odia · Ahana
ଦୟାକରି ମନେରଖନ୍ତୁ ଯେ EMI ପ୍ରତ୍ୟେକ ମାସର 5 ତାରିଖରେ କଟିବ ଏବଂ ଏହା ଆପଣଙ୍କର 3ୟ କିସ୍ତି।

Open WAV
Punjabi · Malini
NEFT ਰਾਹੀਂ ਫੰਡ ਟ੍ਰਾਂਸਫਰ 00:30 ਤੋਂ 23:30 ਤੱਕ ਉਪਲਬਧ ਹਨ।

Open WAV
Tamil · Abhay
கடந்த நிதியாண்டில் வங்கியின் மொத்த லாபம் ₹3.5 கோடி, இதில் ₹45 லட்சம் முதலீட்டாளர்களுக்கு வழங்கப்பட்டது.

Open WAV
Telugu · Nivedita
సేవింగ్స్ తో పోలిస్తే ఫిక్స్డ్ డిపాజిట్ వడ్డీ నిష్పత్తి 3:2 గా ఉండి, 7.25% ఇస్తుంది.

Open WAV

The Tamil sample uses Abhay, whose listed training languages are English and Hindi. The Telugu sample uses Nivedita, also trained on English and Hindi. Both demonstrate cross-lingual synthesis. Assamese is cross-lingual for every built-in voice; see limitations.

Quickstart

Use Linux, Python 3.10–3.12, and an NVIDIA GPU with a driver supporting CUDA 12.8. Start with max_seats=1. The documented single-seat loading peak is approximately 9.2 GB plus CUDA context; a 12 GB or larger GPU provides more room. See hardware and memory before increasing concurrency.

python -m venv .venv
source .venv/bin/activate
pip install "maya3[server] @ git+https://github.com/MayaResearch/maya2-native" \
  --extra-index-url https://download.pytorch.org/whl/cu128

Generate speech

import soundfile as sf
from maya3 import Maya3TTS

tts = Maya3TTS.from_pretrained("maya-research/maya2-native", max_seats=1)

audio = tts.generate(
    "नमस्ते, आपका ऑर्डर कल पहुँच जाएगा।",
    lang="hi",
    voice="Ahana",
    normalize=True,
)
sf.write("speech.wav", audio, 24000)
tts.close()

generate() returns a mono NumPy waveform in float32. Model weights, the Mimi codec, and the ECAPA speaker encoder are downloaded on first use. For offline inference, cache all three first, then set HF_HUB_OFFLINE=1.

Normalization differs by interface: the HTTP and WebSocket servers enable it by default. The Python API requires normalize=True. It expands numbers, currency, dates, times, URLs, email addresses, and other written forms into spoken text. Check the output for unusual formats.

Stream audio as it is generated

Stream speech

from maya3 import Maya3TTS

tts = Maya3TTS.from_pretrained("maya-research/maya2-native", max_seats=1)
try:
    with open("speech.pcm", "wb") as output:
        for chunk in tts.stream(
            "Your order has shipped and will arrive tomorrow.",
            lang="en",
            voice="Siddhant",
            normalize=True,
        ):
            output.write(chunk.astype("<i2", copy=False).tobytes())
finally:
    tts.close()

stream() yields signed 16-bit PCM arrays at 24 kHz, mono. astream() provides the asynchronous interface. Concurrent requests are batched by the engine; size max_seats to your hardware.

Clone a voice across languages

Use a clean, single-speaker reference clip and its exact transcript. Obtain the speaker's permission before cloning their voice. The reference language and the output language can differ.

import soundfile as sf
from maya3 import Maya3TTS

tts = Maya3TTS.from_pretrained("maya-research/maya2-native", max_seats=1)
tts.register_voice(
    "my_voice",
    ref_audio="reference.wav",                 # 3–10 seconds recommended
    ref_text="<exact transcript of reference.wav>",
    lang="hi",                                # reference language
)
audio = tts.generate(
    "வணக்கம், எப்படி இருக்கிறீர்கள்?",
    lang="ta",                                # output language
    voice="my_voice",
    normalize=True,
)
sf.write("cloned_voice_tamil.wav", audio, 24000)
tts.close()

The default cloning mode, icl_spk, combines the reference audio with an ECAPA speaker embedding. Clones approximate the reference voice; similarity and accent vary. A dedicated cloning benchmark is not included in this release's reported results.

Run a local HTTP and WebSocket server

Serve over HTTP or WebSocket

python -m maya3.server \
  --ckpt maya-research/maya2-native \
  --host 127.0.0.1 --port 8080 --max-seats 1

After GET /health reports ready, generate speech:

curl --fail-with-body -sS http://127.0.0.1:8080/v1/audio/speech \
  -H 'Content-Type: application/json' \
  -d '{"input":"Your order has shipped.","language":"en","voice":"Ahana","response_format":"wav"}' \
  --output speech.wav

The server provides POST /v1/audio/speech, WS /v1/tts/stream, and voice registration endpoints. It has no built-in authentication; add authentication and access controls before exposing it beyond a trusted environment. See the GitHub README for clients and protocol details.

Voices

Select a built-in voice by name, for example voice="Vaidehi". Names are case-insensitive, and no reference audio is needed. All 20 names describe synthetic voice personas.

The training-language column lists languages with at least one hour of training audio for that voice. A voice can be requested in any supported language, but performance outside its listed languages is cross-lingual and may sound less native.

Voice Profile Training languages, ≥1 hour
Ahana Young female voice, bright, youthful bn en gu hi kn ml mr or pa ta te
Vaidehi Adult female voice, calm, gentle bn en gu hi kn ml mr or pa ta te
Malini Mature female voice, steady narrator bn en gu hi kn ml mr or pa ta te
Charvi Young female voice, energetic, upbeat bn en gu hi kn ml mr or pa ta te
Jahnavi Adult female voice, warm, friendly bn en gu hi kn ml mr or ta te
Anirban Adult male voice, steady narrator bn en gu hi kn ml mr or pa ta te
Nakul Young male voice, bright, youthful bn en gu hi kn ml mr or pa ta te
Vasant Mature male voice, steady narrator bn en gu hi kn ml mr or ta te
Siddhant Adult male voice, clear, professional bn en gu hi kn ml mr or pa ta te
Satvik Young male voice, warm, friendly bn en gu hi kn ml mr or pa ta te
Abhay Adult male voice, natural conversational style en hi
Nivedita Adult female voice, natural conversational style en hi
Ishwari Adult female voice, natural conversational style hi
Ritvik Adult male voice, natural conversational style hi
Vrinda Young female voice, natural conversational style hi
Sreekar Adult male voice, natural conversational style en hi te
Kayal Adult female voice, natural conversational style en ta
Shaunak Young male voice, natural conversational style en hi
Akshat Adult male voice, natural conversational style en hi
Tanushree Adult female voice, natural conversational style en hi

Language codes: as Assamese · bn Bengali · en English · gu Gujarati · hi Hindi · kn Kannada · ml Malayalam · mr Marathi · or Odia · pa Punjabi · ta Tamil · te Telugu.

Pass only the speech text and the voice name to the API. The engine constructs the voice prompt internally; adding Ahana: to your text is unnecessary. Use either a built-in voice or your own reference audio for a request, rather than combining them.

Evaluation

The release was evaluated on 6,000 held-out texts across 12 languages, producing 20.3 hours of speech. Three ASR judges measured intelligibility; a speaker-embedding classifier measured consistency among the 20 built-in voices.

These are Maya Research's release measurements. ASR error rates and embedding similarity capture specific aspects of quality; they do not replace human listening or measure every aspect of naturalness. Serving measurements below describe the tested hardware and workload.

Benchmark design

The release benchmark, bench6k, contains 6,000 held-out texts: 500 per language across 31 content categories, including conversation, names, numbers, dates, currency, addresses, URLs, code-mixed text, tongue twisters, and prompts of 1–50 words. The release documentation states that these evaluation texts were excluded from training.

The benchmark produced 20.3 hours of speech through the server, with normalization and engine guards enabled, sampled decoding, and one seed per row. Voices were distributed across languages and categories; long inputs used the serving stack's text chunking.

Three ASR systems transcribed the generated speech:

  • ASR-1: Maya's in-house Indic ASR and primary judge.
  • Qwen3-ASR: a third ASR judge.
  • ASR-2: a second in-house Indic ASR, held out from training, reward generation, and checkpoint selection.

Character error rate (CER) compares ASR transcripts with spoken-form references. Scorer v1 uses the benchmark's normalization and script harmonization. Scorer v2 additionally harmonizes Latin and native-script spellings in code-mixed spans. The two scorers evaluate the same generated audio; lower v2 scores reflect a scoring change.

Overall CER ↓ ASR-1 Qwen3-ASR ASR-2, held out
Scorer v1 3.49% 3.40% 2.86%
Scorer v2, additional code-mix harmonization 2.35% 2.22% 1.73%

Results by language

CER below uses scorer v1. Voice identity is nearest-centroid classification among the 20 built-in voices, using ECAPA embeddings from clips of at least one second. It is a closed-set identity metric, separate from zero-shot clone similarity.

Language Code CER ASR-1 ↓ CER Qwen3-ASR ↓ CER ASR-2 ↓ Voice identity ↑
Assamese as 5.41% 6.59% 5.54% 96.4%
Bengali bn 2.60% 2.83% 2.68% 98.5%
English en 9.69% 1.74% 1.43% 99.6%
Gujarati gu 2.25% 3.76% 2.26% 98.9%
Hindi hi 1.52% 2.05% 1.57% 99.6%
Kannada kn 2.28% 2.72% 2.23% 97.9%
Malayalam ml 3.75% 4.20% 4.03% 99.4%
Marathi mr 1.66% 2.09% 1.54% 99.1%
Odia or 3.45% 4.33% 3.54% 97.4%
Punjabi pa 2.51% 3.32% 2.66% 99.1%
Tamil ta 4.42% 4.55% 4.33% 98.1%
Telugu te 2.29% 2.64% 2.53% 99.4%

ASR-1's English CER is substantially higher than the other two judges. The release analysis attributes part of this difference to ASR-1 looping on spoken URLs such as “W W W.” All three results are retained to show judge disagreement.

Failures and voice consistency

The benchmark's consensus failure rate requires agreement between ASR-1 and Qwen3-ASR under the release's failure rules, covering looping, substantial insertions, very high CER, and duration-limit events.

Release measurement Result
Consensus failure rate, scorer v1 0.15%
Consensus failure rate, scorer v2 0.03%
Outputs reaching the absolute length cap 0.00%
Loops / truncations 0.02% / 0.13%
Built-in voice name spoken aloud 0.00%
Voice identity, nearest of 20 centroids 98.6%
Mean ECAPA similarity 0.778

Zero observed events apply to this finite benchmark. A consensus failure rate does not count every pronunciation error or one-judge disagreement.

A separate 1,248-row named-voice evaluation reports 98.9% identity in trained languages and 98.8% cross-lingual identity. The same classifier scored 98.0% on held-out recordings of the source voices. These are task-specific measurements, rather than evidence that generated speech is more natural than recorded speech.

Harder inputs

Category ASR-1 CER, v1 ASR-1 CER, v2
Web addresses 29.06% 20.34%
Heavy code-mix 16.74% 4.11%
Code-mix 10.60% 3.51%
Symbols 6.34% 2.49%

The code-mix gap illustrates the effect of script spelling on ASR-based scoring. Pronunciation and intelligibility still need listening evaluation, especially for names, URLs, and critical numbers.

Streaming performance

The reported release serving run used one H100 NVL with 95 GB reported memory, 224 concurrent WebSocket streams, a BF16 backbone, and an FP16 depth decoder.

Metric Reported result
Concurrent streams 224
Aggregate throughput 323 seconds of audio per wall-clock second
Time to first audio, steady state, p50 / p90 / p99 111 / 134 / 242 ms
Time to first audio, complete run including ramp and drain, p50 / p99 115 / 774 ms
Per-stream real-time factor at full load, p50 0.68
Observed playback stalls / serving errors 0 / 0

A separate single-stream H100 measurement reports approximately 14 ms to first audio and 0.13 real-time factor. It uses a different load condition from the 224-stream run. Real-time factor is generation time divided by audio duration; lower is faster.

The release analysis attributes the complete-run latency tail partly to admission queuing during the drain phase. Latency depends on hardware, load, input length, cached state, and the serving environment; these measurements do not establish public internet or telephone latency.

Hardware and memory

The engine documentation reports the following GPU allocator measurements with a BF16 backbone, FP16 depth decoder, and 2,048 KV-cache tokens per seat. Add approximately 0.5 GB for the CUDA context and allow additional deployment headroom.

Concurrent seats Steady GPU memory Peak during loading
1 7.7 GB 9.2 GB
8 9.7 GB 10.9 GB
16 11.7 GB 12.8 GB
32 15.8 GB 16.5 GB

max_seats controls allocated serving capacity and memory, even before every seat is busy. These figures describe this configuration; a checkpoint's download size is smaller than its total runtime memory requirement. See engine documentation for configuration and hardware-specific measurements.

Architecture and audio generation

Architecture

Maya 2 Native generates discrete audio tokens autoregressively, then decodes them into speech with Mimi.

Component Description
Text and audio backbone Initialized from Qwen3-1.7B-Base; 28 layers, hidden size 2,048, 16 attention heads and 8 KV heads; extended vocabulary for language and audio tokens
Depth decoder Approximately 555M parameters; predicts codebooks 1–31 after the backbone predicts codebook 0
Audio codec Kyutai Mimi; 32 codebooks with 2,048 entries each, at 12.5 frames per second
Speaker conditioning 192-dimensional SpeechBrain ECAPA-TDNN embedding projected into the backbone; reference-audio conditioning for cloning
Output 24 kHz mono speech, 80 ms per audio frame

At each step, the backbone predicts the first codebook, the depth decoder fills the remaining codebooks, and Mimi decodes an audio frame. The engine can emit that frame while generation continues. An end-of-audio token controls normal stopping; duration and loop guards provide additional controls.

Training data and procedure

The release documentation describes a mixture of licensed and synthetic speech with transcripts across the 12 languages, plus text-only data used to adapt the backbone to the languages. The built-in voice personas use synthetic and licensed voice data prepared for this purpose.

The preference-optimization stage used direct preference optimization (DPO) on model-generated candidates ranked by ASR agreement and speaker similarity. Benchmark texts were excluded from training, according to the release documentation.

Dataset identities, total training hours, detailed per-language composition, and the full training configuration are not disclosed in this release. Automated scores should be considered alongside these disclosure limits.

Limitations

  • Uneven language coverage. Assamese is the most challenging Indic language in the release benchmark. No built-in voice has at least one hour of Assamese training data; some outputs drift toward a Bengali-like timbre. Other cross-lingual combinations can also carry the voice's training-language accent.
  • Very short turns. One- or two-word prompts are less stable in voice identity, and speaker-embedding evaluation is less reliable on very short clips. A slightly longer phrase may help short agent responses.
  • Code-mixed and written-form inputs. English words inside Indic sentences vary by voice. URLs, symbols, dates, and long digit sequences remain difficult, even with normalization. Listen to application-specific examples before relying on them.
  • Voice cloning. Similarity is approximate. Noise, multiple speakers, short references, and inaccurate transcripts can degrade results. Dedicated zero-shot cloning scores are not reported here.
  • Emotion and events. Tags such as [laughs], [sighs], [whispers], [sad], and [excited] are best effort and were not the focus of this release.
  • Generation and guards. Sampling can produce errors. The same seed is reproducible for an isolated request, but batching changes the random stream. Loop and duration guards can end genuinely repetitive text early. No benchmark clip spoke a built-in voice name aloud, but this remains a possible failure mode.
  • Evaluation scope. Results use automated ASR and speaker-embedding judges. This card does not report a human naturalness study, comprehensive dialect or demographic evaluation, confidence intervals, or a controlled comparison with other TTS models.

Intended use and responsible deployment

Maya 2 Native is intended for voice interfaces and agents, accessibility, reading and narration, IVR, notifications, and research on multilingual speech generation.

Clone only voices you own or have explicit permission to use. Disclose synthetic speech to listeners, especially in calls and media. Do not use the model for deceptive impersonation, fraud, harassment, non-consensual content, disinformation, or attempts to defeat voice authentication. Built-in voice names identify synthetic personas and should not be presented as real people.

This release does not add an audio watermark. Applications should implement the consent, disclosure, access controls, and abuse monitoring appropriate to their use. Consult the repository's security guidance for deployment considerations.

Files in this repository

Files in this repository

Path Contents
model-00001-of-00002.safetensors, model-00002-of-00002.safetensors BF16 model weight shards
model.safetensors.index.json Weight-to-shard mapping
maya3_config.json Resolved model configuration and serialization metadata
backbone/ Backbone configuration and tokenizer; backbone weights are included in the main model shards
voices/voices.json Built-in voice metadata and conditioning modes
samples/ The twelve WAV examples above

Tied weights are stored once and represented through aliases. Mimi and the ECAPA speaker encoder are resolved from their own repositories on first use.

License

The model weights are released under Apache-2.0, as specified in this repository's license metadata. The inference code is also Apache-2.0.

The upstream components retain their own licenses: Qwen3-1.7B-Base (Apache-2.0), Kyutai Mimi (CC-BY-4.0), and SpeechBrain ECAPA-TDNN (Apache-2.0). Preserve their notices and attribution when redistributing or using these components.

Citation

@misc{maya2native2026,
  title        = {Maya 2 Native: Streaming Multilingual Text-to-Speech},
  author       = {{Maya Research}},
  year         = {2026},
  url          = {https://huggingface.co/maya-research/maya2-native},
  note         = {Release 1.0}
}

Credits and acknowledgments

Created by Maya Research.

Maya Research team

  • Dheemanth Reddy BS
  • Bharath Kumar Kakumani
  • Sai Charan Thippareddy
  • Prahalad Boreddy
  • Nikil Thalapaneni

Maya 2 Native builds on the work of the open research community. We thank:

  • The Qwen team for Qwen3-1.7B-Base, which initializes the text and audio backbone.
  • Kyutai for Mimi, the neural audio codec used to represent and decode speech.
  • The SpeechBrain team for ECAPA-TDNN, used for speaker conditioning and voice-identity evaluation.
  • The Hugging Face community for the tools and infrastructure that make sharing models and building on them easier.

Please cite Maya 2 Native and acknowledge the upstream work relevant to your use.