Model reference · open weights
maya1 is an open-weight audio or speech model from maya-research. 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 by | maya-research |
|---|---|
| Type | Audio & music |
| Task | Text→speech |
| Parameters (lead) | 3.3B |
| Context | 128k tokens |
| Runs with | transformers |
| Released | 2025-10-18 |
| Popularity | 8k downloads / month |
| Licence | Open weights |
About
Maya-1 is a state-of-the-art speech model for expressive voice generation, designed to capture human emotion and enable precise voice design.
Maya-1 was developed at Maya Research by Dheemanth Reddy Bhumireddy Singa Reddy (Co-founder & CEO) and Bharath Kumar Kakumani (Co-founder & CTO).
try it: Playground
What it does:
Your browser does not support video.
Voice Description:
Female, in her 30s with an American accent and is an event host, energetic, clear diction
Text:
Wow. This place looks even better than I imagined. How did they set all this up so perfectly? The lights, the music, everything feels magical. I can't stop smiling right now.
Audio Output:
Voice Description:
Dark villain character, Male voice in their 40s with a British accent. low pitch, gravelly timbre, slow pacing, angry tone at high intensity.
Text:
Welcome back to another episode of our podcast! Today we are diving into an absolutely fascinating topic
Audio Output:
Voice Description:
Demon character, Male voice in their 30s with a Middle Eastern accent. screaming tone at high intensity.
Text:
You dare challenge me, mortal how amusing. Your kind always thinks they can win
Audio Output:
Voice Description:
Mythical godlike magical character, Female voice in their 30s slow pacing, curious tone at medium intensity.
Text:
After all we went through to pull him out of that mess I can't believe he was the traitor
Audio Output:
Describe voices like you would brief a voice actor:
No complex parameters. No training data. Just describe and generate.
Add emotions exactly where they belong in your text:
Our new update finally ships with the feature you asked for.
Supported Emotions: and 12+ more.
Real-time voice synthesis with SNAC neural codec (~0.98 kbps). Perfect for:
#!/usr/bin/env python3
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from snac import SNAC
import soundfile as sf
import numpy as np
CODE_START_TOKEN_ID = 128257
CODE_END_TOKEN_ID = 128258
CODE_TOKEN_OFFSET = 128266
SNAC_MIN_ID = 128266
SNAC_MAX_ID = 156937
SNAC_TOKENS_PER_FRAME = 7
SOH_ID = 128259
EOH_ID = 128260
SOA_ID = 128261
BOS_ID = 128000
TEXT_EOT_ID = 128009
def build_prompt(tokenizer, description: str, text: str) -> str:
"""Build formatted prompt for Maya1."""
soh_token = tokenizer.decode([SOH_ID])
eoh_token = tokenizer.decode([EOH_ID])
soa_token = tokenizer.decode([SOA_ID])
sos_token = tokenizer.decode([CODE_START_TOKEN_ID])
eot_token = tokenizer.decode([TEXT_EOT_ID])
bos_token = tokenizer.bos_token
formatted_text = f' {text}'
prompt = (
soh_token + bos_token + formatted_text + eot_token +
eoh_token + soa_token + sos_token
)
return prompt
def extract_snac_codes(token_ids: list) -> list:
"""Extract SNAC codes from generated tokens."""
try:
eos_idx = token_ids.index(CODE_END_TOKEN_ID)
except ValueError:
eos_idx = len(token_ids)
snac_codes = [
token_id for token_id in token_ids[:eos_idx]
if SNAC_MIN_ID <= token_id <= SNAC_MAX_ID
]
return snac_codes
def unpack_snac_from_7(snac_tokens: list) -> list:
"""Unpack 7-token SNAC frames to 3 hierarchical levels."""
if snac_tokens and snac_tokens[-1] == CODE_END_TOKEN_ID:
snac_tokens = snac_tokens[:-1]
frames = len(snac_tokens) // SNAC_TOKENS_PER_FRAME
snac_tokens = snac_tokens[:frames * SNAC_TOKENS_PER_FRAME]
if frames == 0:
return [[], [], []]
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]
def main():
# Load the best open source voice AI model
print("\n[1/3] Loading Maya1 model...")
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
)
print(f"Model loaded: {len(tokenizer)} tokens in vocabulary")
# Load SNAC audio decoder (24kHz)
print("\n[2/3] Loading SNAC audio decoder...")
snac_model = SNAC.from_pretrained("From the published model card. Full card on the HuggingFace links in the sidebar.
Using it via the API
Once AxForge deploys maya1 for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (maya1 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="maya1" -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.