Model reference · open weights
piper-de-de-thorsten-medium is an open-weight audio or speech model from Trelis. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.
Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.
What it is
| Released by | Trelis |
|---|---|
| Type | Audio & music |
| Task | Text→speech |
| Runs with | piper |
| Released | 2026-03-26 |
| Popularity | 534 downloads / month |
| Licence | Open weights |
About
Medium-size German male voice by Thorsten Mueller.
| Field | Value |
|---|---|
| Architecture | VITS (end-to-end) |
| Format | ONNX |
| Language | German (Germany) |
| Gender | Male |
| Model Size | medium (~63 MB ONNX, ~15M params) |
| Sample Rate | 22050 Hz |
| License | CC0 (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.
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
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"])
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.
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
From the published model card. Full card on the HuggingFace links in the sidebar.
How it works
Using it via the API
Once AxForge deploys piper-de-de-thorsten-medium for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (piper-de-de-thorsten-medium below is illustrative; you get the exact model name on deployment.)
$ curl -sS https://api.axforge.ai/v1/audio/transcriptions \ -H "Authorization: Bearer $AXFORGE_API_KEY" \ -F model="piper-de-de-thorsten-medium" -F file=@audio.mp3
Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.