* feat(settings): compute-device override — auto | CUDA | ROCm | XPU | MPS | CPU Auto-detect stays the default; the override kills the 'auto-detect picked wrong' issue class. Applied at the single choke point (_probe()'s family selection) so routing, get_best_device(), and every badge inherit it. Resolution: OMNIVOICE_DEVICE env > Settings pick (prefs.json) > auto (#981 pattern). An override can steer, never invent hardware: a family the host lacks is noted and ignored; cpu is always honorable. Applies at next backend start (host caps are immutable per process — same restart contract as the rest of the Performance tab, RestartBadge shown). GET/PUT /api/settings/compute-device (admin-gated) reports resolved vs applied so the panel shows restart-required truthfully and disables itself under an env pin instead of pretending. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(changelog): entry for the compute-device override (#1557) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(device-override): harvest — the override reaches CT2 ASR, full i18n, honest edge states - _ctranslate2_cuda_ok() and the ASR sidecar now gate on the probe's family, so a cpu pin (or ROCm host) can never hand CTranslate2 a CUDA device — the override reaches every CT2 loader through one shared gate - override_ignored exposed by the API and shown by the panel (env pin naming a device this machine lacks: auto is in effect, restart won't change it) - all 8 panel strings + 5 device-family labels translated into all 21 locales; failed saves keep their error visible through the re-sync - test isolation: cleanup drops OMNIVOICE_DEVICE before re-probing so no overridden caps leak into later tests; panel tests wait for loaded state - xpu/intel search keywords; oxfmt formatting Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(device-override): round 2 — fail-safe probe fallbacks, complete i18n, combined pin state - a broken capability probe now means CPU everywhere (CT2 gate + ASR sidecar) — never a torch-derived guess that would bypass a cpu pin or re-open #1529 on ROCm; regression test added - env-pinned AND not-detected shows both facts in one subtitle - device_load_failed/perf_save_failed translated into all 21 locales; CJK/th/vi/ar strings no longer say literal 'Auto' - test_ctranslate2_never_gets_cuda_on_a_rocm_build pins the probe family (it was order-dependent on the lru_cache before) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(test): pin the probe family in the faster-whisper OOM-fallback test Same class as the rocm-build test: it mocked torch but not the probe the new override gate consults first, so on a cpu-family CI host the CUDA fallback chain under test was unreachable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
4.4 KiB
Engine guides
One page per engine: what it's for, what it needs, how to enable it, and its
quirks. Select engines in Model Catalogue → Engines (or quick-switch with
Ctrl/Cmd+E), or pin one with
OMNIVOICE_TTS_BACKEND / OMNIVOICE_ASR_BACKEND.
The compute device (CUDA/ROCm/MPS/CPU) is auto-detected; pin it under
Settings → Performance & Device (or OMNIVOICE_DEVICE) if auto-detect
picks wrong — see performance.
Measured speed/VRAM numbers live in benchmarks; what each engine can do expressively in expressive-speech; sidecar disk footprints in disk-usage; the bar a new engine must clear in engine-acceptance.
New to VoiceStudio? Install the app first — macOS (first launch needs the one-time right-click → Open Gatekeeper approval), Windows, Linux, Docker.
Text-to-speech
| Engine | Guide | Runs on | Cloning | Enabled by |
|---|---|---|---|---|
| VoiceStudio (OmniVoice) — default | omnivoice | CUDA · MPS · CPU | ✅ | installed by default |
| VoxCPM2 | voxcpm2 | CUDA · MPS · CPU | ✅ + voice design | pip install "voxcpm>=2.0.3" |
| MOSS-TTS-Nano | moss-tts-nano | CUDA · CPU | ✅ (ref only) | clone + uv pip install -e . |
| KittenTTS | kittentts | CPU | — (8 preset voices) | pip install kittentts |
| MLX-Audio (Kokoro, CSM, Dia, …) | mlx-audio | Apple Silicon | model-dependent | pip install mlx-audio |
| CosyVoice 3 | cosyvoice | CUDA · CPU | ✅ | clone + requirements |
| GPT-SoVITS | gpt-sovits | external server | ✅ | its own API server |
| Sherpa-ONNX | sherpa-onnx | CUDA · CPU | — | pip install sherpa-onnx + model dir |
| IndexTTS 2.5 | indextts | CUDA · CPU | ✅ + emotion | one-click sidecar install |
| OmniVoice GGUF | omnivoice-gguf | CUDA · MPS · CPU | ✅ | bundled binary |
| Supertonic-3 | supertonic3 | CPU | — (7 preset voices) | uv sync --extra supertonic + license |
| MOSS-TTS-v1.5 (8B) | moss-tts-v15 | CUDA · CPU | ✅ | clone + env var |
| dots.tts (2B) | dots-tts | CUDA · CPU (not Windows) | ✅ | clone + env var |
| OmniVoice (subprocess) | omnivoice-subprocess | CUDA · MPS · CPU | ✅ | opt-in pick, no install |
| PocketTTS (Kyutai) | pockettts | CPU (not Intel Mac) | ✅ | uv sync --extra pockettts + license |
| Confucius4-TTS | confucius4-tts | CUDA · CPU | ✅ | clone + env var |
Speech-to-text
| Engine | Guide | Runs on | Best at | Enabled by |
|---|---|---|---|---|
| WhisperX | whisperx | CUDA · CPU | dubbing (word timestamps + diarization) | installed by default |
| Faster-Whisper | faster-whisper | CUDA · CPU | general transcription | installed by default |
| Faster-Whisper (isolated) | faster-whisper-isolated | CUDA · CPU | unattended batches | opt-in pick |
| MLX Whisper | mlx-whisper | Apple Silicon | Mac default | pip install mlx-whisper |
| PyTorch Whisper | pytorch-whisper | CUDA · MPS · CPU | ROCm hosts | installed by default |
| Parakeet TDT (NeMo) | nemo-parakeet | CUDA · CPU | 25 languages, fast CPU | separate venv (never the app's) |
| Parakeet TDT (MLX) | parakeet-mlx | Apple Silicon | dictation, 25 EU languages | default on mac-ARM source installs |
| Moonshine | moonshine | CPU | edge/low-power, no timestamps | pip install (see guide) |
| FunASR (SenseVoice) | funasr | CUDA · CPU | 50+ languages, inline diarization | pip install funasr |
| Sherpa-ONNX dictation | sherpa-onnx-asr | CPU | live streaming dictation | curated model download |
| OpenAI-compatible (remote) | openai-compatible-asr | network | offloading to a server (audio leaves the machine) | Model Catalogue |
Speaker diarization is not an engine registry of its own — the dub pipeline
uses pyannote (HF-gated; see diarization) and
FunASR can diarize inline with its cam++ speaker model.