Hume TADA
TADA is a unified speech-language model that synchronizes speech and text into a single stream via 1:1 alignment, enabling high-fidelity speech synthesis with reduced computational overhead. It solves inefficiencies in traditional TTS models by dynamically determining duration and prosody per text token, eliminating fixed frame rates and transcript hallucination. It is for developers building text-to-speech and speech continuation applications.
✨ Key features
- 1:1 token alignment between text and speech vectors
- Dynamic duration synthesis per text token
- Dual-stream generation of text and speech
- Efficient: ~0.12x RTF on H100 with cached prompts
- Multilingual support with language-specific aligners
- Prompt caching to skip encoder on future runs
🎯 Use cases
- Text-to-speech synthesis with natural prosody
- Speech continuation from a reference audio prompt
- Multilingual speech synthesis (e.g., Japanese, Spanish)
- Building expressive voice assistants or audiobook generators
📦 Installation
🧰 Requirements: Requires access to Meta Llama 3.2 models (accept license on Hugging Face), Python environment with PyTorch and CUDA for GPU inference.
pip install hume-tada
Build from source
git clone https://github.com/HumeAI/tada.git
cd tada
pip install -e .
🚀 Usage
import torch
import torchaudio
from tada.modules.encoder import Encoder, EncoderOutput
from tada.modules.tada import TadaForCausalLM
device = "cuda"
# Encoder is loaded separately (not inside the model)
encoder = Encoder.from_pretrained("HumeAI/tada-codec", subfolder="encoder").to(device)
model = TadaForCausalLM.from_pretrained("HumeAI/tada-3b-ml", torch_dtype=torch.bfloat16).to(device)
audio, sample_rate = torchaudio.load("samples/ljspeech.wav")
audio = audio.to(device)
prompt_text = "The examination and testimony of the experts, enabled the commission to conclude that five shots may have been fired."
prompt = encoder(
audio, text=[prompt_text], sample_rate=sample_rate
)
# Optional: save prompt to skip encoder on future runs
# prompt.save("prompt_cache.pt")
# prompt = EncoderOutput.load("prompt_cache.pt", device=device)
output = model.generate(
prompt=prompt,
text="Please call Stella. Ask her to bring these things with her from the store.",
)
⚠️ Good to know
The built-in ASR for prompt alignment is English-only; for non-English prompts, you must provide the transcript to maintain alignment quality.
❓ FAQ
What are the model sizes available?
TADA-1B (based on Llama 3.2 1B) and TADA-3B-ML (based on Llama 3.2 3B) are available on Hugging Face.
How do I use a language other than English?
Pass the language parameter when loading the encoder, e.g., language='ja' for Japanese. Supported languages include ar, ch, de, es, fr, it, ja, pl, pt.
Can I cache the encoder output to speed up inference?
Yes, use EncoderOutput.save() and EncoderOutput.load() to save and reuse prompts, avoiding re-encoding.
What are the licensing terms?
Model weights are under the Llama 3.2 Community License, and the code is under MIT. You must accept the Llama license to use the models.
📊 Repository
🤖 Overview, features, install steps and FAQ were generated from the project's README on Sep 4, 2026. Always check the original source before running commands.