Instructions to use maya-research/maya1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use maya-research/maya1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-to-speech", model="maya-research/maya1")# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("maya-research/maya1") model = AutoModelForCausalLM.from_pretrained("maya-research/maya1") - Notebooks
- Google Colab
- Kaggle
| language: | |
| - en | |
| license: apache-2.0 | |
| library_name: transformers | |
| pipeline_tag: text-to-speech | |
| # Maya1 | |
| **Maya1** is a state-of-the-art speech model for expressive voice generation, built to capture real human emotion and precise voice design. | |
| **try it:** [Playground](https://www.mayaresearch.ai/studio) | |
| **What it does:** | |
| - Create any voice you can imagine — a 20s British girl, an American guy, or a full-blown demon. | |
| - Make it feel real with emotion tags: laugh, cry, whisper, rage, sigh, gasp. | |
| - It streams instantly, sounds alive, 3B parameters, runs on single GPU | |
| - Outperforms top proprietary models. and Developed by Maya Research. | |
| ## Demos | |
| <table> | |
| <tr> | |
| <td width="50%"> | |
| <strong>Energetic Female Event Host</strong><br/> | |
| <video controls playsinline width="100%" src="https://cdn-uploads.huggingface.co/production/uploads/642a7d4e556ab448a0701ca1/JKzy8zA36qvsOblV-lhd1.mp4"> | |
| Your browser does not support video. | |
| </video> | |
| <details> | |
| <summary>Voice description</summary> | |
| <pre>Female, in her 30s with an American accent and is an event host, energetic, clear diction</pre> | |
| </details> | |
| </td> | |
| <td width="50%"> | |
| <strong>Calm Male Narrator</strong><br/> | |
| <video controls playsinline width="100%" src="https://cdn-uploads.huggingface.co/production/uploads/642a7d4e556ab448a0701ca1/96ntP7hGROwdg9w9Gu5tH.mp4"></video> | |
| <details> | |
| <summary>Voice description</summary> | |
| <pre>Male, late 20s, neutral American, warm baritone, calm pacing</pre> | |
| </details> | |
| </td> | |
| </tr> | |
| </table> | |
| ### Example 1: Energetic Female Event Host | |
| **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:** | |
| <audio controls src="https://cdn-uploads.huggingface.co/production/uploads/642a7d4e556ab448a0701ca1/4zDlBLeFk0Y2rOrQhMW9r.wav"></audio> | |
| --- | |
| ### Example 2: Dark Villain with Anger | |
| **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! <laugh_harder> Today we are diving into an absolutely fascinating topic | |
| ``` | |
| **Audio Output:** | |
| <audio controls src="https://cdn-uploads.huggingface.co/production/uploads/642a7d4e556ab448a0701ca1/mT6FnTrA3KYQnwfJms92X.wav"></audio> | |
| --- | |
| ### Example 3: Demon Character (Screaming Emotion) | |
| **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 <snort> how amusing. Your kind always thinks they can win | |
| ``` | |
| **Audio Output:** | |
| <audio controls src="https://cdn-uploads.huggingface.co/production/uploads/642a7d4e556ab448a0701ca1/oxdns7uACCmLyC-P4H30G.wav"></audio> | |
| --- | |
| ### Example 4: Mythical Goddess with Crying Emotion | |
| **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 <cry> I can't believe he was the traitor | |
| ``` | |
| **Audio Output:** | |
| <audio controls src="https://cdn-uploads.huggingface.co/production/uploads/642a7d4e556ab448a0701ca1/ggzAhM-rEUyv_mPLSALQG.wav"></audio> | |
| --- | |
| ## Why Maya1 is Different: Voice Design Features That Matter | |
| ### 1. Natural Language Voice Control | |
| Describe voices like you would brief a voice actor: | |
| ``` | |
| <description="40-year-old, warm, low pitch, conversational"> | |
| ``` | |
| No complex parameters. No training data. Just describe and generate. | |
| ### 2. Inline Emotion Tags for Expressive Speech | |
| Add emotions exactly where they belong in your text: | |
| ``` | |
| Our new update <laugh> finally ships with the feature you asked for. | |
| ``` | |
| **Supported Emotions:** `<laugh>` `<sigh>` `<whisper>` `<angry>` `<giggle>` `<chuckle>` `<gasp>` `<cry>` and 12+ more. | |
| ### 3. Streaming Audio Generation | |
| Real-time voice synthesis with SNAC neural codec (~0.98 kbps). Perfect for: | |
| - Voice assistants | |
| - Interactive AI agents | |
| - Live content generation | |
| - Game characters | |
| - Podcasts and audiobooks | |
| ### 4. Production-Ready Infrastructure | |
| - Runs on single GPU | |
| - vLLM integration for scale | |
| - Automatic prefix caching for efficiency | |
| - 24 kHz audio output | |
| - WebAudio compatible for browser playback | |
| --- | |
| ## How to Use maya1: Download and Run in Minutes | |
| ### Quick Start: Generate Voice with Emotions | |
| ```python | |
| #!/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'<description="{description}"> {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("hubertsiuzdak/snac_24khz").eval() | |
| if torch.cuda.is_available(): | |
| snac_model = snac_model.to("cuda") | |
| print("SNAC decoder loaded") | |
| # Design your voice with natural language | |
| 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." | |
| print("\n[3/3] Generating speech...") | |
| print(f"Description: {description}") | |
| print(f"Text: {text}") | |
| # Create prompt with proper formatting | |
| prompt = build_prompt(tokenizer, description, text) | |
| # Debug: Show prompt details | |
| print(f"\nPrompt preview (first 200 chars):") | |
| print(f" {repr(prompt[:200])}") | |
| print(f" Prompt length: {len(prompt)} chars") | |
| # Generate emotional speech | |
| inputs = tokenizer(prompt, return_tensors="pt") | |
| print(f" Input token count: {inputs['input_ids'].shape[1]} tokens") | |
| if torch.cuda.is_available(): | |
| inputs = {k: v.to("cuda") for k, v in inputs.items()} | |
| with torch.inference_mode(): | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=2048, # Increase to let model finish naturally | |
| min_new_tokens=28, # At least 4 SNAC frames | |
| temperature=0.4, | |
| top_p=0.9, | |
| repetition_penalty=1.1, # Prevent loops | |
| do_sample=True, | |
| eos_token_id=CODE_END_TOKEN_ID, # Stop at end of speech token | |
| pad_token_id=tokenizer.pad_token_id, | |
| ) | |
| # Extract generated tokens (everything after the input prompt) | |
| generated_ids = outputs[0, inputs['input_ids'].shape[1]:].tolist() | |
| print(f"Generated {len(generated_ids)} tokens") | |
| # Debug: Check what tokens we got | |
| print(f" First 20 tokens: {generated_ids[:20]}") | |
| print(f" Last 20 tokens: {generated_ids[-20:]}") | |
| # Check if EOS was generated | |
| if CODE_END_TOKEN_ID in generated_ids: | |
| eos_position = generated_ids.index(CODE_END_TOKEN_ID) | |
| print(f" EOS token found at position {eos_position}/{len(generated_ids)}") | |
| # Extract SNAC audio tokens | |
| snac_tokens = extract_snac_codes(generated_ids) | |
| print(f"Extracted {len(snac_tokens)} SNAC tokens") | |
| # Debug: Analyze token types | |
| snac_count = sum(1 for t in generated_ids if SNAC_MIN_ID <= t <= SNAC_MAX_ID) | |
| other_count = sum(1 for t in generated_ids if t < SNAC_MIN_ID or t > SNAC_MAX_ID) | |
| print(f" SNAC tokens in output: {snac_count}") | |
| print(f" Other tokens in output: {other_count}") | |
| # Check for SOS token | |
| if CODE_START_TOKEN_ID in generated_ids: | |
| sos_pos = generated_ids.index(CODE_START_TOKEN_ID) | |
| print(f" SOS token at position: {sos_pos}") | |
| else: | |
| print(f" No SOS token found in generated output!") | |
| if len(snac_tokens) < 7: | |
| print("Error: Not enough SNAC tokens generated") | |
| return | |
| # Unpack SNAC tokens to 3 hierarchical levels | |
| levels = unpack_snac_from_7(snac_tokens) | |
| frames = len(levels[0]) | |
| print(f"Unpacked to {frames} frames") | |
| print(f" L1: {len(levels[0])} codes") | |
| print(f" L2: {len(levels[1])} codes") | |
| print(f" L3: {len(levels[2])} codes") | |
| # Convert to tensors | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| codes_tensor = [ | |
| torch.tensor(level, dtype=torch.long, device=device).unsqueeze(0) | |
| for level in levels | |
| ] | |
| # Generate final audio with SNAC decoder | |
| print("\n[4/4] Decoding to audio...") | |
| with torch.inference_mode(): | |
| z_q = snac_model.quantizer.from_codes(codes_tensor) | |
| audio = snac_model.decoder(z_q)[0, 0].cpu().numpy() | |
| # Trim warmup samples (first 2048 samples) | |
| if len(audio) > 2048: | |
| audio = audio[2048:] | |
| duration_sec = len(audio) / 24000 | |
| print(f"Audio generated: {len(audio)} samples ({duration_sec:.2f}s)") | |
| # Save your emotional voice output | |
| output_file = "output.wav" | |
| sf.write(output_file, audio, 24000) | |
| print(f"\nVoice generated successfully!") | |
| if __name__ == "__main__": | |
| main() | |
| ``` | |
| ### Advanced: Production Streaming with vLLM | |
| For production deployments with real-time streaming, use our vLLM script: | |
| **Download:** [vllm_streaming_inference.py](https://huggingface.co/maya-research/maya1/blob/main/vllm_streaming_inference.py) | |
| **Key Features:** | |
| - Automatic Prefix Caching (APC) for repeated voice descriptions | |
| - WebAudio ring buffer integration | |
| - Multi-GPU scaling support | |
| - Sub-100ms latency for real-time applications | |
| --- | |
| ## Technical Excellence: What Makes Maya1 the Best | |
| ### Architecture: 3B-Parameter Llama Backbone for Voice | |
| We pretrained a **3B-parameter decoder-only transformer** (Llama-style) to predict **SNAC neural codec tokens** instead of raw waveforms. | |
| **The Flow:** | |
| ``` | |
| <description="..."> text → tokenize → generate SNAC codes (7 tokens/frame) → decode → 24 kHz audio | |
| ``` | |
| **Why SNAC?** Multi-scale hierarchical structure (≈12/23/47 Hz) keeps autoregressive sequences compact for real-time streaming at ~0.98 kbps. | |
| ### Training Data: What Makes Our Voice AI the Best | |
| **Pretraining:** Internet-scale English speech corpus for broad acoustic coverage and natural coarticulation. | |
| **Supervised Fine-Tuning:** Proprietary curated dataset of studio recordings with: | |
| - Human-verified voice descriptions | |
| - 20+ emotion tags per sample | |
| - Multi-accent English coverage | |
| - Character and role variations | |
| **Data Pipeline Excellence:** | |
| 1. 24 kHz mono resampling with -23 LUFS normalization | |
| 2. VAD silence trimming with duration bounds (1-14s) | |
| 3. Forced alignment (MFA) for clean phrase boundaries | |
| 4. MinHash-LSH text deduplication | |
| 5. Chromaprint audio deduplication | |
| 6. SNAC encoding with 7-token frame packing | |
| ### Voice Design Experiments: Why Natural Language Won | |
| We tested 4 conditioning formats. Only one delivered production-quality results: | |
| **❌ Colon format:** `{description}: {text}` - Format drift, model spoke descriptions | |
| **❌ Angle-list attributes:** `<{age}, {pitch}, {character}>` - Too rigid, poor generalization | |
| **❌ Key-value tags:** `<age=40><pitch=low>` - Token bloat, brittle to mistakes | |
| **✅ XML-attribute (WINNER):** `<description="40-yr old, low-pitch, warm">` - Natural language, robust, scalable | |
| --- | |
| ## Use Cases | |
| ### Game Character Voices | |
| Generate unique character voices with emotions on-the-fly. No voice actor recording sessions. | |
| ### Podcast & Audiobook Production | |
| Narrate content with emotional range and consistent personas across hours of audio. | |
| ### AI Voice Assistants | |
| Build conversational agents with natural emotional responses in real-time. | |
| ### Video Content Creation | |
| Create voiceovers for YouTube, TikTok, and social media with expressive delivery. | |
| ### Customer Service AI | |
| Deploy empathetic voice bots that understand context and respond with appropriate emotions. | |
| ### Accessibility Tools | |
| Build screen readers and assistive technologies with natural, engaging voices. | |
| --- | |
| ## Frequently Asked Questions | |
| **Q: What makes Maya1 different?** | |
| A: We're the only open source model offering 20+ emotions, zero-shot voice design, production-ready streaming, and 3B parameters—all in one package. | |
| **Q: Can I use this commercially?** | |
| A: Absolutely. Apache 2.0 license. Build products, deploy services, monetize freely. | |
| **Q: What languages does it support?** | |
| A: Currently English with multi-accent support. Future models will expand to languages and accents underserved by mainstream voice AI. | |
| **Q: How does it compare to ElevenLabs, Murf.ai, or other closed-source tools?** | |
| A: Feature parity with emotions and voice design. Advantage: you own the deployment, pay no per-second fees, and can customize the model. | |
| **Q: Can I fine-tune on my own voices?** | |
| A: Yes. The model architecture supports fine-tuning on custom datasets for specialized voices. | |
| **Q: What GPU do I need?** | |
| A: Single GPU with 16GB+ VRAM (A100, H100, or consumer RTX 4090). | |
| **Q: Is streaming really real-time?** | |
| A: Yes. SNAC codec enables sub-100ms latency with vLLM deployment. | |
| --- | |
| ## Comparison | |
| | Feature | Maya1 | ElevenLabs | OpenAI TTS | Coqui TTS | | |
| |---------|-------------|------------|------------|-----------| | |
| | **Open Source** | Yes | No | No | Yes | | |
| | **Emotions** | 20+ | Limited | No | No | | |
| | **Voice Design** | Natural Language | Voice Library | Fixed | Complex | | |
| | **Streaming** | Real-time | Yes | Yes | No | | |
| | **Cost** | Free | Pay-per-use | Pay-per-use | Free | | |
| | **Customization** | Full | Limited | None | Moderate | | |
| | **Parameters** | 3B | Unknown | Unknown | <1B | | |
| --- | |
| ## Model Metadata | |
| **Developed by:** Maya Research | |
| **Website:** [mayaresearch.ai](https://mayaresearch.ai) | |
| **Backed by:** South Park Commons | |
| **Model Type:** Text-to-Speech, Emotional Voice Synthesis, Voice Design AI | |
| **Language:** English (Multi-accent) | |
| **Architecture:** 3B-parameter Llama-style transformer with SNAC codec | |
| **License:** Apache 2.0 (Fully Open Source) | |
| **Training Data:** Proprietary curated + Internet-scale pretraining | |
| **Audio Quality:** 24 kHz, mono, ~0.98 kbps streaming | |
| **Inference:** vLLM compatible, single GPU deployment | |
| **Status:** Production-ready (Novermber 2025) | |
| --- | |
| ## Getting Started | |
| ### Hugging Face Model Hub | |
| ```bash | |
| # Clone the model repository | |
| git lfs install | |
| git clone https://huggingface.co/maya-research/maya1 | |
| # Or load directly in Python | |
| from transformers import AutoModelForCausalLM | |
| model = AutoModelForCausalLM.from_pretrained("maya-research/maya1") | |
| ``` | |
| ### Requirements | |
| ```bash | |
| pip install torch transformers snac soundfile | |
| ``` | |
| ### Additional Resources | |
| - **Full emotion list:** [emotions.txt](https://huggingface.co/maya-research/maya1/blob/main/emotions.txt) | |
| - **Prompt examples:** [prompt.txt](https://huggingface.co/maya-research/maya1/blob/main/prompt.txt) | |
| - **Streaming script:** [vllm_streaming_inference.py](https://huggingface.co/maya-research/maya1/blob/main/vllm_streaming_inference.py) | |
| --- | |
| ## Citations & References | |
| If you use Maya1 in your research or product, please cite: | |
| ```bibtex | |
| @misc{maya1voice2025, | |
| title={Maya1: Open Source Voice AI with Emotional Intelligence}, | |
| author={Maya Research}, | |
| year={2025}, | |
| publisher={Hugging Face}, | |
| howpublished={\url{https://huggingface.co/maya-research/maya1}}, | |
| } | |
| ``` | |
| **Key Technologies:** | |
| - SNAC Neural Audio Codec: https://github.com/hubertsiuzdak/snac | |
| - Mimi Adversarial Codec: https://huggingface.co/kyutai/mimi | |
| - vLLM Inference Engine: https://docs.vllm.ai/ | |
| --- | |
| ## Why We Build Open Source Voice AI | |
| Voice AI will be everywhere, but it's fundamentally broken for 90% of the world. Current voice models only work well for a narrow slice of English speakers because training data for most accents, languages, and speaking styles simply doesn't exist. | |
| **Maya Research** builds emotionally intelligent, native voice models that finally let the rest of the world speak. We're open source because we believe voice intelligence should not be a privilege reserved for the few. | |
| **Technology should be open** - The best voice AI tools should not be locked behind proprietary APIs charging per-second fees. | |
| **Community drives innovation** - Open source accelerates research. When developers worldwide can build on our work, everyone wins. | |
| **Voice intelligence for everyone** - We're building for the 90% of the world ignored by mainstream voice AI. That requires open models, not closed platforms. | |
| --- | |
| **Maya Research** - Building voice intelligence for the 90% of the world left behind by mainstream AI. | |
| **Website:** [mayaresearch.ai](https://mayaresearch.ai) | |
| **Twitter/X:** [@mayaresearch_ai](https://x.com/mayaresearch_ai) | |
| **Hugging Face:** [maya-research](https://huggingface.co/maya-research) | |
| **Backed by:** South Park Commons | |
| **License:** Apache 2.0 | |
| **Mission:** Emotionally intelligent voice models that finally let everyone speak |