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
instructions in provider_options to steer tone, but note it works only
on gpt-4o-mini-tts and is ignored on tts-1.
- elevenlabs — the most natural and controllable. Requires an explicit
voice; there is no account-wide default. stability,
similarity_boost, style and use_speaker_boost go in
provider_options.
- sarvam — Indian languages: 11 locales, 37 voices on
bulbul:v3.
language is required. pitch / loudness work on bulbul:v2 only and
temperature on bulbul:v3 only; 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; the
gpt-4o-transcribe models 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-turbo cannot translate; use whisper-large-v3 when
translate is 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.
1---2name: speech-skill3description: Convert text to spoken audio and transcribe audio to text, across multiple speech providers (OpenAI, ElevenLabs, Deepgram, Groq, Sarvam AI).4---56# Speech Skill78Two tools, several providers behind each. Pick the provider that fits the9job rather than defaulting to one.1011## How It Works1213Connect the **Text to Speech** and/or **Speech to Text** nodes to the14agent's `input-tools` handle. Each node has a `provider` parameter, and the15credential for the chosen provider must be configured in the Credentials16modal.1718Audio never travels as data. Synthesis writes a file into the workflow19workspace and returns a **reference** to it; transcription accepts a path or20a reference produced upstream. So Text to Speech can be wired straight into21Speech to Text, and neither tool ever puts audio bytes into the22conversation.2324## text_to_speech2526| Field | Type | Required | Description |27|---|---|---|---|28| text | string | Yes | The text to speak |29| provider | enum | No | `openai` (default), `elevenlabs`, `sarvam` |30| tts_model | string | No | Provider model id; blank uses the provider default |31| voice | string | No | Voice id; blank uses the provider default |32| language | string | No | Locale code. Required for Sarvam (e.g. `hi-IN`); auto-detected elsewhere |33| speed | number | No | Playback rate. Clamped to whatever the provider allows |34| output_format | string | No | Audio format; blank uses the provider default |35| provider_options | object | No | Vendor-specific extras, passed through untouched |3637Returns `audio` — a reference carrying `path`, `url`, `duration_seconds` and38`mime_type` — plus `files` and `chunk_count`.3940**When several clips come back**, they are separate playable files, not41parts of one stream. Each carries its own container header, so concatenating42them produces audio that plays only the first chunk.4344### Choosing a provider4546- **openai** — solid general-purpose quality, 13 voices, inexpensive. Put47 `instructions` in `provider_options` to steer tone, but note it works only48 on `gpt-4o-mini-tts` and is ignored on `tts-1`.49- **elevenlabs** — the most natural and controllable. Requires an explicit50 `voice`; there is no account-wide default. `stability`,51 `similarity_boost`, `style` and `use_speaker_boost` go in52 `provider_options`.53- **sarvam** — Indian languages: 11 locales, 37 voices on `bulbul:v3`.54 `language` is required. `pitch` / `loudness` work on `bulbul:v2` only and55 `temperature` on `bulbul:v3` only; the wrong one for the model is dropped56 rather than sent.5758## speech_to_text5960| Field | Type | Required | Description |61|---|---|---|---|62| audio_file | string / reference | Yes | Workspace path, or a reference from an upstream node |63| provider | enum | No | `openai` (default), `deepgram`, `groq`, `sarvam` |64| stt_model | string | No | Provider model id; blank uses the provider default |65| language | string | No | Language hint; blank auto-detects |66| translate | boolean | No | Translate to English instead of transcribing in-language |67| diarize | boolean | No | Label speakers, where supported |68| timestamps | boolean | No | Per-word timing, where supported |69| provider_options | object | No | Vendor-specific extras, passed through untouched |7071Returns `transcript`, `language`, `duration_seconds`, and — when asked for72and supported — `words` and `segments`.7374### Choosing a provider7576- **openai** — reliable default. Word timestamps require `whisper-1`; the77 `gpt-4o-transcribe` models return plain JSON only, so a timestamp request78 is quietly downgraded rather than failing.79- **deepgram** — best for long recordings, diarization and keyword boosting.80 Billed per minute.81- **groq** — fastest and cheapest in bulk, but it bills a 10-second minimum82 per request, so many tiny clips cost more than their duration suggests.83 `whisper-large-v3-turbo` cannot translate; use `whisper-large-v3` when84 `translate` is set.85- **sarvam** — Indian languages. Timestamps and diarization are unavailable86 on its synchronous endpoint and come back empty.8788## When to Use8990- Narration, voiceovers, or "read this out"91- Working out what was said in a recording92- A voice loop: transcribe, reason over the text, synthesize a reply9394## When NOT to Use9596- Real-time or streaming speech — these tools are batch only97- Translating text you already have — use a translation tool98- Very long recordings on a synchronous provider; split them first99100## Setup Requirements101102One API key per provider you intend to use, added in the Credentials modal.103Nothing is shared between them: an ElevenLabs key does not enable Deepgram.104The `openai`, `groq` and `sarvam` keys are the same ones their chat models105use, so if those are already configured, speech works with no extra setup.