v0.3.21
debpalash/VoiceStudiov0.3.21Jul 12, 2026by github-actions[bot]
Upgrading?
AI Summary
A memory fix release that addresses crashes on 16GB machines by stopping TTS engine model stacking and releasing idle dictation models. Introduces a comprehensive new Storage and Reset UI.
Key Highlights
- Fixed 'Can't reach local backend' OOM errors by unloading idle dictation models and preventing engine model stacking.
- New Settings → Storage panel with granular reset options (UI preferences, all settings, assets, or everything) and visual disk usage bars.
- Fixed CSS variable styling issues that caused elements to inherit instead of dimming.
New Features
- Granular reset options with per-item checkboxes and real-time disk size display.
- Shared Hugging Face cache handling for macOS/Linux vs local cache for Windows.
- Visual proportional bars showing storage usage in the Storage panels.
Full Release Notes
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-audio` switch 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 same `omnivoice → mlx-audio` switch 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 with `OMNIVOICE_SINGLE_ENGINE_RESIDENT=0` if you have RAM to keep several warm. Two underlying leaks are fixed as part of this: every in-process TTS engine's `unload()` now actually frees its model and empties the device cache (previously all but OmniVoice were silent no-ops), and `faster-whisper`'s `unload()` 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 B` config folder rendered as `0 KB` — which reads as "nothing here" for a folder that very much exists. The Storage panels now share one byte formatter that can say `391 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 undefined `var()` 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 bare `var(--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 ```
Related Repositories
public-apis/public-apis★ 491,247
A collective list of free APIs
NousResearch/hermes-agent★ 256,118
The agent that grows with you
yt-dlp/yt-dlp★ 200,290
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,578
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,702
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.