Delibes-8M-esES

A small Spanish voice, built for efficient local speech synthesis.

Delibes turns Spanish phoneme IDs into 24 kHz speech with 7.88 million parameters. It follows the Paradee v1.1 architecture and learns from Kokoro-82M, using its European Spanish male voice, em_alex, as the teacher.

  • 8.46 MB of INT8 weights. A text predictor and an acoustic decoder, with no teacher weights at inference time.
  • Spanish, with a Castilian target. One voice, trained with the canonical Spanish phoneme representation.
  • CPU inference. About 115 times faster than real time on an Apple M5 with four CPU threads in the measured development benchmark.
  • Measured intelligibility. The released INT8 pair reaches 5.83% WER / 1.74% CER on 697 held-out sentences; the teacher reaches 5.94% / 1.68% on the same texts.

The goal is to make a useful Spanish speech model with a small weight footprint and fast inference. This is a building block for local applications, not a claim that a complete mobile application or its text frontend has been validated.

Listen · Quick start · Results · Training · Files · License

FP32 and INT8 storage and matched intelligibility

Listen

Five curated, project-authored sentences from the independent held-out challenge. These examples cover questions, narration, Castilian consonants, a proper name and technology. They do not replace evaluation over the complete held-out sets. Audio is unnormalized 24 kHz PCM, generated with the released graphs; the teacher column is the stored reference. FP32 and INT8 use the same host-noise protocol.

Sentence Kokoro reference Delibes FP32 Delibes INT8
1. Perdona, ¿esta silla está libre o la está utilizando alguien?
2. Al llegar a casa descubrí que había comprado leche, pero no quedaba café.
3. Cecilio dejó seis ciruelas y cinco cerezas en una cesta de mimbre.
4. Iñaki enseñó a su sobrina a reconocer las huellas del tejón.
5. Si el modelo tarda en cargar, muestra un aviso que explique qué está ocurriendo.

The text, canonical token IDs and deterministic noise seed for each example are in samples/sentences.json. Use the embedded players above to compare the audio directly. samples/listening.html is also an offline comparison page after downloading this repository.

Quick start

Use Python 3.12 and download this repository:

python -m pip install 'huggingface_hub==2.3.0'
hf download lapislabsai/Delibes-8M-esES --local-dir delibes
cd delibes
python -m pip install -r requirements.txt
python inference.py --example samples/01.json -o hello.wav
import json
import soundfile as sf
from inference import Delibes

example = json.load(open('samples/01.json', encoding='utf-8'))
tts = Delibes('.', precision='int8', threads=4)
audio = tts.synthesize(example['token_ids'], seed=example['noise_seed'])
sf.write('hello.wav', audio, 24000, subtype='PCM_16')

Use --precision fp32 to compare the larger reference graphs. No Torch, Kokoro model, speaker embedding, network connection or GPU is needed once the files are downloaded. Different noise seeds produce small acoustic variations.

Raw text needs a separate frontend. The ONNX graphs consume canonical phoneme IDs, not text or Unicode character numbers. A text normalizer/G2P is not bundled. Spanish training used Misaki/eSpeak-NG; an arbitrary Spanish or English phonemizer is not an equivalent replacement. The supplied examples work without installing that frontend. Dependencies and their licenses must be reviewed separately when integrating raw-text synthesis into an application.

Results

All rows below use the same 697 held-out test sentences, with Whisper base 20250625, Spanish, FP32 ASR, temperature 0, beam 1, no previous-text context and a 192-token output limit. Model selection used a separate development partition.

System WER CER
Kokoro-82M, em_alex, stored reference 5.94% 1.68%
Delibes, native PyTorch reference 5.59% 1.71%
Delibes, ONNX FP32 5.78% 1.72%
Delibes, ONNX INT8 5.83% 1.74%

The ONNX rows share the same host-noise generator. Native PyTorch uses another generator, so native-versus-ONNX differences are not purely a quantization effect. The INT8 development regression was within the pre-registered limits; the final test did not choose a checkpoint or precision variant.

Additional held-out set Cases Teacher WER / CER Delibes INT8 WER / CER
Reserved validation 684 4.95% / 1.71% 5.61% / 1.85%
Independent original challenge 100 9.79% / 4.75% 9.52% / 4.70%

WER/CER measure transcription errors, not naturalness, speaker similarity or speaker rights. An ASR score below the teacher does not establish better audio. Numbers written as digits by Whisper can count as errors against a reference written in words. No post-test normalization was added to improve these scores.

CPU performance

Apple M5, macOS arm64, ONNX Runtime 1.31.0, four CPU threads; ten length-spanning development sentences, three repeats, fresh processes per precision/thread setting:

Format Weight files Mean synthesis time Aggregate real-time factor
FP32 34.78 MB 36.97 ms 0.00739
INT8 8.46 MB 43.23 ms 0.00866

The compact graphs use INT8 weight tensors and FP16 auxiliary tensors; this does not mean that every operation executes in INT8.

Time covers token IDs through audio and host-noise generation, excluding raw-text normalization/G2P and cold loading. INT8 reduces storage; it was not faster in this measurement. Peak INT8 Python/ORT process RSS was about 952 MiB, including dynamic buffers; this is not the weight-file size or a native Swift/iOS result. These are measurements on the stated setup, not performance guarantees.

How it was trained

Delibes uses a 4.23M-parameter text side and a 3.65M-parameter v1.1-style decoder. The aim was to preserve intelligible Spanish speech while reducing the size and inference cost of the teacher.

  1. Build teacher targets. A frozen Kokoro em_alex generates reference speech and authentic internal targets: durations, pitch, noise conditioning and text features.
  2. Teach the text side. The compact predictor learns those targets from phonemes, without needing Kokoro during synthesis.
  3. Train the decoder. Spectral reconstruction is followed by adversarial refinement and discriminator feature matching, following Paradee's curriculum. The v1.1-style head generates tonal and noise components efficiently.
  4. Validate, select and export. Progressive diagnostic/pilot/full-corpus runs use fixed development checkpoints, numerical recovery checks and frozen final evaluation. The selected predictor is retained from the pilot; the final decoder comes from the full-corpus spectral stage, rather than simply the last update.

Training used NVIDIA Tesla T4 GPUs. Optimization ran on one T4; a second T4 handled independent ASR evaluation. This is not a claim of two-GPU distributed training. Checkpoints retain full optimizer, scheduler, sampler and RNG recovery state in the private reproducibility archive; training states are not distributed here.

Training corpus

The prepared corpus has 14,997 sentences, 17.38 hours of teacher speech: 13,552 train, 748 validation and 697 test. Of validation, 64 development examples were used during selection and 684 were reserved for reporting. Another 100 original challenge sentences were kept independent of training and selection.

Text combines 625 project-authored/historical examples and 14,372 filtered, attributed Tatoeba sentences under CC BY 2.0 FR. It is not an entirely original or CC0 corpus. Only synthetic teacher speech was used; no Tatoeba audio was imported. Exact/near duplicates and semantic groups were checked before splitting. See third_party/TATOEBA.md and the per-sentence attribution ledger. The training corpus, teacher model and optimizer checkpoints are not included in this model repository.

Files

File Purpose
onnx/int8/text.onnx, decoder.onnx Recommended compact pair; 8,461,552 bytes total
onnx/fp32/text.onnx, decoder.onnx Larger numerical reference; 34,778,582 bytes total
config.json Sample rate, vocabulary, graph hashes and inference limits
inference.py Small standalone CPU runtime for canonical token IDs
samples/ Held-out text/token examples and actual FP32/INT8/reference WAVs
metrics.json, provenance.json Evaluation conditions and pinned upstream/model identities
release-manifest.json SHA256 inventory of the supplied files
LICENSE, NOTICE.md, third_party/ Apache-2.0 and attribution material

Graph contract

The text graph accepts input_ids:int64[1,T], with ID 0 at both ends, and speed:float32[1]. It returns aligned features, pitch, noise conditioning and durations. The decoder takes those predictions and an explicit host-generated normal-noise tensor, returning mono float32 audio at 24,000 Hz. No authentic teacher conditioning enters this complete inference path.

The wrapper validates up to 360 input IDs and speeds 0.85–1.15, matching the tested range. One duration frame is 600 samples / 25 ms. The vocabulary contains 114 mapped symbols in an ID space of 178 slots; gaps are not valid phonemes. See config.json for exact tensor names, shapes and allocation guards.

Limitations

  • European Spanish target, one male voice; other languages, accents and speaker control are not validated.
  • Proper names, word boundaries, numbers, abbreviations and unusual constructions can still fail. Listen to held-out examples and evaluate your own traffic.
  • The graphs generate complete utterances. Incremental streaming, chunk-boundary continuity, native Swift/iOS memory and long-form playback are not validated.
  • Compact weights do not imply a comparably small runtime memory footprint; see the measured RSS above.
  • A raw-text frontend is still required. The permissively authored G2P prototype is not token-equivalent to the canonical frontend and is not included.
  • Human sign-off of this release candidate remains pending. There is no claim that ASR evaluation certifies naturalness or equivalence to the teacher.

License and credits

The model weights and included runtime are offered under Apache-2.0, matching the declared licenses of Paradee and Kokoro. Retain LICENSE, NOTICE.md and the applicable upstream/corpus attributions. Imported corpus text is not relicensed as project-original or Apache-2.0 text.

Built on Sahil Mahendrakar's Paradee and hexgrad's Kokoro-82M. The Paradee paper describes the original single-voice distillation work; this release adapts that work to Spanish.

Public research release. Apache-2.0 is a copyright license, not independent clearance of all voice, personality or upstream-data rights. Voice-specific provenance/consent for em_alex has not been independently established by this project. Public availability does not establish commercial clearance; deployment requires separate review. No GPL phonemizer, engine or dictionary is bundled; using a separate frontend requires compliance with its own license.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for lapislabsai/Delibes-8M-esES

Quantized
(110)
this model

Paper for lapislabsai/Delibes-8M-esES