Pocket TTS Basque (euskarazko ahots-sintesia, denbora errealean CPUan)

A lightweight Basque (euskara) text-to-speech model that runs in real time on a laptop CPU, based on Pocket TTS by Kyutai (6-layer backbone, about 100 M parameters). It was distilled from the 24-layer Basque teacher itzune/pocket-tts-basque-24l, itself fine-tuned on the BSSD dataset. It clones a voice from a short reference clip and ships with five ready-made Basque voices.

Usage

With uv installed, no setup is needed:

# one of the bundled voices
uvx pocket-tts generate --config hf://itzune/pocket-tts-basque/basque.yaml \
  --voice hf://itzune/pocket-tts-basque/voices/Maider.safetensors \
  --text "Kaixo! Hau euskarazko ahots sintetiko bat da." --output kaixo.wav

# your own voice: 5-10 s of clean Basque speech
uvx pocket-tts generate --config hf://itzune/pocket-tts-basque/basque.yaml \
  --voice my_voice.wav --text "Kaixo!" --output kaixo.wav

Python:

from pocket_tts import TTSModel
import soundfile as sf

model = TTSModel.load_model(config="hf://itzune/pocket-tts-basque/basque.yaml")
voice = model.get_state_for_audio_prompt("hf://itzune/pocket-tts-basque/voices/Antton.safetensors")
audio = model.generate_audio(voice, "Egun on, zer moduz zaude gaur?")
sf.write("egun_on.wav", audio.squeeze().numpy(), model.sample_rate)  # 24 kHz

Bundled voices (voices/): Maider (female) and Antton (male), the two professional speakers of the HiTZ-Aholab studio corpus (CC BY 4.0); and three synthetic voices, Nahia, Ane (female) and Aitor (male). Voice state files are specific to this model.

Notes:

  • Write the text as it should be read: numbers, dates, abbreviations and symbols must be spelled out in words (e.g. hogeita lau rather than 24). The dataset's normaliser (bssd.text_norm) does this for standard Basque.
  • Only clone voices you have the right to use.

Speed

Measured with the bundled benchmark (scripts/bench_cpu.py: three sentences of 2-8 s, Maider voice) on a x86 server CPU (4 threads available), generation only (no model load), as a multiple of real time (higher is faster):

threads fp32 int8 (--quantize)
2 3.5x 6.9x
4 3.4x 6.7x

The model is ~100 M parameters (438 MB fp32 weights including the Mimi codec). Streaming synthesis makes the first audio available well before a sentence is finished.

Evaluation

Held-out BSSD test sentences, 40 per voice, scored with two independent Basque ASR systems (xezpeleta/whisper-large-v3-eu and HiTZ/stt_eu_conformer_transducer_large_v2), UTMOS naturalness and WavLM speaker similarity to the reference clip. "Failures" are sentences with WER > 0.5 (the model continuing the reference clip instead of reading the text).

model voices WER (Whisper) WER (Conformer) failure rate WER excl. failures UTMOS speaker sim.
this model (6 layers, 150 k) 8 named prompts 0.049 0.040 1.3 % 0.040 3.48 0.960
5 unseen voices 0.029 0.029 0.5 % 0.026 3.50 0.957
teacher (24 layers) 8 named prompts 0.095 0.091 5.3 % 0.042 3.59 0.958
5 unseen voices 0.073 0.069 3.5 % 0.033 3.61 0.961

The distilled model is more robust than its teacher (fewer prompt-continuation failures, lower WER) at a slightly lower naturalness score, and about 2x faster on GPU and far faster on CPU.

Training

  • Teacher: itzune/pocket-tts-basque-24l (24 layers, fine-tuned from Kyutai's English 24-layer model on BSSD).
  • Student: Kyutai's depth_distill recipe. A 6-layer backbone learns the teacher's activations with the classifier-free guidance baked in (distill_cfg_coef 2.0); the flow head and all non-backbone weights are copied from the teacher. 150 k steps, batch 64, learning rate 4e-4 with cosine decay, EMA weights released.
  • Data: BSSD train split (about 350 k utterances, 450 h of synthetic Basque speech, 2,400+ voices).
  • Tokenizer: SentencePiece, 4000 tokens, trained on the BSSD transcripts (shared with the teacher).

Training code, configs, evaluation scripts and a demo page with audio samples and a comparison with Piper and OmniVoice: https://github.com/itzune/pocket-tts-basque (demo: https://itzune.eus/pocket-tts-basque/)

Limitations

  • Basque only; code-switched Spanish/French/English words are read with Basque phonetics.
  • A small share of sentences (about 1-2 % in our tests, more with some reference clips) comes out as a continuation of the reference clip instead of the input text; always check generated audio.
  • Trained on synthetic speech, so artefacts of the dataset's teacher system may be inherited. See the BSSD dataset card for the provenance of voices and texts.

License and attribution

Model weights: CC-BY-4.0 (as the upstream Pocket TTS weights). Please cite Kyutai's Pocket TTS, the HiTZ-Aholab studio corpus for the Maider and Antton voices, and the BSSD dataset (itzune/bssd, CC-BY-SA-4.0).

Downloads last month
-
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for itzune/pocket-tts-basque

Finetuned
(1)
this model
Quantizations
1 model

Dataset used to train itzune/pocket-tts-basque