Omnivoice TTS (Voice Design)
Type 'female, young adult, high pitch' — get a voice
- audio
No reference clip, no voice to clone, no idea who should speak - you just want a voice with certain qualities. That's this node: describe the speaker in plain words and it synthesizes a voice from scratch to match. It's the odd one out in the OmniVoice-Triton pack, because it's the only node that needs nothing but text - both inputs are strings.
OmniVoice's "voice design" mode is exactly what it sounds like: the diffusion TTS conditions on a natural-language description of the target voice instead of a reference embedding. Where the Voice Clone node learns from your sample, this one interprets an instruction. The tradeoff is obvious and you should be honest about it: you get total freedom to invent a speaker, but you're trusting the model's idea of what "young adult" means, and that's a much fuzzier target than a real sample. This is the node for character narration, game voices, audiobook personas - anywhere the voice doesn't need to match a real person.
How it works
Under the hood it calls the same cached Triton runner as its siblings - the pack's omnivoice-triton engine with the four runner_modes (hybrid default, ~3.4× faster than stock with CUDA Graph replay), ~2GB VRAM, output as a 24 kHz mono ComfyUI AUDIO dict. The only difference is the conditioning path: instead of a reference waveform, it feeds your instruct string to the model's voice-design branch. Same speed win, same caching, zero extra setup.
The inputs that matter
text- what the designed voice says.instruct- the voice description. This is the whole node. The author's guidance: use the model's supported instruction items, separated by comma + space, e.g.female, young adult, high pitch. Stick to simple attribute lists - gender, age range, pitch, tone. This is not a prompt-engineering sandbox; long prose instructions degrade into "the model ignores it" territory.language-auto,ko,en,zh. Worth setting explicitly if you need a specific language, since the designed voice otherwise leans on whatever the model decides.num_step/guidance_scale/class_temperature- same generation dials as the other two nodes (32 steps, 2.0 guidance, 0 temperature by default). Lowernum_steptrades quality for speed if you're iterating on voice ideas.
Output: audio (AUDIO), 24 kHz mono. Standard wiring: SaveAudio, or straight into a lip-sync stage.
Install
Identical to the rest of the pack - it's three nodes in one repo, so you only install once. Search "Omnivoice Triton TTS" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/newgrit1004/ComfyUI-Omnivoice-Triton.git
cd ComfyUI-Omnivoice-Triton
python install.py
Then restart ComfyUI. Note the install.py - requirements.txt is intentionally empty so ComfyUI Manager's dependency pass can't replace your CUDA torch with a CPU wheel. Needs Python ≥ 3.12, CUDA 12.8+ torch, an Ampere/Ada/Hopper/Blackwell GPU, and the k2-fsa/OmniVoice model (~2GB) downloads from HuggingFace on first run.
Common issues
Same pack-wide gotcha as its siblings, and it's the one that actually bites: run ComfyUI with --disable-cuda-malloc. The default CUDA async allocator conflicts with transformers' parallel shard loading and CUDA Graph capture, and you get phantom OOM errors or crashes specifically in hybrid mode. Not optional:
python ComfyUI/main.py --listen 0.0.0.0 --port 8188 --disable-cuda-malloc
The node-specific trap is instruct format. If the voice comes out random, it's usually because the instruction uses phrasing the model doesn't map to anything - stick to the comma-separated attribute style from the README (female, young adult, high pitch), and remember instruct is required and must be non-empty or the node errors out. Also: the first generation per input shape carries a one-time CUDA Graph capture cost (~0.1–0.5s); the replay after that is the fast number you actually get to keep.
Realistic expectation-setting: community reaction to OmniVoice's voice design has been more mixed than its cloning - cloning got the "wow this rocks" comments, design is fuzzier and more dependent on the instruction. If you need a voice that must sound like a specific real person, you want the Voice Clone node instead. If you need a plausible speaker on demand, this is the only node in the pack that gets you there with zero source material.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello, this is an OmniVoice designed voice test. | — |
| instruct | STRING | female, young adult, high pitch | — |
| runner_mode | COMBO | hybrid | 4 options: base, triton, faster, hybrid |
| num_stepopt | INT | 324–64 | — |
| guidance_scaleopt | FLOAT | 2.00–10 | — |
| class_temperatureopt | FLOAT | 0.000–2 | — |
| languageopt | COMBO | auto | 4 options: auto, ko, en, zh |
| model_idopt | STRING | k2-fsa/OmniVoice | — |
| dtypeopt | COMBO | fp16 | 3 options: fp16, bf16, fp32 |
| deviceopt | COMBO | cuda | 2 options: cuda, cpu |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |