⚙️ OmniVoice Engine
600+ languages and real timing control
- TTS_engine
OmniVoice has two claims to fame, and both are unusual. One: absurdly broad language coverage - the README lists 600+ languages, which is far past anything else in the suite. Two, and more practically useful: it's the first engine here where you can meaningfully target a segment duration at generation time. For subtitle work that's a big deal - instead of generating audio and then time-stretching it to fit a subtitle slot (which always sounds a bit off), OmniVoice can aim for the target length up front. This node configures it and outputs a TTS_ENGINE for 🎤 TTS Text or 📺 TTS SRT.
At ~3.7GB it's also relatively lightweight for what it does. If you're doing multilingual SRT-timed dubbing, it's worth a serious look.
How it works
OmniVoice is a flow-matching TTS (hence num_step, guidance_scale, and t_shift - the flow-model sampler knobs). Its standout feature, native duration targeting, means when an SRT workflow tells it "this line should be 3.2 seconds," it generates toward that length rather than relying purely on post-hoc stretching. It also has a distinct Voice Design mode: instead of cloning a reference, you describe a voice in text (via the instruct field) and it creates one. That's the same shared Voice Designer flow the suite offers for Qwen and MOSS.
The inputs and outputs that matter
- mode (
Text to SpeechorVoice Design, default TTS) - the fundamental fork. TTS clones/reads; Voice Design invents a voice from a description. - language (default
Auto) - a text field; Auto detects, or name the language. - speed (0.25–3, default 1) - genuine speed control, wide range.
- duration (0–600, default 0) - the headline feature. 0 means "let it decide"; set a value (or let an SRT workflow set it) to target a specific length in seconds.
- num_step (4–128, default 32), guidance_scale (0–10, default 2), t_shift (default 0.1) - flow-matching sampler settings. 32 steps is a fine balance; more is cleaner and slower.
The optional instruct field is where a Voice Design description goes ("a cheerful young woman with a bright tone"). The rest - layer_penalty_factor, position_temperature, class_temperature, denoise, the pre/post-process toggles, and the audio_chunk_duration/audio_chunk_threshold chunking controls - are advanced tuning; leave them at defaults. Output is a single TTS_engine. One quirk worth noting: OmniVoice voice cloning in this suite requires an explicit reference transcript, so use it with 🎭 Character Voices.
Installing it
Part of TTS Audio Suite. Easiest: ComfyUI Manager → search TTS Audio Suite → install → restart, which runs the pack's install.py and handles the dependency conflicts (NumPy, librosa, s3tokenizer) and Python 3.13. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/diodiogod/TTS-Audio-Suite.git, then python install.py from inside the folder with your ComfyUI venv active (run the script, not a bare requirements install). Linux: portaudio19-dev libsamplerate0-dev first. The OmniVoice model (~3.7GB) auto-downloads into ComfyUI/models/TTS/omnivoice/ on first use. There's an "OmniVoice Engine Integration" example workflow that demonstrates cloning, voice design, and duration control together.
Common issues
- Cloning sounds wrong because there's no transcript. OmniVoice cloning in this suite needs the reference text, not just the audio. Feed it through 🎭 Character Voices with an accurate
reference_text, or expect poor results. - Duration targeting seems ignored.
durationat 0 means "no target." Set an explicit value, or drive it from an SRT workflow - that's the setup where it shines. Extreme targets (much shorter/longer than the text naturally is) will still fall back to some correction. - Voice Design produces a random voice each run. That's the nature of designing from a description; if you want to reuse a designed voice, save it via the Voice Designer → 💾 Save Character Voice path.
- Native non-verbal tags. OmniVoice's
<laughter>-style tags go in the text (converted internally) - the 📐 Visual Tag Builder helps assemble them. Don't expect them on this engine node.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| model_variant | COMBO | OmniVoice | OmniVoice multilingual zero-shot TTS model from k2-fsa/OmniVoice. Voice cloning requires reference audio plus reference text. In this suite, use Character Voices or a narrator voice file with matching .reference.txt. Direct audio-only input is not supported for OmniVoice cloning. |
| device | COMBO | auto | Device to run OmniVoice on. Auto follows the best available backend. |
| language | STRING | Auto | Target language. OmniVoice supports 600+ languages. Auto uses language-agnostic generation; an explicit name/code can improve pronunciation and conditioning, especially for short or ambiguous text. Examples: English, Chinese, Japanese, en, zh, ja. |
| num_step | INT | 324–128 | Iterative decoding steps. More steps can improve convergence, clarity, and difficult generations, but increase render time with diminishing returns. 32 is the quality default; 16 is a faster preview setting. |
| guidance_scale | FLOAT | 2.00–10 | Strength of text, language, and instruction conditioning. Higher values can follow conditioning more strongly; excessive guidance may sound forced, distorted, or less natural. Recommended starting point: 2.0. |
| t_shift | FLOAT | 0.100–1 | Shapes how decoding work is distributed across the noise schedule. It can affect convergence and detail, but has no simple quality direction. Keep the tuned 0.1 default unless diagnosing a specific generation problem. |
| speed | FLOAT | 1.000.25–3 | Native speech-rate control. Above 1 generates fewer audio tokens for faster speech; below 1 generates more for slower speech. Extreme values may reduce naturalness. This changes generation length, not waveform playback speed. Ignored when duration is set. Recommended: 1.0. |
| duration | FLOAT | 0.00–600 | Fixed generated length in seconds. 0 lets OmniVoice estimate naturally. A positive value overrides speed and plans the audio-token length directly; unrealistic durations can cause rushed, stretched, or unstable speech. Output cleanup may trim trailing silence. |
| dtypeopt | COMBO | auto | Model precision. Auto chooses an appropriate format. BF16 is usually the safest reduced precision on supported GPUs; FP16 may be faster on some hardware; FP32 uses much more memory and is mainly useful for compatibility diagnosis. |
| instructopt | STRING | In Text to Speech mode, optionally guides speaker attributes such as gender, age, pitch, whisper, supported English accents, or Chinese dialects. A reference voice takes priority. In Voice Design mode this field is disabled because Voice Designer supplies the design instruction. | |
| layer_penalty_factoropt | FLOAT | 5.00–10 | Controls how strongly earlier audio-codebook layers are resolved before deeper detail layers. The tuned value 5.0 prioritizes coarse speech structure first; unusual values can disrupt decoding quality. Usually leave unchanged. |
| position_temperatureopt | FLOAT | 5.00–10 | Randomness in which masked audio positions are filled next. Lower values are more repeatable and may reduce variation; 0 uses greedy position selection. Higher values increase diversity but can make results less consistent. Default: 5.0. |
| class_temperatureopt | FLOAT | 0.000–2 | Randomness when selecting audio tokens. 0 uses greedy token selection for maximum consistency. Raising it can add variation, but also increases the chance of artifacts or unstable speech. Default: 0.0. |
| denoiseopt | BOOLEAN | true | Requests cleaner speech through OmniVoice's denoise token when reference audio is used. It does not affect the current reference-free path. Recommended: on. |
| preprocess_promptopt | BOOLEAN | true | Cleans voice-cloning input by trimming overly long reference audio and silence, and normalizing terminal punctuation in its transcript. Helps produce a compact, reliable prompt. Has no effect without reference audio. Recommended: on. |
| postprocess_outputopt | BOOLEAN | true | Cleans generated audio by removing long silence and applying edge fades/padding. Disable only when raw model output or exact requested duration matters, since silence cleanup may shorten the result slightly. Recommended: on. |
| audio_chunk_durationopt | FLOAT | 15.01–60 | Target size of OmniVoice's native long-form chunks. Smaller chunks reduce VRAM and can stabilize difficult long text, but create more boundaries; larger chunks preserve more context but cost more memory. Default: 15 seconds. |
| audio_chunk_thresholdopt | FLOAT | 30.01–180 | Estimated output duration above which native long-form chunking activates. Lower it to chunk shorter passages for stability/VRAM; raise it to keep more text in one generation. Default: 30 seconds. |
| modeopt | COMBO | Text to Speech | Restricts this engine instance to one operation. Text to Speech works with TTS Text/SRT and enables this engine's instruction. Voice Design works only with Voice Designer, which supplies the instruction. Duplicate the engine node if a workflow needs both modes. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TTS_engine | TTS_ENGINE | — |