OmniVoice Loader
The two-file gatekeeper that makes 600-language TTS work
- model
OmniVoice has been the community's go-to for open voice cloning since spring 2026 - "the current star child," as one r/StableDiffusion thread put it, the thing people reach for when VibeVoice's consistency starts sliding. But the model ships as two separate .safetensors files, and something has to load both and glue them into one object ComfyUI can talk to. That's this node's whole job. It's the boring part of a voice workflow, and boring is what you want here.
The node comes from omnivoice_comfy (komikndr), a deliberately minimal wrapper around k2-fsa/OmniVoice - that's the Kaldi/Xiaomi crew, the same org behind sherpa-onnx. The author is upfront that he's not adding anything beyond the two nodes in this pack, which is honestly a feature: no extra mappings to trip over, just bug fixes.
What it loads, and why it's two files
OmniVoice splits its weights into a main model and a separate audio tokenizer (the codec side that turns the diffusion model's output back into a waveform). The loader presents both as dropdowns, drawn from one folder:
ComfyUI/models/tts/omnivoice/
model.safetensors
audio_tokenizer.safetensors
If a dropdown shows <no .safetensors found>, that folder is empty - grab both files from https://huggingface.co/k2-fsa/OmniVoice. That's the full model download; the tokenizer text assets and config are bundled inside the node.
There are only three inputs total, and you can ignore two of them:
- OmniVoice Model / Audio Tokenizer Model - the enums above. Set them once.
- Keep model in VRAM - default
true. Turn it off and the model gets shoved back to CPU RAM after each generation, which trades speed for letting other things use the GPU. Leave it on unless you're juggling multiple pipelines.
How it works under the hood
Reading the source, the loader does something clever enough to mention: it builds a runtime snapshot in ComfyUI's temp directory, copying the embedded config/tokenizer assets and then symlinking your two weight files in, so it can call OmniVoice.from_pretrained(local_files_only=True) on a valid HuggingFace-style folder without you ever assembling one. Two deliberate choices stand out:
- It loads in fp32 by default, not Comfy's usual fp16 - the author's comment says fp16 produced numerically unstable audio, so don't go hunting for a dtype toggle. It's not there.
- The audio tokenizer is forced to fp32 too, for the same reason.
The single output is a model of type OMNIVOICE_MODEL. It only plugs into one thing: OmniVoice TTS, which shares this pack.
Installing it
Same for both nodes in this pack - you can't have one without the other:
cd ComfyUI/custom_nodes
git clone https://github.com/komikndr/omnivoice_comfy
cd omnivoice_comfy
pip install -r requirements.txt
Or, from ComfyUI Manager: comfy node install omnivoice_comfy. Then restart ComfyUI, drop the two weights in models/tts/omnivoice/, and reload.
The gotcha that bites everyone
The requirements file pins transformers==5.3.0, and the README screams it in caps: HF Transformers 5.3 or above is required. This is the single most common failure in the whole audio-node ecosystem - TTS packs have been breaking each other's installs over transformers versioning for a year now. Check what your environment actually has:
pip list | grep transformer
If another pack forced you down to a 4.x, either update it or run this in its own venv. And if the node errors with a symlink failure at load time, the fallback is to put a full HuggingFace-style OmniVoice folder in place of the symlinked snapshot. Not common, but that's the documented escape hatch.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| OmniVoice Model | COMBO | 1 options: <no .safetensors found> | |
| Audio Tokenizer Model | COMBO | 1 options: <no .safetensors found> | |
| Keep model in VRAM | BOOLEAN | true | Keep the loaded OmniVoice model on the compute device between runs. Disable this to move it back to CPU RAM after each generation. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | OMNIVOICE_MODEL | — |