github debpalash/OmniVoice-Studio v0.3.16
v0.3.16 — OmniVoice Studio

3 hours ago

The quality release. Three long-standing frictions got structural fixes: regenerating no longer destroys good takes (a takes rail with starring and restore), audiobooks stop redoing finished work (per-sentence caching — edit one line, re-render one line; crashes resume where they stopped), and dub translations stay consistent and fit their timeline (auto-glossary + a naturalness pass, plus fit prediction before any GPU time is spent). Under the hood, every text path now speaks numbers, times, and abbreviations correctly, the VoxCPM2 engine gained upstream-alignment guards, and a Windows first-run breaker — model downloads completing but the cache ending up with broken file links — now self-heals automatically. Thank you @dmnobunaga for the razor-sharp diagnosis on that last one.

Fixed

  • Windows: model downloads that finished but wouldn't load now repair themselves. On machines without Developer Mode, the model cache could end up with all its multi-gigabyte files downloaded but the snapshot's file links broken — and the app reported a misleading "does not appear to have a file named model.safetensors". The app now detects the broken links on load failure, restores just the missing pieces (reusing everything already downloaded, and falling back to real file copies where links can't be trusted), and retries once; if repair is impossible, the error finally names the actual cache folder to delete. Root-caused in the wild by @dmnobunaga — thank you. (#1056)

  • VoxCPM2: cloning reference clips are now conditioned, and outputs lose their silent tails. Reference audio used to reach the model completely raw; it now gets edge-silence trimming and a 30-second cap (fail-open — short clean clips pass through untouched), and generated audio gets a trailing-silence trim. The install hint also moved to voxcpm>=2.0.3, which carries an important Apple-Silicon audio-quality fix — older installs keep working and see an upgrade hint in the logs. (#1055)

  • Streaming TTS requests without an emo_alpha field no longer crash. A minimal /ws/tts request hit a KeyError and returned an error frame instead of audio — found while giving that route its first tests. (#1054)

  • Long generations no longer risk a multi-gigabyte memory spike while being watermarked. The invisible watermark (on by default) pushed the entire waveform through AudioSeal in a single call, and its memory use grows with audio length — a multi-minute generation demanded a single ~2 GB allocation, enough to fail outright on a 16 GB machine already holding a model ("DefaultCPUAllocator: not enough memory"). Watermark embedding — and the Verify-audio detector, which had the same flaw with uploaded files — now processes audio in ~30-second chunks, so peak memory stays flat no matter how long the audio is. Detection also got sharper for spliced files: it now reports the strongest chunk instead of a whole-file average. (#1045)

  • The ⊕ Insert token list no longer climbs out of the viewport. In the voice-clone script panel, the insert popover (expression tags, CMU phoneme chips) always opened upward from the textarea — and since that input sits at the very top of the panel, the list disappeared past the top of the window with no way to see or scroll it. It now opens below the input, where there's always room. (owner-reported)

Added

  • Edit one sentence, re-render one sentence. Audiobook and Stories renders now cache every synthesized sentence individually (content-addressed, under the existing chapter cache): fixing a single line in a chapter reuses all the untouched audio, and an interrupted render — crash, quit, power loss — resumes from the sentences that already finished instead of redoing the whole chapter. One byte cap bounds both cache layers, and chapter caches from released versions keep working. (#1048)

  • Numbers, times, and abbreviations are spoken correctly in every engine. A conservative normalization pass now runs before TTS everywhere (Studio, dubbing, audiobooks): "3:30" is read as a time, "2" as "two" (29 languages), "Dr." as "Doctor" — while stray control characters and markup remnants that trigger engine hallucinations are stripped. Deliberately cautious: when a rewrite could be wrong, the text is left alone, and your pronunciation-dictionary entries always have the final say. Toggleable (text_normalization_enabled, default on). The OpenAI-compatible API, streaming TTS, and the batch queue run the same pass, so every door into the engines speaks text identically. (#1049, #1054)

  • Dub translations stay consistent and sound natural (LLM engine). Before translating, one pass over the whole transcript builds a terminology glossary (your manual glossary entries always win) that rides along on every segment, so names and terms stop drifting mid-video. After each segment's direct translation, an optional reflect pass critiques and rewrites stiff lines into natural spoken dialogue — any failure silently keeps the direct translation. Both toggleable in the Dub tab; the reflect toggle states its 3-calls-per-segment cost. (#1050)

  • The Dub tab now predicts which lines won't fit — before wasting GPU time on them. After translation, each segment gets a duration estimate (self-calibrating to your engine and language from the segments already rendered) and a "Tight fit" or "Won't fit +Ns" badge when the dubbed audio can't match the timeline even with speed-up. An opt-in "Suggest shorter lines" option asks the LLM for a meaning-preserving shorter rewrite you can apply per segment — never applied automatically. (#1051)

  • Generation takes: star the good ones, restore any of them. Regenerating no longer means losing the previous result — recent takes appear in the workspace history with replay, star/unstar, and one-click restore as the active output. History is now capped (Settings → Storage, default 200 takes): the oldest unstarred takes are pruned, starred ones are kept forever, and an audio file is only deleted when nothing else references it. (#1052)

  • A persistent mini-player for all the audio that used to play "invisibly". Generated output, voice-profile and dub-segment previews, story lines, Gallery voices, and Projects renders all played through a bare audio pipe — no waveform, no seek, no time, and (until v0.3.15's stop pill) no way to stop them. A slim player bar now docks above the Logs footer whenever such audio plays, on every page: live waveform (decoded once from the audio already in memory — nothing is re-fetched), click/drag/keyboard seek, play/pause, elapsed/total time, what's-playing label, and a stop button. It replaces the stop-only pill, and because it's part of the app's layout rather than a floating overlay, the pill's "covers the Production Overrides row at 1440×900" overlap class can't come back. Stories line previews also route through it — which makes them stoppable and fixes them being silent on the macOS/Linux desktop builds (their old playback path used blob: URLs, which WebKit refuses to play). (no issue — owner request following #1032's stop-pill band-aid)

Windows x64 artifacts

1e1c49bb74852df72555e4e54e9d4b3d39032a9bd9be82a204c1ffa3f4a3af7e *OmniVoice Studio_0.3.16_x64_en-US.msi
ca2422ff2f1a2eb6c63ca134c7982cf59926ebbb62be141a7aa1bf8f4aab259e *OmniVoice Studio_0.3.16_x64_en-US.msi.sig

macOS Apple Silicon artifacts

654fe9bcc150e871d27bc2b276f55c7f1bea103ccbb40cb28f72c80112a1b7a9  OmniVoice Studio_0.3.16_aarch64.dmg
9d8c613ce41de0a13fa4745fa3e5b46c4e54693d46fceb9ef659eeb2ee371f00  OmniVoice Studio.app.tar.gz
b30af332691711dfe9739bda51ad8242fb89744c89a3899be6bfaeea17ffda0c  OmniVoice Studio.app.tar.gz.sig

macOS Intel artifacts

77a47387c69533e07c3be806924c7b5d8afbd09da2ac7f67937aff1be147bdb1  OmniVoice Studio_0.3.16_x64.dmg
75dd3a032bdb15c388e78a2791e9396ac7b45bbc9d635bb51ac998c7c11acca9  OmniVoice Studio.app.tar.gz
ba8c309a2c2768a27cd8fe3546eaa02d7203da2fa380874bf0ca1e8733d64663  OmniVoice Studio.app.tar.gz.sig

Don't miss a new OmniVoice-Studio release

NewReleases is sending notifications on new releases.