Skip to content

Repository files navigation

OmniSonic 🎧

OmniSonic is an accessible Windows desktop application for the OmniVoice multilingual text-to-speech engine. It provides voice cloning, voice design, automatic voice generation, microphone recording, reusable private presets, and Polish/English interfaces.

Najważniejsze funkcje / Highlights

  • native wxPython interface designed for keyboard and NVDA use;
  • voice cloning from WAV, FLAC, OGG, Opus, MP3, AIFF, AU, or CAF references, with optional ASR transcription;
  • automatic and attribute-based voice design, including supported Chinese dialects and additional voice instructions;
  • pause, resume, stop, recording, manual save, and configurable auto-save;
  • a dedicated preset manager with create, rename, rebuild, and delete actions;
  • portable voice presets stored in the application's ignored presets/ directory;
  • full access to OmniVoice's generation and long-form audio parameters;
  • lazy ASR loading to reduce startup time and memory use;
  • Polish and English localization.

Wymagania / Requirements

  • Windows 10 or newer;
  • Windows PowerShell 5.1 (included with supported Windows versions);
  • a 64-bit Python 3.10-3.13 installation is optional;
  • a supported NVIDIA, AMD, or Intel GPU is recommended for practical generation speed;
  • a working audio output device; microphone access is required only for recording.

The launcher selects and verifies one of four first-class acceleration profiles:

  • NVIDIA GPU -> CUDA;
  • supported AMD Radeon/Ryzen AI GPU on Windows 11 -> native Windows ROCm;
  • supported Intel Arc/Core Ultra Arc GPU on Windows 11 -> XPU;
  • everything else, or an explicit fallback -> CPU.

Automatic priority on multi-GPU computers is CUDA, ROCm, XPU, then CPU. Merely finding an AMD or Intel display adapter is not enough: Auto mode checks the supported-hardware patterns in installer_backends.json, then validates the installed runtime with a real tensor operation. CPU inference can be very slow. WAV, FLAC, OGG/Vorbis, OGG/Opus, AIFF, AU, and CAF are decoded by the bundled audio stack without a separate FFmpeg installation. MP3 is supported by current bundled builds as well; uncommon formats can use the fallback decoder and may require FFmpeg on PATH.

Instalacja i uruchomienie / Install and run

The recommended one-click path is:

start_desktop.bat

On a fresh installation the launcher offers two isolated modes: its own portable Python 3.12.10 in env/ (recommended), or venv/ based on a compatible system Python. It remembers the choice, installs the backend-specific PyTorch build before the rest of the application, verifies dependencies and imports, and executes a real accelerator matrix multiplication. A damaged environment is repaired on the next launch.

Portable mode uses the official CPython NuGet package, verified with SHA-256. It does not install Python globally or modify system PATH. Unlike the former embedded ZIP, it supports pip's isolated package builds, including ROCm's source package. The old Cannot import 'setuptools.build_meta' error was a launcher bootstrap bug, not a missing HIP SDK. Updating the launcher and retrying start_desktop.bat -Mode Portable repairs an incomplete installation; there is no need to delete the whole application or replace a working system-Python setup.

Regular launches check hardware, declared package versions, and a real accelerator operation, but no longer import the entire application and run pip check before starting it a second time. Full validation runs during installation, with -InstallOnly, or once after installer inputs/hardware change. A stale marker alone does not trigger a new download: a working runtime is validated and reused.

AMD ROCm is enabled as a supported profile, including the Radeon 8060S; support still depends on the GPU, Windows, and driver requirements in the backend matrix. The installer supplies the profile's ROCm SDK Python packages inside its private environment. Install a compatible AMD graphics driver as described in AMD's Windows installation guide. A separate system-wide HIP SDK does not fix Python package-build isolation errors.

Runtime replacement is transactional. The launcher prepares and validates env.new/ or venv.new/ before activating it, and keeps the previously working runtime as env.old/ or venv.old/. A failed staging install never replaces the active environment.

The mode can be changed explicitly with start_desktop.bat -Mode Portable or start_desktop.bat -Mode System. start_desktop.bat -InstallOnly installs and validates everything without opening the desktop application.

Normal installations should leave backend selection on Auto. Overrides are available for repair, testing, and mixed-GPU computers:

start_desktop.bat -Backend Auto
start_desktop.bat -Backend CUDA
start_desktop.bat -Backend ROCm
start_desktop.bat -Backend XPU
start_desktop.bat -Backend CPU

The same values can be supplied through OMNISONIC_BACKEND. Priority is CLI, environment variable, saved CLI preference, then hardware autodetection. An accelerator failure offers Retry, CPU, diagnostic details, or Abort; fallback to CPU is never silent. ROCm currently requires Python 3.12, so portable Python 3.12.10 is selected when a compatible system interpreter is unavailable.

When Hide launcher console is enabled, normal launches are handed off to pythonw.exe so the console does not remain open with the application. The launcher keeps its console available during first-time installation and shows it again if startup or environment repair fails. Restart OmniSonic after changing this option so the launcher can select the correct Python executable.

The System settings tab shows the active backend, device, PyTorch/TorchAudio versions, CUDA/HIP/XPU state, Python, OS, and RAM. Copy diagnostics places a report suitable for a bug submission on the clipboard.

Keyboard shortcuts can be edited on the Keyboard shortcuts settings tab. Each command can be enabled independently, all shortcuts can be disabled with one global checkbox, and the default assignments can be restored at any time. Ctrl+Shift+S creates a preset from the reference audio currently loaded on the Voice Clone tab and asks for its name.

In the settings dialog, Enter activates Save and Escape cancels. Escape closes immediately when nothing changed and asks before discarding unsaved changes otherwise.

Manual setup:

python -m venv venv
venv\Scripts\python -m pip install --upgrade pip
venv\Scripts\python -m pip install -e ".[desktop]"
venv\Scripts\python -m omnisonic.app

Manual pip setup uses normal dependency resolution and does not provide the launcher's hardware-specific build selection. Use start_desktop.bat for the supported universal Windows installation path. Binary backend versions and official package sources are maintained only in installer_backends.json; the project metadata no longer forces CUDA or any other binary PyTorch variant.

After installation, the omnisonic command is also available.

Dane prywatne / Private data

Batch text-to-speech

On Batch processing, use Add files or Add folders to select one or many TXT/Markdown inputs. Folder selection supports multiple folders at once; subfolder scanning is optional. Duplicate paths are skipped. UTF-8 (with or without BOM) and UTF-16 with BOM are supported; Markdown is read as plain text. Binary documents such as PDF/DOCX and audio inputs are not treated as text.

Choose Clone, Design, or Automatic mode. The batch uses the voice/preset, language/instructions and advanced settings from the corresponding main tab. With Clone mode, the same reference prompt is prepared once and reused for the whole batch. In Automatic/Design mode the engine can choose a different voice for each file; use a cloned preset when speaker consistency is required.

Process files (or Ctrl+G while this tab is active) processes files in sequence, keeping GPU memory use bounded. Each input produces a separate WAV inside a new batch subfolder of the chosen output directory, along with batch_report.json. Matching names from different folders do not overwrite one another. This explicit batch destination bypasses the single-file save prompts. Saving a new generated-audio directory in Settings immediately updates the batch destination, without restarting the app. Unrelated settings leave a manually chosen batch directory unchanged. A running batch keeps its original destination; the updated folder applies to the next batch.

Preserve input folder structure keeps each selected folder's name and its subfolders inside the batch output, for example: Book/Chapter 1/part.txt becomes batch-.../Book/Chapter 1/part.wav. With multiple selected folders, each gets its own output tree. Individually added files go directly into the batch directory. Duplicate folder or WAV names get a numeric suffix instead of overwriting or merging unrelated inputs. If selections overlap, a file is queued once using its first selection's origin. Only folders containing queued text files are recreated; empty folders and unrelated files are not copied. Include subfolders controls scanning, while this new checkbox controls output layout and can be changed after scanning. Both options are on by default. Disabling Preserve input folder structure restores the flat, numbered output layout without excluding subfolder inputs.

Bad files are reported and remaining files continue. Cancellation waits for the current model call and keeps completed recordings. Retrying skips completed queue entries; Delete/Remove selected only remove entries from the queue, not source files or saved audio. The queue is session-only. Limits are 5000 files per queue and 5 MiB of text per file.

Power Switch: transfer to another PC or change the GPU

Close OmniSonic, then run power_switch.bat. It needs only Windows PowerShell, not an installed Python environment. The menu offers:

  • Change backend: Auto, CUDA, ROCm, XPU, or CPU through the normal transactional installer. Settings, presets and audio stay in place. Failed repair does not replace the saved working Python/backend choice.
  • Export: settings (including shortcuts), the entire presets/ folder, and optionally saved audio from both configured audio directories.
  • Import: restore an exported folder. Existing extra presets remain; matching files/settings are backed up before replacement.

Copy the whole export folder from power-switch-backups/ to the destination PC, then select Import there. Exports/backups contain private voice data and are ignored by Git. They are never automatically deleted. Import verifies SHA-256, rejects traversal paths and links/junctions, and rolls back failed file copies.

Import remaps output folders to the destination user's actual Windows Documents location: OmniSonic/generated and OmniSonic/record. Python, drivers, cached models, temporary microphone references and old backend preferences are not transferred. Use Change backend -> Auto after import, then start normally. Model weights may need downloading on the destination PC.

power_switch.bat -Action Switch -Backend Auto
power_switch.bat -Action Export -IncludeAudio
power_switch.bat -Action Import -ProfilePath "D:\My OmniSonic profile"

See the compatibility audit for the checked OmniVoice revision, GUI feature coverage and hardware-test limitations.

Voice presets are stored in the portable presets/ directory next to the application. This makes it possible to move or back up the program together with all saved voices. Settings are stored in config/settings.json next to the program; temporary reference recordings use config/temp/. On the first start after updating, existing user-profile settings (or the old root-level settings.json) are copied once if the new file does not exist. The original is retained; subsequent reads and writes use the portable configuration only. The entire config/ directory is ignored by Git. No other preset location is scanned or migrated. The program folder must be writable. Launcher Python/backend preferences also live in config/; Power Switch does not transfer those hardware-specific preferences to another PC.

Automatically transcribe reference audio files is enabled by default in Settings. Selecting/pasting a new reference path or finishing a microphone recording clears the previous transcript and starts Whisper once the model is ready. You can edit the result or disable this option and use Transcribe manually. Disabling it only disables proactive transcription on file selection; the engine still needs a transcript when creating a voice prompt and obtains one if you generate/save a preset with an empty reference-text field. Preload ASR is a separate option and is disabled by default. When disabled, Whisper loads on first use, not together with the synthesis model. Changing this setting takes effect after reloading the model; it does not by itself unload an already loaded Whisper.

Settings / System also has two independent, default-off memory options:

  • Release the Whisper model from memory after transcription unloads Whisper immediately after recognition, including recognition during cloning/preset creation. The next transcription reloads it on the selected accelerator.
  • Release the OmniVoice model from memory after each operation unloads the synthesis model after generation, preset creation or another operation using it. A batch keeps the model for the entire queue and releases it when the queue finishes or is cancelled. The next operation loads it automatically.

These options drop model weights from RAM/VRAM, rather than move them to CPU. Downloaded files stay on disk and generated audio remains playable/saveable. Errors and cancellation also trigger cleanup. Changes apply to the next operation, without restarting. Reloading models adds latency. If only OmniVoice release is enabled, Whisper can remain cached independently; transcribing while OmniVoice is unloaded loads only Whisper. Manual model unloading releases both. With both options off, the existing keep-models-loaded behavior is unchanged. GPU runtime/BLAS workspaces can still occupy a small amount of memory after all model weights are released; zero VRAM usage is not expected while the app runs.

Whisper handles audio longer than 30 seconds using timestamp-enabled long-form generation, but only plain text is inserted into the reference field. It uses the same PyTorch accelerator as synthesis, including AMD ROCm; whisper.cpp is not a required dependency. For voice cloning, prefer a clean 3–10-second sample (the engine warns about long prompts); a full transcript prevents trimming the reference to avoid mismatching the audio and its text.

Voice presets contain derived voice tokens and may contain a reference transcript. Treat them as private data. The complete presets/ tree is ignored by Git.

The Voice Presets tab is the only place where presets can be removed. Delete shows the configured warning, while Shift+Delete removes the selected preset without that warning. Editing can rename a preset, update its transcript, or rebuild its voice data from a new source recording. The original audio path is not embedded in a preset, so choosing a replacement file during editing is optional.

Generated and recorded WAV files default to Documents\OmniSonic\generated and Documents\OmniSonic\record. Both folders can be entered directly or selected with Browse in settings. The related checkbox chooses between saving directly to that configured folder and asking for a destination each time.

Development

venv\Scripts\python -m pip install -e ".[desktop,dev]"
venv\Scripts\python -m ruff check omnisonic tests
venv\Scripts\python -m pytest

Fast tests for configuration, localization, validation, and operation state do not require downloading the AI model:

venv\Scripts\python -m unittest -v tests.test_desktop_logic

Model-dependent LoRA tests require OMNIVOICE_TEST_MODEL_PATH to point to a local OmniVoice checkpoint.

powershell -File tests/test_launcher.ps1 tests startup decisions without a GPU. Add -Portable to download the official portable Python and build the small ROCm source package that previously failed. This network regression also tests Python after environment activation/renaming; it leaves its diagnostic files in trash/.

tests/test_operation_dispatch.py covers queued GUI completions, cancellation dialogs and stale callbacks. tests/test_demo_reference.py covers web clone options, error reporting, PCM clipping and long-reference Whisper calls without loading model weights. These regressions also run in CI.

Optional real-device web regression (use a reference longer than 30 seconds):

venv\Scripts\python -B tests/smoke_web_inference.py --backend rocm --reference long-test.wav --output trash/web-smoke

This uses locally cached models, checks the web UI's registered clone/design callbacks and shared generation queue, and writes only diagnostic output. Choose a new output directory for each run. Use tests/smoke_model_memory.py with the same arguments to verify repeated model release/reload on the selected hardware.

Project structure

  • omnisonic/ — desktop application, configuration, localization, and UI state;
  • omnivoice/ — bundled upstream TTS engine, training, evaluation, and CLI tools;
  • langs/ — Polish and English desktop translations;
  • tests/ — lightweight desktop tests and optional model integration tests;
  • start_desktop.bat / desktop_launcher.ps1 — verified Windows launcher, Python bootstrap, installer, and repair entry point.
  • installer_backends.json — the single source of truth for CUDA, ROCm, XPU, and CPU PyTorch builds and supported automatic hardware selection;
  • omnisonic/accelerator.py — backend-neutral runtime selection, smoke tests, and diagnostics used by both the launcher and desktop application.

Credits and license

Licensed under Apache-2.0. See LICENSE.

About

No description, website, or topics provided.

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages