You need to agree to share your contact information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

HyperneuronAI Logo

HyperneuronAI Text-to-Speech Model

Multilingual Open-Source Text-to-Speech for Indian Languages

License: MIT

Model Details

Model Description

This is an open-source Text-to-Speech model developed by HyperneuronAI. The model is designed to generate natural speech from text and now supports all 22 officially recognized languages of India: Assamese, Bengali, Bodo, Dogri, Gujarati, Hindi, Kannada, Kashmiri, Konkani, Maithili, Malayalam, Manipuri, Marathi, Nepali, Odia, Punjabi, Sanskrit, Santali, Sindhi, Tamil, Telugu, and Urdu.

What's new: this release expands the original 4-language model (Hindi, Assamese, Punjabi, Kannada) to full coverage of all 22 scheduled Indian languages, using a replay-based fine-tuning strategy so quality on the original 4 languages is preserved while adding 18 new ones. See Training Details below.

Quipus is 2x Faster than realtime and lower latency TTFB ~120ms.โ€ 

โšกQuipus Performance

Metric Value
First Audio ~120 msโ€ 
Generation Speed 2ร— Realtimeโ€ 
Languages 22

โ€  Inherited from the prior 4-language release โ€” architecture and generation loop are unchanged, so these should still hold, but they have not been re-benchmarked specifically against the 22-language checkpoint yet. Treat as provisional until re-verified.

Sneak Peak

In model Inference performance image

๐Ÿ—บ๏ธ Roadmap

  • ๐Ÿ˜Š Emotion-aware Speech
  • ๐ŸŒ Arabic & English support as part of worldwide contribution
  • โšก Streaming Backend Optimizations
  • Training and Inference Code

The model uses a Qwen3 backbone and is intended for research, experimentation, and building voice AI applications. Users are free to fine-tune the model for custom voices and additional languages.

Voice cloning capabilities are not provided with this release to encourage responsible AI usage.

  • Developed by: HyperneuronAI
  • Funded by: HyperneuronAI
  • Shared by: HyperneuronAI
  • Model type: Text-to-Speech
  • Backbone: Qwen3
  • Languages: Assamese, Bengali, Bodo, Dogri, Gujarati, Hindi, Kannada, Kashmiri, Konkani, Maithili, Malayalam, Manipuri, Marathi, Nepali, Odia, Punjabi, Sanskrit, Santali, Sindhi, Tamil, Telugu, Urdu
  • License: MIT

Audio Samples

Language Sample
๐Ÿ‡ฎ๐Ÿ‡ณ Kannada
๐Ÿ‡ฎ๐Ÿ‡ณ Hindi
๐Ÿ‡ฎ๐Ÿ‡ณ Punjabi
๐Ÿ‡ฎ๐Ÿ‡ณ Assamese
๐Ÿ‡ฎ๐Ÿ‡ณ Tamil
๐Ÿ‡ฎ๐Ÿ‡ณ Telugu
๐Ÿ‡ฎ๐Ÿ‡ณ Bengali
๐Ÿ‡ฎ๐Ÿ‡ณ Bodo
๐Ÿ‡ฎ๐Ÿ‡ณ Dogri
๐Ÿ‡ฎ๐Ÿ‡ณ Gujarati
๐Ÿ‡ฎ๐Ÿ‡ณ Kashmiri
๐Ÿ‡ฎ๐Ÿ‡ณ Konkani
๐Ÿ‡ฎ๐Ÿ‡ณ Maithili
๐Ÿ‡ฎ๐Ÿ‡ณ Malayalam
๐Ÿ‡ฎ๐Ÿ‡ณ Manipuri
๐Ÿ‡ฎ๐Ÿ‡ณ Marathi
๐Ÿ‡ณ๐Ÿ‡ต Nepali
๐Ÿ‡ฎ๐Ÿ‡ณ Odia
๐Ÿ‡ฎ๐Ÿ‡ณ Sanskrit
๐Ÿ‡ฎ๐Ÿ‡ณ Santali
๐Ÿ‡ฎ๐Ÿ‡ณ Sindhi
๐Ÿ‡ฎ๐Ÿ‡ณ Urdu

Samples for the 18 newly added languages are not yet uploaded to this repo โ€” the table above only has the original 4. Upload new .wav files to artifacts/ and add a row per language (or generate them fresh with the code in "How to Get Started" below) before this table reflects full 22-language coverage.

๐ŸŽ™๏ธ Available Voices

Language Speakers
๐Ÿ‡ฎ๐Ÿ‡ณ Assamese Dipankar(Male) โ€ข Kavita(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Bengali Arindam(Male) โ€ข Rupa(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Bodo Daimalu(Male) โ€ข Mainao(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Dogri Balwant(Male) โ€ข Shakti(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Gujarati Nirav(Male) โ€ข Hetal(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Hindi Raman(Male) โ€ข Anvita(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Kannada Manjunath(Male) โ€ข Sindhura(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Kashmiri Farooq(Male) โ€ข Habba(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Konkani Ramnath(Male) โ€ข Shweta(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Maithili Vidyapati(Male) โ€ข Mythili(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Malayalam Unnikrishnan(Male) โ€ข Lakshmi(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Manipuri Ibomcha(Male) โ€ข Chaoba(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Marathi Sachin(Male) โ€ข Smita(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Nepali Prakash(Male) โ€ข Sunita(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Odia Jagannath(Male) โ€ข Sunanda(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Punjabi Amanjit(Male) โ€ข Supreet(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Sanskrit Aryan(Male) โ€ข Devavani(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Santali Sido(Male) โ€ข Phulmani(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Sindhi Hari(Male) โ€ข Kajal(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Tamil Murugan(Male) โ€ข Kamala(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Telugu Ravi(Male) โ€ข Padma(Female)
๐Ÿ‡ฎ๐Ÿ‡ณ Urdu Salman(Male) โ€ข Zoya(Female)

44 speaker voices total (2 per language ร— 22 languages).

Model Sources

  • Repository: Realtime optimized streaming inference code is planned for a future release.
  • Demo: Coming soon.

Uses

Direct Use

This model can be used for Text-to-Speech generation in voice AI applications, including:

โœ…
Conversational AI
AI Calling
Voice Assistants
Accessibility
Customer Support
IVR
Edge Devices
Research

Fine-Tuning

Users may fine-tune this model for:

  • New speakers
  • Domain-specific speech styles
  • Additional languages beyond the current 22
  • Custom application-specific voices

Out-of-Scope Use

This model should not be used for unethical, harmful, deceptive, or illegal purposes, including but not limited to:

  • Impersonation without consent
  • Fraudulent voice generation
  • Misinformation or manipulation
  • Harassment or abuse
  • Any use that violates applicable laws or platform policies

HyperneuronAI is not responsible for misuse of this model by third parties.

How to Get Started

vLLM code examples.

#Install libraries if not installed
# Download vlllm based on cuda version
#!pip install vllm==0.19.0
#!pip install -q soundfile

# ==========================================
# vLLM SERVING - Colab-safe audio saving
# ==========================================
"""
You can use vllm for inferencing as it provides optimised control over cuda profiling and inturn better response time.
"""
import time
import re
import torch
import numpy as np
import soundfile as sf
from IPython.display import Audio, display

from vllm import LLM, SamplingParams
from snac import SNAC

VLLM_MODEL_PATH = "hyperneuronAILabs/quipus-0.6-speechv1"
DEFAULT_SPEAKER = "Anvita"  # any of the 44 voices in "Available Voices" above
FRAME_LAYER_PATTERN = [0, 1, 2, 2, 1, 2, 2]
SAMPLE_RATE = 24000

llm = LLM(
    model=VLLM_MODEL_PATH,
    dtype="bfloat16",
    max_model_len=2048,
    gpu_memory_utilization=0.20,
    enforce_eager=False,
)

tok = llm.get_tokenizer()

AUDIO_END_ID = tok.convert_tokens_to_ids("<audio_end>")

snac_decoder = (
    SNAC.from_pretrained("hubertsiuzdak/snac_24khz")
    .eval()
    .cuda()
)

def build_prompt_prefix(speaker, text):
    return f"{speaker}: {text} <audio_start> "

def quipus_tts(
    text,
    speaker=DEFAULT_SPEAKER,
    out="vllm_out.wav",
    temperature=0.7,
    top_p=0.9,
):
    prompt = build_prompt_prefix(speaker, text)

    sampling_params = SamplingParams(
        temperature=temperature,
        top_p=top_p,
        repetition_penalty=1.1,
        max_tokens=1024,
        stop_token_ids=[AUDIO_END_ID],
    )

    t0 = time.time()
    result = llm.generate([prompt], sampling_params)
    gen_time = time.time() - t0

    out_ids = list(result[0].outputs[0].token_ids)
    toks = tok.convert_ids_to_tokens(out_ids)

    parsed = []
    for token in toks:
        match = re.fullmatch(r"<snac_l(\d+)_c(\d+)>", token)
        if match:
            parsed.append((int(match.group(1)), int(match.group(2))))

    l0, l1, l2 = [], [], []
    i = 0

    while i + 7 <= len(parsed):
        window = parsed[i:i + 7]

        if [layer for layer, _ in window] == FRAME_LAYER_PATTERN:
            codes = [code for _, code in window]

            l0.append(codes[0])
            l1.extend([codes[1], codes[4]])
            l2.extend([codes[2], codes[3], codes[5], codes[6]])

            i += 7
        else:
            i += 1

    if not l0:
        print("No valid SNAC frames from vLLM output.")
        return None

    with torch.inference_mode():
        wav = snac_decoder.decode(
            [
                torch.tensor([l0], dtype=torch.long, device="cuda"),
                torch.tensor([l1], dtype=torch.long, device="cuda"),
                torch.tensor([l2], dtype=torch.long, device="cuda"),
            ]
        )

    audio_sec = wav.shape[-1] / SAMPLE_RATE

    pcm = wav.detach().squeeze().float().cpu().numpy()
    pcm = np.clip(pcm, -1.0, 1.0)

    sf.write(out, pcm, SAMPLE_RATE)

    n = len(out_ids)

    display(Audio(out, rate=SAMPLE_RATE))

    return out

quipus_tts(
    "เคฏเคน เคฎเฅ‰เคกเคฒ เคธเฅเคชเฅ€เคš-เคŸเฅ‚-เคŸเฅ‡เค•เฅเคธเฅเคŸ เคฎเฅ‰เคกเคฒ เคนเฅˆ , เคœเคฟเคธเฅ‡ เคจเคฟเค–เคฟเคฒ เคจเฅ‡ เคตเคฟเค•เคธเคฟเคค เค•เคฟเคฏเคพ เคนเฅˆเฅค เฆเฆ‡ เฆฎเฆกเง‡เฆฒเฆŸเง‹ เฆนเงˆเฆ›เง‡ เฆธเงเฆชเฆฟเฆš เฆŸเง เฆŸเง‡เฆ•เงเฆธเฆŸ เฆฎเฆกเง‡เฆฒ, เฆจเฆฟเฆ–เฆฟเฆฒเง‡ เฆฌเฆฟเฆ•เฆถเฆฟเฆค เฆ•เงฐเฆฟเฆ›เง‡",
    speaker=DEFAULT_SPEAKER,
)

Training Details

Training Data

The model was fine-tuned on the AI4Bharat Rasa dataset, covering all 22 officially recognized languages of India:

Training Procedure

  • Base checkpoint: this repo's prior release (4-language: Hindi, Assamese, Punjabi, Kannada).
  • Method: full parameter fine-tuning โ€” all 608,362,496 parameters trained.
  • Audio representation: SNAC neural codec at 24kHz, hierarchical 3-layer codebook, flattened into a 7-token-per-frame sequence (Orpheus-style interleave) so all three resolution layers stay time-aligned.
  • Prompt format: "{speaker}: {text} <audio_start> {snac_tokens} <audio_end>" โ€” loss is computed only on the audio-token portion; the text prompt is masked out.
  • Tokenizer: unchanged from the base checkpoint โ€” the SNAC control tokens were already present in its vocabulary, so no vocabulary resize was needed this round.

Training Hyperparameters

Training hyperparameters will be added in a future update.

Evaluation

Testing Data

Informal qualitative listening checks were run across all 22 languages using fixed test phrases and each language's paired speakers. A formal held-out evaluation set has not yet been built for this release.

Metrics

Formal evaluation metrics such as MOS, speaker similarity, intelligibility, word error rate, and latency benchmarks are not yet published for the 22-language checkpoint.

Results

Evaluation results will be added after broader testing and benchmarking.

Technical Specifications

Model Architecture and Objective

This is a Text-to-Speech model with a Qwen3 backbone. The model is optimized to generate speech from input text in supported Indian languages.

Further architecture details will be added in future documentation.

Compute Infrastructure

Compute details will be added in a future update.

Software

Software and inference dependencies will be added with the official inference code.

Limitations

  • Output quality may vary depending on language, text normalization, punctuation, and input style.
  • The model may struggle with code-mixed text, rare words, abbreviations, numerals, and domain-specific terminology.
  • Voice cloning is not included in this release.
  • Realtime streaming inference code is planned but not included yet.

Ethical Considerations

This model is released to support open-source development of Indian language voice AI. Users should ensure responsible deployment, obtain consent where required, and avoid deceptive or harmful applications.

Citation

Citation details will be added in a future release.

Authors

Name
Nikhil Yadav
Ramanjit Singh
Pradeep Yadav
HyperneuronAI Research

๐Ÿค Contact

For questions, collaborations, or contributions, please contact HyperneuronAI

๐Ÿ“ง support@hyperneuron.in

๐ŸŒ https://www.hyperneuronai.com

๐Ÿค— https://huggingface.co/hyperneuronAILabs

Downloads last month
3
Safetensors
Model size
0.6B params
Tensor type
F32
ยท
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for hyperneuronAILabs/quipus-0.6-speechv2

Finetuned
(1)
this model