← Back to overview
• Maarten Sukel

Open weights for murmel-flash-m-v5: 128M-parameter Dutch speech recognition you can run locally

Architecture, benchmarks, throughput, how to run it, and the licence

Two weeks ago I promised open weights for murmel-flash-m-v5, the smallest model in our Dutch speech recognition family. They're now on Hugging Face: 512 MB of fp32 safetensors, with a Python package on PyPI (pip install murmel-flash) and a command-line tool. On a laptop CPU it runs at roughly 19 times realtime, so an hour of audio takes about three minutes, with inference entirely on your own hardware. This post covers how it's built, how it scores on open Dutch benchmarks, how to run it, and the licence.

Why does local inference matter? Speech is some of the most sensitive data organisations handle: meetings, interviews, phone calls, medical consultations. Running the model on your own hardware takes a whole class of questions off the table: no third-party processor, no cross-border data transfer, no retention policy you don't control. For speech recognition that should be the default option, not the exotic one.

What you can download

murmel-flash-m-v5 is a 128-million-parameter speech recognition model for Dutch, with English as a second language. It's the smallest member of the murmel-flash family, the models behind murmel.nl.

It isn't a fine-tune of someone else's model. Under the hood is a FastConformer-style encoder with a hybrid CTC/attention decoder, implemented in plain PyTorch and trained from scratch on Dutch speech. The CTC head also acts as a referee: the attention decoder only emits text where CTC agrees there is speech, which is a large part of why the model stays quiet on noise. A 4,096-piece SentencePiece tokenizer with language tags lets it switch between Dutch and English per window.

Out of the box you get:

  • Readable text: punctuation, capitals and numbers written as digits, with Dutch or English recognised automatically, even when a speaker switches mid-recording.
  • Word-level timestamps: every word with a start and end time, ready for subtitles or search.
  • Your own word lists: names, places and jargon that have to be spelled right, boosted at decode time through a prefix trie in beam search, without retraining.
  • Any file, any length: wav, mp3, m4a, mp4 and more. Hour-long recordings are split at pauses and joined back into sentences.
  • Live transcription from your microphone, as you speak.
  • A local server (murmel-flash serve) exposing the widely used /v1/audio/transcriptions endpoint, so existing clients and tools can point at it without code changes.

How it does

On four commonly used open Dutch test sets (FLEURS, Common Voice 17, Multilingual LibriSpeech and VoxPopuli), murmel-flash-m-v5 gets 8.7% of words wrong on average. That puts it level with models more than 30 times its size, and ahead of models up to 12 times larger. Every model that makes fewer errors is at least three times bigger. Throughput is about 19 times realtime on a laptop CPU and 100 to 150 times on a single T4 GPU; CTC-only decoding (--mode ctc) is roughly three times faster again, at a small cost in accuracy. Every model in the comparison got the same audio, one clip at a time, with the same text normalisation. The full table and method are in the Murmel v5 post.

Word error rate against model size: every model with fewer errors than murmel-flash-m-v5 is at least three times larger
Word error rate against model size (log scale).

Two things I'm especially happy with:

  • Silence stays silent. On recordings of rain, traffic, kitchens or a humming fridge, it writes something on only 4% of clips. Many speech models invent text there, often subtitle credits like "Bedankt voor het kijken!".
  • Numbers the way you'd type them. "Nul zes twaalf drie vier vijf zes zeven acht" becomes 06 12345678, "tien elf A B" becomes 1011 AB, and "drieëntwintig euro vijftig" becomes € 23,50.

Getting started

It takes three steps:

  1. Install the package with pip install murmel-flash (Python 3.10 to 3.13). The code is on GitHub.
  2. Request access on the Hugging Face model page: fill in the short form and accept the licence. Requests are reviewed by hand.
  3. Run murmel-flash interview.mp3 and the transcript appears. The model downloads automatically the first time.

From Python it's three lines:

from murmel_flash import Transcriber, load_audio

tr = Transcriber.from_pretrained()
res = tr.transcribe(load_audio("interview.mp3"))
print(res["text"])

You get the text, the segments and every word with its timing.

Who can use it for free

I want this model to be useful to as many people as possible. So it's free for:

  • individuals;
  • teaching and open research at schools, universities and research institutions;
  • small organisations, with fewer than 10 employees and under €1 million turnover, commercial use included. Freelancers and small businesses can build it into their own work and products.

Government bodies of any size, larger organisations, and suppliers working for them need a commercial licence. That includes ministries, provinces, municipalities and water boards. So does anyone offering murmel-flash as a hosted transcription service. Everyone, government included, can evaluate it for free for 30 days first.

Why draw the line there? Larger organisations and governments have the budgets, and they usually need more than a download anyway: someone to call when it breaks, a processing agreement, help fitting it into their systems. A licence is how we offer that, and how we keep training the next models.

Interested in a licence, or in one of our larger, more accurate models self-hosted on your own infrastructure? Reach out at murmel@the-ai-factory.com, or read more in Run Murmel on your own servers.

What isn't in it

The open model doesn't recognise speakers, and it's the smallest of our models. Speaker recognition, the larger murmel-flash-l-v5 (the most accurate model in our benchmark) and integrations for Teams and Google Meet are available on murmel.nl and through the Murmel API, running on servers in the Netherlands.

Thank you

This model is better because of everyone who uses Murmel and tells us where it goes wrong. Every error report, question and shared recording shows us where the model still stumbles. Now that the weights are out, I'm curious what you'll build with it, and where it trips up. Tell me: both make the next version better.

murmel-flash-m-v5 in short

  • What it is: a 128M-parameter Dutch speech recognition model by The AI Factory, trained from scratch, with English as a second language.
  • Where to get it: Hugging Face (weights), PyPI as murmel-flash (package) and GitHub (code).
  • Runs on: a laptop CPU, a GPU or a recent phone, fully offline.
  • Accuracy: 8.7% average word error rate on four open Dutch benchmarks.
  • Licence: free for individuals, education, research and small organisations; government and larger organisations need a commercial licence, after a free 30-day evaluation.

Questions, ideas or a project you'd like to discuss? I'd love to hear from you: murmel@the-ai-factory.com.