Speech Advanced Parameters
Voice pitch, emotion, and stability for TTS — where they actually work
- params_json
Most TTS APIs give you a voice name, a speed, and not much else. This node reaches past that: pitch, stability, similarity boost, emotion, language. That's the vocabulary of a voice-cloning / voice-design API (ElevenLabs-style), and it's aimed at the compatible providers that speak that dialect. So the honest framing up front: OpenAI's tts-1 ignores all of this. This node exists for providers like Venice's tts-kokoro that actually accept these fields. Like its siblings in the pack, it's a parameter builder - controls in, JSON string out.
How it works
Same pattern as the other advanced nodes. Each field is compared to its default, only the changed ones are serialized into params_json, and you feed that into Generate Speech's advanced_params_json input, which merges it into the /audio/speech request. Defaults-only skipping means attaching this node and never touching it changes nothing.
The inputs
pitch(0.5–2.0, default 1.0) - shift the voice up or down a register.stability(0–1, default 0.5) - how consistent the delivery is. Lower values sound more expressive/varied; higher sounds steadier.similarity_boost(0–1, default 0.75) - how closely the output matches the reference voice's timbre. The name is a strong hint this comes from a voice-cloning API.emotion-neutral,happy,sad,angry,fearful,surprised. Not every provider maps these; the ones that do expect the literal token.language- a free-text field (e.g.enoren-US) for providers that want it.
Wiring it up
params_json → Generate Speech's advanced_params_json. One connection, and the two nodes work as a pair - this one is inert on its own.
Installing it
It ships with the ComfyUI-AI-CustomURL pack:
cd ComfyUI/custom_nodes
git clone https://github.com/bowtiedbluefin/ComfyUI-AI-CustomURL
cd ComfyUI-AI-CustomURL
pip install -r requirements.txt
Or ComfyUI Manager → search "AI CustomURL", restart. No model downloads - the whole pack is API-only.
The honest take
This is the most provider-dependent node in the pack, and the mismatch is worth stating plainly. OpenAI's TTS endpoint accepts voice, speed, and response_format - which is exactly what's already on Generate Speech - and nothing else. Attach this node to an OpenAI-only workflow and you're carrying a box of controls that do nothing. It only earns its place when your provider's docs list parameters like emotion or stability. Read those docs before you wire it in, and if a provider rejects an unknown field, the error will name it. As a control surface for compatible TTS providers it's handy; as a universal tool it's a trap for the unwary.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| pitch | FLOAT | 1.00.5–2 | — |
| stability | FLOAT | 0.50–1 | — |
| similarity_boost | FLOAT | 0.750–1 | — |
| emotion | COMBO | neutral | 6 options: neutral, happy, sad, angry, fearful, surprised |
| language | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| params_json | STRING | — |