Nodes/ComfyUI-Omnivoice/OmniVoice Mix Voices
ComfyUI Node

OmniVoice Mix Voices

Mash two voices together and get a third one OmniVoice has never heard

By ethanfel·Created 5 months ago·Updated 5 months ago· 6
OmniVoice Mix Voices
  • audio_1
  • audio_2
  • audio_3
  • ref_audio
  • ref_text
weight_11.00
weight_21.00
weight_31.00
text_1
text_2
text_3

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 the ref_text output.

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_text is 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.

CategoryOmniVoice

Inputs (9)

NameTypeDefaultDescription
audio_1AUDIOFirst reference voice.
audio_2AUDIOSecond reference voice.
weight_1FLOAT1.000–1Relative duration weight for audio_1. Higher = more of this voice in the mix.
weight_2FLOAT1.000–1Relative duration weight for audio_2.
audio_3optAUDIOOptional third reference voice.
weight_3optFLOAT1.000–1Relative duration weight for audio_3.
text_1optSTRINGTranscript for audio_1.
text_2optSTRINGTranscript for audio_2.
text_3optSTRINGTranscript for audio_3 (optional).

Outputs (2)

NameTypeDescription
ref_audioAUDIO
ref_textSTRING