AutomationFlowsAI & RAG › Generate AI Video Sales Letters with Google Veo3

Generate AI Video Sales Letters with Google Veo3

ByLukaszB @lukaszb on n8n.io

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Event trigger★★★★★ complexityAI-powered30 nodesHTTP RequestJwtOpenAIGoogle Cloud StorageForm TriggerN8N Nodes Upload PostChain LlmOpenAI Chat
AI & RAG Trigger: Event Nodes: 30 Complexity: ★★★★★ AI nodes: yes Added:

This workflow corresponds to n8n.io template #6449 — we link there as the canonical source.

This workflow follows the Chainllm → Form Trigger 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 →

Download .json
{
  "id": "HJf3UBUUKBCZQbXw",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "VEO3 VSL Generator: Automated Video Workflow for Meta Publishing",
  "tags": [],
  "nodes": [
    {
      "id": "fff09fbf-66a2-4faf-a2e0-17a0a06f2f07",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "notes": "At this step, the video should be generated and ready to convert to 9:16 aspect ratio",
      "position": [
        3952,
        -80
      ],
      "parameters": {},
      "notesInFlow": true,
      "typeVersion": 1.1
    },
    {
      "id": "d10bd8d3-177b-4fd8-8ad8-c7b0503729df",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        3024,
        112
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "a032fa9c-e8b2-4a8a-adde-affb3cd1e27f",
      "name": "Fetch Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2816,
        128
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "7d8ca72f-f590-4173-b9ff-6e9f3787521f",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        3008,
        -64
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "e4c5da50-2c11-4f9c-8308-ac24d7995ef1",
      "name": "Generate Video1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2816,
        -64
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "10e1bcfc-7462-4d32-b271-7bb87be00fbf",
      "name": "JWT",
      "type": "n8n-nodes-base.jwt",
      "position": [
        2016,
        -80
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "fa31df06-7741-4d52-8a87-aa46040ee1b6",
      "name": "GET TOKEN",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1776,
        112
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "7ffd733e-d9af-47db-8481-5d291d978b74",
      "name": "Product Image Describing",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        752,
        -80
      ],
      "parameters": {},
      "typeVersion": 1.8
    },
    {
      "id": "9402f9c2-5632-406d-ab77-a37edbdc660c",
      "name": "VeoPrompt",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        288,
        112
      ],
      "parameters": {},
      "typeVersion": 1.8
    },
    {
      "id": "f33476cf-da46-4d18-8995-7456e8cf8803",
      "name": "Upload to GCS (To be accessible via URL)",
      "type": "n8n-nodes-base.googleCloudStorage",
      "position": [
        4160,
        -80
      ],
      "parameters": {},
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 2000
    },
    {
      "id": "3642116e-4ee6-4279-8acf-9c9c8d718b5f",
      "name": "Add Captions",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4928,
        -80
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "00a4f275-62b5-473a-854e-95f7ecfe0039",
      "name": "Rendering....",
      "type": "n8n-nodes-base.wait",
      "position": [
        5136,
        -80
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "277726fa-533f-491d-aee2-7d78c7aba66b",
      "name": "Captions added?",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5296,
        -80
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "882dccc4-7c53-4ded-94f8-6f6e77f6a18f",
      "name": "Switch1",
      "type": "n8n-nodes-base.switch",
      "position": [
        5488,
        -128
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "7236a786-68b4-42ea-8f51-305d79988028",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -48,
        -80
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "7a212587-8fb8-4db0-981b-72f1bdb15379",
      "name": "Form Input",
      "type": "n8n-nodes-base.set",
      "position": [
        128,
        -80
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "e23306fe-9cab-4e14-9f18-a0b2882a5c83",
      "name": "SET Credentials",
      "type": "n8n-nodes-base.set",
      "position": [
        1792,
        -80
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "deb23466-53a9-4064-b180-6e1ab8552c3b",
      "name": "Upload Post",
      "type": "n8n-nodes-upload-post.uploadPost",
      "position": [
        6272,
        -48
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "fd0c9450-945d-4e0e-89f9-945781f1f053",
      "name": "Content writer",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        640,
        112
      ],
      "parameters": {},
      "typeVersion": 1.7
    },
    {
      "id": "60f4d6a8-b9d5-46ce-a21c-3518ac28eb83",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        576,
        320
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "f93b646c-e857-4c24-801f-30ad2ba3f37b",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        784,
        320
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "f3f6c9ed-405d-461a-b7ee-73eb28afa490",
      "name": "UGC.Formulator",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        352,
        -80
      ],
      "parameters": {},
      "typeVersion": 1.8
    },
    {
      "id": "899f9144-2b14-4bcf-9b3e-b22b4ab988c6",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        -240
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "e5aa5a36-1e8a-49d2-960b-04a91cd24e24",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1008,
        -240
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "c10da8c0-01ff-462b-ace1-d37e36aa0111",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2320,
        -240
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "15dd557a-35d3-4244-8de9-9aa24b05cc97",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3392,
        -240
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "1a7c0ac0-f4da-48a6-900d-42a5ad1b2b58",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4416,
        -240
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "cc5739c1-4bb0-4a5c-b8c4-7f60dbc10626",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5824,
        -240
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "049acf37-7284-4a3f-9829-48e84d3a535f",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        624
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "256d2de2-7795-4e23-808a-0361d722c91e",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5616,
        608
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "77ce5d0a-b064-4c16-8aff-0d0050a34d8d",
  "connections": {
    "JWT": {
      "main": [
        [
          {
            "node": "GET TOKEN",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Fetch Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "VeoPrompt",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch1": {
      "main": [
        [
          {
            "node": "Upload Post",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Add Captions",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Rendering....",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Rendering....",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Rendering....",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET TOKEN": {
      "main": [
        [
          {
            "node": "Generate Video1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "VeoPrompt": {
      "main": [
        [
          {
            "node": "Content writer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Form Input": {
      "main": [
        [
          {
            "node": "UGC.Formulator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Captions": {
      "main": [
        [
          {
            "node": "Rendering....",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Status": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rendering....": {
      "main": [
        [
          {
            "node": "Captions added?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Content writer": {
      "main": [
        [
          {
            "node": "SET Credentials",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "UGC.Formulator": {
      "main": [
        [
          {
            "node": "Product Image Describing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Captions added?": {
      "main": [
        [
          {
            "node": "Switch1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Upload to GCS (To be accessible via URL)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Video1": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SET Credentials": {
      "main": [
        [
          {
            "node": "JWT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Content writer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Form Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Product Image Describing": {
      "main": [
        [
          {
            "node": "VeoPrompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Content writer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Upload to GCS (To be accessible via URL)": {
      "main": [
        [
          {
            "node": "Add Captions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Source: https://n8n.io/workflows/6449/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Transform a single quote into a fully-rendered cinematic short video — with voice-over, visuals, and music — then publish it directly to TikTok, Instagram Reels, and YouTube Shorts. This isn’t just au

Agent, HTTP Request, Jwt +7
AI & RAG

Recruiting agencies, executive search firms, and in-house talent teams that want to automate candidate sourcing and prequalification. Instead of spending hours searching, scoring, and writing outreach

Form Trigger, Output Parser Autofixing, OpenAI Chat +6
AI & RAG

Turn any product page into ready-to-run Meta ads—fast, consistent, and client-friendly.

Form Trigger, HTTP Request, OpenAI +5
AI & RAG

This n8n template automates targeted lead discovery, AI-driven data structuring, and personalized cold-email sending at controlled intervals. It’s ideal for sales teams, founders, and agencies that wa

Google Sheets, Form Trigger, Chain Llm +6
AI & RAG

🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.

OpenAI, HTTP Request, Form Trigger +7