{
  "id": "OJZHlaGLkOyFR7ut",
  "meta": {
    "site": "https://github.com/zengfr/n8n-workflow-all-templates",
    "name": "Automate YouTube Thumbnail Creation & Social Publishing with Templated.io & Blotato",
    "wechat": "youandme10086",
    "id": 10126,
    "update_time": "2025-11-10"
  },
  "name": "\ud83d\udca5  Automate YouTube thumbnail creation from video links -vide",
  "tags": [],
  "nodes": [
    {
      "id": "41092605-3611-4017-828a-3c7bb41a2eb6",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        4016,
        864
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dec01d59-d7a5-4a53-9971-e62a276cbbfb",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        4256,
        864
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "youtubeApiKey",
              "type": "string",
              "value": "YOUR_YOUTUBE_API_KEY"
            },
            {
              "id": "id-3",
              "name": "templatedTemplateId",
              "type": "string",
              "value": "YOUR_TEMPLATE_ID"
            },
            {
              "id": "id-4",
              "name": "googleDriveFolderId",
              "type": "string",
              "value": "YOUR_DRIVE_FOLDER_ID"
            },
            {
              "id": "id-5",
              "name": "googleSheetsId",
              "type": "string",
              "value": "YOUR_SHEETS_ID"
            },
            {
              "id": "id-6",
              "name": "emailRecipient",
              "type": "string",
              "value": "YOUR_EMAIL_ADDRESS"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "7bda8d47-fc97-4372-a447-c23bc0bd3c8f",
      "name": "Extract Video ID",
      "type": "n8n-nodes-base.code",
      "position": [
        4480,
        864
      ],
      "parameters": {
        "jsCode": "// Extract YouTube video ID from Telegram message\nconst items = $input.all();\nconst outputItems = [];\n\nfor (const item of items) {\n  const messageText = item.json.message?.text || '';\n  \n  // Regex patterns for various YouTube URL formats\n  const patterns = [\n    /(?:youtube\\.com\\/watch\\?v=)([a-zA-Z0-9_-]{11})/,\n    /(?:youtu\\.be\\/)([a-zA-Z0-9_-]{11})/,\n    /(?:youtube\\.com\\/embed\\/)([a-zA-Z0-9_-]{11})/,\n    /(?:youtube\\.com\\/v\\/)([a-zA-Z0-9_-]{11})/,\n    /(?:youtube\\.com\\/shorts\\/)([a-zA-Z0-9_-]{11})/\n  ];\n  \n  let videoId = null;\n  \n  // Try each pattern until we find a match\n  for (const pattern of patterns) {\n    const match = messageText.match(pattern);\n    if (match && match[1]) {\n      videoId = match[1];\n      break;\n    }\n  }\n  \n  if (videoId) {\n    outputItems.push({\n      json: {\n        videoId: videoId,\n        videoUrl: `https://www.youtube.com/watch?v=${videoId}`,\n        originalMessage: messageText\n      }\n    });\n  } else {\n    // If no video ID found, pass through with error flag\n    outputItems.push({\n      json: {\n        error: 'No valid YouTube URL found in message',\n        originalMessage: messageText\n      }\n    });\n  }\n}\n\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "0cc8b6fe-9fe9-41ac-aa66-4a90e1995f70",
      "name": "Fetch YouTube Info",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4768,
        864
      ],
      "parameters": {
        "url": "https://www.googleapis.com/youtube/v3/videos",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "part",
              "value": "snippet"
            },
            {
              "name": "id",
              "value": "={{ $json.videoId }}"
            },
            {
              "name": "key",
              "value": "={{ $('Workflow Configuration').first().json.youtubeApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6f6ed14b-0e3c-45e3-8e78-72cc4748db90",
      "name": "Prepare Text Data",
      "type": "n8n-nodes-base.code",
      "position": [
        5040,
        864
      ],
      "parameters": {
        "jsCode": "// Normalize YouTube API responses and extract fields for thumbnail generation\n\nconst inputItems = $input.all();\nconst out = [];\n\nfor (const item of inputItems) {\n  // Handle string payloads (if HTTP node returned text)\n  let root = item.json ?? {};\n  if (typeof root === 'string') {\n    try { root = JSON.parse(root); } catch (e) { root = {}; }\n  }\n\n  // Build a uniform array of \"video\" records to iterate\n  let videos = [];\n  if (Array.isArray(root.items)) {\n    videos = root.items; // videoListResponse (videos.list) or search.list\n  } else if (root.kind === 'youtube#video') {\n    videos = [root]; // single video object shape\n  } else {\n    // Fallback: maybe the current item itself is a snippet\n    if (root.snippet) videos = [root];\n  }\n\n  for (const v of videos) {\n    const snippet = v.snippet || {};\n    // videoId can be under v.id (videos.list) or v.id.videoId (search.list)\n    const videoId = (v.id && typeof v.id === 'object') ? (v.id.videoId || '') : (v.id || '');\n\n    // Title (trim to 60 chars max)\n    let title = snippet.title || '';\n    if (title.length > 60) title = title.slice(0, 57) + '...';\n\n    const description = snippet.description || '';\n    const channelTitle = snippet.channelTitle || '';\n    const publishedAt = snippet.publishedAt || '';\n\n    // Choose best available thumbnail\n    const t = snippet.thumbnails || {};\n    const thumbnailUrl =\n      (t.maxres && t.maxres.url) ||\n      (t.standard && t.standard.url) ||\n      (t.high && t.high.url) ||\n      (t.medium && t.medium.url) ||\n      (t.default && t.default.url) ||\n      '';\n\n    out.push({\n      json: {\n        title,\n        description,\n        videoId,\n        channelTitle,\n        publishedAt,\n        thumbnailUrl,\n      },\n    });\n  }\n}\n\n// If nothing matched, still return a single empty item to avoid node errors\nif (out.length === 0) {\n  out.push({ json: { title: '', description: '', videoId: '', channelTitle: '', publishedAt: '', thumbnailUrl: '' } });\n}\n\nreturn out;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "f391676c-8826-4a3e-b19a-2e58c7e7c796",
      "name": "Wait for Rendering",
      "type": "n8n-nodes-base.wait",
      "position": [
        4768,
        1152
      ],
      "parameters": {
        "unit": "minutes",
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "ca6a5f90-4174-42dc-a4f5-f1c14d4f2f40",
      "name": "Upload to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        4256,
        1440
      ],
      "parameters": {
        "name": "={{ $('Extract Video ID').first().json.videoId }}_thumbnail_{{ $('Prepare Text Data').first().json.title }}.png",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.googleDriveFolderId }}"
        },
        "inputDataFieldName": "thumbnail"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "7ea4143c-b953-4430-908b-e7b13a8ff7eb",
      "name": "Send Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        4768,
        1440
      ],
      "parameters": {
        "sendTo": "={{ $('Workflow Configuration').first().json.emailRecipient }}",
        "message": "=<h2>YouTube Thumbnail Generated Successfully</h2>\n<p>A new thumbnail has been generated for your YouTube video.</p>\n<h3>Video Details:</h3>\n<ul>\n  <li><strong>Title:</strong> {{ $('Prepare Text Data').first().json.title }}</li>\n  <li><strong>Channel:</strong> {{ $('Prepare Text Data').first().json.channelTitle }}</li>\n  <li><strong>Video ID:</strong> {{ $('Extract Video ID').first().json.videoId }}</li>\n</ul>\n<h3>Thumbnail:</h3>\n<p>The thumbnail has been uploaded to Google Drive and is attached to this email.</p>\n<p><strong>Google Drive Link:</strong> <a href=\"{{ $('Upload to Google Drive').first().json.webViewLink }}\">View in Google Drive</a></p>\n<p>Thank you for using our YouTube Thumbnail Generator!</p>",
        "options": {},
        "subject": "=YouTube Thumbnail Generated: {{ $('Prepare Text Data').first().json.title }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e52e1427-e362-4731-9a4c-92a5e4610687",
      "name": "Send Telegram Notification",
      "type": "n8n-nodes-base.telegram",
      "position": [
        5040,
        1440
      ],
      "parameters": {
        "file": "={{ $('Downloading files').item.json.url }}",
        "chatId": "={{ $('Telegram Trigger').first().json.message.chat.id }}",
        "operation": "sendPhoto",
        "additionalFields": {
          "caption": "=\u2705 Thumbnail generated for: {{ $('Prepare Text Data').first().json.title }}\n\n\ud83d\udd17 Google Drive: {{ $('Upload to Google Drive').first().json.webViewLink }}"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b5ee3daa-64ce-4782-837d-142bc5ee3c77",
      "name": "OpenAI Post Generation",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        4016,
        1728
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "id",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are a social media expert creating viral posts for YouTube promotions. Write engaging, platform-optimized captions."
            },
            {
              "content": "=Create a compelling social media post for: {{ $('Prepare Text Data').first().json.title }}\n\nContext: {{ $('Prepare Text Data').first().json.description }}\n\nRequirements:\n- Start with attention-grabbing hook\n- Highlight 2-3 key points\n- Include strong call-to-action\n- Add 5-8 relevant hashtags\n- Format: Keep under 1000 characters for LinkedIn\n- Include video URL: {{ $('Extract Video ID').first().json.videoUrl }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "5210d570-ac35-4175-b783-af582160befa",
      "name": "Upload Video to BLOTATO",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        4352,
        1728
      ],
      "parameters": {
        "mediaUrl": "={{ $('Downloading files').item.json.url }}",
        "resource": "media"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "9d78b633-b9d3-47a4-bcd7-0e48739cf0eb",
      "name": "Linkedin",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        4768,
        1728
      ],
      "parameters": {
        "options": {},
        "platform": "linkedin",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1446",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1446",
          "cachedResultName": "Samuel Amalric"
        },
        "postContentText": "={{ $('OpenAI Post Generation').item.json.message.content }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "caadaf4e-8b06-41b6-950c-41846f684915",
      "name": "Facebook",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        4560,
        1728
      ],
      "parameters": {
        "options": {},
        "platform": "facebook",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1759",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759",
          "cachedResultName": "Firass Ben"
        },
        "facebookPageId": {
          "__rl": true,
          "mode": "list",
          "value": "101603614680195",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759/subaccounts/101603614680195",
          "cachedResultName": "Dr. Firas"
        },
        "postContentText": "={{ $('OpenAI Post Generation').item.json.message.content }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "06b1aa18-c78f-4d52-9ddb-6532eae175f4",
      "name": "Twitter (X)",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        5024,
        1728
      ],
      "parameters": {
        "options": {},
        "platform": "twitter",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1289",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1289",
          "cachedResultName": "Docteur_Firas"
        },
        "postContentText": "={{ $('OpenAI Post Generation').item.json.message.content }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "0b9bc493-3327-429e-88d8-4de803f4c800",
      "name": "OpenAI Post Generation1",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        4016,
        1152
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "id",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are an expert French copywriter who specializes in creating short, punchy, and visually effective YouTube thumbnail texts.\nYour goal is to write 4 concise and impactful text elements in French, based on the provided YouTube video title, description, and channel context.\nKeep the phrasing visually strong and emotionally engaging \u2014 it must capture attention at first glance.\nAvoid emojis, hashtags, and punctuation except when necessary for readability.\nEach phrase should be formatted as plain text (no markdown, no quotes)."
            },
            {
              "content": "=Based on the following information:\n\nVideo Title: {{ $json.title }}\n\nVideo Description: {{ $json.description }}\n\nChannel Name: {{ $json.channelTitle }}\n\nGenerate 4 text elements for a YouTube thumbnail in French:\n\nMain Title (Top) \u2014 3 strong words maximum that summarize the main idea or hook. maximum 20 characters.\n\nSecondary Title (Center) \u2014 4 words maximum that create curiosity or highlight the benefit of the video. maximum 20 characters.\n\nBottom Title (Footer) \u2014 a short supportive phrase or promise related to the topic. maximum 20 characters.\n\nLabel (Top-Right) \u2014 one single keyword describing the type of content (e.g. \u201cTutoriel\u201d, \u201cAstuce\u201d, \u201cWorkflow\u201d, \u201cCours\u201d, \u201cFormation\u201d).\n\nConstraints:\n\nAll outputs must be in French.\n\nUse natural, human language that feels like it belongs on a modern YouTube thumbnail.\n\nAvoid repeating the exact same words as in the video title \u2014 paraphrase creatively.\n\nOutput in this JSON structure:\n\n{\n  \"main_title\": \"...\",\n  \"center_title\": \"...\",\n  \"bottom_title\": \"...\",\n  \"label\": \"...\"\n}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "17b9ee87-c823-4eab-9f6a-63cd3926ea2e",
      "name": "Download Thumbnail",
      "type": "n8n-nodes-templated.templated",
      "position": [
        5040,
        1152
      ],
      "parameters": {
        "renderId": "={{ $json.id }}",
        "operation": "retrieveRender",
        "requestOptions": {}
      },
      "credentials": {
        "templatedApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3b65e073-31be-4bcf-bcf2-f126a3199ca7",
      "name": "Generate Thumbnail via Templated.io",
      "type": "n8n-nodes-templated.templated",
      "position": [
        4480,
        1152
      ],
      "parameters": {
        "layers": {
          "layer": [
            {
              "text": "={{ $json.message.content.main_title }}",
              "layerName": "title-1"
            },
            {
              "text": "={{ $json.message.content.center_title }}",
              "layerName": "title-2"
            },
            {
              "text": "={{ $json.message.content.label }}",
              "layerName": "word"
            },
            {
              "text": "={{ $json.message.content.bottom_title }}",
              "layerName": "episode"
            }
          ]
        },
        "template": {
          "__rl": true,
          "mode": "list",
          "value": "e97fb8b6-d548-4e19-8783-d924f1a93af3",
          "cachedResultName": "Thumbnail YT n8n"
        },
        "requestOptions": {}
      },
      "credentials": {
        "templatedApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1f2550f0-076a-4f7d-9b88-f84767527a9e",
      "name": "Downloading files",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4032,
        1440
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file",
              "outputPropertyName": "thumbnail"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "fc02c5c7-c022-47fd-9c1a-44e6b76df0a1",
      "name": "Save to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4480,
        1440
      ],
      "parameters": {
        "columns": {
          "value": {
            "STATUS": "created",
            "ID VIDEO": "={{ $('Prepare Text Data').first().json.videoId }}",
            "YOUTUBE URL": "={{ $('Extract Video ID').first().json.videoUrl }}",
            "YOUTUBE TITLE": "={{ $('Prepare Text Data').first().json.title }}",
            "GOOGLE DRIVE URL": "={{ $json.webContentLink }}"
          },
          "schema": [
            {
              "id": "ID VIDEO",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ID VIDEO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "YOUTUBE URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "YOUTUBE URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "YOUTUBE TITLE",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "YOUTUBE TITLE",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "GOOGLE DRIVE URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "GOOGLE DRIVE URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "POST DESCRIPTION",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "POST DESCRIPTION",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "STATUS",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "STATUS",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "YouTube"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.googleSheetsId }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "9e85c26f-b85a-49a0-89b0-97743e5dcdd9",
      "name": "\ud83d\udccb WORKFLOW OVERVIEW",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3120,
        784
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 652,
        "content": "# \ud83d\ude80 Automate YouTube thumbnail creation\n\n### \ud83c\udfa5 Watch This Tutorial\n\n@[youtube](CenAtzPceQU)\n\nThis workflow automates YouTube thumbnail generation and social media distribution. Send a YouTube URL via Telegram, and the workflow will:\n\n\u2705 Extract video metadata from YouTube API\n\u2705 Generate custom thumbnail using [templated.io](https://templated.io/?utm_campaign=drfiras)\n\u2705 Store thumbnail in Google Drive\n\u2705 Log activity in Google Sheets\n\u2705 Create AI-powered social media posts\n\u2705 Publish to LinkedIn, Facebook, and Twitter\n\u2705 Send notifications via Email and Telegram"
      },
      "typeVersion": 1
    },
    {
      "id": "f15bdc4e-5493-4de8-b3b7-66d3e0fbbe01",
      "name": "\ud83d\udd27 STEP 1: Configuration",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        784
      ],
      "parameters": {
        "color": 4,
        "width": 1680,
        "height": 270,
        "content": "## \ud83d\udce4 STEP 1: \ud83d\udcf1 Telegram Trigger: Receives YouTube URLs from users\n\n\u2699\ufe0f Workflow Configuration: Central hub for all API keys and settings\n\nRequired fields:\n\u2022 youtubeApiKey - Get from Google Cloud Console\n\u2022 templatedApiKey - Get from [templated.io](https://templated.io/?utm_campaign=drfiras) dashboard\n\u2022 templatedTemplateId - Your thumbnail template ID\n\u2022 googleDriveFolderId - Target folder for thumbnails\n\u2022 googleSheetsId - Spreadsheet for logging\n\u2022 emailRecipient - Notification email address\n\u2022 blotatoApiKey - Blotato API credentials\n\u2022 linkedinAccountId, facebookPageId, twitterAccountId"
      },
      "typeVersion": 1
    },
    {
      "id": "84d95f0c-9c9f-4e23-9161-aa3631a6c27b",
      "name": "\ud83c\udfa8 STEP 3: Thumbnail Generation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        1072
      ],
      "parameters": {
        "color": 5,
        "width": 1680,
        "height": 264,
        "content": "## \ud83d\udce4 STEP 2: \ud83c\udfa8 Generate Thumbnail: Sends POST request to [templated.io](https://templated.io/?utm_campaign=drfiras) \nAPI with video title and description to generate custom thumbnail\n\n\u23f3 Wait for Rendering: Pauses workflow for 5 minutes \nto allow [templated.io](https://templated.io/?utm_campaign=drfiras) to complete thumbnail generation\n\n\u2b07\ufe0f Download Thumbnail: Fetches the generated thumbnail image \nfile from [templated.io](https://templated.io/?utm_campaign=drfiras) response URL and stores as binary data\n\nNote: Adjust wait time based on your template complexity"
      },
      "typeVersion": 1
    },
    {
      "id": "57361e93-16f1-4a1b-9369-99952249a7f9",
      "name": "\ud83d\udce2 STEP 5: Notifications",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        1360
      ],
      "parameters": {
        "color": 2,
        "width": 1680,
        "height": 264,
        "content": "## \ud83d\udce4 STEP 3: \ud83d\udce7 Send Gmail: Sends email notification with:\n\u2022 Subject: YouTube Thumbnail Generated + video title\n\u2022 HTML body with video details\n\u2022 Thumbnail attachment\n\u2022 Google Drive link\n\n\u2601\ufe0f Upload to Google Drive: Uploads thumbnail to specified \n\n\ud83d\udcac Send Telegram Notification: Sends thumbnail with:\n\u2022 Video title\n\u2022 Google Drive link\n\u2022 Success confirmation message"
      },
      "typeVersion": 1
    },
    {
      "id": "844d603f-3246-48da-a899-6e30022df65e",
      "name": "\u2699\ufe0f INSTALLATION GUIDE",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3120,
        1456
      ],
      "parameters": {
        "color": 7,
        "width": 402,
        "height": 448,
        "content": "\ud83d\udccb INSTALLATION CHECKLIST\n\n1\ufe0f\u20e3 Get YouTube Data API v3 key from Google Cloud Console\n2\ufe0f\u20e3 Create [templated.io](https://templated.io/?utm_campaign=drfiras) account and get API key + template ID\n3\ufe0f\u20e3 Set up Telegram bot using @BotFather\n4\ufe0f\u20e3 Create Google Drive folder and copy folder ID from URL\n5\ufe0f\u20e3 Create Google Sheets with columns: Date, Video ID, Video URL, Title, Thumbnail Link, Status\n6\ufe0f\u20e3 Get Blotato API key from dashboard\n7\ufe0f\u20e3 Connect social media accounts to Blotato and get account IDs\n8\ufe0f\u20e3 Fill all values in Workflow Configuration node\n9\ufe0f\u20e3 Test with a YouTube URL via Telegram\n\n## \ud83d\udcec Need Help or Want to Customize This?\n**Contact me for consulting and support:** [LinkedIn](https://www.linkedin.com/in/dr-firas/) / [YouTube](https://www.youtube.com/@DRFIRASS)  / [\ud83d\ude80 Mes Ateliers n8n  ](https://hotm.art/formation-n8n)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1579f6a0-8326-4c06-b5bf-29c0b1d0fafd",
      "name": "Step 5 - Publishing",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        1648
      ],
      "parameters": {
        "color": 5,
        "width": 1692,
        "height": 260,
        "content": "## \ud83d\udce4 STEP 4: PUBLISHING\n\n### Install the Blotato [Blotato](https://blotato.com/?ref=firas) Node in n8n (Community Nodes)\n1. In n8n, open **Settings \u2192 Community Nodes**.  \n2. Click **Install**, then add: `@blotato/n8n-nodes-blotato`.  \n3. Log in to **Blotato**.  \n4. Go to **Settings \u2192 API Keys**.  \n5. In n8n \u2192 **Credentials \u2192 New**.  \n6. Choose **Blotato API** \n(provided by the community node you installed).  "
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "387ca33f-5a76-458f-a9f2-81ff3af75d1b",
  "connections": {
    "Facebook": {
      "main": [
        []
      ]
    },
    "Linkedin": {
      "main": [
        []
      ]
    },
    "Send Gmail": {
      "main": [
        [
          {
            "node": "Send Telegram Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Twitter (X)": {
      "main": [
        []
      ]
    },
    "Extract Video ID": {
      "main": [
        [
          {
            "node": "Fetch YouTube Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Downloading files": {
      "main": [
        [
          {
            "node": "Upload to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Text Data": {
      "main": [
        [
          {
            "node": "OpenAI Post Generation1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Thumbnail": {
      "main": [
        [
          {
            "node": "Downloading files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch YouTube Info": {
      "main": [
        [
          {
            "node": "Prepare Text Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Rendering": {
      "main": [
        [
          {
            "node": "Download Thumbnail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save to Google Sheets": {
      "main": [
        [
          {
            "node": "Send Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Post Generation": {
      "main": [
        [
          {
            "node": "Upload Video to BLOTATO",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Google Drive": {
      "main": [
        [
          {
            "node": "Save to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Extract Video ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Post Generation1": {
      "main": [
        [
          {
            "node": "Generate Thumbnail via Templated.io",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Video to BLOTATO": {
      "main": [
        [
          {
            "node": "Linkedin",
            "type": "main",
            "index": 0
          },
          {
            "node": "Facebook",
            "type": "main",
            "index": 0
          },
          {
            "node": "Twitter (X)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Telegram Notification": {
      "main": [
        [
          {
            "node": "OpenAI Post Generation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Thumbnail via Templated.io": {
      "main": [
        [
          {
            "node": "Wait for Rendering",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}