This workflow corresponds to n8n.io template #7954 — we link there as the canonical source.
This workflow follows the Chat Trigger → 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": "EnIaJOKCuqYJ8ul1",
"name": "Google Vertex AI Veo3",
"tags": [],
"nodes": [
{
"id": "6300d7f4-c714-43fe-9139-6864b6285847",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
416,
0
],
"parameters": {
"amount": 15
},
"typeVersion": 1.1
},
{
"id": "42ab0b46-93d2-40e7-8070-45e9db320ee0",
"name": "Poll for Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
624,
0
],
"parameters": {
"url": "<<<VERTEX_FETCH_OPERATION_URL>>>",
"method": "POST",
"options": {},
"jsonBody": "={\n \"operationName\": \"{{$json.name}}\"\n}\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleOAuth2Api"
},
"typeVersion": 4.2
},
{
"id": "aaf39750-83e5-4d47-a990-d81ba4bb976c",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
1088,
-16
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5836e9ec-261f-462f-bc00-c92df3aeb2b7",
"name": "b64",
"type": "string",
"value": "={{ $json.response.videos[0].bytesBase64Encoded }}"
},
{
"id": "5910d171-eb3f-421b-873c-a6b18fa78093",
"name": "mime",
"type": "string",
"value": "={{ $json.response.videos[0].mimeType }}"
},
{
"id": "494760a4-0ae1-4c23-978b-8797625ffd43",
"name": "filename",
"type": "string",
"value": "veo_sample_video"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b16e9bd2-9042-4b6a-a1fc-240cd31c2dd5",
"name": "Convert to File",
"type": "n8n-nodes-base.convertToFile",
"position": [
1296,
-16
],
"parameters": {
"options": {},
"operation": "toBinary",
"sourceProperty": "b64"
},
"typeVersion": 1.1
},
{
"id": "6d89bf29-5440-4c51-b12c-ed15f2fa418a",
"name": "Post Veo3 Fast",
"type": "n8n-nodes-base.httpRequest",
"position": [
192,
0
],
"parameters": {
"url": "<<<VERTEX_PREDICT_LONG_RUNNING_URL>>>",
"method": "POST",
"options": {},
"jsonBody": "={\n \"instances\": [{ \"prompt\": \"{{ $json.chatInput }}\" }],\n \"parameters\": {\n \"aspectRatio\": \"16:9\",\n \"durationSeconds\": 8,\n \"resolution\": \"720p\",\n \"sampleCount\": 1\n }\n}\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleOAuth2Api"
},
"typeVersion": 4.2
},
{
"id": "dafb335c-d7af-4942-836b-67a8c1388d95",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
832,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5de4dcc5-afd1-49ab-aa0e-c2c6ecf247e1",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b17e2101-cfb7-4446-a46c-389f49252158",
"name": "Wait1",
"type": "n8n-nodes-base.wait",
"position": [
800,
240
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "ab424258-b4e3-4532-b993-b42544402ca9",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-112,
0
],
"parameters": {
"options": {}
},
"typeVersion": 1.3
},
{
"id": "6ba0b8e4-0f65-4c95-8cad-4f1f95fee28c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
-256
],
"parameters": {
"width": 336,
"height": 800,
"content": "Chat Trigger"
},
"typeVersion": 1
},
{
"id": "ca396856-da6d-4449-9425-0d21dc2ceaa1",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
96,
-256
],
"parameters": {
"color": 4,
"width": 288,
"height": 800,
"content": "Post to Google Vertex AI (Veo3)"
},
"typeVersion": 1
},
{
"id": "b6b8292b-efa8-4cff-b98b-5690227c135d",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
-256
],
"parameters": {
"color": 5,
"width": 608,
"height": 800,
"content": "Poll Video Loop"
},
"typeVersion": 1
},
{
"id": "8080cbe5-6ac8-453f-8bd4-3dcae37b31ce",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1024,
-256
],
"parameters": {
"color": 6,
"width": 480,
"height": 800,
"content": "Download Binary"
},
"typeVersion": 1
},
{
"id": "c173d6c0-abed-4e18-975c-c325ac6b587c",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
-368
],
"parameters": {
"color": 7,
"width": 576,
"height": 912,
"content": "\ud83c\udfac Generate Videos from Chat with Google Vertex AI (Veo3)\n\nDescription\nTurn any text prompt into a short AI-generated video directly from an n8n chat. This workflow connects a chat trigger to Google Vertex AI\u2019s Veo3 model, sending your prompt as input and polling until the rendered video is ready. Once complete, the video is converted into a downloadable file you can use anywhere. Perfect for experimenting with AI-driven media or automating creative video generation inside your workflows.\n\nWatch step-by-step guide for these type of workflows here:\nwww.youtube.com/@automatewithmarc\n\nHow It Works\n\nChat Trigger \u2013 Start by typing your prompt into an n8n chat.\n\nPost to Vertex AI (Veo3) \u2013 Sends the prompt to the Veo3 API with parameters like aspect ratio, duration, and resolution.\n\nWait + Poll Loop \u2013 Repeatedly checks the operation status until the video is finished.\n\nIf + Edit Fields \u2013 Extracts the base64 video response and metadata.\n\nConvert to File \u2013 Turns the video into a binary file for download or use in further automations.\n\nWhy You\u2019ll Love It\n\n\u26a1 Generate custom AI videos in minutes.\n\n\ud83d\udde3\ufe0f Natural workflow \u2014 just type your idea in chat.\n\n\ud83c\udfa5 Flexible parameters \u2014 adjust resolution, aspect ratio, and duration.\n\n\ud83d\udd17 Ready for integration \u2014 feed the output into Google Drive, Slack, or any connected app.\n\nRequirements\n\nGoogle Cloud project with Vertex AI API enabled.\n\nGoogle OAuth credentials in n8n.\n\nn8n (Cloud or self-hosted)."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"connections": {
"If": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Poll for Video",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "Poll for Video",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
},
"Poll for Video": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Post Veo3 Fast": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Post Veo3 Fast",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Generate Videos from Chat with Google Vertex AI (Veo3) - Beginner Friendly
Source: https://n8n.io/workflows/7954/ — 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.
pfe-hunter-sophistique. Uses lmChatGroq, chatTrigger, chainLlm, httpRequest. Chat trigger; 24 nodes.
Use cases are many: Compare costs across different models, plan your AI budget, optimize prompts for cost efficiency, or track expenses for client billing! OpenRouter charges a platform fee on top of
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow integrates a chatbot frontend with a backend powered by Langflow, a visual low-code AI development tool. The flow is triggered whenever a chat message is received via the n8n chatbot wid
This n8n workflow enables you to chat with the uncensored Dolphin Mixtral 8x22B large language model through the Novita AI inference. It provides a streamlined process for sending user messages to the