Klang Pianissimo for Danish: MLX 8-bit

A version of Klang Pianissimo for Danish, our Danish speech recognition model, for Macs with Apple silicon (M1 or later). It runs on the Mac's GPU using MLX and parakeet-mlx, without PyTorch or NeMo.

This repository contains the 8-bit version, with almost the same accuracy as the full-size model at less than a third of the download size.

Versions

Repository Weights Download FLEURS test Speed Memory, 5 min
pianissimo-da Original fp32 2.51 GB 7.43
pianissimo-da-mlx-8bit 8-bit 759 MB 7.49 151ร— 2.2 GB
pianissimo-da-mlx-4bit 4-bit 528 MB 7.80 126ร— 2.2 GB
pianissimo-da-mlx bf16 1.25 GB 7.48 140ร— 2.7 GB
pianissimo-da-mlx-fp32 fp32 2.51 GB 7.43 173ร— 3.8 GB

The FLEURS column shows word error rate (WER, %) on all 930 Danish test clips, scored with our evaluation normaliser; lower is better. Speed is audio duration divided by processing time (RTFx), measured on a 30-second clip. Speed and memory were measured on the Swedish model, which has the same architecture, on an Apple M5 Pro GPU (24 GB). Memory is peak GPU memory use while transcribing a 5-minute recording.

For other computers, use the ONNX versions.

Usage

pip install parakeet-mlx==0.5.2 huggingface_hub sentencepiece
brew install ffmpeg   # to read audio files
import sys
from huggingface_hub import snapshot_download

path = snapshot_download("KlangAI/pianissimo-da-mlx-8bit")
sys.path.append(path)
import pianissimo_mlx

model = pianissimo_mlx.load(path)
result = pianissimo_mlx.transcribe(model, "audio.wav")
print(result.text)

Recordings longer than 2 minutes are transcribed in 2-minute chunks with a 15-second overlap. Set chunk_duration to change the chunk length in seconds, or to None for a single pass. transcribe also accepts a 16 kHz mono NumPy array. Timestamps are available in result.sentences and sentence.tokens.

Use the pianissimo_mlx.py loader included in this repository. It supports the 8-bit and 4-bit weights and reproduces the audio preprocessing used during training. Calling parakeet-mlx directly does not support these quantized weights and uses slightly different preprocessing, adding about 0.2 percentage points of WER.

Vocabulary

Our implementation of NeMo's phrase boosting supports custom vocabulary and matches NeMo's results on the original model. List names and terms to help the model spell them correctly.

vocabulary = ["Klang AI", "Pianissimo", "Folketinget", "Aarhus Universitet"]
result = pianissimo_mlx.transcribe(model, "audio.wav", boost=vocabulary)

See the main model card for vocabulary boosting with NeMo.

How they were made

All versions are converted from the released checkpoint and retain its local attention (256 frames on each side). The 8-bit and 4-bit versions use MLX's built-in quantization for the encoder's linear layers, with groups of 64 weights for 8-bit and 32 for 4-bit. The remaining weights in those two versions are stored in bfloat16.

FLEURS WER was measured with this code on Linux. In a separate Mac check, this version matched the normalised original fp32 reference on 187 of 200 FLEURS clips. See the main model card for comparisons with other models.

License and citation

Released under CC BY 4.0, like the original model.

@misc{klang2026pianissimoda,
  title = {Klang Pianissimo for Danish},
  author = {{Klang}},
  year = {2026},
  howpublished = {Hugging Face model repository},
  url = {https://huggingface.co/KlangAI/pianissimo-da}
}
Downloads last month
-
Safetensors
Model size
0.6B params
Tensor type
BF16
ยท
U32
ยท
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for KlangAI/pianissimo-da-mlx-8bit

Quantized
(5)
this model