LocalFlow 0.1.1 — hands-free records the whole speech
Hands-free dictation used to paste text at every pause a voice detector found. The detector's loudness gate sat above a normal speaking level, so continuous speech from a quiet voice was classified as silence: chunks closed mid-sentence and the buffer trim discarded words. In 0.1.1, hands-free records the whole speech, transcribes it in one pass when you stop, and cleans it once.
- Hands-free records everything until you stop it (
audio.handsfree_mode: whole, the new default). Nothing is pasted while you talk. The result is cleaned at the newcleanup.handsfree_level(defaulthigh), the same enhanced pass the polish hotkey uses. - Segmented cleanup for long speech. A transcript is split at sentence boundaries into segments of about
llm.segment_words(400), each cleaned withllm.handsfree_timeout_ms(60000), then joined. A segment whose cleanup fails or times out falls back to the rules-based Backtrack for that segment alone, so one slow request no longer throws a whole speech back to raw text. - Corrections stay with what they correct. A sentence opening with a spoken correction ("no, no, wait", "I meant to say", "scratch that") is glued to the sentence before it, so a segment boundary never splits the pair.
llm.num_ctx(new, default 8192) raises the cleanup model's context window so about 25 minutes of speech fits. That costs roughly 0.5 GB more VRAM for gemma3:4b; set it back to 4096 on 4 GB and 6 GB cards.audio.handsfree_vad_thresholddefault lowered from 0.008 to 0.002, fixing chunked mode for quiet voices.- Fixed: a spoken "question mark" after a sentence the recogniser had already punctuated produced
??. Duplicate terminal punctuation is now collapsed, with ellipsis preserved. - A real-voice demo recording in the README.
Measured with the GPU idle: 88 words of continuous speech over 35 s transcribed in 524 ms with nothing dropped; a 215-word dictation cleaned in about 2.3 s.
Upgrading
Pull the repo or re-download it, then re-run install.bat — it is idempotent and safe to run over an existing install. The new configuration keys are added to your config.yaml automatically on next launch; any key you are missing is filled in from the defaults, and your existing settings are left alone.
If you preferred the old behaviour where hands-free pasted at each pause, set audio.handsfree_mode: chunked in config.yaml.