rumik-ai/rumik-oss-1-base
<p align="center"> <img src="assets/rumik-logo.png" alt="rumik.ai" width="100%"> </p>
<p align="center"> <a href="https://rumik.ai/research/rumik-oss">blog</a> | <a href="https://huggingface.co/rumik-ai/rumik-oss-1">post-trained model</a> | <a href="https://x.com/rumik_ai">x</a> | <a href="https://discord.gg/wa7sWvq8ty">discord</a> | technical report: coming soon </p>
rumik-oss 1 base
rumik-oss 1 base is a 3b multilingual text-to-speech model from rumik ai, released at the end of named-speaker training, before the subsequent delivery-control fine-tuning and reinforcement learning used for rumik-oss 1. it supports speaker-conditioned synthesis with 24 khz audio output and provides a starting point for further speech-model training and adaptation.
model overview
our blog describes the training curriculum and development of rumik-oss 1.
the model extends tiny aya fire with discrete audio tokens from the mimi codec. following the flattened codec-token formulation used in llama-mimi, a single causal transformer predicts eight codebook tokens per audio frame before advancing to the next frame. the frozen mimi decoder reconstructs the generated sequence as a waveform.
training progresses from english speech generation to indic-language continuation and named-speaker adaptation. the released checkpoint includes ira, aisha, siya, and zoya and accepts native-script, romanized, or code-switched text. speaker conditioning uses a name prefix followed by the text to synthesize.
this base release has not undergone description-conditioned delivery or inline vocalization training. use the post-trained model for tone, accent, pace, and vocalization controls.
inference
rumik-oss 1 base generates audio tokens. decoding them to a waveform is a separate step that uses the mimi codec, bundled in this repository under codec/.
transformers.pipeline("text-to-speech") is not supported for this model. use the one-shot example to generate audio tokens with generate_audio() and decode them into a waveform with mimi.
installation
pip install -r requirements.txtrequires an nvidia gpu with cuda support. the one-shot example below also needs soundfile to write a wav.
one-shot example
text in, speech.wav out:
"""rumik-oss 1 base: text -> speech.wav"""
import soundfile as sf
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, MimiModel
REPO = "rumik-ai/rumik-oss-1-base"
SPEAKER = "Ira"
TEXT = "Hello, how are you today?"
tokenizer = AutoTokenizer.from_pretrained(REPO, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
REPO, trust_remote_code=True, dtype=torch.bfloat16
).eval().cuda()
mimi = MimiModel.from_pretrained(REPO, subfolder="codec").eval().cuda()
# [BOS] <text> Ira: text <audio>
# the tokenizer adds [BOS] itself, so it is not written here
prompt = f'<text>{SPEAKER}: {TEXT}<audio>'
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 1. text -> audio tokens
ids = model.generate_audio(**inputs, max_new_tokens=2048,
temperature=0.8, top_k=30, do_sample=True)
audio_tokens = ids[0].tolist()[inputs.input_ids.shape[1]:]
# 2. audio tokens -> codec frames -> waveform
codes = model.audio_tokens_to_codes(audio_tokens)
with torch.inference_mode():
wav = mimi.decode(codes.to(mimi.device)).audio_values[0, 0]
sf.write("speech.wav", wav.float().cpu().numpy(), 24000)
print(f"{len(audio_tokens)} tokens -> {len(audio_tokens) / 100:.2f}s -> speech.wav")SPEAKER accepts Ira, Aisha, Siya, or Zoya. the model was trained on a flat token layout, not a chat template:
[BOS] <text> {speaker}: spoken text <audio> ... </audio>this checkpoint has no description-conditioned delivery or inline vocalization controls; use the post-trained model for those.
command line
python inference.py --speaker Ira --text "Hello, how are you today?" --output speech.wavfurther training
the release includes the language-model weights, learned stop predictor, tokenizer, and mimi codec. the model can be loaded through AutoModelForCausalLM.from_pretrained(..., trust_remote_code=True) for adaptation. preserve the bundled tokenizer's audio-token mapping when preparing training data. optimizer state is not included; further training starts with a new optimizer.
license
rumik-oss 1 base is available for research and non-commercial use under tiny aya fire's cc-by-nc 4.0 license with an acceptable-use addendum.
permitted non-commercial uses include speech-synthesis research, benchmarking, teaching, and fine-tuning for research experiments. redistribution and adaptations must retain attribution, license links, upstream notices, and an indication of modifications. all use must comply with cohere labs' acceptable-use policy. the license does not grant permission for commercial products or paid synthesis services.
the bundled mimi codec is separately licensed under cc-by-4.0. its commercial permissions do not extend to the tiny aya-derived tts weights.
the full license text is in `LICENSE`, and `NOTICE.md` records the modifications made to tiny aya fire, as cc-by-nc 4.0 requires.
acknowledgments
rumik-oss 1 base builds on tiny aya fire, mimi, llama-mimi, and torchtitan. we thank their authors for making this work available.
contact
citation
if you find rumik-oss 1 base useful in your research, please cite our work:
@unpublished{govindu2026rumikoss1,
title = {{rumik-oss 1 technical report}},
author = {Govindu Pranav and Anant Shukla and Suryansh Shakya and Aman Anand and Vatsal Bharti},
year = {2026},
note = {In preparation}
}