Downloads · 30 days
0
Mamsu/chatterbox-tts-et-lobiseja
chatterbox-tts-et-lobiseja is a text-to-speech model from Mamsu. Use it when you need text read aloud. It is set up for pytorch. The card lists the license as mit.
Estonian text-to-speech. A hobby fine-tune of Chatterbox Multilingual V3 that teaches the model to read Estonian legibly while keeping zero-shot voice cloning intact. lobiseja is Estonian for "chatterbox."
Downloads · 30 days
0
Access
Public
Updated Jun 18, 2026
Repo size
3.2 GB
Likes
0
Public
Click a slice to open those files.
.safetensors3.2 GB · 100%
From the Hugging Face model README
Estonian text-to-speech. A hobby fine-tune of Chatterbox Multilingual V3 that teaches the model to read Estonian legibly while keeping zero-shot voice cloning intact. lobiseja is Estonian for "chatterbox."
The goal was "intelligible Estonian", and I think we got more than that.
Mostly inspired by the work of TartuNLP and their Neurokõne synthesiser. Where Neurokõne is convolutional (DeepVoice 3), this is an autoregressive base. Training the adapter took 80 minutes on a single RTX 3090.
I am not educated in this area. This is purely a curiosity that turned out to be a quite fun adventure.
Mari, Albert, Vesta and Kalev were part of the original training set.
Dwight and Samantha are zero-shot English references.
| Voice | Complex numbers | Phonological length (välde) |
|---|---|---|
| Mari | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/mari_nr.wav"></audio> | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/mari_valde.wav"></audio> |
| Albert | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/albert_nr.wav"></audio> | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/albert_valde.wav"></audio> |
| Vesta | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/vesta_nr.wav"></audio> | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/vesta_valde.wav"></audio> |
| Kalev | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/kalev_nr.wav"></audio> | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/kalev_valde.wav"></audio> |
| Dwight | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/dwight_nr.wav"></audio> | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/dwight_valde.wav"></audio> |
| Samantha | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/samantha_nr.wav"></audio> | <audio controls><source type="audio/wav" src="https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja/resolve/main/samples/samantha_valde.wav"></gitaudio> |
Volume levels vary due to differences in reference audio volume levels.
git clone https://huggingface.co/Mamsu/chatterbox-tts-et-lobiseja
cd chatterbox-tts-et-lobiseja
# recommended to use uv
uv python pin 3.11
uv sync
# or, with pip (use Python 3.11 yourself):
pip install -r requirements.txt
# Tested on Python 3.11
from chatterbox_et import EstonianTTS # in this repo, required for preprocessing (see Files)
# Load straight from the cloned repo dir — the weights are already here, no re-download.
tts = EstonianTTS.from_local(".")
# Built-in default voice:
wav, sr = tts.synth("Tere! Kell on 15 ja täna on 28. mai 2016.")
# Your own reference voice (ideally in Estonian):
wav, sr = tts.synth("Linna tänavad viivad linna.", audio_prompt_path="ref.wav")
# With generation controls (defaults shown):
wav, sr = tts.synth(
"Linna tänavad viivad linna.",
temperature=0.8,
cfg_weight=0.5,
exaggeration=0.5,
repetition_penalty=1.2,
)
import soundfile as sf
sf.write("out.wav", wav, sr)
synth() applies Estonian text normalisation (numbers/dates/abbreviations → spoken words),
splits the input into clauses, and synthesises + stitches them. The generation knobs
(temperature, cfg_weight, exaggeration, repetition_penalty) are keyword arguments to
synth(), with the defaults shown above.
The model was trained on text passed through TartuNLP/tts_preprocess_et, applying transformations that convert numbers and abbreviations to full spoken words.
e.g. "1995" is transformed to "tuhat üheksasada üheksakümmend viis" for the model.
The normalization retains the special words found in vocabulary, such as [laughter] or [gasp]. These have their own issues, read more under imitations.
If side-stepping my preprocessor, it is still strongly recommended to normalise just the same. Use without applying normalisations is undefined.
[laughter] or [gasp], straight up do not work even as we retain them through normalization. Since the training data had none of these, I imagine the weights were polished out during fine-tuning. You may try them, but usually you'll just hear "õhh!".Output is watermarked with Resemble AI's Perth.
Perth enables you to embed imperceptible watermarks in audio files and later detect them, even after the audio has undergone various transformations or manipulations. The library implements multiple watermarking techniques including neural network-based approaches.
TartuNLP news-sentence speech corpus: ~65.9h, ~36k sentences, 4 speakers, CC-BY. All credit to the Institute of Computer Science of Tartu Ülikool.
About ~40.5h of this was actually used, abbreviation-heavy and >10sec sentences were dropped. Estonian read speech (TartuNLP konekorpus, 4 speakers), normalised text.
Merged weights of T3 (r=128, alpha=256) plus full-rank new-vocab embeddings; ve/s3gen frozen.
tts_preprocess_et, and for the decades of Estonian language-tech (EstNLTK, vabamorf) that make any of this possible.The merged weights and configurations in this repository are released under the MIT License.