anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow that gives you a web address for text to speech. Send it a voice id and some text, and the reply is an audio file made by ElevenLabs.
Webhook that turns text into speech with ElevenLabs is an n8n workflow in the Productivity category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Web request
It starts when a POST reaches the generate-voice webhook with:
An audio file of your text read aloud in the chosen voice, returned as the reply
What you need before you start.
Text to speech
Reads the text aloud in the chosen voice and returns the audio.
NeedsElevenLabs API key and a voice id
Checked by Mindket on 13 Nov 2026
This n8n workflow is a small text to speech service. Any tool that can send a web request posts a voice id and a piece of text to its address. The workflow asks ElevenLabs to read the text aloud and sends the audio back in the reply. A check turns away a request that lacks either field. Five nodes do the work, beside one sticky note.
Developers and creators who want speech from their own scripts, forms or other workflows without writing a server. Skip it if you need streaming audio or timing data. The reply is one finished file.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Media | Video producers | Make a voice-over from a script | A producer posts a script and saves the MP3 for the edit. |
| Education | Course creators | Add narration to lessons | A teacher sends each lesson’s text and gets an audio file back. |
| Software | Developers | Give an app a speech endpoint without an SDK | A developer calls the webhook from a form handler. |
| Accessibility | Site owners | Offer an audio version of an article | An owner sends an article’s text and stores the MP3. |
You need a little n8n and an ElevenLabs key.
Any n8n that can reach ElevenLabs will run it. The audio comes back as the webhook’s reply.
voice_id and textDownload saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Setup is one credential and one activation.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| ElevenLabs | An account, an API key and the id of a voice |
workflow.json.{"headers": {"xi-api-key": "<YOUR_ELEVENLABS_API_KEY>"}} and select it in Generate voice.Webhook. Its path is generate-voice.voice_id and text, and save the reply as an MP3 file.Post a JSON body with a voice_id and a text. What comes back is the audio. A body that lacks either field gets {"error": "Invalid inputs."}. Send a different voice_id to change the voice.
| To change | Where |
|---|---|
| The voice | The voice_id you send |
| The model and the format | Add model_id or output_format to the body in Generate voice |
| The address | The path generate-voice in Webhook |
| The invalid reply | The body of Error |
A course creator posts a voice id and the line Welcome to the course to the webhook.
The reply is an MP3 file of that line in the chosen voice. If ElevenLabs refuses the call, for a wrong voice id or a used-up plan, the run fails and the caller gets an error from n8n instead.
If you are new. A webhook is a web address that starts a workflow when something posts to it. This one waits for the post, runs two steps and answers with a sound file. The voice id picks the voice, and ElevenLabs shows it in the voice’s settings.
For experts. Webhook is set to answer from a Respond to Webhook node, so one of two respond nodes sends the reply. Generate voice is an HTTP Request node. The audio arrives as binary data in the field data, and the success reply sends it. The key sits in a Custom Auth credential.
| Node | What it does | What to know |
|---|---|---|
If params correct | Tests that voice_id and text exist | An empty string still passes |
Generate voice | Posts the text to ElevenLabs | It sends only text, so ElevenLabs uses its defaults |
Respond to Webhook | Returns the audio | The caller has to save the reply as a file |
Error | Replies with a JSON error | The status is 200 unless you change it |
The check and the request body needed repairs, and the address is open.
If params correct compared the plain words voice_id and text, which always exist, so it never failed. It now reads the request body. The JSON body wrapped the text in quotation marks by hand, so a quote or line break broke the call. It now uses JSON.stringifyWebhook, such as Header Auth, and send the secret from your callerError, set the response code to 400 if your caller reads the statustext, so ElevenLabs uses the model eleven_multilingual_v2 and the format mp3_44100_128, per its reference read on 12 November 2026. Some formats need a higher planAn n8n workflow that gives you a small web address for text to speech. You send it a voice id and a piece of text. It asks
ElevenLabs to read the text aloud and sends the audio file back in the reply. Any tool that can make a web request can use it.
workflow.json: the workflow as n8n exports it, 6 nodes, one of them a sticky note. It holds no credential and no key.README.md: these notes.Generate voice is gone. Create your own, as in "Set it up".If params correct compared the plain words voice_id and text, which always exist, so the check never failed. Its two{{ $json.body.voice_id }} and {{ $json.body.text }}.Generate voice put the text between quotation marks by hand, so a quote or a line break in the text brokeJSON.stringify.v1.workflow.json.Generate voice:{"headers": {"xi-api-key": "<YOUR_ELEVENLABS_API_KEY>"}}Webhook. Its path is generate-voice.curl -X POST "<YOUR_WEBHOOK_URL>" -H "Content-Type: application/json" -d '{"voice_id": "<YOUR_VOICE_ID>", "text": "Hello from n8n."}' --output speech.mp3
Webhook waits for a POST request on generate-voice. It answers later, from a Respond to Webhook node.If params correct checks that the body holds a voice_id and a text.Generate voice posts the text to ElevenLabs at /v1/text-to-speech/<voice_id> with your key in thexi-api-key header. ElevenLabs sends back audio, which n8n keeps as a binary file.Respond to Webhook returns that file to the caller.Error replies with {"error": "Invalid inputs."}.voice_id with each request. Nothing is fixed in the workflow.text, so ElevenLabs uses its defaults, the model eleven_multilingual_v2mp3_44100_128 (its reference, read on 12 November 2026). Add model_id or output_format to the body inGenerate voice to change them. Some formats need a higher plan.generate-voice in Webhook.Webhook, turn onError, set the response code to 400 if your caller reads theNOTICE.md 624 B README.md 4 KB workflow.json 4 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
op7418 · Skill
Skill that makes single-file HTML slide decks, slide illustrations and platform covers in two visual styles, with a presenter mode for rehearsal. For speakers…
zarazhangrui · Skill
Builds HTML presentations from scratch or from a PowerPoint file and shows visual style previews to pick from, for people who want web slides with no CSS or Ja…
iptv-org · Kit
Collects publicly available live TV channels from many countries into playlists that any video player with live streaming can open. Made for viewers and for de…