OpenAI TTS Speech
Voice cloning through a local OpenAI-compatible TTS server
- tts_connection
- voice_audio
- audio
OpenAI TTS Speech is the half of this pack that gives your graph a voice. Give it some text, a reference recording, and a running TTS server, and it hands you back a real AUDIO tensor you can save, play, or feed into a video workflow. The author built it around OmniVoice, the zero-shot multilingual TTS model that went big on r/StableDiffusion in early 2026 - 600+ languages, voice cloning from a few seconds of audio, and a local OpenAI-compatible server to talk to.
Here's the thing to get straight before you use it: the "OpenAI" in the name is the API shape, not the company. The node calls your own server's /v1/audio/speech endpoint and hardcodes the API key to "dummy". That means it works against OmniVoice or any other local OpenAI-compatible TTS server, and it will not magically work against OpenAI's paid API - if your server enforces auth, this node has no key to give it.
What you actually set
- text - what gets spoken. Defaults to "Hello, world!" and you'll change it every single run.
- voice_path - absolute path to a
.wav/.mp3/.oggreference file used for voice cloning. This is the author's own description: pass a clip of the voice you want and OmniVoice clones it. - speed - a 0.5–2.0 multiplier. 0.5 is a slow drawl, 2.0 is auctioneer.
- voice_audio (optional) - wire a ComfyUI
AUDIOclip here instead of typing a path. It gets saved to a temp file and used as the reference. The code gives this priority overvoice_path, so if both are present, the wired audio wins. - tts_connection (optional, but effectively required) - wire the output of an OpenAI TTS Connectivity node or the node raises "Connect an OpenAI TTS Connectivity node."
The single output, audio, is a standard ComfyUI AUDIO dict (waveform + sample_rate), so it plugs straight into the usual save/preview nodes.
How it works
The node streams the request to your TTS server through the official openai Python client, streams the generated WAV back, reads it with the wave module, and converts it to a tensor. No torchaudio, no ffmpeg - the heavy lifting happens on the server side, which is exactly why this pack's TTS half is so light.
Install
The pack itself installs like any other - ComfyUI Manager, search "comfyui-llamacpp-plus", or:
cd ComfyUI/custom_nodes
git clone https://github.com/pointave/comfyui-llamacpp-plus
Then restart ComfyUI. One real trap: the pack's requirements.txt only declares playwright, but the code imports the openai SDK at module level. If you get a load error for the whole pack, that's why:
pip install openai
You also need the TTS server itself running - that's the actual model. The connectivity node defaults to http://127.0.0.1:7778, which is where OmniVoice's server listens out of the box.
Where people get burned
- No voice reference. Leave
voice_pathempty and don't wirevoice_audio, and it throws - the node needs some reference to clone from. Zero-shot means no fine-tuning, not "no audio." - Wired audio is the boss. If you're debugging weird voices and
voice_audiois connected, your carefully typedvoice_pathis being ignored. Disconnect the wire. - The server isn't running. The connectivity node refreshes the model dropdown from the server's
/v1/models. Empty dropdown, no speech, all silent - check the server first. - Auth'd servers. That
"dummy"key means your TTS server needs to run with auth off (or tolerate a fake key). Local OmniVoice does; a locked-down remote endpoint won't.
One honest caveat: this is a small, personal pack, so treat it as the thin client it is. If the TTS server is healthy, the node is a few hundred lines of glue - and glue that just works is what you want in a graph.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello, world! | — |
| voice_path | STRING | Path to a reference audio file (.wav/.mp3/.ogg) for voice cloning. | |
| speed | FLOAT | 1.000.5–2 | Speech speed multiplier (0.5 = slow, 2.0 = fast). |
| tts_connectionopt | OPENAI_TTS_CONN | Wire an OpenAI TTS Connectivity node. | |
| voice_audioopt | AUDIO | Alternatively, wire an AUDIO clip as the voice reference. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |