The multi-language release — dubbing into several languages at once is finally a mature, honest workflow: "Generate N dubs" now translates each language before rendering it (with visible per-language progress), switching languages never destroys your work (every track keeps its own text, subtitles, and audio cache), completed tracks always show their tabs, and dialogue stops starting seconds early because of footsteps — a community reporter's theory, confirmed exactly. Around it, a reliability sweep driven by same-day field reports: your LLM provider finally survives a restart, SOCKS-proxy users can synthesize again (installed models now load without touching the network at all), timeline boxes are visible on every WebView2 runtime, running from source works again — and when the backend crashes, it now tells you the exit code and attaches the evidence to your bug report automatically.
Added
- Backend crashes are now self-documenting. When the local backend process dies (a native GPU abort, an out-of-memory kill), the app used to show only "Can't reach the backend" — undiagnosable without logs nobody sends. The launcher now records every unexpected backend death (exit code, how long it ran, the last 40 log lines), tells you honestly that it crashed and is restarting, offers a "View crash details" panel, attaches the evidence to in-app bug reports automatically (paths scrubbed), and stops silent crash-loops after 3 deaths in 10 minutes with the details on screen. Intentional shutdowns, restarts, and app quits are never misreported as crashes. (#969)
- "Generate N dubs" now actually translates each language first. Multi-language generation used to synthesize every track from whatever text was in the editor — so at most one of your N dubs was really in its language. The batch now runs translate → generate per language with a visible "Translating → Bengali (2/3)…" phase, skips (and reports) any language whose translation fails instead of rendering a wrong-language track, and your multi-language picks and export-track selection are saved with the project instead of vanishing on tab switch. (#957)
- Switching dub languages no longer destroys your work — every track keeps its own text and audio. Translations are now stored per language (switching the target swaps the editor text non-destructively; manual edits stay with their language), subtitles export each track's own text instead of N identical files, burned-in subs match their track, and the per-segment audio cache is keyed by language — "Regen changed" can no longer splice another language's audio into the track you're rebuilding, and staleness is tracked per track. Fully backward-compatible: existing projects and caches keep working; a pre-upgrade project's first "Regen changed" simply regenerates cleanly once. (#958)
Fixed
- Timeline segment boxes are visible on every WebView2 runtime. The v0.3.10 flicker fix switched box colors to a newer CSS feature (
color-mix) applied as an inline style — on WebView2 runtimes older than ~March 2023 (pinned enterprise/offline installs) that renders as fully transparent, turning "flickering boxes" into "no boxes at all" while looking perfect on up-to-date machines. Colors are now pre-blended in plain JavaScript to universally-supportedrgb()values — pixel-identical on modern runtimes, theme-aware, and guarded by a test that fails if an engine-dependent color ever reaches the timeline again. (#968) - Dubbed dialogue stops starting seconds early because of footsteps. Dialogue starts are snapped to the first detected sound — and a single 20 ms burst (footsteps, a door, a sigh) counted as "speech", with no limit on how far a start could jump, and the snap even ran on the raw mix when vocal separation had failed. Onsets now require sustained speech-like energy, long jumps are only allowed across genuinely silent spans (so the original fix for whisper's stretched starts keeps working), and snapping turns off entirely when vocals weren't separated. Credit to the community reporter whose "footsteps theory" was exactly right. (#967)
- Completed dub tracks always show their video tabs. Opening a project with a finished dubbed track hid the Original/track switcher until you re-selected the language — visibility was keyed to the language dropdown instead of the project's tracks, and restored projects couldn't set the language because the history database froze it at empty forever. Tabs now render from the tracks themselves, history keeps its language (existing projects heal without migration), restoring a project can no longer 404 the video preview, and track pills gained duration/timing tooltips plus an accurate now-playing indicator. (#956)
- Running from source works again, and the install docs stop lying.
bun run desktop-prodbroke when the frontend became a workspace (bunxcould fetch the wrong "tauri" package from npm — fixed everywhere including CI); the Linux white-screen guidance now leads with the variable that actually fixes modern Ubuntu (WEBKIT_DISABLE_DMABUF_RENDERER=1, with the exactEGL_BAD_PARAMETERerror quoted); Windows docs now state plainly that GPU acceleration is NVIDIA-only there; the Linux docs document the ROCm support that already shipped (the "planned follow-up" note was stale); and prerequisites are split installer-vs-source with git and curl included. (#964) - Your LLM provider now survives a restart. Setting up Ollama (or any provider), testing it, and saving looked like it worked — then a restart forgot the selection: only the separate "Save & use for translation" button ever persisted it, and a leftover setting from the retired (≤0.3.7) translation panel could silently steal the choice back to "Custom" on every launch. An explicit save now activates the provider when none was chosen yet, the leftover legacy settings are migrated into the Custom provider once and removed, and the panel says "Saved — not yet used for translation" instead of staying silent when your edit isn't the active provider. (#965)
- SOCKS-proxy users can synthesize again — and an installed model can never again be blocked by a broken network stack. With a system-wide SOCKS proxy set, clicking Synthesize 500'd with a raw "socksio not installed" error: loading an already-downloaded model still constructed a network session first, which failed at creation. The app now ships SOCKS support (including in the packaged installers), resolves installed models cache-first (no network session when the files are already on disk — the local-first guarantee at the loader level), warms up at startup even when the online check fails, degrades LLM extras instead of crashing on proxy errors, and classifies the error with an actionable hint if it ever does surface. (#966)
Linux x64 artifacts
8e9b04bcc2df187a65f7212ebefdf283f358e5d70a915cba246babe81666311e OmniVoice Studio_0.3.11_amd64.AppImage
4bf3da2e1c2c690756954d166fe2eb5da48cc01180435e0f85398901d5b52be5 OmniVoice Studio_0.3.11_amd64.AppImage.sig
macOS Intel artifacts
45e5b59648e58b04187e14381bb87eb15d199e550900caa986df62b6673a6825 OmniVoice Studio_0.3.11_x64.dmg
c8ae0fe2e8c7e86711137ecf5759b67372c6803ff41a70ae39e9eb8e5738bfd3 OmniVoice Studio.app.tar.gz
c29604628613110448c6428d010c12b550b2c4f10e2296ee4102566ab75db140 OmniVoice Studio.app.tar.gz.sig
Windows x64 artifacts
af3eb623ae49db5420b4e30f57b8144eaab6e5f0b5cc28958a8082aa558843fa *OmniVoice Studio_0.3.11_x64_en-US.msi
66da175dbb445a9e3b41b7919db5839a002c1821aa7e260f35798c89874ed08f *OmniVoice Studio_0.3.11_x64_en-US.msi.sig