Repository navigation
v0.4.0 — Trancher le silence, dérouler le ruban
Two headline changes this release: dictation stops paying for the silence you didn't mean to record, and the live preview finally spreads sideways instead of towering over your code.
Trancher le silence — trim the dead air
A mic left keyed after your last word used to make the CPU engines decode every silent second — a 51-second take could spend half its decode time on dead tail (the GPU's in-decode VAD already skipped it; the CPU rungs did not). TuParles now trims the dead lead/tail once, at capture handoff, so every engine (GPU, whisper.cpp, qwen) decodes the shorter buffer.
Three tiers, GPU-or-CPU by construction: silero-vad when the optional trim group is installed, a dependency-free RMS fallback otherwise, and a plain no-op if neither fits — it never raises. Conservative by design: lead/tail only (never interior pauses), keeps a beat of margin around speech, and hands back the untrimmed audio at the first doubt. On by default, with a Réglages toggle « Couper les silences en début/fin de prise ».
Validated on 62 consented real takes with a paired-bootstrap A/B (aggregate numbers only, no transcript content): the trim does not harm quality, and after the A/B the min-result floor was raised to 1.25 s so short takes don't get trimmed into sub-1-second clips that whisper decodes unreliably — when in doubt, keep the audio.
Dérouler le ruban — a preview that grows the right way
The "full" preview window now widens along the bottom edge before it ever adds a second line (up to 92% of the screen, capped at two lines by default). Older words drop into a dim, left-aligned history register above a bright, right-anchored live tail — recency shown by brightness and size, never a colour change. The start of your take stays visible far longer. New live knobs (no restart): bandeau width, bandeau lines, and a text-size control for HiDPI / accessibility.
Partials are now display-faithful: pipeline.preview() runs the text stages (punctuation, lexicon, spoken syntax including slashes, casing) so "slash impeccable" shows as "/impeccable" — what you see amber is byte-for-byte what lands. Command parsing and its safety interlocks stay off the preview path by construction.
Also in this release
- One audio-prep seam (
prepare_pcm) for every engine — qwen and the offline file path used to skip normalization; no more silent divergence between rungs. - Tuned faster-whisper VAD at every call site (500 ms min-silence, 200 ms pad) so a short dead tail no longer sails through the in-decode filter. Complementary to the pre-trim, not redundant.
- Persistent CPU-fallback tray signal — the glyph stays a dimmer blue the whole time you're on the CPU rung, not just a one-shot flash, so a suspend-wedged CUDA context can't hide behind a neutral idle icon.
- Status toasts no longer swallowed during back-to-back dictation — a dropped state notice is re-queued and re-fires when the bubble next goes idle.
Everything runs on your own silicon — that is the whole point. Speak, see, ship.