This workflow follows the Chainllm → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "SCUbdpVPX4USbQmr",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "youtube chapter generator",
"tags": [
{
"id": "637Ga13eORejFbTG",
"name": "youtube",
"createdAt": "2025-04-06T16:41:11.086Z",
"updatedAt": "2025-04-06T16:41:11.086Z"
},
{
"id": "tfcUyZ2pGsRZFcje",
"name": "chapters",
"createdAt": "2025-04-06T16:41:28.633Z",
"updatedAt": "2025-04-06T16:41:28.633Z"
}
],
"nodes": [
{
"id": "104fa4ce-cd86-4fff-b31c-0ef37fba6d93",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-800,
-120
],
"parameters": {},
"typeVersion": 1
},
{
"id": "c3b45480-3098-40f9-a77f-ada54481b590",
"name": "Get Caption ID",
"type": "n8n-nodes-base.httpRequest",
"position": [
-200,
-120
],
"parameters": {
"url": "=https://www.googleapis.com/youtube/v3/captions?part=snippet&videoId={{ $json.id }}",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "youTubeOAuth2Api"
},
"credentials": {
"youTubeOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "fe08adc4-e6ef-47ae-a946-1e6d5a85e10e",
"name": "Get Captions",
"type": "n8n-nodes-base.httpRequest",
"position": [
20,
-120
],
"parameters": {
"url": "=https://www.googleapis.com/youtube/v3/captions/{{ $json.items[0].id }}?tfmt=srt",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "youTubeOAuth2Api"
},
"credentials": {
"youTubeOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "0e15f334-9ff8-4a7e-85a9-4cf8cf10ea55",
"name": "Extract Captions",
"type": "n8n-nodes-base.extractFromFile",
"position": [
240,
-120
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "af99a919-7ebc-4a6c-80be-83e2ffa68d05",
"name": "Structured Captions",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
640,
100
],
"parameters": {
"jsonSchemaExample": "{\n\t\"description\": \"California\"\n\t\n}"
},
"typeVersion": 1.2
},
{
"id": "414a41a2-0715-4a57-a606-9f3678b2472a",
"name": "Get Video Meta Data",
"type": "n8n-nodes-base.youTube",
"position": [
-420,
-120
],
"parameters": {
"options": {},
"videoId": "={{ $json.video_id }}",
"resource": "video",
"operation": "get"
},
"credentials": {
"youTubeOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7304d9b1-5956-41c3-b78a-2c409d0aa726",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
460,
100
],
"parameters": {
"options": {},
"modelName": "models/gemini-1.5-flash-8b-exp-0924"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "867a6ad6-0712-4fbf-97fd-ab054b783172",
"name": "Set Video ID",
"type": "n8n-nodes-base.set",
"position": [
-640,
-120
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "568762f7-e496-4550-8567-d49e2ce1676d",
"name": "video_id",
"type": "string",
"value": "r1wqsrW2vmE"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "dcd0c9d7-1a69-45e8-98e9-b7cf7d12734e",
"name": "Update Chapters",
"type": "n8n-nodes-base.youTube",
"position": [
940,
-120
],
"parameters": {
"title": "={{ $('Get Video Meta Data').item.json.snippet.title }}",
"videoId": "={{ $('Get Captions').item.json.items[0].snippet.videoId }}",
"resource": "video",
"operation": "update",
"categoryId": "22",
"regionCode": "US",
"updateFields": {
"description": "={{ $json.output.description }}\nChapters\n{{ $json.output.description }}"
}
},
"credentials": {
"youTubeOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "916629c4-6e49-4432-88e8-626748cb3d24",
"name": "Tag Chapters in Description",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
460,
-120
],
"parameters": {
"text": "=This is an srt format data. please classify this data into chapters\nbased upon this transcript \n{{ $json.data }}\n{\n\"description\":\"00:00 Introduction\n02:15 Topic One\n05:30 Topic Two\n10:45 Conclusion\"\n}\n",
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "b0f56d68-b787-4ccc-8bb5-bdb5b04c3ae4",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-680,
-200
],
"parameters": {
"width": 1040,
"height": 440,
"content": "\n## Get Captions"
},
"typeVersion": 1
},
{
"id": "0bcee6b5-0e8b-4f85-8f83-c829e785467a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
378,
-200
],
"parameters": {
"color": 4,
"width": 420,
"height": 440,
"content": "## Generate Chapters\n"
},
"typeVersion": 1
},
{
"id": "0f90f6ec-2154-4945-b262-6531fef2334f",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
820,
-200
],
"parameters": {
"color": 6,
"width": 440,
"height": 440,
"content": "## Update Description\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "27125160-7c64-4431-b243-832c1ae29d29",
"connections": {
"Get Captions": {
"main": [
[
{
"node": "Extract Captions",
"type": "main",
"index": 0
}
]
]
},
"Set Video ID": {
"main": [
[
{
"node": "Get Video Meta Data",
"type": "main",
"index": 0
}
]
]
},
"Get Caption ID": {
"main": [
[
{
"node": "Get Captions",
"type": "main",
"index": 0
}
]
]
},
"Extract Captions": {
"main": [
[
{
"node": "Tag Chapters in Description",
"type": "main",
"index": 0
}
]
]
},
"Get Video Meta Data": {
"main": [
[
{
"node": "Get Caption ID",
"type": "main",
"index": 0
}
]
]
},
"Structured Captions": {
"ai_outputParser": [
[
{
"node": "Tag Chapters in Description",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Tag Chapters in Description",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Tag Chapters in Description": {
"main": [
[
{
"node": "Update Chapters",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Set Video ID",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googlePalmApiyouTubeOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow effortlessly generates chapter timestamps for your YouTube videos, saving hours of manual editing by automatically analysing captions and metadata to create a structured outline. It's perfect for content creators and video producers who want to boost viewer engagement and SEO without technical hassle. The key step involves feeding the video's captions into Google Gemini's AI model, which intelligently identifies natural breaks and formats them into ready-to-use chapters, integrated seamlessly with YouTube's API for metadata retrieval.
Use this workflow whenever you upload a new video with captions and need quick chapters to enhance watch time, especially for educational or tutorial content. Avoid it for short videos under five minutes or those without captions, as it relies on textual analysis. Common variations include adapting the AI prompt for custom chapter styles or chaining it with social media nodes to auto-post the updated video description.
About this workflow
youtube chapter generator. Uses manualTrigger, httpRequest, extractFromFile, outputParserStructured. Event-driven trigger; 13 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Extract & Summarize Bing Copilot Search Results with Gemini AI and Bright Data. Uses manualTrigger, lmChatGoogleGemini, documentDefaultDataLoader, textSplitterRecursiveCharacterTextSplitter. Event-dri
Extract & Summarize Yelp Business Review with Bright Data and Google Gemini. Uses manualTrigger, stickyNote, httpRequest, lmChatGoogleGemini. Event-driven trigger; 12 nodes.
Wait Schedule. Uses googleDrive, lmChatGoogleGemini, outputParserStructured, stickyNote. Scheduled trigger; 34 nodes.
High-Level Service Page SEO Blueprint Report. Uses formTrigger, splitInBatches, httpRequest, lmChatGoogleGemini. Event-driven trigger; 33 nodes.
Brand Content Extract, Summarize & Sentiment Analysis with Bright Data. Uses manualTrigger, stickyNote, chainLlm, informationExtractor. Event-driven trigger; 23 nodes.