Text-to-Speech
PEFT
Safetensors
German
English
german
voice-clone
lora

Articulatio-DE

German text-to-speech with zero-shot voice cloning: a LoRA fine-tune of Breeze TTS 2.

Derived from Breeze TTS 2 by BreezeBlue and licensed for research and non-commercial use only.

Articulatio-DE is an independent community project. It is not affiliated with, endorsed by, or an official release of BreezeBlue or RESONIA, INC.

Version Repository For
LoRA adapter this repository Python / PEFT, further training
GGUF Q8_0 and Q4_K eigenhand/Articulatio-DE-GGUF C++ engine articulatio.cpp: NVIDIA, AMD, Intel (Vulkan) or CPU
MLX 4 bit eigenhand/Articulatio-DE-MLX Apple Silicon with articulatio-mlx

Sample

„Guten Morgen! Heute ist Donnerstag, der fünfundzwanzigste September. Draußen sind es achtzehn Grad, am Nachmittag zieht von Westen ein Gewitter auf. Vergiss also den Regenschirm nicht, wenn du später noch zum Bahnhof fährst.“

Synthetic speech, generated with Articulatio-DE (GGUF Q8_0, one sentence per piece, speed 1.25 with the pitch preserved, 150 ms pause between sentences) in a voice the model created itself; it belongs to no real person. The clip is an output of the model and falls under the same license.

What it does

  • Speaks German naturally in the voice of a short reference recording (voice cloning) or in a voice described by an instruction (voice design).
  • Keeps English: English data was part of every training stage after the first.
  • Robust to poor references: cloned from a reverberant, noisy, hummy or telephone-band reference, the output stays clean (estimated SNR 38–41 dB, within 0–4.5 dB of cloning from the clean clip); the voice match drops somewhat (ECAPA similarity 0.66 instead of 0.73). A dedicated clean-studio instruction was trained in the last stages but has no measurable additional effect, so none is needed.

Everything else works as in Breeze TTS 2 — instructions, streaming — with one exception: vocal event tags such as (laugh) or (sigh) have largely been lost and only rarely produce the sound in German. See the Breeze TTS 2 model card.

A delivery instruction on a cloned voice (for example "a gravelly old pirate captain") only takes effect at cfg_scale 3; at 1 and 2 it made no audible difference. The timbre stays that of the reference. Voice design without a reference follows the instruction at 1 already. The fine-tune has considerably weakened instruction following: instructions take effect much less strongly than with Breeze TTS 2. The C++ engine defaults to cfg_scale 1 (guidance off).

Files

File Use
adapter_model.safetensors, adapter_config.json LoRA adapter (PEFT) for the Breeze TTS 2 weights
samples/demo.wav the sample above
SHA256SUMS checksum of the adapter
LICENSE BreezeBlue Research and Non-Commercial License Agreement
NOTICE required notices and data attributions

Usage

Input text

The training transcripts are plain words: numbers were written out, and symbols such as °, %, € or / do not occur. Digits and symbols in the input are therefore read unreliably. The German text frontend writes them out ("Am 3. Oktober um 14:30 Uhr, 23 °C" becomes "Am dritten Oktober um vierzehn Uhr dreißig, dreiundzwanzig Grad Celsius"), also ordinals, units, abbreviations and simple formulas, removes Markdown and emoji, and can run as a proxy in front of the server.

C++ engine (GGUF)

With a GGUF from Articulatio-DE-GGUF and articulatio.cpp, a fork of Breeze-TTS-2.cpp (Vulkan on NVIDIA, AMD and Intel GPUs, or CPU):

build/breeze-cli articulatio-de-q8_0.gguf \
  --text "Guten Morgen, heute ist ein schöner Tag." \
  --ref-audio reference.wav --ref-text "Exakter Wortlaut der Sprachprobe." \
  --output out.wav

build/breeze-server articulatio-de-q8_0.gguf --host 127.0.0.1 --port 8080 --pause-ms 150

The server offers the HTTP API /v1/audio/speech and a WebSocket API for incremental text from a chat model. The fork splits streamed text into one sentence per piece and keeps the voice consistent across pieces; see docs/inference.md in the repository.

Apple Silicon (MLX)

A 4-bit MLX conversion is in eigenhand/Articulatio-DE-MLX; run it with articulatio-mlx, faster than realtime on an M3 Pro. Pass one sentence at a time.

Python (PEFT)

The adapter needs the Breeze TTS 2 base weights. scripts/merge_lora.py in articulatio-training merges it into them (base model path from BREEZE_CKPT); infer.py then runs on the merged folder:

python scripts/merge_lora.py <adapter-dir> merged/
python infer.py merged/ --text "Guten Morgen." \
  --ref-audio reference.wav --ref-text "Exakter Wortlaut der Sprachprobe." \
  --output out.wav

Training

Method

  • LoRA with rank 64, alpha 64, rank-stabilized scaling, on the q, k, v, o, gate, up and down projections of the backbone, the depth decoder and the text encoder: 148.3 million trainable parameters. The base weights, the audio tokenizer and the vocabulary are unchanged.
  • 90 % of the examples are voice clones: the reference is a different recording of the same speaker, so the model learns the voice and not the recording. The other 10 % are conditioned on an instruction only.
  • Batches of 8 with 4 accumulation steps (32 examples per optimizer step), warmup of 50 steps.
  • Corpus weights: HUI and Thorsten-Voice 1.5, HiFiTTS-2 2.0, the broad Common Voice selection 0.6, everything else 1.0. Examples containing everyday German words that are rare in the data are drawn up to four times as often.
  • Final stage: for the studio-quality corpora (HUI, Thorsten-Voice, HiFiTTS-2), 35 % of the references were degraded synthetically (colored noise, mains hum, synthetic room reverb, telephone band, MP3 and Opus artifacts, clipping, microphone coloration) and paired with the clean-studio instruction and the clean target. Another 25 % carry the instruction with a clean reference. No external noise recordings were used.
  • Trained on one AMD Radeon AI PRO R9700 (32 GB).

Stages

Each stage continues from the adapter of the previous one.

Stage Data Optimizer steps Learning rate
1 CML-TTS German 4,500 3e-5
2 HUI, HiFiTTS-2 (English) 2,500 3e-5
3 stage 2 plus rare-word selections from Thorsten-Voice, CML-TTS and Common Voice 1,000 3e-5
4 full mix (table below), one epoch 9,508 3e-5
5 full mix, second epoch with degraded references, stopped after a third 3,000 2e-5
6 cooldown with the settings of stage 5 500 1.5e-5 → 0 (cosine)

Data

About 630 hours in total; stages 4 and 5 used 338,055 clips (463.5 hours, clips up to about 10 seconds, 90/5/5 split into train, validation and test).

Corpus Language Hours License
Common Voice 27.0, broad selection (at most 100 clips per speaker) de 229.0 CC0 1.0
Common Voice 27.0, rare-word selection de 59.5 CC0 1.0
HUI-Audio-Corpus-German de 100.9 CC0
Thorsten-Voice TV-2021.02 and TV-2022.10, neutral, rare-word selection de 15.9 CC0 1.0
CML-TTS German (full set in stage 1, rare-word selection afterwards) de 174.3 CC BY 4.0
HiFiTTS-2 en 51.1 CC BY 4.0

Common Voice clips were kept only if at least two listeners had validated them and none had rejected them, if they were 2.5 to 10 seconds long with a signal-to-noise ratio of at least 20 dB, little mains hum and a bandwidth of at least 10 kHz. In all corpora, transcripts were reduced to letters and basic punctuation with numbers written out, and clips with an implausible speaking rate (below 4 or above 30 characters per second) were dropped. No audio or text from these corpora is included in this repository.

Evaluation

130 utterances of the held-out test split (104 speakers, all six corpora), each cloned from a different recording of its speaker, scored with Whisper large-v3 (WER, text normalized) and ECAPA speaker similarity to the reference. "Recordings" are the real recordings of the same sentences: Whisper's own error rate and the similarity of two real clips of one speaker. 95 % bootstrap intervals in brackets; one seed per item, so differences between variants inside the intervals are sampling noise.

WER German WER English Speaker similarity
Recordings 4.4 % (2.9–5.9) 2.6 % (1.2–4.1) 0.715
GGUF Q8_0 (C++ engine) 4.2 % (2.7–6.0) 2.6 % (1.1–4.3) 0.716
GGUF Q4_K (C++ engine) 5.8 % (3.4–8.6) 2.6 % (1.1–4.2) 0.714
MLX, 4 bit (Articulatio-DE-MLX) 4.6 % (3.1–6.3) 3.1 % (1.6–4.6) 0.706
  • Long text in one piece derails after 15–40 s (WER 17–77 % on ~70 s passages). Split into sentences, as the C++ server does, the same passages reach 1.6–6.2 % WER over 71–82 s with a stable voice.
  • Chinese: CER 58–73 % on ten sentences, i.e. no longer usable.
  • Validation loss on 96 stratified validation items: 6.338 at the end of stage 4, 6.406 for the released model.
  • Speed (real-time factor, lower is faster), with Vulkan: 0.49 (Q8_0) and 0.43 (Q4_K) on an NVIDIA RTX 4070, 0.69 and 0.65 on an AMD Radeon AI PRO R9700; 0.69 with the 4-bit MLX conversion on an Apple M3 Pro (articulatio-mlx).

Full method, all tables and the scripts: docs/RESULTS.md in the training repository.

Limitations

  • Vocal event tags ((laugh), (sigh) and the like) only rarely work in German; the fine-tune trained on plain read speech without such events.
  • German and English only. Chinese, which Breeze TTS 2 also speaks, was not part of the fine-tune and no longer works (CER 58–73 %).
  • Long passages must be generated sentence by sentence (see Evaluation).
  • Instructions (tone, pace, character) take effect much less strongly than with Breeze TTS 2; on cloned voices they need cfg_scale 3 (see What it does).
  • Text with digits, symbols or unusual abbreviations should be normalized first (see Input text).

Responsible use

Clone only voices whose speakers have explicitly agreed, and use the model and its outputs only non-commercially. The full terms, including what counts as misuse, are in the LICENSE (Sections 4 and 5).

License

The model is distributed under the BreezeBlue Research and Non-Commercial License Agreement, the license of Breeze TTS 2; see also NOTICE. The code of the C++ engine and of the training repository is licensed separately under Apache 2.0.

Breeze TTS 2 is licensed under the BreezeBlue Research and Non-Commercial License Agreement. Copyright (c) 2026 RESONIA, INC. All Rights Reserved.

Acknowledgements

  • Breeze TTS 2 by BreezeBlue, the base model.
  • Breeze-TTS-2.cpp by HoppouAI, the C++ engine this project builds on.
  • The speakers and creators of the training corpora:
    • R. Ardila et al., Common Voice: A Massively-Multilingual Speech Corpus, LREC 2020.
    • P. Puchtler, J. Wirth, R. Peinl, HUI-Audio-Corpus-German: A High Quality TTS Dataset, KI 2021.
    • T. Müller, Thorsten-Voice datasets, 10.5281/zenodo.5525342 and 10.5281/zenodo.7265581.
    • F. S. Oliveira, E. Casanova, A. Cândido Júnior, A. S. Soares, A. R. Galvão Filho, CML-TTS: A Multilingual Dataset for Speech Synthesis in Low-Resource Languages, arXiv:2306.10097.
    • R. Langman, X. Yang, P. Neekhara, S. Hussain, E. Casanova, E. Bakhturina, J. Li, HiFiTTS-2: A Large-Scale High Bandwidth Speech Dataset, Interspeech 2025.
Downloads last month
18
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for eigenhand/Articulatio-DE

Adapter
(4)
this model
Quantizations
2 models

Paper for eigenhand/Articulatio-DE