OmniVoice Speaker
The tiny node that turns a voice clip into a named character
- ref_audio
- speaker
OmniVoice Speaker is the pack's smallest idea and it does exactly one thing: take a label, a reference audio clip, and an optional transcript, and bundle them into a single "speaker" object. That's it. There's no generation here, no model - it's a little data-holder, and it only becomes useful when you connect a few of them into the OmniVoice Speakers node for multi-speaker dialogue.
So the real question is: do you want multi-speaker generation? If yes - a narrator plus two characters trading lines in one audiobook chapter, a podcast with hosts and a guest, dialogue in a video - you need one Speaker node per distinct voice. If you're doing single-voice narration, you can skip this node entirely and wire your preset or audio straight into Generate.
How it works
Think of it as a struct constructor. It collects three things into one OMNIVOICE_SPEAKER value:
label- a name for the speaker, defaulting to "Narrator". This is how the roster identifies them: in tagged mode you write[Narrator]or[Alice]in your script and OmniVoice routes the paragraph to the matching Speaker node.ref_audio- the reference clip whose voice gets cloned for this character.ref_text- the transcript of that clip. Optional, but the tooltip is blunt about why you'd bother: it improves cloning quality.
Under the hood the node just returns {"label": ..., "ref_audio": ..., "ref_text": ...} - no processing, no audio transform. All the heavy lifting happens later, when OmniVoice Generate reads each speaker's clip and runs a per-paragraph clone-and-synthesize pass.
The one input that actually matters
ref_text is where people drop the ball. OmniVoice is a cloning model, and the community consensus is that its clones are noticeably better when the reference is transcribed - the model does much better when it knows what the sample is saying. If your character sounds flat or off, an empty ref_text is the first thing to fix. You can transcribe manually, or wire in a Whisper node. (And a longer reference helps too: 10 seconds is the floor, 30–60 seconds with some vocal variety gets you a character who can actually emote.)
The label matters a lot if you're using tagged mode - labels are case-insensitive when matched, but they need to match the tags in your text or the paragraph silently falls back to speaker 1. In alternate-paragraphs mode the label is purely cosmetic.
Installing it
It's part of ethanfel/ComfyUI-Omnivoice - install the pack once and you get Speaker, Speakers, and all the rest. ComfyUI Manager: search "OmniVoice", install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-Omnivoice.git
No extra dependencies for this node itself; the pack's requirements.txt covers the audio tooling the whole pack needs.
Common issues
- "At least 2 speakers must be connected" - that error actually comes from the OmniVoice Speakers node, not this one, and it means you built Speaker nodes but forgot to wire them into the roster. This node can sit alone just fine; it only misbehaves if you send it nowhere.
- Speaker sounds like the wrong person - almost always a reference-quality problem, not a wiring problem. Short clip, or a clip whose transcript you left blank.
- Nothing happens on Generate - remember the Speaker only exists inside the roster. A lone Speaker node does nothing; it's a building block, not a pipeline stage.
Worth a beat of perspective: multi-speaker is the pack's most ambitious feature and it works, but it's the fiddliest path - you're maintaining a roster of references, transcripts, and labels and hoping the model keeps every voice straight. For a two-hander it's great. For a fifteen-character drama, budget some patience.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| label | STRING | Narrator | Name used to identify this speaker. In tagged_speakers mode, prefix paragraphs with [Label]: [Narrator] Once upon a time... In alternate_paragraphs mode the label is informational only. |
| ref_audio | AUDIO | Reference audio clip for this speaker's voice. | |
| ref_textopt | STRING | Transcript of ref_audio. Improves cloning quality. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| speaker | OMNIVOICE_SPEAKER | — |