---
license: cc-by-4.0
language:
- da
pipeline_tag: text-to-speech
tags:
- audio.cpp
- gguf
---

# Plapre 3 GGUF

[Plapre 3](https://huggingface.co/syvai/plapre-3) is a Danish text-to-speech
model with five built-in voices, voice cloning, per-word duration control,
pronunciation references, prosodic context, and speech editing.

Each GGUF packages the AR checkpoint, speaker projection and
presets, tokenizer, Kanade codec, WavLM frontend, and CosyVoice2 HiFT vocoder.
No Python installation or separate model downloads are needed for inference.
Output is mono, 24 kHz. BF16 is recommended; F32 retains the original checkpoint
storage, including the original BF16 speaker projection.

| Package | Size | |
|---|---:|---|
| `plapre-3-bf16.gguf` | 1.07 GiB | Default |
| `plapre-3-f32.gguf` | 2.13 GiB | Original-precision reference |

## Usage

```bash
audiocpp_cli --family plapre --task tts --backend cuda \
  --model plapre-3-bf16.gguf --request-option voice_id=tor \
  --text "Hej, hvordan har du det?" --out speech.wav --log

audiocpp_cli --family plapre --task clon --backend cuda \
  --model plapre-3-bf16.gguf --voice-ref reference.wav \
  --reference-text "Ordene i referenceoptagelsen." \
  --text "I morgen kommer jeg igen." --out clone.wav --log
```

Built-in voices are `tor`, `ida`, `liv`, `ask`, and `kaj`. Both routes accept the
same controls. Use `x_vector_only_mode=true` for speaker-only reference
conditioning. Detailed options and conversion instructions are in the
[model guide](https://github.com/0xShug0/audio.cpp/blob/main/docs/models/plapre.md).

## CUDA Measurements

RTX 5090, Debug C++ build with optimized compiler flags, official Python
Plapre/vLLM implementation using original F32 AR weights. All use the same text,
reference WAV/transcript, seed 42, temperature 0.8, top-k 50, top-p 0.95, and
1,000-token limit. Generation stops naturally. Each benchmark starts with a
short cloning warmup; model loading is excluded from inference timing.

| Workload | Runtime | Warm inference | Output duration | Warm RTF | Observed peak VRAM |
|---|---|---:|---:|---:|---:|
| Short clone | Python | 234.41 ms | 4.16 s | 0.05635 | 9,218 MiB |
| Short clone | audio.cpp F32 | 198.76 ms | 4.00 s | 0.04969 | --- |
| Short clone | audio.cpp BF16 | 162.93 ms | 4.20 s | 0.03879 | --- |
| Paragraph clone | Python | 873.26 ms | 19.04 s | 0.04586 | 9,506 MiB |
| Paragraph clone | audio.cpp F32 | 925.94 ms | 19.52 s | 0.04744 | 3,304 MiB |
| Paragraph clone | audio.cpp BF16 | 749.68 ms | 19.68 s | 0.03809 | 2,564 MiB |

BF16 is 1.25x faster by paragraph RTF than F32 and reduces peak VRAM by 22.4%
(740 MiB). Paragraph C++ timings are the mean of two requests. C++ peaks cover
the entire short -> paragraph -> repeat paragraph -> short session; separate
short-request peaks were not measured. Peak VRAM is process-tree usage sampled
every 10 ms. Python rows are earlier reference measurements with the same
settings, not a fresh simultaneous comparison. Results are workload-specific.
Python vLLM reserves 20% of GPU memory; its peak includes that reservation
and the codec process, not just live tensors.

## Validation And Limits

- F32 AR prompt IDs and prepared embeddings match official Python under controlled
  reference features, including cloning, durations, pronunciation, context,
  editing, and Danish text normalization.
- With the F32 package, teacher-forced audio tokens and aligned precision/noise, waveform
  cosine is 0.999999735. Unforced greedy AR matches all 119 reference tokens;
  controlled greedy waveform cosine is 0.999999728.
- F32 short cloning, base/sampled synthesis, duration/pronunciation control,
  editing, speaker-only conditioning, and chunked long-form outputs pass ASR.
  CPU and Vulkan cloning outputs also pass ASR; exact Python parity is not
  claimed for these backends.
- BF16 passes short/paragraph cloning and built-in voice checks on CUDA, and
  short cloning checks on CPU and Vulkan. Short-clone ASR WER is 0% for both
  F32 and BF16; paragraph WER is 13.04% and 8.70%, respectively, using Qwen3 ASR
  1.7B and ignoring case/punctuation. These are individual test cases, not a
  general quality ranking. F16 failed the paragraph with nonfinite AR logits
  and is not offered.
- Repeated short/long requests preserve audio length and content. CUDA ISTFT
  overlap-add can change PCM16 samples by one unit between identical requests.
- Streaming emits completed text chunks, not incremental codec frames. A
  two-chunk server request measured 194 ms warmed time to first audio.

Native stochastic outputs need not match Python. Context conditioning and
very short reference-conditioned utterances can substitute words; even Python
is sensitive to small reference-resampling differences. Long unsplit passages
can omit text in both implementations. Use the normal text chunker instead of
increasing `text_chunk_size` to force one long generation. Duration controls
condition the model but do not guarantee exact spoken durations.

The GGUF retains upstream weight licenses. Plapre is CC-BY-4.0; Kanade, WavLM,
and CosyVoice2 components retain their respective upstream notices.

F32 SHA256: `fd320031dbb46efa91541044a0e484e4be1dba5e0cfa657bcc75a914ec7b9e60`.

BF16 SHA256: `8baa6069d5cd81bc01bfc039bfcb7c4b7406e659157b3c768fa2bc839fdfc9a1`.
