
YouTube Video Summaries with GPT-4o, Slack Approvals & Reddit Posting
描述
分类
🤖 AI & Machine Learning📢 Marketing
使用的节点
n8n-nodes-base.coden8n-nodes-base.slackn8n-nodes-base.redditn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNote
价格免费
浏览量0
最后更新11/28/2025
workflow.json
{
"meta": {
"instanceId": "5aaf4236c70e34e423fbdb2c7b754d19253a933bb1476d548f75848a01e473cf"
},
"nodes": [
{
"id": "dc53327e-392e-44db-b633-657f1edbad9d",
"name": "YouTube RSS Trigger",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"position": [
2120,
500
],
"parameters": {
"feedUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCf3dc-Y3k5vBTCVpPCAfG6g",
"pollTimes": {
"item": [
{}
]
}
},
"typeVersion": 1
},
{
"id": "d0665878-6c71-4994-9e24-410d6c8dfe94",
"name": "Extract Channel ID",
"type": "n8n-nodes-base.code",
"position": [
2340,
500
],
"parameters": {
"jsCode": "// 'items' is already defined in n8n and contains incoming data\n\nreturn items.map(item => {\n const link = item.json.link; // e.g., \"https://www.youtube.com/watch?v=Y0DYmRnfHlc\"\n const videoId = link.split(\"v=\")[1].split(\"&\")[0];\n return {\n json: {\n videoId,\n },\n };\n});\n"
},
"typeVersion": 2
},
{
"id": "8b22e2ec-9710-4c61-8a4b-bf86fb10db68",
"name": "Fetch Video Details",
"type": "n8n-nodes-base.httpRequest",
"position": [
2720,
500
],
"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": "YOUR_API_KEY"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "d3bc260c-ec32-44ac-9cb5-22cefe3dd124",
"name": "Summarize Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3140,
500
],
"parameters": {
"text": "=Title: {{ $json.items[0].snippet.title }}\nDescription: {{ $json.items[0].snippet.description }}",
"options": {
"systemMessage": "You are a YouTube video summarizer. If the description is not available just tell that it is not availablee. Summarize the following video description"
},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "6ffc23a3-5a6d-4333-b2b5-5ca89d6f0003",
"name": "OpenAI GPT Summary Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
3100,
720
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "028dbd84-3e46-4a88-8c04-33fa4c14db73",
"name": "Store results to Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
3600,
500
],
"parameters": {
"columns": {
"value": {
"Title": "={{ $('Fetch Video Details').item.json.items[0].snippet.title }}",
"Summary": "={{ $json.output }}",
"Video URL": "={{ $('YouTube RSS Trigger').item.json.link }}",
"Video Published Date": "={{ $('YouTube RSS Trigger').item.json.isoDate }}"
},
"schema": [
{
"id": "Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Video URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video Published Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Video Published Date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ImEKVtyBlxVvXzWKQw4wGbp4IzT_L2EUVqVj5txqY8A/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1ImEKVtyBlxVvXzWKQw4wGbp4IzT_L2EUVqVj5txqY8A",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ImEKVtyBlxVvXzWKQw4wGbp4IzT_L2EUVqVj5txqY8A/edit?usp=drivesdk",
"cachedResultName": "Youtube video summarizer"
}
},
"typeVersion": 4.5
},
{
"id": "a8583d95-e8da-41e3-ac2b-1f33cdedfd71",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
2060,
20
],
"parameters": {
"color": 3,
"width": 440,
"height": 680,
"content": "### 🔹 Section 1: **Trigger & Metadata Extraction**\n\n#### 1. `Trigger: New YouTube Video via RSS`\n\n* **Type**: RSS Trigger\n* **Purpose**: Listens for new videos published on a YouTube channel using its RSS feed.\n* **Output**: Latest video feed item including URL, title, and publication date.\n\n#### 2. `Function: Extract Channel ID from RSS`\n\n* **Type**: Function Node\n* **Purpose**: Parses the video URL from the RSS feed and extracts the YouTube Channel ID or Video ID.\n* **Why**: Required to fetch full video metadata using YouTube Data API in the next step.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "8629cc8d-9f91-4a02-a243-02255338cc02",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
220,
-120
],
"parameters": {
"color": 4,
"width": 1300,
"height": 320,
"content": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n [email protected]\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
},
"typeVersion": 1
},
{
"id": "f423c1f0-4a5d-4c5c-a32d-e2e4818de5a8",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
220,
220
],
"parameters": {
"color": 4,
"width": 1289,
"height": 2378,
"content": "# 📺 YouTube Video Summary Workflow – Documentation\n\n## 🧩 Overview\n\nThis n8n workflow automates the process of:\n\n* Monitoring a YouTube channel for new videos via RSS\n* Extracting video metadata\n* Summarizing the video description using GPT\n* Logging the summary in a Google Sheet\n* Requesting human approval via Slack\n* Posting the approved summary to a Discord channel\n\n---\n\n## 🔗 Workflow Breakdown\n\n### 🔹 Group 1: **Trigger & Metadata Extraction**\n\n#### 1. `Trigger: New YouTube Video via RSS`\n\n* **Type**: RSS Trigger\n* **Purpose**: Listens for new videos published on a YouTube channel using its RSS feed.\n* **Output**: Latest video feed item including URL, title, and publication date.\n\n#### 2. `Function: Extract Channel ID from RSS`\n\n* **Type**: Function Node\n* **Purpose**: Parses the video URL from the RSS feed and extracts the YouTube Channel ID or Video ID.\n* **Why**: Required to fetch full video metadata using YouTube Data API in the next step.\n\n---\n\n### 🔹 Group 2: **Video Metadata Retrieval**\n\n#### 3. `HTTP Request: Fetch Video Metadata from YouTube API`\n\n* **Type**: HTTP Request Node\n* **Purpose**: Fetches detailed video data like description, title, and published date using the YouTube Data API.\n* **Key Output Fields**:\n\n * `videoTitle`\n * `videoDescription`\n * `videoPublishedAt`\n * `videoURL`\n\n---\n\n### 🔹 Group 3: **AI Summary Generation**\n\n#### 4. `Agent: Summarize Video Description (GPT)`\n\n* **Type**: OpenAI GPT Agent Node\n* **Purpose**: Uses OpenAI GPT model to generate a concise summary from the video description.\n* **Model Used**: OpenAI GPT (e.g., gpt-4 or gpt-3.5)\n* **Inputs**: Raw video description\n* **Outputs**: Clean, readable summary\n\n---\n\n### 🔹 Group 4: **Storage & Human Approval**\n\n#### 5. `Google Sheets: Append Summary Record`\n\n* **Type**: Google Sheets Node\n* **Purpose**: Logs each video’s summary to a Google Sheet.\n* **Fields Stored**:\n\n * `Title`\n * `Video URL`\n * `Summary`\n * `Video Published Date`\n\n#### 6. `Slack: Send Summary for Approval`\n\n* **Type**: Slack (sendAndWait) Node\n* **Purpose**: Sends the summary to a Slack channel for human review.\n* **Interactivity**: Waits for a response (approve or reject) from the user.\n\n---\n\n### 🔹 Group 5: **Final Publishing**\n\n#### 7. `Reddit: Post Approved Summary`\n\n* **Type**: Reddit Post Node\n* **Purpose**: Publishes the final approved summary to a specific Reddit subreddit.\n* **Condition**: Only posts if approved via Slack interaction.\n\n---\n\n## ✅ Benefits\n\n* **Automation**: Saves time by reducing manual video summarization.\n* **Human-in-the-loop**: Ensures quality control via Slack approval.\n* **Cross-platform updates**: Automatically updates both internal (Google Sheets) and external (Reddit) channels.\n\n---\n\n\n"
},
"typeVersion": 1
},
{
"id": "896302ec-7449-4cb7-a318-06c80d3bec0e",
"name": "Send Summary for Approval",
"type": "n8n-nodes-base.slack",
"position": [
3780,
500
],
"webhookId": "24d232e5-aaa6-49e4-b070-479d86ed0aee",
"parameters": {
"select": "channel",
"message": "=The summary of a video titled \"{{ $json.Title }}\" is given below:\n\n{{ $json.Summary }}",
"options": {
"appendAttribution": false
},
"channelId": {
"__rl": true,
"mode": "list",
"value": "C08TTV0CC3E",
"cachedResultName": "all-nathing"
},
"operation": "sendAndWait"
},
"typeVersion": 2.3
},
{
"id": "db3482aa-eb72-45fb-951b-8f979b092e7a",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2580,
120
],
"parameters": {
"color": 2,
"width": 380,
"height": 580,
"content": "### 🔹 Section 2: **Video Metadata Retrieval**\n\n#### 3. `HTTP Request: Fetch Video Metadata from YouTube API`\n\n* **Type**: HTTP Request Node\n* **Purpose**: Fetches detailed video data like description, title, and published date using the YouTube Data API.\n* **Key Output Fields**:\n\n * `videoTitle`\n * `videoDescription`\n * `videoPublishedAt`\n * `videoURL`\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "d7695161-f1fd-4ae2-95d7-471ce387842e",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
3040,
160
],
"parameters": {
"color": 4,
"width": 400,
"height": 700,
"content": "### 🔹 Section 3: **AI Summary Generation**\n\n#### 4. `Agent: Summarize Video Description (GPT)`\n\n* **Type**: OpenAI GPT Agent Node\n* **Purpose**: Uses OpenAI GPT model to generate a concise summary from the video description.\n* **Model Used**: OpenAI GPT (e.g., gpt-4 or gpt-3.5)\n* **Inputs**: Raw video description\n* **Outputs**: Clean, readable summary\n\n---\n\n\n"
},
"typeVersion": 1
},
{
"id": "36d3ed80-e31b-4154-b433-5fd2c5f37405",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
3520,
-100
],
"parameters": {
"color": 5,
"width": 400,
"height": 820,
"content": "### 🔹 Section 4: **Storage & Human Approval**\n\n#### 5. `Google Sheets: Append Summary Record`\n\n* **Type**: Google Sheets Node\n* **Purpose**: Logs each video’s summary to a Google Sheet.\n* **Fields Stored**:\n\n * `Title`\n * `Video URL`\n * `Summary`\n * `Video Published Date`\n\n#### 6. `Slack: Send Summary for Approval`\n\n* **Type**: Slack (sendAndWait) Node\n* **Purpose**: Sends the summary to a Slack channel for human review.\n* **Interactivity**: Waits for a response (approve or reject) from the user.\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "ef7f236c-0fa1-4049-889e-1eacbdef5bb2",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
4000,
220
],
"parameters": {
"color": 6,
"width": 320,
"height": 480,
"content": "### 🔹 Section 5: **Final Publishing**\n\n#### 7. `Reddit: Post Approved Summary`\n\n* **Type**: Reddit Post Node\n* **Purpose**: Publishes the final approved summary to a specific Reddit subreddit.\n* **Condition**: Only posts if approved via Slack interaction.\n\n---\n\n\n"
},
"typeVersion": 1
},
{
"id": "c942edf3-ed74-4fe8-970c-e9600b6912ce",
"name": "Publish To Reddit",
"type": "n8n-nodes-base.reddit",
"position": [
4100,
500
],
"parameters": {
"text": "={{ $('Store results to Google Sheet').item.json.Summary }}",
"title": "={{ $('Store results to Google Sheet').item.json.Title }}",
"subreddit": "Youtube"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Summarize Agent": {
"main": [
[
{
"node": "Store results to Google Sheet",
"type": "main",
"index": 0
}
]
]
},
"Extract Channel ID": {
"main": [
[
{
"node": "Fetch Video Details",
"type": "main",
"index": 0
}
]
]
},
"Fetch Video Details": {
"main": [
[
{
"node": "Summarize Agent",
"type": "main",
"index": 0
}
]
]
},
"YouTube RSS Trigger": {
"main": [
[
{
"node": "Extract Channel ID",
"type": "main",
"index": 0
}
]
]
},
"OpenAI GPT Summary Model": {
"ai_languageModel": [
[
{
"node": "Summarize Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Send Summary for Approval": {
"main": [
[
{
"node": "Publish To Reddit",
"type": "main",
"index": 0
}
]
]
},
"Store results to Google Sheet": {
"main": [
[
{
"node": "Send Summary for Approval",
"type": "main",
"index": 0
}
]
]
}
}
}