Nodes/Omnivoice Triton TTS/Omnivoice TTS (Voice Design)
ComfyUI Node

Omnivoice TTS (Voice Design)

Type 'female, young adult, high pitch' — get a voice

By newgrit1004·Created 5 months ago·Updated 5 months ago· 5
Omnivoice TTS (Voice Design)
    • audio
    textHello, this is an OmniVoice designed voice test.
    instructfemale, young adult, high pitch
    runner_modehybrid
    num_step32
    guidance_scale2.0
    class_temperature0.00
    languageauto
    model_idk2-fsa/OmniVoice
    dtypefp16
    devicecuda

    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). Lower num_step trades 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.

    CategoryOmnivoice-Triton

    Inputs (10)

    NameTypeDefaultDescription
    textSTRINGHello, this is an OmniVoice designed voice test.
    instructSTRINGfemale, young adult, high pitch
    runner_modeCOMBOhybrid4 options: base, triton, faster, hybrid
    num_stepoptINT324–64
    guidance_scaleoptFLOAT2.00–10
    class_temperatureoptFLOAT0.000–2
    languageoptCOMBOauto4 options: auto, ko, en, zh
    model_idoptSTRINGk2-fsa/OmniVoice
    dtypeoptCOMBOfp163 options: fp16, bf16, fp32
    deviceoptCOMBOcuda2 options: cuda, cpu

    Outputs (1)

    NameTypeDescription
    audioAUDIO