
Video Transcript Search and Q&A with VLM Run, GPT-4 & Google Workspace
Description
Categories
π€ AI & Machine Learning
Nodes Used
n8n-nodes-base.webhookn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.googleDriven8n-nodes-base.googleSheets@n8n/n8n-nodes-langchain.agentn8n-nodes-base.googleSheetsTool
PriceKostenlos
Views0
Last Updated11/28/2025
workflow.json
{
"meta": {
"instanceId": "96d35e452e0d9a182973416b7532cfc5643239aaaa764a5bf74d52ca84f4a35c",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "a85ebcf0-5f2a-4ee7-8c68-b00197810f4d",
"name": "Google Drive Trigger",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
0,
0
],
"parameters": {
"event": "fileCreated",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1E8rvLEWKguorMT36yCD1jY78G0u8g6g7",
"cachedResultUrl": "https://drive.google.com/drive/folders/1E8rvLEWKguorMT36yCD1jY78G0u8g6g7",
"cachedResultName": "test_data"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "oCzY5bzObKMMfjpu",
"name": "Google Drive account 3"
}
},
"typeVersion": 1
},
{
"id": "a87e6ce7-081c-4482-9372-33dad10d5b3b",
"name": "Download file",
"type": "n8n-nodes-base.googleDrive",
"position": [
208,
0
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"binaryPropertyName": "data"
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "oCzY5bzObKMMfjpu",
"name": "Google Drive account 3"
}
},
"typeVersion": 3
},
{
"id": "56911f23-a3e2-4e86-94ab-8e373d6676be",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
656,
304
],
"webhookId": "5a5e6401-bb33-4801-9019-8c996a6bb293",
"parameters": {
"mode": "webhook",
"public": true,
"options": {}
},
"typeVersion": 1.1
},
{
"id": "e15b3d90-09be-4abd-90f9-2bdf68d93481",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
944,
304
],
"parameters": {
"options": {
"systemMessage": "You are a videoβQA assistant. Use the Getrows tool to fetch the relevant transcript segments for the userβs question, then answer based only on those segments, check the sheets before replying\n"
}
},
"typeVersion": 2
},
{
"id": "390f8b2f-2fa6-40f4-8e99-31bb8ab339d4",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
928,
512
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "gpt-4.1"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "WqqkexJ7QGbexoAz",
"name": "OpenAi account 4"
}
},
"typeVersion": 1.2
},
{
"id": "cff805f1-caaa-46c3-9f11-21fa534baa9b",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1040,
0
],
"parameters": {
"columns": {
"value": {
"Data": "={{ $json.body[0].body.response }}",
"Video Namae": "={{ $json.body[0].body.id }}"
},
"schema": [
{
"id": "Video Namae",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Video Namae",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Data",
"type": "string",
"display": true,
"required": false,
"displayName": "Data",
"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/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit?usp=drivesdk",
"cachedResultName": "video storing"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "lxV2oXYXJq9hllrs",
"name": "Google Sheets account 5"
}
},
"typeVersion": 4.7
},
{
"id": "a4a451fd-d3c3-4f5b-bd26-b318e488b802",
"name": "Get row(s) in sheet in Google Sheets",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
1104,
496
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1N8T3rF6DvDKQnRA93Hk-bvjhIu-nu89YveqEBLY9Lp4/edit?usp=drivesdk",
"cachedResultName": "video storing"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "lxV2oXYXJq9hllrs",
"name": "Google Sheets account 5"
}
},
"typeVersion": 4.7
},
{
"id": "2a17a22e-a9d3-4068-8f41-e8861e5e4a8e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-528,
-384
],
"parameters": {
"color": 7,
"width": 432,
"height": 1072,
"content": "## π₯ Video Transcription + Q&A Pipeline\n\n**Overview:**\nNew files in a Google Drive folder trigger an auto-download. Videos are sent to VLM Run for transcription with an async callback. The webhook receives finished transcripts and stores them in a Google Sheet. A chat entry point lets users ask questions. The AI Agent fetches relevant rows from the sheet and answers strictly from those segments.\n\n**Key Features:**\n* π Watches a specific Drive folder and reacts on file created\n* β¬οΈ Secure file download to pass binary to processing\n* π§ VLM Run async transcription with callback URL\n* π§Ύ Webhook captures job results and appends to Google Sheets\n* π¬ Chat trigger for user questions about any processed video\n* π Agent reads transcript rows via Sheets tool then answers from those rows only\n\n\n**Perfect for:**\n* Team knowledge capture from recorded calls\n* Course or webinar indexing with searchable Q&A\n* Creator workflows to turn videos into notes and FAQs\n* Support teams generating quick answers from demos\n\n\n**Requirements:**\n* Google Drive OAuth2 for trigger and download\n* VLM Run API with domain video.transcription\n* Public webhook URL reachable by VLM Run callback\n* Google Sheets OAuth2 for append and read\n* OpenAI Chat model connected to the Agent\n* A target Google Sheet with columns like Video Name and Data\n\n"
},
"typeVersion": 1
},
{
"id": "aed461ed-fca9-4058-90cf-a76ca12909ae",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
-384
],
"parameters": {
"color": 7,
"width": 432,
"height": 560,
"content": "## π Input Processing\n\n**Monitors & downloads video files from Google Drive.**\n\n**Process:**\n1. Google Drive Trigger watches the chosen folder every minute\n2. On new file, pass file id to Download file\n3. Download as binary under property data\n\n\n**Supported Formats:**\n* Common video formats handed to VLM Run\n* Large files handled via async job with callback\n\n"
},
"typeVersion": 1
},
{
"id": "c08cc4c2-4a38-403b-aa15-aac669f5a765",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
-384
],
"parameters": {
"width": 432,
"height": 560,
"content": "## π€ VLM Run Execute Agent\n\n**Uses VLM Run to transcribe video content asynchronously.**\n\n\n**Extracts:**\n* Full transcript or structured segments as returned by VLM Run\n\n\n**Features:**\n* Async processing with status managed by callback\n* Resilient to long videos and variable quality audio\n* Callback hits /transcript-video webhook on completion"
},
"typeVersion": 1
},
{
"id": "26167bc6-779a-4ad3-91e0-ed511a4b1a11",
"name": "VLM Run for Video Processing",
"type": "@vlm-run/n8n-nodes-vlmrun.vlmRun",
"position": [
448,
0
],
"parameters": {
"domain": "video.transcription",
"operation": "video",
"callbackUrl": "https://playground.attensys.ai/webhook/transcript-video",
"processAsynchronously": true
},
"credentials": {
"vlmRunApi": {
"id": "7JF2kdNzjhKZsHGg",
"name": "VLM Run account 2"
}
},
"typeVersion": 1
},
{
"id": "bc679495-9f40-4453-9552-6d4cb54bfa5b",
"name": "Receives JSON Data",
"type": "n8n-nodes-base.webhook",
"position": [
688,
0
],
"webhookId": "91fda1ba-ebe7-4bca-af29-3315bdc6fe77",
"parameters": {
"path": "transcript-video",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "834078ed-48c5-42b2-8d40-24e60b8c0ce9",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
864,
-384
],
"parameters": {
"color": 7,
"width": 432,
"height": 560,
"content": "## π Data Storage\n\n**Stores transcript output in Google Sheets for retrieval and Q&A.**\n\n\n**Features:**\n* Appends a new row per completed job\n* Columns include Data for transcript and Video Name for id\n* Sheet is the single source for the Q&A agent\n"
},
"typeVersion": 1
},
{
"id": "18281c54-6103-4060-a3f4-17d1afa7ded0",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
208
],
"parameters": {
"color": 7,
"width": 1360,
"height": 480,
"content": "\n## π¬ Chat Q&A Agent\n\n**Turns the sheet into a knowledge base for natural questions.**\n\n**Flow:**\n* Chat trigger receives a user question\n* Agent uses Get rows in Google Sheets to pull relevant segments\n* OpenAI Chat Model composes an answer only from fetched rows\n* System message enforces citation discipline to the sheet content\n\n\n**Notes and Good Practices:**\n* Use clear video naming so Video Name maps to the right transcript\n* Consider adding timestamps in the Data field for better retrieval\n* Log webhook deliveries and store job ids to avoid duplicates\n* Validate that body[0].body.response exists before appending\n* Add simple retries for append and for transient webhook errors\n"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Download file": {
"main": [
[
{
"node": "VLM Run for Video Processing",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Receives JSON Data": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Google Drive Trigger": {
"main": [
[
{
"node": "Download file",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet in Google Sheets": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}