N
n8n Store
Workflow Market
Video Transcript Search and Q&A with VLM Run, GPT-4 & Google Workspace

Video Transcript Search and Q&A with VLM Run, GPT-4 & Google Workspace

by atik0 views

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
PriceGratuit
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
          }
        ]
      ]
    }
  }
}

相关工作流