💥 ビデオリンクからYouTubeサムネイルの自動作成

上級

これはContent Creation, Multimodal AI分野の自動化ワークフローで、25個のノードを含みます。主にSet, Code, Wait, Gmail, Telegramなどのノードを使用。 Templated.ioとBlotatoを使用してYouTubeサムネイルおよびソーシャルメディア公開の自動化

前提条件
  • Googleアカウント + Gmail API認証情報
  • Telegram Bot Token
  • Google Drive API認証情報
  • ターゲットAPIの認証情報が必要な場合あり
  • Google Sheets API認証情報
  • OpenAI API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "OJZHlaGLkOyFR7ut",
  "meta": {
    "instanceId": "de822f81f3a2367cef7d9549771a77783236bc9596481be2ae65c05fbcc4b4fd",
    "templateCredsSetupCompleted": true
  },
  "name": "💥  Automate YouTube thumbnail creation from video links -vide",
  "tags": [],
  "nodes": [
    {
      "id": "41092605-3611-4017-828a-3c7bb41a2eb6",
      "name": "Telegram トリガー",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        4016,
        864
      ],
      "webhookId": "71c3ceda-ca60-42bd-beb6-845035069dc2",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "zT2gC4wPXibPyra1",
          "name": "Telegram - templated"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dec01d59-d7a5-4a53-9971-e62a276cbbfb",
      "name": "ワークフロー設定",
      "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": "動画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": "YouTube 情報取得",
      "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": "テキストデータ準備",
      "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": "レンダリング待機",
      "type": "n8n-nodes-base.wait",
      "position": [
        4768,
        1152
      ],
      "webhookId": "853c0ca8-14b7-4854-878f-89d5787e9fc8",
      "parameters": {
        "unit": "minutes",
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "ca6a5f90-4174-42dc-a4f5-f1c14d4f2f40",
      "name": "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": {
          "id": "odf7JAwyqVFVZBhQ",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "7ea4143c-b953-4430-908b-e7b13a8ff7eb",
      "name": "Gmail 送信",
      "type": "n8n-nodes-base.gmail",
      "position": [
        4768,
        1440
      ],
      "webhookId": "17c8a017-1821-4519-be49-1ee16ef91109",
      "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": {
          "id": "SYGi4mCMfmxi8gK3",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e52e1427-e362-4731-9a4c-92a5e4610687",
      "name": "Telegram 通知送信",
      "type": "n8n-nodes-base.telegram",
      "position": [
        5040,
        1440
      ],
      "webhookId": "4424fef6-e1c1-4b7f-b599-9239c8b0ca82",
      "parameters": {
        "file": "={{ $('Downloading files').item.json.url }}",
        "chatId": "={{ $('Telegram Trigger').first().json.message.chat.id }}",
        "operation": "sendPhoto",
        "additionalFields": {
          "caption": "=✅ Thumbnail generated for: {{ $('Prepare Text Data').first().json.title }}\n\n🔗 Google Drive: {{ $('Upload to Google Drive').first().json.webViewLink }}"
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "zT2gC4wPXibPyra1",
          "name": "Telegram - templated"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b5ee3daa-64ce-4782-837d-142bc5ee3c77",
      "name": "OpenAI 投稿生成",
      "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": {
          "id": "QmtwfFk8iBkuCXOX",
          "name": "n8n free OpenAI API credits"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "5210d570-ac35-4175-b783-af582160befa",
      "name": "BLOTATOへ動画アップロード",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        4352,
        1728
      ],
      "parameters": {
        "mediaUrl": "={{ $('Downloading files').item.json.url }}",
        "resource": "media"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "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": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "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": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "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": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "0b9bc493-3327-429e-88d8-4de803f4c800",
      "name": "OpenAI 投稿生成1",
      "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 — 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) — 3 strong words maximum that summarize the main idea or hook. maximum 20 characters.\n\nSecondary Title (Center) — 4 words maximum that create curiosity or highlight the benefit of the video. maximum 20 characters.\n\nBottom Title (Footer) — a short supportive phrase or promise related to the topic. maximum 20 characters.\n\nLabel (Top-Right) — one single keyword describing the type of content (e.g. “Tutoriel”, “Astuce”, “Workflow”, “Cours”, “Formation”).\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 — 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": {
          "id": "QmtwfFk8iBkuCXOX",
          "name": "n8n free OpenAI API credits"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "17b9ee87-c823-4eab-9f6a-63cd3926ea2e",
      "name": "サムネイルダウンロード",
      "type": "n8n-nodes-templated.templated",
      "position": [
        5040,
        1152
      ],
      "parameters": {
        "renderId": "={{ $json.id }}",
        "operation": "retrieveRender",
        "requestOptions": {}
      },
      "credentials": {
        "templatedApi": {
          "id": "N8DKDKLktjraHiaQ",
          "name": "Templated account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3b65e073-31be-4bcf-bcf2-f126a3199ca7",
      "name": "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": {
          "id": "N8DKDKLktjraHiaQ",
          "name": "Templated account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1f2550f0-076a-4f7d-9b88-f84767527a9e",
      "name": "ファイルダウンロード中",
      "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": "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": {
          "id": "YlIXFU6zUDsqwmRG",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "9e85c26f-b85a-49a0-89b0-97743e5dcdd9",
      "name": "📋 ワークフロー概要",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3120,
        784
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 652,
        "content": "# 🚀 Automate YouTube thumbnail creation\n\n### 🎥 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✅ Extract video metadata from YouTube API\n✅ Generate custom thumbnail using [templated.io](https://templated.io/?utm_campaign=drfiras)\n✅ Store thumbnail in Google Drive\n✅ Log activity in Google Sheets\n✅ Create AI-powered social media posts\n✅ Publish to LinkedIn, Facebook, and Twitter\n✅ Send notifications via Email and Telegram"
      },
      "typeVersion": 1
    },
    {
      "id": "f15bdc4e-5493-4de8-b3b7-66d3e0fbbe01",
      "name": "🔧 ステップ1: 設定",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        784
      ],
      "parameters": {
        "color": 4,
        "width": 1680,
        "height": 270,
        "content": "## 📤 STEP 1: 📱 Telegram Trigger: Receives YouTube URLs from users\n\n⚙️ Workflow Configuration: Central hub for all API keys and settings\n\nRequired fields:\n• youtubeApiKey - Get from Google Cloud Console\n• templatedApiKey - Get from [templated.io](https://templated.io/?utm_campaign=drfiras) dashboard\n• templatedTemplateId - Your thumbnail template ID\n• googleDriveFolderId - Target folder for thumbnails\n• googleSheetsId - Spreadsheet for logging\n• emailRecipient - Notification email address\n• blotatoApiKey - Blotato API credentials\n• linkedinAccountId, facebookPageId, twitterAccountId"
      },
      "typeVersion": 1
    },
    {
      "id": "84d95f0c-9c9f-4e23-9161-aa3631a6c27b",
      "name": "🎨 ステップ3: サムネイル生成",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        1072
      ],
      "parameters": {
        "color": 5,
        "width": 1680,
        "height": 264,
        "content": "## 📤 STEP 2: 🎨 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⏳ Wait for Rendering: Pauses workflow for 5 minutes \nto allow [templated.io](https://templated.io/?utm_campaign=drfiras) to complete thumbnail generation\n\n⬇️ 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": "📢 ステップ5: 通知",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        1360
      ],
      "parameters": {
        "color": 2,
        "width": 1680,
        "height": 264,
        "content": "## 📤 STEP 3: 📧 Send Gmail: Sends email notification with:\n• Subject: YouTube Thumbnail Generated + video title\n• HTML body with video details\n• Thumbnail attachment\n• Google Drive link\n\n☁️ Upload to Google Drive: Uploads thumbnail to specified \n\n💬 Send Telegram Notification: Sends thumbnail with:\n• Video title\n• Google Drive link\n• Success confirmation message"
      },
      "typeVersion": 1
    },
    {
      "id": "844d603f-3246-48da-a899-6e30022df65e",
      "name": "⚙️ インストールガイド",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3120,
        1456
      ],
      "parameters": {
        "color": 7,
        "width": 402,
        "height": 448,
        "content": "📋 INSTALLATION CHECKLIST\n\n1️⃣ Get YouTube Data API v3 key from Google Cloud Console\n2️⃣ Create [templated.io](https://templated.io/?utm_campaign=drfiras) account and get API key + template ID\n3️⃣ Set up Telegram bot using @BotFather\n4️⃣ Create Google Drive folder and copy folder ID from URL\n5️⃣ Create Google Sheets with columns: Date, Video ID, Video URL, Title, Thumbnail Link, Status\n6️⃣ Get Blotato API key from dashboard\n7️⃣ Connect social media accounts to Blotato and get account IDs\n8️⃣ Fill all values in Workflow Configuration node\n9️⃣ Test with a YouTube URL via Telegram\n\n## 📬 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)  / [🚀 Mes Ateliers n8n  ](https://hotm.art/formation-n8n)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1579f6a0-8326-4c06-b5bf-29c0b1d0fafd",
      "name": "ステップ5 - 公開",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3536,
        1648
      ],
      "parameters": {
        "color": 5,
        "width": 1692,
        "height": 260,
        "content": "## 📤 STEP 4: PUBLISHING\n\n### Install the Blotato [Blotato](https://blotato.com/?ref=firas) Node in n8n (Community Nodes)\n1. In n8n, open **Settings → Community Nodes**.  \n2. Click **Install**, then add: `@blotato/n8n-nodes-blotato`.  \n3. Log in to **Blotato**.  \n4. Go to **Settings → API Keys**.  \n5. In n8n → **Credentials → New**.  \n6. Choose **Blotato API** \n(provided by the community node you installed).  "
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "387ca33f-5a76-458f-a9f2-81ff3af75d1b",
  "connections": {
    "caadaf4e-8b06-41b6-950c-41846f684915": {
      "main": [
        []
      ]
    },
    "9d78b633-b9d3-47a4-bcd7-0e48739cf0eb": {
      "main": [
        []
      ]
    },
    "7ea4143c-b953-4430-908b-e7b13a8ff7eb": {
      "main": [
        [
          {
            "node": "e52e1427-e362-4731-9a4c-92a5e4610687",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "06b1aa18-c78f-4d52-9ddb-6532eae175f4": {
      "main": [
        []
      ]
    },
    "7bda8d47-fc97-4372-a447-c23bc0bd3c8f": {
      "main": [
        [
          {
            "node": "0cc8b6fe-9fe9-41ac-aa66-4a90e1995f70",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "41092605-3611-4017-828a-3c7bb41a2eb6": {
      "main": [
        [
          {
            "node": "dec01d59-d7a5-4a53-9971-e62a276cbbfb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1f2550f0-076a-4f7d-9b88-f84767527a9e": {
      "main": [
        [
          {
            "node": "ca6a5f90-4174-42dc-a4f5-f1c14d4f2f40",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6f6ed14b-0e3c-45e3-8e78-72cc4748db90": {
      "main": [
        [
          {
            "node": "0b9bc493-3327-429e-88d8-4de803f4c800",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "17b9ee87-c823-4eab-9f6a-63cd3926ea2e": {
      "main": [
        [
          {
            "node": "1f2550f0-076a-4f7d-9b88-f84767527a9e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0cc8b6fe-9fe9-41ac-aa66-4a90e1995f70": {
      "main": [
        [
          {
            "node": "6f6ed14b-0e3c-45e3-8e78-72cc4748db90",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f391676c-8826-4a3e-b19a-2e58c7e7c796": {
      "main": [
        [
          {
            "node": "17b9ee87-c823-4eab-9f6a-63cd3926ea2e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fc02c5c7-c022-47fd-9c1a-44e6b76df0a1": {
      "main": [
        [
          {
            "node": "7ea4143c-b953-4430-908b-e7b13a8ff7eb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b5ee3daa-64ce-4782-837d-142bc5ee3c77": {
      "main": [
        [
          {
            "node": "5210d570-ac35-4175-b783-af582160befa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ca6a5f90-4174-42dc-a4f5-f1c14d4f2f40": {
      "main": [
        [
          {
            "node": "fc02c5c7-c022-47fd-9c1a-44e6b76df0a1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dec01d59-d7a5-4a53-9971-e62a276cbbfb": {
      "main": [
        [
          {
            "node": "7bda8d47-fc97-4372-a447-c23bc0bd3c8f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b9bc493-3327-429e-88d8-4de803f4c800": {
      "main": [
        [
          {
            "node": "3b65e073-31be-4bcf-bcf2-f126a3199ca7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5210d570-ac35-4175-b783-af582160befa": {
      "main": [
        [
          {
            "node": "9d78b633-b9d3-47a4-bcd7-0e48739cf0eb",
            "type": "main",
            "index": 0
          },
          {
            "node": "caadaf4e-8b06-41b6-950c-41846f684915",
            "type": "main",
            "index": 0
          },
          {
            "node": "06b1aa18-c78f-4d52-9ddb-6532eae175f4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e52e1427-e362-4731-9a4c-92a5e4610687": {
      "main": [
        [
          {
            "node": "b5ee3daa-64ce-4782-837d-142bc5ee3c77",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3b65e073-31be-4bcf-bcf2-f126a3199ca7": {
      "main": [
        [
          {
            "node": "f391676c-8826-4a3e-b19a-2e58c7e7c796",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

上級 - コンテンツ作成, マルチモーダルAI

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

関連ワークフロー

💥 NanoBanana、Seedream 4、ChatGPT Image、Veo 3 を使って動画広告を自動化 - VIDEO
AI(NanoBanana、Seedream、GPT-4o、Veo 3)を使って動画広告キャンペーンを自動化し公開
Set
Code
Wait
+
Set
Code
Wait
63 ノードDr. Firas
コンテンツ作成
ウイルスの TikTok 動画ジェネレーター:VEED バーチャルアバターで UGC 動画を自動作成
VEED.io AIボーティング、ElevenLabs、GPT-4を使用してTikTok動画を自動作成
Set
Code
Wait
+
Set
Code
Wait
35 ノードDr. Firas
コンテンツ作成
💥 HeyGen II - 私をクローン - アイデアからリリースまで:YouTube、TikTok、Instagram向けのChatGPT-5ビデオ自動化 - ビデオ
HeyGen、GPT-5、そしてソーシャル自動投稿を使って、音声入力による動画制作を自動化する
If
Set
Wait
+
If
Set
Wait
41 ノードDr. Firas
コンテンツ作成
💥 HeyGen - アイデアから公開まで:YouTube、TikTok、Instagram 向けの GPT-5 動画自動化 - 動画
GPT-5 を使って AI バーチャルビデオを生成し、ソーシャルメディアプラットフォームに投稿する
If
Set
Wait
+
If
Set
Wait
41 ノードDr. Firas
コンテンツ作成
💥NanoBananaとVEO3でAIウイルス動画を作成し、BlotatoでSNSに共有 - 動画
NanoBananaとVEO3でAIウイルス動画を生成し、BlotatoでSNSで共有する
Set
Code
Wait
+
Set
Code
Wait
47 ノードDr. Firas
その他
💥 Blotato と Sora 2 を使用した電商向け UGC 広告動画生成
电商向けにOpenAI、Sora 2、BlotatoでUGCプロモーション動画生成
If
Set
Code
+
If
Set
Code
34 ノードDr. Firas
コンテンツ作成
ワークフロー情報
難易度
上級
ノード数25
カテゴリー2
ノードタイプ13
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

作成者
Dr. Firas

Dr. Firas

@drfiras

Automation expert and certified trainer. I create hands-on courses to master automation with n8n. Contact me to access my exclusive training and start building powerful workflows today. 🚀

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34