Speech Skill
Two tools, several providers behind each. Pick the provider that fits the job rather than defaulting to one.
How It Works
Connect the Text to Speech and/or Speech to Text nodes to the
agent's input-tools handle. Each node has a provider parameter, and the
credential for the chosen provider must be configured in the Credentials
modal.
Audio never travels as data. Synthesis writes a file into the workflow workspace and returns a reference to it; transcription accepts a path or a reference produced upstream. So Text to Speech can be wired straight into Speech to Text, and neither tool ever puts audio bytes into the conversation.
text_to_speech
| Field | Type | Required | Description |
|---|---|---|---|
| text | string | Yes | The text to speak |
| provider | enum | No | openai (default), elevenlabs, sarvam |
| tts_model | string | No | Provider model id; blank uses the provider default |
| voice | string | No | Voice id; blank uses the provider default |
| language | string | No | Locale code. Required for Sarvam (e.g. hi-IN); auto-detected elsewhere |
| speed | number | No | Playback rate. Clamped to whatever the provider allows |
| output_format | string | No | Audio format; blank uses the provider default |
| provider_options | object | No | Vendor-specific extras, passed through untouched |
Returns audio — a reference carrying path, url, duration_seconds and
mime_type — plus files and chunk_count.
When several clips come back, they are separate playable files, not parts of one stream. Each carries its own container header, so concatenating them produces audio that plays only the first chunk.
Choosing a provider
- openai — solid general-purpose quality, 13 voices, inexpensive. Put
instructionsinprovider_optionsto steer tone, but note it works only ongpt-4o-mini-ttsand is ignored ontts-1. - elevenlabs — the most natural and controllable. Requires an explicit
voice; there is no account-wide default.stability,similarity_boost,styleanduse_speaker_boostgo inprovider_options. - sarvam — Indian languages: 11 locales, 37 voices on
bulbul:v3.languageis required.pitch/loudnesswork onbulbul:v2only andtemperatureonbulbul:v3only; the wrong one for the model is dropped rather than sent.
speech_to_text
| Field | Type | Required | Description |
|---|---|---|---|
| audio_file | string / reference | Yes | Workspace path, or a reference from an upstream node |
| provider | enum | No | openai (default), deepgram, groq, sarvam |
| stt_model | string | No | Provider model id; blank uses the provider default |
| language | string | No | Language hint; blank auto-detects |
| translate | boolean | No | Translate to English instead of transcribing in-language |
| diarize | boolean | No | Label speakers, where supported |
| timestamps | boolean | No | Per-word timing, where supported |
| provider_options | object | No | Vendor-specific extras, passed through untouched |
Returns transcript, language, duration_seconds, and — when asked for
and supported — words and segments.
Choosing a provider
- openai — reliable default. Word timestamps require
whisper-1; thegpt-4o-transcribemodels return plain JSON only, so a timestamp request is quietly downgraded rather than failing. - deepgram — best for long recordings, diarization and keyword boosting. Billed per minute.
- groq — fastest and cheapest in bulk, but it bills a 10-second minimum
per request, so many tiny clips cost more than their duration suggests.
whisper-large-v3-turbocannot translate; usewhisper-large-v3whentranslateis set. - sarvam — Indian languages. Timestamps and diarization are unavailable on its synchronous endpoint and come back empty.
When to Use
- Narration, voiceovers, or "read this out"
- Working out what was said in a recording
- A voice loop: transcribe, reason over the text, synthesize a reply
When NOT to Use
- Real-time or streaming speech — these tools are batch only
- Translating text you already have — use a translation tool
- Very long recordings on a synchronous provider; split them first
Setup Requirements
One API key per provider you intend to use, added in the Credentials modal.
Nothing is shared between them: an ElevenLabs key does not enable Deepgram.
The openai, groq and sarvam keys are the same ones their chat models
use, so if those are already configured, speech works with no extra setup.

