Fatiman-TTS-v2

A Haitian Creole (Kreyòl) text-to-speech model: Kyutai's Pocket TTS (French 24-layer model) fine-tuned on Kreyòl speech. It runs on a CPU and streams, like Fatiman-TTS-v1.

What changed from v1: v2 is trained on human speech only. v1's data included synthetic speech from other TTS services; v2 uses none, and reads as accurately as v1. The ONNX export for phones and browsers is Fatiman-TTS-v2-onnx. More on the Fatiman page of thetrio.space.

Results

Character error rate (CER) after reading sentences aloud and transcribing them back with Oswald, a Kreyòl speech recognizer; lower is better.

Against OpenAI and Google TTS (2026-10-19). 120 sentences sampled from our datasets of OpenAI TTS (onyx, shimmer, nova) and Google TTS (zefi, kore, charles) Kreyòl audio, 20 per voice, 6–18 words, no digits. Fatiman v2 read the same sentences once each (no best-of), voices man3 and female1 alternating. None of the sentences is in v2's training data.

Sentences Their audio Fatiman-TTS-v2 Difference, 95% bootstrap interval Sentences where Fatiman is better / worse
60 from OpenAI TTS 5.8% 3.9% 1.9 points [1.0, 2.8] 35 / 8
60 from Google TTS 1.9% 1.8% 0.1 points [−1.1, 1.3]: a tie 17 / 14

The OpenAI and Google clips were generated in early 2026; those services may score differently today.

Against v1 (the same 80 held-out sentences as v1's card, six voices pooled, scored by Oswald-ASR-0.6-V1):

v1 v2
CER, 80 held-out sentences 2.70% 2.68%
CER, Klara-120 (assistant-style sentences with numbers and names) 5.73% 5.89%
First word wrong, 80 sentences × 6 voices 38 / 480 39 / 480

Voices

The same nine voices as v1, in voices/, re-computed for this model. Each was made from about 7–10 s of a speaker's recording, collected with their signed consent to this use: female1–female6, man1–man3. man3 and female1 are the most accurate.

How it was made

  • Base: kyutai/pocket-tts, languages/french_24l, its tokenizer kept (a fresh fine-tune, not continued from v1).
  • Data: 18,970 clips, 40.1 h, all human speech.
    • Kreyòl Bible readings, 24.7 h (jsbeaudry/bible-kreyol-aligned, round-trip ASR CER ≤ 15%, capped so scripture is not most of the audio).
    • Six studio-recorded Kreyòl sets, 13.9 h (justice, everyday speech, numbers, social media, finance, e-commerce).
    • Paid phone readings from Datamio contributors, 1.5 h, kept only if approved, clean (SNR ≥ 45 dB), wide-band (≥ 9 kHz) and transcribed back correctly (Oswald ≥ 0.9). Used for training only, not as voice presets.
    • The evaluation sentences were removed from training.
  • Text: numbers and symbols are spelled out before training (17 → disèt); do the same, or digits will be read poorly.
  • Training: lr 1e-4, 1,000 warm-up steps, batch 64, Kyutai's fine-tuning code. Checkpoints every 1,000 steps were scored on 40 dev sentences; step 4,000 had the lowest CER (1.86%) and is the one published.

Use

pip install pocket-tts==3.3.0 soundfile huggingface_hub
import os, tempfile
import numpy as np, soundfile as sf
from huggingface_hub import snapshot_download
from pocket_tts import TTSModel

folder = snapshot_download("jsbeaudry/Fatiman-TTS-v2")
config = os.path.join(tempfile.gettempdir(), "fatiman-v2.yaml")
with open(config, "w") as f:                       # the config ships with @MODEL_DIR@ to fill in
    f.write(open(os.path.join(folder, "config.template.yaml")).read().replace("@MODEL_DIR@", folder))
model = TTSModel.load_model(config=config)

voice = model.get_state_for_audio_prompt(os.path.join(folder, "voices", "man3.safetensors"))
# or your own: model.get_state_for_audio_prompt("my_voice.wav"), ~10 s of clean Kreyòl speech
audio = np.concatenate([c.detach().cpu().numpy().reshape(-1)
                        for c in model.generate_audio_stream(voice, "Bonjou! Kijan ou ye jodi a?")])
sf.write("bonjou.wav", audio, model.sample_rate)

A new voice comes from a short reference clip: about 10 s of clean speech, starting and ending between words.

Consent. This model can imitate a voice from a short recording. The nine voices above are published with their speakers' signed consent; for anyone else's voice, get their permission first, and never use a voice to deceive (Kyutai's terms for Pocket TTS apply).

License

CC-BY-4.0, as the base model. Based on Pocket TTS by Kyutai.

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

Model tree for jsbeaudry/Fatiman-TTS-v2

Finetuned
(39)
this model
Quantizations
1 model