The memory release. The reason the app kept saying "Can't reach the local backend" on 16 GB machines was never really the network — the backend was quietly running out of memory and getting killed. This release fixes that at the source: the models it holds now get out of each other's way. Plus the uninstaller and factory reset grew into a proper Settings → Storage pair.
Added
-
Factory reset grew up: Settings → Storage → "Reset & remove". It used to do exactly one thing — clear your UI preferences — while the only other option was deleting everything and starting over. Between "forget my theme" and "wipe the machine" sat every reset people actually needed. Now there are four one-click tiers — UI preferences, all settings, downloaded assets & models, and everything OmniVoice did — plus a per-item checklist if you want to drop just the model weights, just a wedged sidecar engine, or just the history. Every option shows its real size on disk before you commit, and the number on the button is exactly what gets freed. Deleting voices, projects or audio asks you to type
DELETE; nothing irreversible happens on a single click. "Everything" deliberately stops short of the Python environment, so you land on a working first-run screen rather than a rebuild — the app stops its engine, deletes, and starts it again for you. On macOS and Linux the model cache is the shared Hugging Face cache, so it's its own checkbox and says so; on Windows and portable installs it's OmniVoice's own, and the app doesn't pretend otherwise. -
The Storage panels got a design. "Remove all data" and "Reset & remove" listed folders as a flat run of text, so a 7.5 GB model cache and a 391-byte config file carried exactly the same visual weight — the one thing you actually wanted to see (where the space went) was the one thing you couldn't. Every row now has an icon, a dimmed path, and a proportional bar showing its share of what will be freed, so the big one looks big. The shared Hugging Face cache is promoted out of the confirm dialog into its own "Optional" row with a checkbox, so ticking it moves the running total in front of you instead of springing a different number on you at the point of no return, and the dialog now lists exactly what is about to go.
Fixed
-
Switching TTS engines no longer stacks their models in memory. Using a second engine in a session (or a per-request engine override) loaded its model on top of the first one's, because the OmniVoice core model and the other engines live in two separate caches that never coordinated — measured on a 16 GB M2, an
omnivoice→mlx-audioswitch left the machine holding both (footprint 3.9 GB → 4.3 GB, the ~2.8 GB core never freed). That accumulation is a direct contributor to the memory pressure behind the "Can't reach the local backend" OOM deaths. Now only one TTS engine's model stays resident: resolving an engine hands back every other resident engine first (the sameomnivoice → mlx-audioswitch now drops to ~1.5 GB). Steady-state single-engine use is unaffected; an A/B switch pays a re-load on the way back (~8 s for the OmniVoice core, ~1–2 s for the lighter engines). Opt out withOMNIVOICE_SINGLE_ENGINE_RESIDENT=0if you have RAM to keep several warm. Two underlying leaks are fixed as part of this: every in-process TTS engine'sunload()now actually frees its model and empties the device cache (previously all but OmniVoice were silent no-ops), andfaster-whisper'sunload()cleared the wrong attribute so its model was never released. -
The backend no longer sits on ~2 GB of idle dictation model — the real reason it was being killed on 16 GB Macs. Four reports of "Can't reach the local OmniVoice backend" (#1076, #1092, #1093, #1101) all died at the same moment: during a generate, on a 16 GB machine. Measuring it showed the generate was never the problem — it costs about 116 MB. The problem was the baseline: the backend sat at ~6.2 GB even while idle. The TTS model has always been unloaded after an idle timeout, but the speech-recognition model used for dictation never was — so once you dictated a single time, ~2 GB stayed resident for as long as the app ran. On a 16 GB Mac, that plus the app, macOS, and your other programs is enough for the system to run out of memory and kill the backend, which surfaced as the "can't reach the backend" error. Dictation's model now gets the same idle release the TTS model already had, handing that memory back. The only cost is a ~1.4-second re-warm on your next dictation after a long pause, and a live dictation session is pinned so nothing is ever unloaded mid-sentence.
-
Folder sizes under 1 KB displayed as "0 KB". The uninstall panel's
391 Bconfig folder rendered as0 KB— which reads as "nothing here" for a folder that very much exists. The Storage panels now share one byte formatter that can say391 B. -
Some styling silently did nothing. A handful of components referenced CSS custom properties that were never defined (
--chrome-fg-subtle,--chrome-bg-raised,--color-warning). An undefinedvar()makes the whole declaration invalid, so the browser drops it and the element quietly inherits — the dimmed folder paths in the Storage panels weren't dimmed at all. Fixed in those panels, and a new guard (frontend/src/test/cssTokens.test.js) fails on any barevar(--token)in JSX that isn't defined in a stylesheet or documented as runtime-injected, so a typo can't ship as invisible styling again.
Linux x64 artifacts
2b9e5ac428ad90be0662465fcff244247c9756d30223058254385a449c3ea89e OmniVoice Studio_0.3.21_amd64.AppImage
4234981ecae54772dba76f05b7d67b823f1f79cef5882a406813400bdf7ad87a OmniVoice Studio_0.3.21_amd64.AppImage.sig
Windows x64 artifacts
466ed828188631bc19959e1edcf753e03a892c3159699510f9917653dd8b6cd2 *OmniVoice Studio_0.3.21_x64_en-US.msi
93fa3bde043aeb4b9d7eda5f534be5dc8d8d6817f9241935d859e0e05590f40b *OmniVoice Studio_0.3.21_x64_en-US.msi.sig
macOS Intel artifacts
aa5c9e2182ec9707d0b3939278df274f4a9ddea10e87496da12e7e538b2f2855 OmniVoice Studio_0.3.21_x64.dmg
41a69a3db3c2dbdd0955ab6aa0bb63836a9358112a2f4b895fe8d65915fdf8e9 OmniVoice Studio.app.tar.gz
ebc343d107022764e230d3efe109b4977c850d25edcf283ab9c7f13603e1b833 OmniVoice Studio.app.tar.gz.sig