In this categoryLocal AI · 59
More guides
Local AIIntermediate

How to Run Maya-1 Locally: a 3.3B-Parameter Text-to-Speech Model with Voice Design

Maya-1 is an open-weight, 3.3 billion parameter text-to-speech model from Maya Research. Instead of picking from a fixed list of speakers, you describe the voice you want in plain English, add inline tags like <laugh> or <whisper> for delivery, and the model generates SNAC audio tokens that decode to 24 kHz speech. It is licensed under Apache 2.0 and needs 16 GB or more of VRAM to run at BF16.

7 minIntermediate

Maya-1 is an open-weight, 3.3 billion parameter text-to-speech model from Maya Research. Instead of picking from a fixed list of speakers, you describe the voice you want in plain English, add inline tags like <laugh> or <whisper> for delivery, and the model generates SNAC audio tokens that decode to 24 kHz speech. It is licensed under Apache 2.0 and needs 16 GB or more of VRAM to run at BF16.

Written by Priya Raghunathan, local-AI hardware reviewer. I check parameter counts, licenses and hardware requirements against the primary source before recommending an install path.

Maya-1 entered the top 20 of Hugging Face's trending text-to-speech list. At time of writing it has 911 likes and 6,939 downloads on the maya-research/maya1 model page, released October 18, 2025, under the Apache 2.0 license. The model's audio decoder, SNAC, is a separate MIT-licensed project with 777 stars on GitHub. The top linked Space is maya-research/maya1 (116 likes), a browser demo of the model.

Specs at a glance

FieldValue
PublisherMaya Research
PipelineText-to-speech
Parameters3.30B (3,300,928,512 safetensors total, BF16)
ArchitectureLlamaForCausalLM, decoder-only
Audio representationSNAC discrete audio codes, decoded with hubertsiuzdak/snac_24khz
Audio output24 kHz, mono
Voice controlNatural-language voice description plus 20 inline emotion/style tags
Voice cloningNot supported; voice design from a text description only
VRAM16 GB or more on a CUDA GPU with BF16 support (RTX 4090, A100, H100)
Streaming latencyUnder 100 ms reported, via a vLLM reference setup with prefix caching
LicenseApache 2.0
Release dateOctober 18, 2025
GitHub stars (SNAC decoder)777

What it actually does

Most open text-to-speech models give you a short list of built-in speakers, or ask for a reference clip to clone. Maya-1 takes a third path: you write a sentence describing the voice, something like a 30 year old American man with a warm baritone and a conversational pace, and the model generates a matching voice from that description alone. The model card contrasts this directly with reference-audio cloning tools like Coqui XTTS-v2. Delivery is controlled the same way text is: drop a tag like <laugh_harder>, <whisper> or <cry> into the sentence and the model works it into the speech at that point.

Under the hood, Maya-1 is a Llama-architecture causal language model that treats audio the same way it would treat the next word in a sentence. It predicts a stream of discrete tokens, then a separate decoder, SNAC, turns those tokens into a 24 kHz waveform. That split is why the GitHub stars in the table above point to a different repository than the model itself: SNAC is Maya Research's chosen codec, not something they built, and it carries its own MIT license.

The full tag set
Maya-1's tokenizer registers 20 emotion and delivery tags: angry, appalled, chuckle, cry, curious, disappointed, excited, exhale, gasp, giggle, gulp, laugh, laugh_harder, mischievous, sarcastic, scream, sigh, sing, snort, and whisper. Drop any of them into your input text wrapped in angle brackets, for example <giggle>.

Install it

Maya-1 runs through the standard Hugging Face transformers stack plus the SNAC decoder package. There is no separate CLI or custom repo to clone for basic inference.

bash - install
$pip install torch transformers accelerate snac soundfile numpy
$
hubertsiuzdak/snacThe SNAC audio codec Maya-1 uses to turn generated tokens into a 24 kHz waveform.github.com777

Generate speech in Python

Maya-1's own model card ships this reference script. It builds a formatted prompt from a voice description and your text, generates SNAC tokens with transformers, then decodes them to a wav file. The constants below are fixed token IDs from Maya-1's vocabulary, copy them exactly.

generate.py
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from snac import SNAC
import soundfile as sf

CODE_START_TOKEN_ID = 128257
CODE_END_TOKEN_ID = 128258
CODE_TOKEN_OFFSET = 128266
SNAC_MIN_ID = 128266
SNAC_MAX_ID = 156937
SOH_ID, EOH_ID, SOA_ID, TEXT_EOT_ID = 128259, 128260, 128261, 128009


def build_prompt(tokenizer, description: str, text: str) -> str:
    soh = tokenizer.decode([SOH_ID])
    eoh = tokenizer.decode([EOH_ID])
    soa = tokenizer.decode([SOA_ID])
    sos = tokenizer.decode([CODE_START_TOKEN_ID])
    eot = tokenizer.decode([TEXT_EOT_ID])
    formatted = f'<description="{description}"> {text}'
    return soh + tokenizer.bos_token + formatted + eot + eoh + soa + sos


def unpack_snac_from_7(snac_tokens: list) -> list:
    frames = len(snac_tokens) // 7
    snac_tokens = snac_tokens[: frames * 7]
    l1, l2, l3 = [], [], []
    for i in range(frames):
        slots = snac_tokens[i * 7 : (i + 1) * 7]
        l1.append((slots[0] - CODE_TOKEN_OFFSET) % 4096)
        l2.extend([(slots[1] - CODE_TOKEN_OFFSET) % 4096, (slots[4] - CODE_TOKEN_OFFSET) % 4096])
        l3.extend([(slots[2] - CODE_TOKEN_OFFSET) % 4096, (slots[3] - CODE_TOKEN_OFFSET) % 4096,
                   (slots[5] - CODE_TOKEN_OFFSET) % 4096, (slots[6] - CODE_TOKEN_OFFSET) % 4096])
    return [l1, l2, l3]


model = AutoModelForCausalLM.from_pretrained(
    "maya-research/maya1", torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained("maya-research/maya1", trust_remote_code=True)
snac_model = SNAC.from_pretrained("hubertsiuzdak/snac_24khz").eval().to("cuda")

description = "Realistic male voice in the 30s age with american accent. Normal pitch, warm timbre, conversational pacing."
text = "Hello! This is Maya1 <laugh_harder> the best open source voice AI model with emotions."

prompt = build_prompt(tokenizer, description, text)
inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to("cuda")

with torch.inference_mode():
    outputs = model.generate(
        **inputs,
        max_new_tokens=2048,
        min_new_tokens=28,
        temperature=0.4,
        top_p=0.9,
        repetition_penalty=1.1,
        do_sample=True,
        eos_token_id=CODE_END_TOKEN_ID,
        pad_token_id=tokenizer.pad_token_id,
    )

generated = outputs[0, inputs["input_ids"].shape[1]:].tolist()
eos = generated.index(CODE_END_TOKEN_ID) if CODE_END_TOKEN_ID in generated else len(generated)
snac_tokens = [t for t in generated[:eos] if SNAC_MIN_ID <= t <= SNAC_MAX_ID]

levels = unpack_snac_from_7(snac_tokens)
codes = [torch.tensor(level, dtype=torch.long, device="cuda").unsqueeze(0) for level in levels]

with torch.inference_mode():
    z_q = snac_model.quantizer.from_codes(codes)
    audio = snac_model.decoder(z_q)[0, 0].cpu().numpy()

sf.write("output.wav", audio[2048:], 24000)

Swap the description and text strings for your own voice and line, run the script, and output.wav comes out at 24 kHz mono. The 2048-sample trim at the end drops the decoder's warmup samples, keep it.

Getting to real-time streaming

The script above waits for the full generation to finish before you hear anything, fine for testing, too slow for a live conversation. Maya Research's own release claims streaming latency under 100 milliseconds, but that number comes from a separate vLLM-based reference setup that uses automatic prefix caching and decodes audio in overlapping four-frame windows, not the plain transformers script above. The repository ships that vLLM streaming script alongside the standard weights; reach for it once the simple script above is generating audio you're happy with.

Check names, numbers and long passages by ear
Maya Research's own card flags pronunciation and content fidelity issues around names, numbers and abbreviations, and says long-form consistency should be checked across passages rather than assumed. Description-following is also approximate: conflicting or unusual voice descriptions reduce how consistently the model follows them. Listen to the output before shipping it.

Known limitations

Maya-1 cannot clone a voice from reference audio, it only designs one from a text description, so there is no path to reproducing a specific real person's voice from a sample clip. Pronunciation of names, numbers and abbreviations needs spot-checking, as does intelligibility across languages and accents other than the model's primary American-English training focus. At 3.3 billion parameters it needs a 16 GB or larger GPU for the documented BF16 path; there is no official CPU or Apple Silicon path described in the release. And because synthetic voice is the whole point of the model, Maya Research's own terms ask you to disclose synthetic audio where appropriate and rule out deceptive impersonation, fraud, fabricated evidence or unauthorized representations of a real person.

Maya-1 vs Kova TTS 1

Both are open-weight, multi-billion-parameter-adjacent speech models built on a Llama backbone, but they solve different problems. Kova TTS 1 clones a specific voice from a reference clip and its transcript, ships under a research and non-commercial license, and targets long-form narration with word-level timestamps. Maya-1 designs a voice from a written description instead of cloning one, is more than twice the size at 3.3 billion parameters, needs a 16 GB or larger GPU where Kova runs down to CPU, and ships under the fully permissive Apache 2.0 license. Reach for Kova TTS 1 when you need to reproduce one particular voice; reach for Maya-1 when you want a wide range of describable voices and emotional delivery without a license negotiation.

FAQ

What is Maya-1?

Maya-1 is an open-weight, 3.3 billion parameter text-to-speech model from Maya Research. It generates a voice from a natural-language description rather than cloning or picking from a speaker list, and supports 20 inline emotion and delivery tags.

Can Maya-1 clone my voice from a recording?

No. Maya-1 only designs voices from text descriptions. For reference-audio voice cloning, a model like Kova TTS 1 is built for that instead.

How much VRAM do I need?

Maya Research recommends 16 GB or more on a CUDA-capable GPU with BF16 support, such as an RTX 4090, A100 or H100. The release does not document a CPU or Apple Silicon path.

Is Maya-1 free to use commercially?

Yes, the model weights are released under Apache 2.0. Check the separately licensed SNAC decoder's terms too, since it's a dependency rather than part of Maya-1 itself, though it is also released under a permissive license, MIT.

Where to go from here

  • Need to clone a specific voice instead of designing one? Run Kova TTS 1 locally covers a reference-audio cloning model built for narration.
  • Want fixed stock voices with no GPU required? Run Kokoro-82M locally covers a CPU-friendly TTS model with 54 voices across 8 languages.
  • Browse other speech and audio models: the local AI model directory lets you compare specs side by side.

Local models run better with more VRAM. CompareRTX GPUs on Amazonbefore you upgrade.(affiliate link. We may earn a commission at no extra cost. Disclosure)

Watch related tutorials

Free weekly email

Weekly local AI drops

New models, what runs on your hardware, and the guides to set them up. One email a week, unsubscribe any time.

Tags
#maya-1#maya research tts#voice design text to speech#run maya-1 locally#expressive tts model#open source text to speech