💥 从视频链接自动化创建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
使用的节点 (25)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 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 Trigger",
"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": "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
],
"webhookId": "853c0ca8-14b7-4854-878f-89d5787e9fc8",
"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": {
"id": "odf7JAwyqVFVZBhQ",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "7ea4143c-b953-4430-908b-e7b13a8ff7eb",
"name": "Send 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": "Send Telegram Notification",
"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 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": {
"id": "QmtwfFk8iBkuCXOX",
"name": "n8n free OpenAI API credits"
}
},
"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": {
"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 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 — 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": "Download Thumbnail",
"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": "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": {
"id": "N8DKDKLktjraHiaQ",
"name": "Templated account"
}
},
"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": {
"id": "YlIXFU6zUDsqwmRG",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "9e85c26f-b85a-49a0-89b0-97743e5dcdd9",
"name": "📋 WORKFLOW OVERVIEW",
"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": "🔧 STEP 1: Configuration",
"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": "🎨 STEP 3: Thumbnail Generation",
"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": "📢 STEP 5: Notifications",
"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": "⚙️ INSTALLATION GUIDE",
"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": "Step 5 - Publishing",
"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": {
"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
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
💥 使用NanoBanana、Seedream 4、ChatGPT Image和Veo 3自动化视频广告 - VIDE
使用AI(NanoBanana、Seedream、GPT-4o、Veo 3)自动化和发布视频广告活动
Set
Code
Wait
+16
63 节点Dr. Firas
内容创作
病毒式 TikTok 视频生成器:使用 VEED 虚拟形象自动创建 UGC 视频
使用 VEED.io AI 虚拟形象、ElevenLabs 和 GPT-4 自动创建 TikTok 视频
Set
Code
Wait
+9
35 节点Dr. Firas
内容创作
💥 HeyGen II - 克隆我 - 从想法到发布:适用于 YouTube、TikTok 和 Instagram 的 GPT-5 视频自动化 - 视频
使用 HeyGen、GPT-5 和社交发布自动化语音输入视频创作
If
Set
Wait
+13
41 节点Dr. Firas
内容创作
💥 HeyGen - 从想法到发布:用于 YouTube、TikTok 和 Instagram 的 GPT-5 视频自动化 - 视频
使用 GPT-5 生成 AI 虚拟形象视频并发布至社交媒体平台
If
Set
Wait
+13
41 节点Dr. Firas
内容创作
💥 使用NanoBanana和VEO3生成AI病毒视频,通过Blotato分享到社交平台 - 视频
使用NanoBanana和VEO3生成AI病毒视频,通过Blotato在社交媒体分享
Set
Code
Wait
+13
47 节点Dr. Firas
杂项
💥 使用 Blotato 和 Sora 2 为电商生成 UGC 推广视频
使用 OpenAI、Sora 2 和 Blotato 为电商生成 UGC 推广视频
If
Set
Code
+8
34 节点Dr. Firas
内容创作
工作流信息
难度等级
高级
节点数量25
分类2
节点类型13
作者
Dr. Firas
@drfirasAutomation 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 查看 →
分享此工作流