Easy-to-run OmniVoice text-to-speech Docker images with a browser UI and HTTP API included.
This Hangry Labs fork is made for ease of use. The aim is that anyone should be able to run massively multilingual text to speech without fighting Python environments, missing model files, or unclear setup: a person trying it at home, a developer wiring it into an app, or a professional evaluating it for local deployment. Install Docker, run one command from Quick Start, open the local link, and start generating speech.
You get:
- A browser UI for auto voice, voice design, and voice cloning
- An HTTP API for your own applications and tools
- No manual Python, model, ASR, or audio dependency setup
- 600+ language support inherited from OmniVoice
- WAV, MP3, FLAC, and OGG output
- GPU acceleration when Docker/NVIDIA support is available
- Offline-friendly usage: download the full image once, keep it, and run it later without relying on live model downloads
Official Docker images are intended for: hangrylabs/omnivoicetts on Docker Hub.
Listen to examples first: hangry-labs.github.io/OmniVoiceTTS/examples.
Hangry Labs home: nuggies.website.
The included browser UI is built for local generation, voice design, voice cloning, progressive streaming tests, seed-based reproducibility, output-format control, and live GPU visibility.
OmniVoice supports voice cloning. Do not use this project for unauthorized voice cloning, impersonation, fraud, harassment, scams, or any illegal or unethical activity. Only clone voices when you have the rights and consent to do so. You are responsible for complying with applicable laws, regulations, platform rules, and ethical standards.
Run with NVIDIA GPU support:
docker run -p 7861:7861 --gpus "device=0" -e CUDA_VISIBLE_DEVICES=0 -v omnivoicetts_openai_voice_profiles:/app/openai_voice_profiles hangrylabs/omnivoicetts:latestRun on CPU:
docker run -p 7861:7861 -e OMNIVOICE_DEVICE=cpu -e OMNIVOICE_LOAD_ASR=0 -v omnivoicetts_openai_voice_profiles:/app/openai_voice_profiles hangrylabs/omnivoicetts:latestCPU mode is supported as a fallback, but it still needs enough system memory. For a 140-character CPU benchmark request, conservative rounded Docker RAM recommendations were: 2 GB for random/no-prompt voice, voice design, and direct clone with transcript; 3 GB for a stored voice profile with transcript; 6 GB for direct clone without transcript; and 7 GB for a stored voice profile without transcript. The no-transcript paths may lazy-load ASR, which is why they need much more RAM. Use more for longer text, concurrent requests, larger outputs, or host environments with tighter memory behavior.
When running on CPU, /tts/status reports container/system memory diagnostics and per-scenario RAM recommendations. If a CPU request appears close to the available memory limit, the container logs a warning and still tries to continue; Docker or the OS may still kill the process if RAM is exhausted.
If a CPU container exits after Loading weights during a cloned-voice /v1/audio/speech request, it is usually an out-of-memory kill rather than a Python exception. The TTS model already needs significant RAM on CPU, and clone/profile requests without a transcript can lazy-load Whisper ASR to transcribe the reference audio. Recent snapshots reduce the default footprint by keeping eager ASR off on CPU, but no-transcript clone paths still need more memory. To lower RAM use: run the latest snapshot (0.3.0-snapshot or newer), keep OMNIVOICE_LOAD_ASR=0, do not set OMNIVOICE_ALLOW_CPU_EAGER_ASR=1, save voice profiles with a reference transcript, include ref_text when sending direct ref_audio, keep concurrency at the default OMNIVOICE_MAX_CONCURRENT_GENERATIONS=1, and prefer GPU mode when available. See benchmarks/CPU_MEMORY.md for measured scenario recommendations and run task benchmark-cpu-memory on your host if you need local numbers.
Run on a specific GPU (example: GPU index 1):
docker run -p 7861:7861 --gpus "device=1" -e CUDA_VISIBLE_DEVICES=1 -v omnivoicetts_openai_voice_profiles:/app/openai_voice_profiles hangrylabs/omnivoicetts:latestThen open: http://localhost:7861
The named omnivoicetts_openai_voice_profiles volume stores voices created in the UI so they survive container replacement and image updates. Docker creates the volume automatically the first time you run one of these commands.
The full image is baked with the OmniVoice model, the Higgs audio tokenizer, and Whisper ASR assets. After the image is pulled, normal runtime is configured for offline use with HF_HUB_OFFLINE=1 and TRANSFORMERS_OFFLINE=1. CPU runs should keep eager ASR disabled; saved voice profiles with transcripts do not need Whisper at request startup, and ASR can still lazy-load only when a reference audio request omits ref_text. To force eager Whisper preload on CPU anyway, set OMNIVOICE_ALLOW_CPU_EAGER_ASR=1. The Python 3.13 baked image was validated with no host model-cache volume mounted.
Default API behavior returns WAV:
curl -X POST "http://localhost:7861/tts/generate" \
-H "Content-Type: application/json" \
-d '{"text":"Hello from Hangry Labs OmniVoiceTTS.","language":"English"}' \
-o output.wavRequest MP3 when you want compact output:
curl -X POST "http://localhost:7861/tts/generate" \
-H "Content-Type: application/json" \
-d '{"text":"Hello from Hangry Labs OmniVoiceTTS.","language":"English","output_format":"mp3"}' \
-o output.mp3Voice design:
curl -X POST "http://localhost:7861/tts/generate" \
-H "Content-Type: application/json" \
-d '{"text":"This is a custom designed voice.","language":"English","instruct":"female, low pitch, british accent","output_format":"mp3"}' \
-o designed.mp3Voice design is for speaker attributes only. Do not combine instruct with bracket expression tags such as [laughter] or [sigh]; use no voice prompt or voice cloning for those expressive tags instead.
Voice cloning with a reference audio path mounted into the container:
docker run -p 7861:7861 --gpus "device=0" -e CUDA_VISIBLE_DEVICES=0 -v omnivoicetts_openai_voice_profiles:/app/openai_voice_profiles -v "%cd%/samples:/data" hangrylabs/omnivoicetts:latestcurl -X POST "http://localhost:7861/tts/generate" \
-H "Content-Type: application/json" \
-d '{"text":"This voice follows the reference sample.","language":"English","ref_audio":"/data/ref.wav","ref_text":"Transcript of the reference audio.","output_format":"mp3"}' \
-o cloned.mp3Kokoro-shaped compatibility fields are accepted where they can be translated cleanly. Existing callers may send voice, use_gpu, or response_format. The voice field can name a saved local voice profile or an OpenAI-style alias such as nova; unknown Kokoro speaker ids are accepted for compatibility but ignored because OmniVoice uses no-prompt generation, voice design, or reference-audio cloning rather than fixed speaker ids.
Output format can be sent as output_format, format, or Kokoro/OpenAI-style response_format.
OpenAI-compatible speech clients can call the local server through /v1/audio/speech:
curl -X POST "http://localhost:7861/v1/audio/speech" \
-H "Content-Type: application/json" \
-d '{"model":"tts-1","voice":"nova","input":"Hello from an OpenAI-compatible local OmniVoiceTTS endpoint.","response_format":"mp3"}' \
-o openai-speech.mp3Model discovery through /v1/models reports the local omnivoice model. For client compatibility, speech requests also accept omnivoicetts, tts-1, tts-1-hd, and gpt-4o-mini-tts as aliases; all of them map to the same local OmniVoice model. OpenAI-style voice names such as alloy, echo, fable, onyx, nova, and shimmer are accepted as local compatibility aliases.
For OpenAI-compatible TTS, standard voice aliases use a local built-in clone reference by default so sentence-by-sentence playback stays closer to the same speaker identity. Advanced clients may also pass OmniVoice extensions such as language, seed, randomize_seed, voice_profile, ref_audio, and ref_text in the request body.
The browser UI includes a Voices tab where you can upload a reference sample and save it as a named local voice profile. The profile stores its default language, seed, and seed-randomization behavior. In OpenWebUI, set the TTS voice to the saved profile name, for example my-voice.
OpenAI-compatible clients can also select or override that profile through additional request parameters:
{
"voice_profile": "my-voice",
"language": "English",
"seed": 12345,
"randomize_seed": false
}Voice profiles are stored inside the container at /app/openai_voice_profiles. The Quick Start commands mount the named Docker volume omnivoicetts_openai_voice_profiles there so profiles survive container replacement.
The same saved profiles and built-in aliases are available on native /tts/generate, /tts/convert, /tts/stream, and /tts/stream-chunks requests through either voice or voice_profile. Explicit ref_audio still takes precedence when provided.
Useful endpoints:
GET /v1/modelsGET /v1/models/{model}GET /v1/audio/modelsGET /v1/audio/voicesPOST /v1/audio/speechGET /tts/pingGET /tts/statusGET /tts/defaultsGET /tts/formatsGET /tts/stream-formatsGET /tts/languagesGET /tts/speakers?language=aGET /tts/voicesGET /tts/voice-design/optionsPOST /tts/generatePOST /tts/convertPOST /tts/streamPOST /tts/stream-chunksPOST /tts/cache/clearPOST /tts/metricsPOST /tts/purge
/tts/generate and /tts/convert return complete generated audio. /tts/stream and /tts/stream-chunks progressively return encoded audio after each generated long-text chunk and support the same voice/voice_profile profile resolution; WAV stream requests are returned as MP3 for live playback compatibility.
Generated audio edge handling can be tuned with pad_duration and fade_duration on /tts/generate, /tts/convert, /tts/stream, /tts/stream-chunks, and /v1/audio/speech. pad_duration adds silence before and after the clip; fade_duration fades the clip in and out to reduce clicks. Both default to 0.1 seconds and can be set to 0 to disable.
Docker images default to OMNIVOICE_MAX_CONCURRENT_GENERATIONS=1, so concurrent API callers queue on each resolved device instead of overlapping GPU-heavy generation. /tts/status reports CUDA allocated, reserved, and peak allocator counters. POST /tts/cache/clear releases unused PyTorch CUDA allocator blocks without unloading model weights or saved voice-prompt cache entries; POST /tts/purge unloads cached models and then performs the stronger CUDA allocator cleanup. OMNIVOICE_EMPTY_CUDA_CACHE_AFTER_REQUEST=1 can force allocator cleanup after every request, but it is off by default because it may reduce throughput.
Interactive API documentation is available at http://localhost:7861/tts/docs.
Install this package in a Python project and point the client at a running OmniVoiceTTS server:
from omnivoice import OmniVoiceTTSClient
tts = OmniVoiceTTSClient("http://localhost:7861")
audio = tts.generate(
text="Hello from my Python app.",
language="English",
instruct="female, low pitch, british accent",
output_format="mp3",
)
audio.save("hello.mp3")OpenAI-shaped speech calls can also be made through the bundled client:
from omnivoice import OmniVoiceTTSClient
tts = OmniVoiceTTSClient("http://localhost:7861")
audio = tts.openai_speech(
model="tts-1",
voice="nova",
input="Hello from an OpenAI-compatible local endpoint.",
response_format="mp3",
)
audio.save("openai-speech.mp3")- Full baked image with OmniVoice model assets and Whisper ASR assets included
- Optional tiny image target for cache-volume workflows
- GPU acceleration when available
- Stored OpenAI voice profiles reuse cached clone prompts after the first request
- Tune generated clip edge silence and fade with
pad_durationandfade_duration - Serialized GPU generation by default to avoid concurrent VRAM spikes
- CUDA allocator diagnostics and cache clearing without unloading model weights
- Optional
OMNIVOICE_RESAMPLE_BACKEND=librosafallback if a platform hastorchaudioissues - HTTP API + web UI in one container
- Offline-friendly runtime flags by default
- Persistent Hugging Face cache volume support in the local Taskfile workflow
- Persistent OpenAI voice-profile volume support in the local Taskfile workflow
- Kokoro-shaped compatibility routes for easier integration with existing TTS tooling
We tested FlashAttention-2 with the official Dao-AILab wheel for Python 3.13, Torch 2.8, and CUDA 12.8. It installed and ran, but it did not improve the workloads this project is built around. For normal UI/OpenAI-compatible usage, where clients often send one sentence per request, it made generation substantially slower.
Single-request API benchmark on RTX 5060 Ti, 100 calls per category:
| Category | Standard attention avg | FlashAttention avg | Result |
|---|---|---|---|
| Random/no reference | 1.104s | 1.537s | 39.2% slower |
| Predefined cached voice | 1.036s | 1.628s | 57.1% slower |
| Direct reference audio | 1.498s | 2.010s | 34.2% slower |
We also tested true batched generation. Batch size 4 was still slower with FlashAttention. Batch size 10 showed small gains for clone paths but not for random/no-reference generation:
| Batch category | Standard attention avg | FlashAttention avg | Result |
|---|---|---|---|
| Random/no reference, batch 10 | 0.638s/item | 0.657s/item | 3.0% slower |
| Predefined cached voice, batch 10 | 0.995s/item | 0.955s/item | 4.0% faster |
| Direct reference audio, batch 10 | 1.419s/item | 1.372s/item | 3.3% faster |
A larger 100-message batch gave only a small random/no-reference improvement, then became impractical for clone benchmarking on the 16 GB RTX 5060 Ti:
| Batch category | Standard attention | FlashAttention | Result |
|---|---|---|---|
| Random/no reference, one 100-message batch | 92.18s total | 89.63s total | 2.8% faster |
| Predefined/clone, one 100-message batch | exceeded 900s timeout | not completed | impractical |
The FlashAttention experiment also increased image complexity and size, added another GPU-specific binary dependency, consumed more VRAM in large-batch tests, and produced worse stability characteristics for the use cases we actually support. Based on those results, OmniVoiceTTS intentionally does not ship FlashAttention support. The same lesson applies to other Hangry Labs speech projects: do not assume FlashAttention helps STT/TTS workloads without project-specific benchmarks.
This repository currently targets Python >=3.13, <3.14. The Docker image uses python:3.13-slim, and task deps regenerates Linux/Python 3.13 requirements.
Build and run the full baked image:
task image
task imagerun
task imageweb
task imageapiBuild and run the tiny image:
task image-tiny
task imagerun-tinyRun the example-generation benchmark against the active local API:
task benchmark-examplesThe benchmark reuses the public example workload, prewarms the model and benchmark reference voice, then runs no-prompt, predefined cached-reference, and direct reference-audio rounds. Results are appended to per-category Markdown tables under benchmarks/ for human tracking and benchmarks/example-generation.json for detailed machine-readable history. Use BENCHMARK_ITEMS=1 or BENCHMARK_LIMIT_LANGUAGES=1 for quick smoke checks.
By default each measured stage prewarms immediately before it runs: 10 no-prompt warmup calls before random_voice, 10 predefined-reference warmup calls before predefined_voice, and 10 direct-reference warmup calls before direct_reference_audio. It then runs 100 no-prompt measured calls, 100 predefined cached-reference measured calls, and 100 direct ref_audio measured calls. The measured set is deterministic: the first two random samples from each language in examples/assets/manifest.json, repeated in the same order as needed to reach 100 calls per round.
CPU memory can be checked with:
task benchmark-cpu-memoryThis starts short-lived CPU containers with increasing Docker memory limits and sends OpenAI speech requests for random voice, design voice, direct clone with/without transcript, and stored voice with/without transcript. The default ladder starts at 1536 MiB and skips obviously unusable sub-GB limits. Results are appended to benchmarks/CPU_MEMORY.md as scenario recommendation columns and to benchmarks/cpu-memory.json with detailed attempt data.
Hot-swap local service code into the container without rebuilding:
task localrun
task localrun-tiny
task logsDependency and cleanup helpers:
task deps
task imagestop
task nuketask imagerun and task localrun mount named Docker volumes at /app/.cache/huggingface and /app/openai_voice_profiles so cache assets and saved OpenAI voice profiles can survive container and image rebuilds. Baked run tasks seed missing cache files from the full image before startup.
Release from a clean tree:
task release DRY_RUN=1
task releaseThe release task is intentionally allowed to create the release commit, annotated tag, and next-snapshot commit. Outside that bounded release flow, normal project changes should be reviewed and committed by the repository owner.
OmniVoice is a massively multilingual zero-shot text-to-speech model supporting 600+ languages. It provides:
- Voice cloning from a short reference audio clip
- Voice design from speaker attributes such as gender, age, pitch, style, English accent, and Chinese dialect
- Auto voice generation with no reference prompt
- Fine-grained controls such as non-verbal symbols and pronunciation correction
Upstream links:
- Original repository: k2-fsa/OmniVoice
- Hugging Face model: k2-fsa/OmniVoice
- Hugging Face Space: k2-fsa/OmniVoice
- Paper: arXiv:2604.00688
Runtime discovery is available from the local API:
- Supported languages:
GET /tts/languages - Voice design options:
GET /tts/voice-design/options - Output formats:
GET /tts/formats - Interactive API reference:
GET /tts/docs
The original Python CLI tools are still present:
omnivoice-demo --ip 0.0.0.0 --port 8001
omnivoice-infer --model k2-fsa/OmniVoice --text "Hello world." --output hello.wav
omnivoice-infer-batch --model k2-fsa/OmniVoice --test_list test.jsonl --res_dir results/This fork intentionally removes upstream training, data-preparation, and benchmark-evaluation pipelines from the runtime-focused package. For model training or research reproduction, use the original k2-fsa/OmniVoice repository.
This project is an independently maintained packaging and serving fork of the original OmniVoice project by k2-fsa and contributors.
The upstream model and research are the core contribution. This Hangry Labs fork focuses on making OmniVoice simple to run and integrate: Docker image, included UI, HTTP API, offline-friendly baked assets, practical examples, and release tooling.
License and attribution are preserved in LICENSE.
If you encounter bugs, have feature requests, or need help using Hangry Labs OmniVoiceTTS:
- Open a new GitHub Issue with as much detail as possible
- Include error messages, logs, Docker command, GPU/CPU mode, and reproduction steps
- For upstream model behavior, also check the original k2-fsa/OmniVoice project
Planned items for the next development cycle:
- Add MCP support so local agents can discover OmniVoiceTTS capabilities, generate speech, inspect voices/profiles, and query runtime status through a local tool interface.
- Add a readiness endpoint and Docker healthcheck for cleaner container orchestration.
- Add request IDs and structured error payloads to make issue reports easier to diagnose.
- Add upload-based API support for reference audio plus optional transcript, so API users do not need to pass container-local file paths.
- Add a text preflight/token estimate endpoint so clients can inspect character counts, tokenizer counts, chunking, and rough duration before sending generation requests.
- Add generation timing and queue diagnostics to
/tts/statusfor better performance and overload visibility.
The snapshot channel is the current Docker latest build after the latest tagged release. It is installable with hangrylabs/omnivoicetts:latest and is useful for testing fixes and new features before the next immutable vX.Y.Z release, but it can change as master moves. Use versioned tags such as v0.3.0 when you need reproducible deployments.
Current snapshot changes after v0.3.0:
- Added edge audio controls for generated clips:
pad_durationadds configurable silence before and after output audio, andfade_durationfades the clip edges to reduce clicks. - Exposed the new edge controls in the browser UI under Generation Settings.
- Exposed the same controls through the native API, OpenAI-compatible
/v1/audio/speechextension fields, CLI commands, and the Python client.
- Added the OpenAI-compatible
/v1/audio/speechAPI path, model discovery routes, OpenAI-style voice aliases, and client helpers for OpenAI-shaped speech requests. - Added saved OpenAI voice profiles with UI workflows for adding, managing, deleting, and reusing reference voices across container restarts.
- Updated Docker examples to mount the named
omnivoicetts_openai_voice_profilesvolume by default so saved voices survive image pulls and container recreation. - Improved OpenAI model handling: OmniVoiceTTS now advertises its own
omnivoicemodel id while still accepting common compatibility aliases such astts-1,tts-1-hd, andgpt-4o-mini-tts. - Added cached voice-clone prompt reuse for stored voices and built-in clone aliases so repeated profile calls avoid reprocessing the same reference prompt.
- Added CUDA memory/backpressure controls: generation concurrency is serialized by default,
/tts/statusreports CUDA allocator statistics,/tts/cache/clearreleases unused CUDA allocator memory without unloading models, and/tts/purgenow performs stronger cleanup. - Improved CPU-mode behavior after the cloned-voice CPU crash report: eager ASR is disabled by default on CPU, accidental CPU Whisper preload is guarded, CPU RAM pressure warnings are logged, and
/tts/statusexposes CPU memory diagnostics and scenario recommendations. - Added startup support diagnostics in Docker logs, including version/build, Python/Torch/CUDA/cuDNN, detected hardware, memory, offline flags, model/device/ASR/cache config, profile paths, sanitized startup parameters, and a Hangry Labs ASCII banner.
- Added CPU memory benchmarking with
task benchmark-cpu-memory,benchmarks/CPU_MEMORY.md, and detailed JSON results covering random voice, design voice, direct clone with/without transcript, and stored profile with/without transcript. - Added the example-generation benchmark suite and per-category benchmark history files for random, predefined cached voice, and direct reference-audio performance tracking.
- Documented the FlashAttention investigation and exclusion after benchmarks showed slower single-request performance and only marginal batch gains for the current API workload.
- Hardened file/path handling for reference audio, uploads, generated files, subprocess commands, voice instruction parsing, and GitHub Actions token permissions.
- Continued modularizing the service by extracting audio helpers, safe path helpers, branding, GPU monitor, translations, and OpenAI voice-profile utilities out of the main app entrypoint.
- Reworked the browser UI into a branded Hangry Labs experience while keeping Gradio controls stable and functional.
- Added the new top banner artwork, build/runtime badge, project links, and a cleaner right-side output/control layout.
- Added multilingual UI locale support with dynamic labels, hints, generation controls, and safety text.
- Added expanded expressive bracket-tag guidance in the UI, including supported tags and the Voice Design incompatibility warning.
- Added practical progressive chunk streaming for long-form TTS through
/tts/streamand/tts/stream-chunks. - Added a dedicated UI Stream tab with buffered chunk playback and a Stop Generation control, following the stable KokoroTTS-style two-player pattern.
- Added reproducible generation controls: Seed, Randomize Seed, API
seed/randomize_seedfields, andX-OmniVoiceTTS-Seedresponse headers. - Added balanced automatic voice-profile selection for UI No Voice Prompt mode on plain text, while keeping true no-prompt behavior for expressive bracket tags.
- Added a compact live GPU monitor to the browser UI with utilization, VRAM, temperature, power draw, and sparkline history.
- Added the browser UI screenshot to README and Docker Hub documentation.
- Updated Docker Hub docs to put the public examples page and browser UI preview front and center.
- Improved local development helpers and release scripting for the
0.2.xrelease line.
- Forked OmniVoice into a Hangry Labs runtime-focused project for local TTS use.
- Added Python 3.13 support with pinned runtime dependencies, refreshed lockfiles, and Docker images based on
python:3.13-slim. - Added full baked Docker packaging that prefetches OmniVoice, the Higgs audio tokenizer, and Whisper ASR assets for offline-friendly runtime after image pull.
- Added a tiny Docker target for persistent Hugging Face cache-volume workflows.
- Added GitHub Actions for full and tiny Docker Hub image publishing on
master, release tags, and manual dispatch. - Added a unified Gradio browser UI and FastAPI HTTP API on port
7861. - Added auto voice, structured voice design, and reference-audio voice cloning workflows.
- Added discovery/status endpoints for ping, status, defaults, formats, languages, speakers, voices, voice-design options, metrics, and OpenAPI docs.
- Added synthesis endpoints for generate, convert, progressive chunk streaming, and purge.
- Added WAV, MP3, FLAC, and OGG output support, plus
output_format,format, and Kokoro/OpenAI-styleresponse_formatcompatibility. - Added Kokoro-shaped compatibility fields/routes where they can be translated cleanly, including
voice,use_gpu,/tts/voices,/tts/speakers,/tts/stream-formats,/tts/convert, and/tts/stream. - Added advanced generation controls for guidance, denoise/preprocess/postprocess, chunking, temperature, layer penalty, pitch, tempo, volume, and loudness normalization.
- Added a dependency-free Python HTTP client.
- Added Taskfile workflows for image build, image run, local bind-mounted run, API smoke testing, logs, cleanup, release, app injection, NAS shell access, and local dev process cleanup.
- Removed upstream training, data-preparation, evaluation, fine-tuning, and benchmark workflows from this fork to keep the project focused on inference, UI, API, and Docker runtime.
- Simplified public docs to README plus Docker Hub docs, with runtime discovery delegated to API endpoints.
- Added Hangry Labs branding assets, static 404 page, Docker Hub documentation, and a GitHub Pages examples showcase.
- Added 20-language public audio examples with 280 MP3 files: 10 random voice-variety samples, 3 translated intros, and 1 cross-language clone demo per language.
- Added native-language example-page controls, embedded manifest data for fetch-free GitHub Pages/direct-file preview, custom audio cards, progress bars, shared volume/mute, random intro playback, and a highlighted clone demo.
- Added a runtime guard that blocks voice-design
instructtogether with bracket expression tags such as[laughter]and[sigh], after testing showed that combination can produce unstable non-speech audio. - Regenerated affected non-verbal public examples without voice-design
instruct, avoiding whisper plus bracket tags and placing tags inside sentences with follow-up text. - Validated a fresh Python 3.13 baked image without a host model-cache volume mounted, with offline flags enabled, GPU inference, all output formats, stream/convert routes, purge, and reload from baked cache.
If you use OmniVoice in research, cite the upstream work:
@article{zhu2026omnivoice,
title={OmniVoice: Towards Omnilingual Zero-Shot Text-to-Speech with Diffusion Language Models},
author={Zhu, Han and Ye, Lingxuan and Kang, Wei and Yao, Zengwei and Guo, Liyong and Kuang, Fangjun and Han, Zhifeng and Zhuang, Weiji and Lin, Long and Povey, Daniel},
journal={arXiv preprint arXiv:2604.00688},
year={2026}
}This fork is licensed under the Apache License 2.0.
Original work by k2-fsa and contributors in OmniVoice. The upstream responsible-use disclaimer is preserved in spirit here: users must not use this model for unauthorized voice cloning, voice impersonation, fraud, scams, or any other illegal or unethical activities.
