Griptape Run: Text to Speech
Make ComfyUI talk, and hand the audio back
- agent
- key_value_replacement
- driver
- AUDIO
The audio bookend to the pack's transcription node: Griptape Run: Text to Speech takes text and returns actual AUDIO - a tensor you can feed into ComfyUI's audio nodes, save, or play. Voice → text → agent → text → voice is the full circle this pack lets you draw, and this node closes it on the output side.
Out of the box it's dead simple: connect text, run, get audio. The default driver is ElevenLabs (eleven_multilingual_v2, with the "Matilda" voice), which means it needs an ELEVEN_LABS_API_KEY in the sidebar Settings → Griptape or your environment. But you can also connect a TEXT_TO_SPEECH_DRIVER from the pack's driver nodes and swap in whatever backend you like, which is the setup you want if you're doing this a lot and don't want per-character ElevenLabs pricing.
How it works
The node wraps your text in a TextToSpeechTask inside a Griptape Pipeline, runs it, and converts the resulting audio artifact back into ComfyUI's AUDIO format. If the driver errors, the node returns an execution blocker with the error message rather than crashing the graph - a genuinely friendly failure mode. The key_value_replacement template fill works here too.
The inputs
- STRING - the text to speak (required).
- driver - optional
TEXT_TO_SPEECH_DRIVERoverride; without one it falls back to ElevenLabs. - agent / input_string / key_value_replacement - the usual trio; the agent's TTS driver is used if no explicit driver is connected.
Output: AUDIO.
Installing
ComfyUI Manager → search "Griptape" → Install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/griptape-ai/ComfyUI-Griptape
Restart ComfyUI. Heavy deps (griptape[all], python-dotenv). Grab an ElevenLabs key from https://elevenlabs.io/app (Profile + API Key) if you're going the default route.
Common gotchas
The obvious one: no key, no audio. The node's fallback to ElevenLabs only works if ELEVEN_LABS_API_KEY is actually set - otherwise you get a blocker error, not silence, which is at least honest.
The pack-wide usuals apply: torch version conflicts on Nvidia (reinstall with --extra-index-url https://download.pytorch.org/whl/cu121) and stale-griptape ImportErrors fixed with python -m pip install griptape -U. And if you're generating long form, remember TTS is a paid call on the default path - break up big text, or wire a local driver.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| STRING | STRING | — | |
| input_stringopt | STRING | — | |
| agentopt | AGENT | — | |
| key_value_replacementopt | DICT | The will replace the {{ key }} with a value. | |
| driveropt | TEXT_TO_SPEECH_DRIVER | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |