AutomationFlowsAI & RAG › Auto-translate Youtube Video Content with Google Gemini AI

Auto-translate Youtube Video Content with Google Gemini AI

ByLucio @misterfunable on n8n.io

If you want to reach a wider audience, having your video titles and descriptions in multiple languages can help you connect with more viewers. This template provides the configuration needed to generate translations and update them directly on YouTube. Defines Video ID and…

Event trigger★★★★☆ complexityAI-powered14 nodesGoogle Gemini ChatMemory Buffer WindowOutput Parser StructuredYouTubeAgentHTTP Request
AI & RAG Trigger: Event Nodes: 14 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #9543 — we link there as the canonical source.

This workflow follows the Agent → HTTP Request 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 →

Download .json
{
  "nodes": [
    {
      "id": "42e836f4-219d-4ad7-9f01-aec4aedeaf25",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -240,
        0
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7f95419d-4916-4aa5-9db4-0f65df350eb9",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -112,
        0
      ],
      "parameters": {
        "sessionKey": "chat",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "7de516ce-cd4a-4628-b59e-30d1008f0e87",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        16,
        0
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n\t\"title\": \"object\",\n    \"description\": \"object\",\n    \"tags\": \"object\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "a4033f3e-2c8b-4009-b298-c5ea8e6299b4",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 388,
        "height": 304,
        "content": "## Set and Retrieve Information"
      },
      "typeVersion": 1
    },
    {
      "id": "b9dddc83-b3a2-4935-ae62-a39eb1af3864",
      "name": "Output URL",
      "type": "n8n-nodes-base.set",
      "position": [
        448,
        -224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ffd3b7ab-4ac6-4c71-8ee1-a6c93732a701",
              "name": "URL",
              "type": "string",
              "value": "=https://studio.youtube.com/video/{{ $('Fetches video information').item.json.id }}/translations"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c84d84a2-6093-436e-9a37-597331d917e0",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1936,
        -448
      ],
      "parameters": {
        "width": 678,
        "height": 560,
        "content": "## YouTube Video Title and Description Translator\n\nIf you want to reach a wider audience, having your video title and description in multiple languages can help you connect with more viewers.\n\n### Requirements\n\n- YouTube Auth (In the **Fetch Video Information** node)\n- Google Gemini (PaLM) API (In the **AI Agent Translator** node)\n\n### How to Use\n\n- (First time only) Set up credentials for your user.\n- Edit the node \"Defines Video ID and Languages\".\n  - Modify the REPLACEME value with the video ID to translate.\n  - Update the languages and the localizations you want to use.\n- Click the Execute Workflow button.\n- Enjoy your translated video titles and descriptions!\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ffdab92b-7d0a-460d-a4a5-5929a8d4695c",
      "name": "Fetches video information",
      "type": "n8n-nodes-base.youTube",
      "position": [
        -704,
        -224
      ],
      "parameters": {
        "options": {},
        "videoId": "={{ $json.video }}",
        "resource": "video",
        "operation": "get"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8ec32768-a9c3-4dfd-9b96-2b88f81fcaed",
      "name": "Check languages to translate",
      "type": "n8n-nodes-base.code",
      "position": [
        -464,
        -224
      ],
      "parameters": {
        "jsCode": "// Get default language from the incoming item\nconst defaultLang = $input.first().json?.snippet?.defaultLanguage ?? 'en';\n\n// Get your mapping of name -> code from the node named: When clicking \u2018Execute workflow\u2019\nconst nameToCode = $('Defines Video ID and Languages').first().json.languages || {};\n\n// Build result excluding the default language\nconst entries = Object.entries(nameToCode).filter(([, code]) => code !== defaultLang);\n\nconst languages = entries.map(([name]) => name);\nconst keys = Object.fromEntries(entries);\n\n// Return a single item with the desired JSON\nreturn [\n  {\n    json: {\n      defaultLang,   // e.g. defaults to en\n      languages,     // e.g. [\"spanish\",\"japanese\"]\n      keys           // e.g. { spanish: \"es\", japanese: \"ja\" }\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "f513101f-9911-48d8-bd49-a5ddfbb8e00d",
      "name": "AI Agent Translator",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "maxTries": 2,
      "position": [
        -192,
        -224
      ],
      "parameters": {
        "text": "=Translate the youtube video which has a default language of {{ $json.defaultLang }}, to {{ $json.languages }}.\n\nThis is the title: {{ $('Fetches video information').item.json.snippet.title }}\n\nand the description: {{ $('Fetches video information').item.json.snippet.description }}\n\nYou may suggest tags \n\nReturn only the translated languages in json format, with this structure:\n\n{\n      \"LANGUAGE KEY 1\": { \"title\": \"Example\", \"description\": \"Example desc\" },\n      \"LANGUAGE KEY 2\": { \"title\": \"Ejemplo\", \"description\": \"Desc Ejemplo\" },\n}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "retryOnFail": true,
      "typeVersion": 2.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "9861fb97-a088-45e1-baad-2f3e4b0d52e0",
      "name": "Updates Video Localization",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        208,
        -224
      ],
      "parameters": {
        "url": "https://www.googleapis.com/youtube/v3/videos?part=snippet,localizations",
        "method": "PUT",
        "options": {},
        "jsonBody": "={{\n{\nid: $(\"Fetches video information\").item.json.id,\nsnippet: {\ndefaultLanguage: $('Check languages to translate').item.json.defaultLang,\ntitle: $('Fetches video information').item.json.snippet.title,\ndescription: $('Fetches video information').item.json.snippet.description,\ncategoryId: $('Fetches video information').item.json.snippet.categoryId,\ntags: $('Fetches video information').item.json.snippet.tags\n},\nlocalizations: $json.output\n}\n}}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "youTubeOAuth2Api"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2d36fc0b-bd82-4b8a-a6c1-1a78d3e499e9",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 628,
        "height": 304,
        "content": "## Language Translation"
      },
      "typeVersion": 1
    },
    {
      "id": "11660cdc-4c28-4ecd-9898-684010a5bbd7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 580,
        "height": 304,
        "content": "## Update Localization and Return YouTube URL"
      },
      "typeVersion": 1
    },
    {
      "id": "93132f37-61eb-4de7-9e75-d9703b95c486",
      "name": "When clicking 'Execute workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1120,
        -224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "b538cca6-dead-408f-9648-b2683099b345",
      "name": "Defines Video ID and Languages",
      "type": "n8n-nodes-base.set",
      "position": [
        -896,
        -224
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"video\": \"REPLACEME\",\n  \"languages\": {\n    \"english\": \"en\",\n    \"spanish\": \"es-419\",\n    \"japanese\": \"ja\"\n  }\n}\n",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    }
  ],
  "connections": {
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent Translator",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent Translator": {
      "main": [
        [
          {
            "node": "Updates Video Localization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent Translator",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Fetches video information": {
      "main": [
        [
          {
            "node": "Check languages to translate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent Translator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Updates Video Localization": {
      "main": [
        [
          {
            "node": "Output URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check languages to translate": {
      "main": [
        [
          {
            "node": "AI Agent Translator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Defines Video ID and Languages": {
      "main": [
        [
          {
            "node": "Fetches video information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "Defines Video ID and Languages",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

If you want to reach a wider audience, having your video titles and descriptions in multiple languages can help you connect with more viewers. This template provides the configuration needed to generate translations and update them directly on YouTube. Defines Video ID and…

Source: https://n8n.io/workflows/9543/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Transform YouTube videos into structured Active Learning study sheets using AI.

Form Trigger, HTTP Request, YouTube +5
AI & RAG

How it Works

Memory Buffer Window, Agent, Output Parser Structured +9
AI & RAG

Digital marketers, content creators, social media managers, and businesses who want to use AI marketing automation for YouTube Shorts without spending hours on production. This AI workflow helps anyon

OpenAI, HTTP Request, OpenAI Chat +7
AI & RAG

This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11
AI & RAG

This Shopify AI automation is an advanced n8n-powered workflow that transforms Shopify product collections into SEO-optimized blog articles with images, while maintaining full visibility and control t

Shopify Trigger, HTTP Request, Google Sheets +7