N
n8n Store
Workflow Market
AI Audio Translator with Text-to-Speech

AI Audio Translator with Text-to-Speech

by vadym-nahornyi0 views

Description

Categories

🤖 AI & Machine Learning

Nodes Used

n8n-nodes-base.setn8n-nodes-base.awsS3n8n-nodes-base.webhookn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNote@n8n/n8n-nodes-langchain.openAi
PriceGratuit
Views0
Last Updated11/28/2025
workflow.json
{
  "id": "czQrkJi2yAvqGLRZ",
  "meta": {
    "instanceId": "4933ec690637fb3b400e75b72209b423e4ae85e2088079d2359ab06d8bdb7716"
  },
  "name": "AI Audio Translator with Text-to-Speech",
  "tags": [],
  "nodes": [
    {
      "id": "e767e593-cbdf-402f-948e-77deb877b223",
      "name": "Receive Audio File",
      "type": "n8n-nodes-base.webhook",
      "position": [
        100,
        540
      ],
      "webhookId": "47b1daa6-5891-4616-95d0-99354cb66934",
      "parameters": {
        "path": "audio-translator",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "65ba3207-f498-44cb-b4f9-a2691fd5f823",
      "name": "Transcribe Audio to Text",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        360,
        540
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe",
        "binaryPropertyName": "audiofile"
      },
      "credentials": {
        "openAiApi": {
          "id": "FGtyFYOoZEwXYHKN",
          "name": "OpenAi account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.8
    },
    {
      "id": "363e96e1-6e76-4f32-9e0f-57d5b852cda2",
      "name": "Translate and Structure Text",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        600,
        540
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a translator. You receive a text and 2 languages.\nYour task is to understand the text that you received, structure it to a normal form, remove unnecessary repetitions. One language - in which the text is, translate the text into the second language, from those that you received.\nReturn the result in the format json\nWith the following fields:\nStructured incoming text in the field:\"structuringMessage\"\nTranslated text in the field: \"translateMessage\"\n\nInput text:{{ $json.text }}\nLanguages: {{ $('Receive Audio File').item.json.body.languages }}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "FGtyFYOoZEwXYHKN",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "1c6bc4a8-92d6-46f1-9dd9-fed63d5a5d6f",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -500,
        -20
      ],
      "parameters": {
        "color": 3,
        "width": 500,
        "height": 1200,
        "content": "## AI Audio Translator with Text-to-Speech\n\nThis workflow automatically transcribes audio files, translates the content between languages, and generates speech from the translated text.\n\n### Who's it for\n- Content creators working with multilingual content\n- Businesses needing audio translation services\n- Educational platforms with international audiences\n- Anyone needing quick audio-to-audio translation\n\n### How it works\n1. **Receive audio file** via webhook with language parameters\n2. **Transcribe audio** to text using OpenAI Whisper\n3. **Translate and structure** the text using GPT-4\n4. **Generate speech** from translated text\n5. **Upload to S3** for storage and delivery\n6. **Return results** with both text versions and audio URL\n\n### How to set up\n1. Create OpenAI API credentials\n2. Set up AWS S3 bucket with public read permissions\n3. Configure webhook path\n4. Test with POST request containing:\n   - Audio file (binary)\n   - Languages parameter (e.g., \"English, Spanish\")\n\n### Requirements\n- OpenAI API key (for Whisper and GPT-4)\n- AWS account with S3 access\n- S3 bucket for audio storage\n\n### How to customize\n- Change GPT model for different translation quality\n- Adjust voice settings in text-to-speech\n- Add language detection if source unknown\n- Implement file size limits\n- Add webhook authentication"
      },
      "typeVersion": 1
    },
    {
      "id": "e0a40de0-9532-407a-8c73-44ead921ac1a",
      "name": "Send Translation Results",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1760,
        540
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\n  \"StructuringMessage\": \"{{ $('Prepare Response Data').item.json.structuringMessage }}\",\n  \"translateMessage\": \"{{ $('Prepare Response Data').item.json.translateMessage }}\",\n\"audiofile\":\"https://YOUR-BUCKET-NAME.s3.YOUR-REGION.amazonaws.com/{{ $('Prepare Response Data').item.json.audiofilename }}\"\n}"
      },
      "typeVersion": 1.4
    },
    {
      "id": "e7786e6a-9457-41e0-8f99-34e697100ec5",
      "name": "Prepare Response Data",
      "type": "n8n-nodes-base.set",
      "position": [
        980,
        540
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "158ffe09-151f-40e5-bd48-85cdf8d83123",
              "name": "structuringMessage",
              "type": "string",
              "value": "={{ $json.message.content.structuringMessage }}"
            },
            {
              "id": "ae21f76c-b9f0-4c87-8d02-3f261df27d6f",
              "name": "translateMessage",
              "type": "string",
              "value": "={{ $json.message.content.translateMessage }}"
            },
            {
              "id": "d85be708-67ba-473c-8673-72fa0840ffdd",
              "name": "audiofilename",
              "type": "string",
              "value": "={{ $now.toString().replace(/[^a-zA-Z0-9]/g, '') }}.mp3"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1ad5cc4c-58e7-4cbb-981c-df5283ba4691",
      "name": "Step 1 - Transcription",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        280,
        240
      ],
      "parameters": {
        "height": 280,
        "content": "## 1. Audio Transcription\n\nUses OpenAI Whisper to convert speech to text. Supports multiple languages and accents.\n\n**Tip**: Enable retry on fail for better reliability with larger files."
      },
      "typeVersion": 1
    },
    {
      "id": "10866a78-388a-42ff-b643-11f43ddcb67b",
      "name": "Generate Translated Audio",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1260,
        540
      ],
      "parameters": {
        "input": "={{ $json.translateMessage }}",
        "options": {},
        "resource": "audio"
      },
      "typeVersion": 1.8
    },
    {
      "id": "797172cf-9200-4ccc-b54f-f57791d295b2",
      "name": "Upload Audio to S3",
      "type": "n8n-nodes-base.awsS3",
      "position": [
        1520,
        540
      ],
      "parameters": {
        "fileName": "={{ $('Prepare Response Data').item.json.audiofilename }}",
        "operation": "upload",
        "bucketName": "YOUR-BUCKET-NAME",
        "additionalFields": {
          "acl": "publicRead"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "5c457981-1032-45fd-bdf9-32499d5de85b",
      "name": "Step 2 - Translation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        240
      ],
      "parameters": {
        "width": 320,
        "height": 300,
        "content": "## 2. Translation & Structuring\n\nGPT-4 processes the transcribed text to:\n- Remove repetitions and filler words\n- Structure the content properly\n- Translate to target language\n\nReturns JSON with both versions."
      },
      "typeVersion": 1
    },
    {
      "id": "771c99ac-ab21-4287-a040-2b12babafac4",
      "name": "Step 3 - Audio Generation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1160,
        220
      ],
      "parameters": {
        "height": 300,
        "content": "## 3. Audio Generation\n\nConverts translated text to speech using OpenAI's TTS.\n\n**Customization options**:\n- Voice selection\n- Speed adjustment\n- Audio quality settings"
      },
      "typeVersion": 1
    },
    {
      "id": "7ee14a51-7e89-460b-b647-1cc6c67a752d",
      "name": "Step 4 - Storage",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1460,
        220
      ],
      "parameters": {
        "width": 440,
        "height": 300,
        "content": "## 4. Storage & Delivery\n\nUploads to S3 with public read access for easy sharing.\n\n**Important**: Replace 'YOUR-BUCKET-NAME' and region in the response URL!"
      },
      "typeVersion": 1
    },
    {
      "id": "1b12775a-0736-4930-9931-2fc01949c62a",
      "name": "Security Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        740,
        800
      ],
      "parameters": {
        "color": 5,
        "width": 600,
        "height": 200,
        "content": "⚠️ **Security Configuration Required**\n1. Replace 'YOUR-BUCKET-NAME' with your S3 bucket name\n2. Update S3 region in the response URL\n3. Set up proper webhook authentication\n4. Configure CORS if needed for web access"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "a8dc5123-0faf-40bf-80f2-6a5fe1ffeb4b",
  "connections": {
    "Receive Audio File": {
      "main": [
        [
          {
            "node": "Transcribe Audio to Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Audio to S3": {
      "main": [
        [
          {
            "node": "Send Translation Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Response Data": {
      "main": [
        [
          {
            "node": "Generate Translated Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe Audio to Text": {
      "main": [
        [
          {
            "node": "Translate and Structure Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Translated Audio": {
      "main": [
        [
          {
            "node": "Upload Audio to S3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Translate and Structure Text": {
      "main": [
        [
          {
            "node": "Prepare Response Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

相关工作流