Key takeaways

  • SpeakoFlow Mini is an 833 MB dictation cleanup model, fine-tuned from Qwen3.5-0.8B, Apache-2.0, English, running offline on a CPU at a median of 2,509 ms per transcript.
  • It returns already-correct transcripts untouched 92.6% of the time and produces the exactly-right output on 48.8% of transcripts that needed an edit, for 70.7% overall.
  • A program that changes nothing scores exactly 50.0% on this scale. Four of the seven systems tested score below it, and two of those look safe if you read only the restraint column.
  • Fine-tuning took edit accuracy from 4.9% to 48.8% against the identical untuned base model, at the same file size, prompt and hardware, and cost nothing measurable in restraint.
  • 10.7% of transcripts still come back missing a word the speaker said. That is published because it is the number to beat.

Disclosure: SpeakoFlow is our product and I both built this model and wrote the evaluation it is scored on, so read this as an informed account rather than a neutral review. Where a hosted frontier model wins is stated in full below, including a sensitivity analysis that puts it ahead of Mini on one metric.

SpeakoFlow Mini is out. It is an 833 MB model that takes a dictated transcript, applies the correction the speaker actually made, and leaves everything else exactly as it was said. It runs offline on a CPU, it is Apache-2.0, and you can pull it from Hugging Face today.

The reason it exists is narrower than "clean up dictation". A current recogniser already punctuates, capitalises, drops filler words and formats numbers. Say "the deposit is three hundred dollars, um, and the meeting is at nine thirty" into SpeakoFlow with cleanup switched off and you get "The deposit is $300 and the meeting is at 9:30" back, with no language model in the loop. What is left over is small, and it is all judgement.

What does SpeakoFlow Mini actually do?

It handles the residue a recogniser cannot reason about. You corrected yourself mid-sentence. You said an email address out loud. You asked for a new paragraph. You said a word that came through the recogniser perfectly and was still the wrong word. Those need a decision about what you meant, and a pattern cannot make one.

Four cases from the model card, showing input and returned output.
You dictate It returns
Let's ship it Thursday, no, Friday. Let's ship it Friday.
Email me at sam at example dot com Email me at sam@example.com
Thanks for the update. New paragraph. I'll review it tonight. Thanks for the update.
I'll review it tonight.
Thanks for the update. I'll review it tonight. Thanks for the update. I'll review it tonight.

The fourth row is the whole point. Nothing was wrong with it, so nothing changed, down to the character. Fifteen categories are trained and scored, from retractions and spoken symbols through to empty input, truncated input and recogniser hallucination loops. Every one of them is a decision, and in several of them the correct decision is to do nothing.

Key point

SpeakoFlow Mini is not a rewriter and not an assistant. A question inside your transcript gets transcribed, never answered. An instruction inside your transcript is content, not a command. Tone and formality are out of scope, because changing how formally you speak means replacing words you said.

Why is knowing when not to edit the hard part?

Hand a capable language model a sentence that is already correct and it will find something to improve. A comma becomes a full stop. A sentence becomes a heading. A paragraph becomes bullets. A word becomes a smoother synonym.

Each of those edits is defensible on its own, and each one is wrong, because you said the other thing and now you have to undo the improvement. Undoing an unwanted edit costs more than making the edit by hand would have. A cleanup feature that does this is worse than no cleanup feature.

So the evaluation scores two things separately. Restraint is the share of already-correct transcripts returned untouched. Edit accuracy is the share of transcripts needing a change that came back exactly right, on an exact string match with no partial credit. Overall is the unweighted mean of the two.

The mean is unweighted for one reason: the evaluation set is close to evenly split between transcripts that need an edit and transcripts that do not, so a plain accuracy figure would score a program that changes nothing at 45.3%, which reads like it half works. The mean scores that same do-nothing strategy at exactly 50.0%. Anything under 50 is worse than leaving the transcript alone.

50.0%the score for returning every input unchanged
4 of 7systems tested that score below it
70.7%SpeakoFlow Mini, overall
The same ranking with 95% confidence intervals drawn as whiskers on every bar, showing the top two overlapping.
The same ranking with its confidence intervals. The whiskers are why the top two are called a tie rather than a win.
Restraint and edit accuracy scored separately for each model as paired bars, showing models with high restraint and almost no editing ability.
The two halves of the task, scored separately. Reporting one without the other lets a model rank on restraint alone, which is free on the transcripts whose correct answer is the input.

What are the numbers?

Held-out evaluation, temperature 0, every system given the same short system prompt with reasoning off. Restraint and edit accuracy are the two scored axes; content damage is the share of transcripts that lost a word the speaker said, reported separately because no penalty weight for it would be anything but arbitrary.

Held-out evaluation as published on the model card, 30 August 2026. All rates from CPU runs at temperature 0.
System Overall Restraint Edit accuracy Content damage
SpeakoFlow Mini (0.8B, local CPU) 70.7% 92.6% 48.8% 10.7%
GPT-5.6 Luna (hosted frontier) 65.0% 82.4% 47.6% 12.0%
Qwen3.5 9B (hosted) 55.8% 89.7% 22.0% 6.7%
Do nothing (baseline) 50.0% 100.0% 0.0% 0.0%
Qwen3.5 0.8B, the untuned base 47.3% 89.7% 4.9% 6.0%
Gemma 4 E2B (local CPU) 47.0% 79.4% 14.6% 13.3%
S1-mini (shipped cleanup model) 15.3% 22.1% 8.5% 55.3%
Sotto 350M (shipped cleanup model) 11.7% 16.2% 7.3% 60.7%

Read the untuned base row and the Gemma row together. Both look respectable on restraint, at 89.7% and 79.4%, and both score below doing nothing. They alter text they should have left alone and then fail to make the change that was actually needed. Restraint on its own is not competence, which is exactly why the overall score is never printed here without both halves beside it.

The strongest result on the page is not the comparison against anything hosted. It is the controlled one. Against the identical untuned Qwen3.5-0.8B at the same file size, quantisation, prompt and hardware, edit accuracy went from 4.9% to 48.8%, a gain of 23.4 points overall with a 95% confidence interval of +16.3 to +30.3. Restraint went from 89.7% to 92.6%, a difference of a single case that this set cannot resolve.

The usual expectation is that teaching a model to edit costs restraint. Here it cost nothing measurable.

Every published rate is deterministic exact string match. A tier that used frontier models to judge disputed outputs was built and run: four models from four vendors adjudicated the same cases and agreed on too few of them to be usable, so the choice of judge moved the result more than the answers did. That tier was dropped rather than tuned, and no judge score is published anywhere.

How do you run it?

It is a GGUF, so anything that loads GGUF loads it. Send the transcript as the user message with nothing added: no instructions, no delimiters, no examples. The system prompt was fine-tuned into the model and is printed in full on the model card.

  1. llama.cpp, straight from the Hub. llama-cli -hf SpeakoFlow/speakoflow-mini:Q8_0, or llama-server for an OpenAI-compatible endpoint on port 8080.
  2. Ollama. ollama run hf.co/SpeakoFlow/speakoflow-mini
  3. LM Studio. Search speakoflow in the app, or lms get SpeakoFlow/speakoflow-mini@Q8_0.
  4. Two settings are not optional. Do not cap max_tokens, because a truncated long transcript counts as lost content. Disable thinking, because any reasoning text in the output fails every already-correct case for reasons that have nothing to do with cleanup. At its defaults this model emits zero reasoning characters.

Five quantisations are published and every one was run through the same evaluation, so the ladder states its own cost rather than leaving you to guess.

Quantisation ladder, from the model card. One evaluation pass each, all settings held identical.
File Size Overall Outputs differing from Q8_0
Q8_0, the reference build833 MB70.7%reference
BF161,558 MB70.7%2.0%
Q6_K647 MB70.1%1.3%
Q5_K_M593 MB70.0%2.0%
Q4_K_M542 MB69.4%7.3%

Take Q8_0. The spread down the ladder is smaller than this evaluation can resolve, so Q4_K_M being 1.3 points behind means very little. What is a count rather than an estimate is that 7.3% of its outputs differ from Q8_0, so it demonstrably changes what the model says without demonstrably changing how often it is right.

Key point

Speed, measured on a Ryzen 7 7700X with 8 threads and reasoning off: 2,509 ms median on CPU, 311 ms with all layers on a GPU. That is 8.1x on median latency from one flag, with restraint and edit accuracy unmoved. Every published accuracy rate is the CPU rate.

How does it compare to a hosted frontier model?

Overall, it is a tie, and I want to be precise about that. The gap over GPT-5.6 Luna is 5.8 points with a 95% confidence interval of -1.5 to +12.9. That interval contains zero. Gaps under about six points are not resolvable by this evaluation at all.

What is resolved is length. On passages of 500 words and up the gap is +20.9 points, interval +7.0 to +35.6. Long passages are what people actually dictate, so that is the result I care about, but it is one band and not the headline.

Overall score by transcript length for each model, close together on short input and separating as the transcript grows.
The models are close on short input and come apart as the transcript grows. That is the failure a user notices, because a long dictation is where a dropped clause is hardest to spot.

Where SpeakoFlow Mini wins

  • Restraint, by 10.2 points, on the cases where correct means changing nothing.
  • Long dictation, on passages of 500 words and up, by a resolved margin.
  • 833 MB, offline, no network round trip, no per-call cost.
  • It works unconfigured. The convention is in its weights rather than in a prompt you have to get right on every call.

Where the hosted model wins

  • Everyday use, genuinely. Real dictation throws up oddballs no category anticipated, and a far larger model reads those situations better. I have watched it happen often enough to say so plainly.
  • It was not tested at its best. Both systems got the same short prompt with no reasoning budget, which is the configuration Mini was trained for. Given a longer prompt and room to reason, Luna does better than the figure here.
  • On the audited subset it is ahead. Removing the scored cases an internal audit found defective or disputed puts its edit accuracy above Mini's, 55.9% against 54.4%.
  • No 833 MB download, no local hardware, and it handles languages this model does not.

So the honest claim is narrow and worth stating exactly: under one fixed short prompt with no reasoning budget, a 0.8B model running locally matches a hosted frontier model on this task. Not beats. Matches, and the confidence interval says the same thing.

The mechanism behind that is the same one behind the fine-tuning gain. Mini has the convention in its weights. Anything hosted has to be told the convention in a prompt on every single call and then has to follow it. Training on a written specification beats prompting for it, and that is a smaller and more defensible finding than beating a frontier model.

The constraint is also the product, not a handicap picked to flatter the result. Cleanup runs while somebody waits for text to appear in the box they are typing into. A longer prompt costs tokens on every call, a reasoning budget costs seconds, and both cost a network round trip.

Output tokens per correct row and median latency per model, with the local and hosted models drawn on separate scales.
Local and hosted latency are drawn on separate scales on purpose. They are not comparable across that boundary, so no latency win is claimed. Tokens per correct row is the number that does compare.

What does it get wrong?

10.7% of transcripts come back missing a word the speaker said. Losing content is the failure mode I care most about and the one I would most like to see somebody beat, which is why the figure is on the model card rather than in a footnote.

It works on text, so if the recogniser heard the wrong word and nothing in the sentence gives that away, this model cannot recover it. It is English-only: the specification, the training and every number are English, and the only non-English behaviour taught or scored is leaving it alone under an absolute rule never to translate. The base tokenizer covers languages this work does not, so it will produce output for non-English input that nothing here evaluates.

Deterministic fixes are out of scope on purpose. Filler removal, punctuation, capitalisation and number formatting are not trained into it, because the rules layer already does them and a rule is faster and auditable. That layer is published separately under MIT, in Python and TypeScript, with a specification, pattern tables and a conformance suite. The two-stage design has its own write-up, including why the ordering matters.

And the evaluation shares an author with the model, which is a real conflict. The mitigations are structural rather than reassuring: the scoring is deterministic with no model in the loop, the judge experiment that would have flattered this model was discarded and reported, and the sensitivity analysis that puts a competitor ahead is published because it is true.

Frequently asked questions

What does SpeakoFlow Mini actually do?

It reads a transcript and returns the corrected version, applying the fix the speaker made and changing nothing else. It handles retractions, spoken symbols and dictation commands, wrong words that were transcribed correctly, and recogniser stumbles. It does not answer questions in the text, translate it, or rewrite its tone.

Do I need a GPU to run it?

No. Every published accuracy figure comes from a CPU run on a Ryzen 7 7700X using 8 threads, at a median of 2,509 ms per transcript. A GPU cuts that to 311 ms, an 8.1x improvement on median latency, but the scores are the same either way.

Which quantisation should I download?

Q8_0, at 833 MB. It is the build the app downloads and the one every number on the model card describes. Q4_K_M is 542 MB and scores 69.4% against Q8_0's 70.7%, which this evaluation cannot resolve, but 7.3% of its outputs differ from Q8_0. It changes what the model says without measurably changing how often it is right.

Is it better than a hosted frontier model?

Overall, no. The gap over GPT-5.6 Luna is 5.8 points with a 95% confidence interval of -1.5 to +12.9, which contains zero, so that is a tie. Only on passages of 500 words and up is the gap resolved, at +20.9 points. Both models ran under the same short prompt with reasoning off, which is the configuration Mini was trained for and not the hosted model at its best.

Does it replace filler removal and punctuation?

No, and that is deliberate. Filler words, punctuation, capitalisation and number formatting are handled by the recogniser and by a separate deterministic rules layer, which is published on its own under an MIT licence. A pattern does that work faster, for free, and auditably. Run the two together.

What is the biggest weakness?

10.7% of transcripts come back missing a word the speaker said. That is the number worth beating, and it is published for exactly that reason. The model is also English-only, and an internal audit found some scored reference cases defective; with those removed the hosted model's edit accuracy comes out above Mini's, 55.9% against 54.4%.

Abhishek Barali

Maintainer of SpeakoFlow, a free and open-source local-first voice layer for Windows, macOS, and Linux. Every figure here was read off the published SpeakoFlow Mini model card on 30 August 2026, where the scoring method, the system prompt and the limitations are all set out in full. Corrections are welcome in GitHub issues.

Dictate into anything, with the cleanup running on your own machine

SpeakoFlow transcribes and cleans up locally. Your voice never leaves the computer, and there is no account and no usage cap.

Windows, macOS, and Linux. MIT licensed. No account, no telemetry.