{
  "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
          }
        ]
      ]
    }
  }
}