This workflow corresponds to n8n.io template #12425 — we link there as the canonical source.
This workflow follows the Agent → Chat Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "fiVpq4FBkSlnbOJn",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Elevenlabs v3 Audio Tags Agent",
"tags": [],
"nodes": [
{
"id": "7aa93ed1-17b1-42af-8015-8475597abdff",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-320,
16
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f8978675-bc0f-4bc6-9d25-c05005da3ef2",
"name": "Anthropic Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
208,
192
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-sonnet-4-5-20250929",
"cachedResultName": "Claude Sonnet 4.5"
},
"options": {}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "3707a1d7-10c0-4881-8dda-dba01bca7983",
"name": "Convert text to speech",
"type": "@elevenlabs/n8n-nodes-elevenlabs.elevenLabs",
"position": [
704,
16
],
"parameters": {
"text": "={{ $json.output }}",
"voice": {
"__rl": true,
"mode": "id",
"value": "=TX3LPaxmHKxFdv7VOQHJ"
},
"resource": "speech",
"requestOptions": {},
"additionalOptions": {
"model": {
"__rl": true,
"mode": "list",
"value": "eleven_v3",
"cachedResultName": "Eleven v3 (alpha)"
},
"voiceSettings": "{\n \"stability\": 1,\n \"similarity_boost\": 1,\n \"style\": 0.8,\n \"use_speaker_boost\": true,\n \"speed\": 1\n}"
}
},
"credentials": {
"elevenLabsApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "1f4dfcc6-5f9b-46fa-81a0-98b15e248c7a",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-320,
-176
],
"parameters": {
"options": {}
},
"typeVersion": 1.4
},
{
"id": "8617a2ad-fd2c-423e-9369-d4e8881bd7f8",
"name": "Context7",
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"position": [
400,
192
],
"parameters": {
"options": {},
"endpointUrl": "https://mcp.context7.com/mcp",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "825548df-cb74-46fc-a739-dff9ddd4dc2b",
"name": "Audio Tagger Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
240,
16
],
"parameters": {
"text": "={{ $json.testo || $json.chatInput }}",
"options": {
"systemMessage": "=You are an \u201cAudio Tagger\u201d for ElevenLabs (model v3).\nInput: a text written in any language (without tags).\nOutput: the same text, but enriched with ElevenLabs v3 audio tags inserted naturally and coherently with the context.\n\nRules:\n\n1. Do not change the meaning of the text and do not paraphrase: you must only insert tags and (if necessary) minimal punctuation to make the performance believable.\n2. Use tags for: pauses, rhythm, emphasis, whispering, emotional tone (calm/tense/enthusiastic), short laughter, breathing, changes in intensity or \u201cdelivery.\u201d\n3. The output must be in the same language as the input text. No comments, no explanations: return ONLY the tagged text.\n4. If the text contains dialogues, differentiate the delivery with tone/rhythm tags, without inventing lines.\n5. If there are numbers or acronyms, leave them unchanged.\n6. You may combine tags with each other within the same sentence.\n7. Use the **context7** tool to consult the official ElevenLabs v3 audio tags guide and ensure tags are used correctly and consistently.\n\nFormat:\n\n* Output as a single block of text, ready to be sent to ElevenLabs.\n\nIMPORTANT: combine emotional state tags, reactions, delivery control, and character performance together for a better and more realistic result. This is a story for a horror film.\nIMPORTANT: the emotional states listed below are only examples. They represent possible states, but you may create new emotional state tags when needed, based on the emotions the agent detects in the sentence, as long as they remain coherent with ElevenLabs-style tagging.\n\nThese are the available audio tags:\n\n1. Emotional states\n All in the form [tag]. They can be combined and placed anywhere in the text.\n Base / primary:\n [happy] [sad] [angry] [excited] [nervous] [frustrated] [sorrowful] [calm] [tired] [fearful] [anxious] [worried] [confident] [relieved].\n Positive:\n [joyful] [cheerful] [content] [peaceful] [optimistic] [hopeful] [playful] [proud] [affectionate].\n Negative:\n [upset] [disappointed] [irritated] [annoyed] [resentful] [bitter] [jealous] [envious] [rageful] [heartbroken] [depressed] [melancholic].\n Complex nuances:\n [wistful] [regretful] [conflicted] [resigned] [skeptical] [sarcastic] [serious] [stern] [determined] [embarrassed] [shy].\n\n2. Reactions\n Use them before or after a sentence to add realism.\n Breathing / vocalizations:\n [sigh] [gasps] [gasp] [gulps] [laughs] [laugh] [chuckles] [chuckle] [hmm] [yawns] [yawn].\n Crying / pain:\n [cries] [crying] [sob] [sobs] [wails] [sniffles] [groans] [moans] [whimpers].\n Various noises:\n [clears throat] [coughs] [cough] [snorts] [belch] [ugh] [grunts].\n Reaction volume:\n [laughs softly] [laughs loudly] [whispers] [shouts] (often combined with an emotional state, e.g. [nervous][laughs softly]).\n\n3. Delivery control\n For rhythm, tempo, hesitation, energy, and style.\n Pause / hesitation:\n [pause] [long pause] [short pause] [hesitant] [stammers] [stammering] [thinking].\n Speed / tempo:\n [fast] [slow] [rushed] [drawn out] [tempo up] [tempo down] [accelerando].\n Energy / intensity:\n [energetic] [high energy] [low energy] [tired] [relaxed] [tense] [stressed] [zen].\n Volume / projection:\n [whispers] [whispering] [softly] [quietly] [loudly] [shouting] [shouts].\n Phrasing style:\n [dramatic] [matter-of-fact] [formal] [casual] [monotone] [emphatic] [staccato] [legato] [syncopated].\n"
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "73bdb99b-01d4-4d6c-b002-00834698a8e3",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-320,
224
],
"parameters": {
"path": "b2e00463-dec7-4dbd-9ce6-f323ef6876d0",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "360dff4f-5c53-4603-b39a-6ae73d7d0d46",
"name": "Upload to FTP",
"type": "n8n-nodes-base.ftp",
"position": [
1184,
112
],
"parameters": {
"path": "=/YOUR_PATH/{{ $binary.data.fileName }}",
"options": {},
"operation": "upload"
},
"credentials": {
"ftp": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "6793605b-49c0-4d99-91cd-d70c16357b88",
"name": "Set text",
"type": "n8n-nodes-base.set",
"position": [
-96,
16
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "19c1ea60-8af8-4a50-8ff3-9b2c5f336887",
"name": "testo",
"type": "string",
"value": "YOUR_TEXT"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3ea6917a-8e9e-4b02-8789-17b7bf300553",
"name": "Upload file to Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
1184,
-80
],
"parameters": {
"name": "={{ $binary.data.fileName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1J7_S0zPgUukmKWJglMepvf429vfQsidL",
"cachedResultUrl": "https://drive.google.com/drive/folders/1J7_S0zPgUukmKWJglMepvf429vfQsidL",
"cachedResultName": "Elevenlabs"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "029d2e91-da0d-44ee-9786-e87496f44fd4",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-384,
-864
],
"parameters": {
"width": 944,
"height": 496,
"content": "## ElevenLabs v3 AI Audio Tagger Agent with TTS and upload to FTP & Drive\n\nThis workflow is an **AI-powered text-to-speech production pipeline** designed to generate highly expressive audio using **ElevenLabs v3**.\nIt automates the entire process from raw text input to final audio distribution and upload the mp3 file to Google Drive and an FTP space.\n\n### **How it works:**\n\nThis workflow automates the process of turning text into expressive audio using ElevenLabs v3. It accepts text via manual input, webhooks, or chat triggers, then sends it to an AI Audio Tagger Agent powered by Claude Sonnet 4.5. The agent analyzes the text and inserts appropriate emotional and structural tags following the official ElevenLabs v3 tag specifications using the Context7 MCP tool. The tagged text is then sent to ElevenLabs for text-to-speech synthesis with fine-tuned voice parameters. The final MP3 file is automatically uploaded to both Google Drive and an FTP server (e.g., BunnyCDN) for distribution and storage.\n\n### **Setup steps:**\n\nBegin by configuring all required credentials: Anthropic for Claude Sonnet, ElevenLabs API (v3 alpha), Google Drive OAuth2 access, FTP credentials, and Context7 MCP authentication. In the workflow, update the \u201cSet text\u201d node with your input, adjust the FTP path and Google Drive folder ID, and confirm the webhook path for API integrations. Modify ElevenLabs voice parameters as needed. You can trigger the workflow manually, via webhook POST requests, or through a chat-based input depending on your integration method.\n"
},
"typeVersion": 1
},
{
"id": "2f2297e2-79fd-4323-b06c-54c118a0b322",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-384,
-336
],
"parameters": {
"color": 7,
"width": 512,
"height": 720,
"content": "## STEP 1 - Multiple Inputs\nThe workflow accepts text input through multiple triggers - manual execution via \"Set text\" node (In this case set the manual text in this node), webhook POST requests, or chat message inputs. This text is passed to the Audio Tagger Agent.\n"
},
"typeVersion": 1
},
{
"id": "c3d16d1f-9b92-42d8-bc2f-b2a67c603b80",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-336
],
"parameters": {
"color": 7,
"width": 416,
"height": 720,
"content": "## STEP 2 - AI Agent\n**AI-Powered Audio Tagging**: The Audio Tagger Agent uses Claude Sonnet 4.5 to analyze the input text and intelligently insert ElevenLabs v3 audio tags with MCP Context7 validation\n\n- Get your FREE [Context7 API Key](https://context7.com/sign-in?redirect_url=%2Fdashboard)\n\nSet MCP connection:\n\"headers\": {\n \"CONTEXT7_API_KEY\": \"YOUR_API_KEY\"\n }\n"
},
"typeVersion": 1
},
{
"id": "ac70c69b-8514-4270-9150-344e4064567a",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-336
],
"parameters": {
"color": 7,
"width": 416,
"height": 720,
"content": "## STEP 3 - Text-to-Speech\nThe tagged text is sent to ElevenLabs\u2019 v3 (alpha) model, which converts it into speech using a specific voice with customized voice settings including stability, similarity boost, style, speaker boost, and speed controls\n\n- Install Elevenlabs Community node\n- Set up your [ElevenLabs API Key](https://try.elevenlabs.io/ahkbf00hocnu) \n- Get Voice ID"
},
"typeVersion": 1
},
{
"id": "fb87a310-6276-4860-85e2-b919f76e642d",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
-336
],
"parameters": {
"color": 7,
"width": 416,
"height": 720,
"content": "## STEP 4 - Upload Mp3\n - Configure Google Drive OAuth2 credentials with access to the target folder\n - Set up FTP credentials for BunnyCDN or alternative storage"
},
"typeVersion": 1
},
{
"id": "90224e2e-a51e-42d8-a563-1dbd4ebc61f0",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-1104
],
"parameters": {
"color": 7,
"width": 736,
"height": 736,
"content": "## MY NEW YOUTUBE CHANNEL\n\ud83d\udc49 [Subscribe to my new **YouTube channel**](https://youtube.com/@n3witalia). Here I\u2019ll share videos and Shorts with practical tutorials and **FREE templates for n8n**.\n\n[](https://youtube.com/@n3witalia)"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "e7007160-0b67-4c09-b8b4-07edabe6b1a1",
"connections": {
"Webhook": {
"main": [
[
{
"node": "Audio Tagger Agent",
"type": "main",
"index": 0
}
]
]
},
"Context7": {
"ai_tool": [
[
{
"node": "Audio Tagger Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Set text": {
"main": [
[
{
"node": "Audio Tagger Agent",
"type": "main",
"index": 0
}
]
]
},
"Audio Tagger Agent": {
"main": [
[
{
"node": "Convert text to speech",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "Audio Tagger Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Convert text to speech": {
"main": [
[
{
"node": "Upload file to Drive",
"type": "main",
"index": 0
},
{
"node": "Upload to FTP",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Audio Tagger Agent",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Set text",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
anthropicApielevenLabsApiftpgoogleDriveOAuth2ApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is an AI-powered text-to-speech production pipeline designed to generate highly expressive audio using ElevenLabs v3. It automates the entire process from raw text input to final audio distribution and upload the mp3 file to Google Drive and an FTP space.
Source: https://n8n.io/workflows/12425/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Ask your PostgreSQL database complex questions and receive clear summaries, charts, and even update or insert data — all through one smart agent powered by n8n’s Model Context Protocol (MCP).
Enable AI-driven conversations with your PostgreSQL database using a secure and visual-free agent powered by n8n’s Model Context Protocol (MCP). This template allows users to ask multiple KPIs in a si
This workflow is designed for marketers, content creators, agencies, and solo founders who want to publish long‑form posts with visuals on autopilot using n8n and AI agents.
Build your own Klue/Crayon alternative: Auto-generate comprehensive competitive battlecards with AI research agents for ~$50/month instead of $1,500+
This template is designed for anyone who wants to use WhatsApp as a personal AI assistant hub. If you often juggle tasks, emails, calendars, and expenses across multiple tools, this workflow consolida