OmniVoice Mix Voices
Mash two voices together and get a third one OmniVoice has never heard
- audio_1
- audio_2
- audio_3
- ref_audio
- ref_text
OmniVoice Mix Voices is the pack's trickiest little node, and also the one with no real equivalent in most TTS setups. Instead of cloning a voice, you feed it two or three reference clips and it produces a hybrid - a speaker who sounds like a blend of the inputs. Think "somewhere between these two voices," which is genuinely useful for character work when you want a new voice that doesn't map to any real person.
It's the middle stage of a voice-cloning pipeline: Mix Voices → OmniVoice Generate, with ref_audio and ref_text flowing straight through. You can mix built-in presets from the Voice Preset node, your own audio files, or a preset and a personal recording - whatever combination you're curious about.
How it works
The mechanism is simpler (and weirder) than you'd expect: the node doesn't average audio signals or blend embeddings in the mathematical sense. It takes each clip, converts to mono, resamples everything to the highest sample rate among your inputs, then concatenates the clips into one long audio file. That combined clip becomes the reference for OmniVoice's speaker embedding, and the model just… reads one "speaker" from the whole thing. The embedding ends up a mixture because the speaker it extracts from a clip that's half voice A and half voice B is neither - it's the blend.
The inputs that matter
audio_1,audio_2- required reference clips (AUDIO).weight_1,weight_2- the interesting ones. Each weight is a duration weight: it controls how many seconds of that clip end up in the concat, on a 0–1 scale against the clip's natural length. Set 0.5 and you keep half the clip; set 1.0 and you keep all of it. The ratio between the two weights is what decides whose voice dominates the mix. Equal 1.0/1.0 is the right starting point.audio_3,weight_3- an optional third voice, for trios.text_1,text_2,text_3- optional transcripts of each clip. These get joined into theref_textoutput.
Two outputs, both meant for Generate: ref_audio (the concatenated clip) and ref_text (the merged transcript, space-joined).
Installing it
It ships in ethanfel/ComfyUI-Omnivoice. Install through ComfyUI Manager (search "OmniVoice") or:
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-Omnivoice.git
restart, done. No extra dependencies beyond the pack's own requirements.txt - this node only needs torch and whatever loaded your audio.
Common issues
- All weights at 0 raises a hard error - there's nothing left to mix. Give at least one clip a positive weight.
- Weights aren't a loudness mix. People come in expecting a 50/50 volume blend and get confused when the result sounds like one voice "spoken by" another. It's a duration concat feeding a single embedding, so think in terms of how much of each voice the model hears, not signal mixing.
- Transcripts matter more than you think. OmniVoice's cloning is noticeably better when
ref_textis filled in - the community rule of thumb is to transcribe your reference audio (Whisper works) for the best clones. If the mix sounds off, an empty transcript is a top suspect. - The blend is only as good as its inputs. A short, flat reference clip produces a flat hybrid, same as any OmniVoice clone. Give the clips 10+ seconds with some vocal variety.
One thing to know before you get invested: mixing is more of a creative toy than a precision tool. You won't get fine-grained "60% this voice" control - you'll get a hybrid and it's a bit of a roulette wheel what it lands on. If you need a very specific new voice, cloning a single target is the safer bet; if you want a plausible unique character voice fast, this node is a lot of fun.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_1 | AUDIO | First reference voice. | |
| audio_2 | AUDIO | Second reference voice. | |
| weight_1 | FLOAT | 1.000–1 | Relative duration weight for audio_1. Higher = more of this voice in the mix. |
| weight_2 | FLOAT | 1.000–1 | Relative duration weight for audio_2. |
| audio_3opt | AUDIO | Optional third reference voice. | |
| weight_3opt | FLOAT | 1.000–1 | Relative duration weight for audio_3. |
| text_1opt | STRING | Transcript for audio_1. | |
| text_2opt | STRING | Transcript for audio_2. | |
| text_3opt | STRING | Transcript for audio_3 (optional). |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| ref_audio | AUDIO | — |
| ref_text | STRING | — |