Model reference · open weights

piper-de-de-thorsten-medium

Audio Trelis Text→speech 1 build Open weights 534 dl/mo

piper-de-de-thorsten-medium is an open-weight audio or speech model from Trelis.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • piper-de-de-thorsten-medium is a text-to-speech model created by Trelis that generates German audio using a medium-size male voice.
  • The model utilizes the VITS architecture in ONNX format, contains approximately 15 million parameters, and produces audio at a 22050 Hz sample rate.
  • It is distributed under the CC0 1.0 license.

Summary of the Trelis/piper-de-de-thorsten-medium model card, 2026-10-01

What it is

Released byTrelis
Released2026-03-26

From the model card

What Trelis says about piper-de-de-thorsten-medium

Read the model card

Medium-size German male voice by Thorsten Mueller.

Model Details

FieldValue
ArchitectureVITS (end-to-end)
FormatONNX
LanguageGerman (Germany)
GenderMale
Model Sizemedium (~63 MB ONNX, ~15M params)
Sample Rate22050 Hz
LicenseCC0 (Public Domain)

Note: Piper uses the terms "medium", "high", etc. to refer to model size, not output quality. Medium models (~63 MB, ~15M params) and high models (~114 MB, ~28M params) both produce 22.05 kHz audio.

Usage

With piper-tts (GPL)

from piper import PiperVoice

voice = PiperVoice.load("model.onnx")
for chunk in voice.synthesize("Hello, this is a test."):
    # chunk.audio_float_array contains float32 audio
    pass

Standalone ONNX (MIT — no piper-tts dependency)

Requires espeak-ng installed (brew install espeak-ng / apt install espeak-ng).

import json, subprocess, numpy as np, onnxruntime as ort, soundfile as sf
from huggingface_hub import hf_hub_download

model_id = "Trelis/piper-de-de-thorsten-medium"
onnx_path = hf_hub_download(model_id, "model.onnx")
config_path = hf_hub_download(model_id, "model.onnx.json")

with open(config_path) as f:
    config = json.load(f)

session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])
phoneme_id_map = config["phoneme_id_map"]
espeak_voice = config["espeak"]["voice"]

def phonemize(text, voice):
    out = subprocess.run(
        ["espeak-ng", "-v", voice, "-q", "--ipa=2", "-x", text],
        capture_output=True, text=True,
    ).stdout.strip()
    return [list(line.replace("_", " ")) for line in out.split("\n") if line.strip()]

def to_ids(phonemes, pmap):
    ids = [pmap["^"][0], pmap["_"][0]]
    for p in phonemes:
        if p in pmap:
            ids.extend(pmap[p])
            ids.append(pmap["_"][0])
    ids.append(pmap["$"][0])
    return ids

text = "Hello, this is a test."
audio_chunks = []
for sentence in phonemize(text, espeak_voice):
    ids = to_ids(sentence, phoneme_id_map)
    if len(ids) < 3:
        continue
    audio = session.run(None, {
        "input": np.array([ids], dtype=np.int64),
        "input_lengths": np.array([len(ids)], dtype=np.int64),
        "scales": np.array([
            config["inference"]["noise_scale"],
            config["inference"]["length_scale"],
            config["inference"]["noise_w"],
        ], dtype=np.float32),
    })[0]
    audio_chunks.append(audio.squeeze())

audio = np.concatenate(audio_chunks).astype(np.float32)
sf.write("output.wav", audio, config["audio"]["sample_rate"])

Fine-tuning

You can fine-tune this model on your own voice data using Trelis Studio. Piper models can be trained on custom datasets to create personalized voices.

Attribution

Trained on Thorsten Voice dataset by Thorsten Mueller. Fine-tuned from lessac medium.

Re-hosted from rhasspy/piper-voices. Original voice: de_DE-thorsten-medium

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

How it works

How audio & music work

Audio or textinputAudio modelrecognise / synthesiseText or audiooutputSpeech-to-text turns audio into text; text-to-speech and music models turn text into audio.
© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms