Inworld TTS 2 (Replicate)
Inworld TTS 2 — write '[whisper excitedly]' and it just obeys
- audio
Inworld TTS 2 is the one TTS in the Replicate Select pack with a genuinely fun control scheme: you steer the delivery from inside the text with bracketed instructions. [say excitedly], [whisper in a hushed voice], [speak slowly and ominously] - put the direction before the line it applies to, and the model performs it. That's rare in TTS nodes, and for dialogue or character work it's the difference between "robot reads a script" and "someone acts it."
The name says "realtime," which is marketing-adjacent: through this node it's a regular per-call API like everything else in the pack. What you get instead is that natural-language steering, a preset voice list plus custom cloned voice IDs, 16 language choices with auto-detection, and the usual delivery knobs. Output is native ComfyUI AUDIO, so it plugs straight into SaveAudio or a lipsync upload without file gymnastics.
How it works
Standard engine around inworld/realtime-tts-2. Text goes up, audio comes back, converted to a ComfyUI AUDIO dict. Single output named audio. The brackets aren't parsed by the node - they ride through to the model, which is trained to honor them. That's the whole trick, and it's worth leaning into.
The inputs that matter
- text (required) - up to 2,000 characters. This is where the steering lives:
[say excitedly]before a line,[whisper]before another. The bracket goes immediately before the text it applies to. - voice_id - default
Ashley. Preset names (Dennis, Alex, Darlene, …) or a custom cloned voice ID. - language -
autodefault, or pick from 16 (en, zh, ja, ko, ru, it, es, pt, fr, de, pl, +4 more). - temperature - 0–2, default 0. Higher = more expressive/varied, lower = deterministic. The tooltip is honest: 0 means "use the model default (1.1)."
- speaking_rate - 0–1.5, default 0 (which maps to normal 1.0 speed).
- audio_format - mp3 (default), wav,
ogg_opus, or flac. - sample_rate - 8k up to 48k.
- text_normalization -
autolets the model decide whether to expand numbers/dates/abbreviations,onalways normalizes,offreads as-is. Useful when you want "19 ninety-nine" spoken as written.
Output: audio, native ComfyUI AUDIO.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Pharma-Lobby/ComfyUI-Replicate-Select
Or ComfyUI Manager → Install Custom Nodes → "Replicate Select", restart. Dependency: replicate>=1.0.7. Token via environment variable:
export REPLICATE_API_TOKEN=r8_...
Where people get burned
- Bracket placement. The instruction applies to what follows it. Drop
[angry]at the end of a paragraph and you've voiced the wrong text. Lead with the direction. - Character limit is real. 2,000 characters is a short script. For long narration, either chunk it across multiple calls or use MiniMax (10k) / ElevenLabs instead.
- Temperature isn't "quality." Higher values make it more theatrical, not better. For a calm narration voice, keep it low.
- Don't expect literal realtime. The "realtime" is the product's streaming tier; this node runs the full API call, so budget a couple of seconds per line.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | The text to convert to speech. Maximum 2,000 characters. Supports natural-language steering with bracketed instructions placed before the text they apply to (e.g. `[say excitedly]`, `[whisper in a hus | |
| voice_idopt | STRING | Ashley | The voice to use. Use a preset voice name (e.g. 'Ashley', 'Dennis', 'Alex', 'Darlene') or a custom cloned voice ID. |
| languageopt | COMBO | auto | Language of the input text. Use 'auto' to let the model detect the language. Supported production languages: English (en), Chinese (zh), Japanese (ja), Korean (ko), Russian (ru), Italian (it), Spanish |
| temperatureopt | FLOAT | 0.000–2 | Controls randomness when generating audio. Higher values produce more expressive results, lower values are more deterministic. Set to 0 to use the model default (1.1). |
| audio_formatopt | COMBO | mp3 | Output audio format. |
| sample_rateopt | COMBO | 48000 | Audio sample rate in Hz. |
| speaking_rateopt | FLOAT | 0.000–1.5 | Speaking speed multiplier. Set to 0 for normal speed (1.0). |
| text_normalizationopt | COMBO | auto | Controls whether numbers, dates, and abbreviations are expanded before synthesis. 'auto' lets the model decide, 'on' always normalizes, 'off' reads text as-is. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |