AutomationFlowsAI & RAG › Generate UGC Videos from Product Images with Gemini and Veo3

Generate UGC Videos from Product Images with Gemini and Veo3

ByAllan Vaccarizi @growthai on n8n.io

This powerful n8n workflow automatically converts product images into professional User-Generated Content (UGC) videos using cutting-edge AI technologies including Gemini 2.5 Flash, Claude 4 Sonnet, and VEO3 Fast. Content creators looking to scale video production E-commerce…

Event trigger★★★★★ complexityAI-powered32 nodesHTTP RequestTelegram TriggerTelegramChain LlmAnthropic ChatOutput Parser StructuredN8N Nodes Mediafx
AI & RAG Trigger: Event Nodes: 32 Complexity: ★★★★★ AI nodes: yes Added:

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

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

Download .json
{
  "nodes": [
    {
      "id": "fe4aee8a-a214-4555-b8cb-b6dcf325756e",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -816,
        592
      ],
      "parameters": {
        "jsCode": "// Get the base64 string from the specific path\nlet base64String = $input.first().json.choices[0].message.images[0].image_url.url;\n\n// Remove the data URI prefix if it exists\nif (base64String.startsWith('data:image/')) {\n  // Find the comma that separates the prefix from the actual base64 data\n  const commaIndex = base64String.indexOf(',');\n  if (commaIndex !== -1) {\n    base64String = base64String.substring(commaIndex + 1);\n  }\n}\n\nreturn [{\n  json: {\n    base64_data: base64String\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "f4671669-e13e-4119-bf60-33422140874f",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        -592,
        592
      ],
      "parameters": {
        "options": {
          "fileName": "generated_image",
          "mimeType": "image/png"
        },
        "operation": "toBinary",
        "sourceProperty": "base64_data"
      },
      "typeVersion": 1.1
    },
    {
      "id": "84d463ca-c393-4a92-8be2-e5bf058b27ba",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1040,
        592
      ],
      "parameters": {
        "url": "https://openrouter.ai/api/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"google/gemini-2.5-flash-image-preview\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"{{ $('Send message and wait for response').item.json.data.text }}. Photor\u00e9aliste pour une publicit\u00e9 UGC. ratio 1:1.\"\n        },\n        {\n          \"type\": \"image_url\",\n          \"image_url\": {\n            \"url\": \"https://api.telegram.org/file/bot{{ $('Edit Fields').item.json.telegram_token }}/{{ $json.result.file_path }}\"\n          }\n        }\n      ]\n    }\n  ]\n  \n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "openRouterApi"
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3f964aa6-4d8e-428a-983f-574144314752",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -1056,
        368
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "executeOnce": false,
      "typeVersion": 1.2
    },
    {
      "id": "03b8f12a-55a8-4e88-b906-748da04c3b6d",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        -800,
        368
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "daaeed7f-da2b-4c9a-a33e-d78c619e93cc",
              "name": "telegram_token",
              "type": "string",
              "value": "Your Telegram Token"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7a31105f-02e0-4900-911b-648e4ab7e825",
      "name": "Send message and wait for response",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -560,
        368
      ],
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "message": "Merci d'avoir t\u00e9l\u00e9charg\u00e9 l'image. Veuillez fournir vos instructions.",
        "options": {},
        "operation": "sendAndWait",
        "responseType": "freeText"
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2,
      "alwaysOutputData": false
    },
    {
      "id": "ad63e911-6022-4f69-83ce-9bc4fd1dd2a4",
      "name": "Get a file",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -336,
        368
      ],
      "parameters": {
        "fileId": "={{ $('Telegram Trigger').item.json.message.photo[2].file_id }}",
        "download": false,
        "resource": "file"
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2,
      "alwaysOutputData": false
    },
    {
      "id": "be24ef62-7de5-471b-bc6e-526a1964cd57",
      "name": "Send a photo message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -336,
        592
      ],
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "operation": "sendPhoto",
        "binaryData": true,
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "850d7a35-811c-46d7-a071-20741e980dfb",
      "name": "Send message and wait for response1",
      "type": "n8n-nodes-base.telegram",
      "position": [
        480,
        256
      ],
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "message": "Veuillez fournir une id\u00e9e de dialogue pour votre annonce.",
        "options": {},
        "operation": "sendAndWait",
        "responseType": "freeText"
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ee43b9d6-8f52-455a-8a57-421c40076f39",
      "name": "Basic LLM Chain",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        112,
        512
      ],
      "parameters": {
        "text": "=Here is what I am looking for: {{ $json.data.text }}\n\nHere is the content of the initial image that will be used to generate the video:\n{{ $('HTTP Request3').item.json.choices[0].message.content }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are an expert in creating scripts for authentic UGC-style advertisements that feel natural and unscripted.\nYour task is to create a two-segment video script based on the user's concept. The video starts with the provided image.\nCRITICAL CONSTRAINTS:\n\nDO NOT add objects not present in the original image (no food, accessories, tools, etc.).\nDO NOT remove objects that are in the original image.\nThe person should only interact with objects/elements visible in the source image.\nActions must be physically possible given the person's starting position and environment.\nNo additional text or captions\nREQUIREMENTS:\nEach segment should be 7-8 seconds of realistic action/dialogue.\nInclude camera movements when they enhance storytelling (zoom in, pan, tilt, etc.).\nActions must be specific and filmable.\nDialogue should sound conversational and unscripted.\nShow don't tell - actions should visually demonstrate product benefits.\nUse single quotes for any dialogue.\nStay authentic - avoid overly promotional language\nThe image context will be provided to guide what is actually visible and possible.\nOutput format:\n{\n\"segment-1\": \"[camera movement if needed] + [specific action using only visible elements] + [natural dialogue if any]\",\n\"segment-2\": \"[camera movement if needed] + [specific action using only visible elements] + [natural dialogue if any]\"\n}\nExample camera movements: camera slowly zooms in, camera pans left to right, camera tilts up, camera pulls back\nExample constrained actions: adjusts visible strap, shifts weight on visible surface, turns toward camera, gestures with free hand"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "f85ba551-7ae3-4906-9336-4840ee0e7f85",
      "name": "Anthropic Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        0,
        672
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-20250514",
          "cachedResultName": "Claude 4 Sonnet"
        },
        "options": {}
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "730cfc03-85f3-467f-ac7b-6808e5d4e462",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        352,
        688
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\"segment-1\": \"the man tugs his sleeve and describes how elastic the fabric is\",\n\"segment-2\": \"the man raises his arms to stretch, and the shirt flows with his movements\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "fac8e5a3-f90d-4052-ac4f-1168e6a2f961",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        496,
        512
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "output"
      },
      "typeVersion": 1
    },
    {
      "id": "d75ca3dc-aa1a-4101-b5e7-3dfdf5b36062",
      "name": "HTTP Request1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        912,
        384
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/veo/generate",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"prompt\": \"{{ $json.output }}\",\n  \"imageUrls\": [\n    \"https://api.telegram.org/file/bot{{ $('Edit Fields').item.json.telegram_token }}/{{ $('Get a file1').item.json.result.file_path }}\"\n  ],\n  \"model\": \"veo3_fast\",\n  \"aspectRatio\": \"16:9\",\n  \"seeds\": 12345,\n  \"enableFallback\": false\n} ",
        "sendBody": true,
        "specifyBody": "=json",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {}
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "62fe16ab-39b6-41a3-bebb-36dbd1882fd1",
      "name": "Get a file1",
      "type": "n8n-nodes-base.telegram",
      "position": [
        80,
        256
      ],
      "parameters": {
        "fileId": "={{ $json.result.photo[3].file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "92f84ddf-acef-4c31-9dd1-e963ac01700f",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1120,
        384
      ],
      "parameters": {
        "amount": 60
      },
      "typeVersion": 1.1
    },
    {
      "id": "55951ec7-e963-454e-a888-4dc44eef5690",
      "name": "HTTP Request2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1328,
        384
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/veo/record-info",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "taskId",
              "value": "={{ $json.data.taskId }}"
            }
          ]
        }
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "05f8470f-bfea-4163-a384-83a5cae98c06",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1776,
        336
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "data.response.resultUrls"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1e9a1343-1e2f-4f6d-91a8-59e9d87794bd",
      "name": "Merge video",
      "type": "n8n-nodes-mediafx.mediaFX",
      "position": [
        1968,
        336
      ],
      "parameters": {
        "videoSources": {
          "sources": [
            {
              "value": "={{ $json.resultUrls[0][0] }}"
            },
            {
              "value": "={{ $json.resultUrls[1][0] }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4c2a5558-f910-405f-b0bd-65083ff907e9",
      "name": "Send a video",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2160,
        336
      ],
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "operation": "sendVideo",
        "binaryData": true,
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "2d352e6d-55e4-4f03-96cb-9b9ef1e17c78",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        1520,
        368
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Success",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "f29a6ac3-9fb2-44a7-ba55-b1b82b42b0bd",
                    "operator": {
                      "type": "number",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.data.successFlag }}",
                    "rightValue": 1
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "In Process",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "490fc789-6e8c-423e-b13e-7b1610aa79e9",
                    "operator": {
                      "type": "number",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.data.successFlag }}",
                    "rightValue": 0
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "013a1a36-a6cb-4460-a807-a219499af11d",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1776,
        528
      ],
      "parameters": {
        "text": "=La g\u00e9n\u00e9ration de la vid\u00e9o a \u00e9chou\u00e9",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4e29b7d1-320a-47a7-839f-b9c4c00a9316",
      "name": "HTTP Request3",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        272,
        256
      ],
      "parameters": {
        "url": "https://openrouter.ai/api/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"google/gemini-2.5-flash-image-preview\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"Fournissez une description d\u00e9taill\u00e9e du contenu de l'image. Le cadre, le(s) sujet(s), ce que le sujet fait ou tient, etc.\"\n        },\n        {\n          \"type\": \"image_url\",\n          \"image_url\": {\n            \"url\": \"https://api.telegram.org/file/bot{{ $('Edit Fields').item.json.telegram_token }}/{{ $json.result.file_path }}\"\n          }\n        }\n      ]\n    }\n  ]\n  \n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "openRouterApi"
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "c81b9873-67c3-41ab-a74d-fb5f36e19f06",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1152,
        256
      ],
      "parameters": {
        "width": 1024,
        "height": 512,
        "content": "## Generate Image"
      },
      "typeVersion": 1
    },
    {
      "id": "e2c46cf4-5578-4eab-95cd-286da813bf67",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        208
      ],
      "parameters": {
        "color": 4,
        "width": 832,
        "height": 576,
        "content": "## Video Generation Prompts"
      },
      "typeVersion": 1
    },
    {
      "id": "a828893a-0537-4ea9-bf6e-ce4b9b29c16b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        256
      ],
      "parameters": {
        "width": 1616,
        "height": 512,
        "content": "## Generate and output video"
      },
      "typeVersion": 1
    },
    {
      "id": "dec75f2c-c140-41f7-8827-256f733ecbc8",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        -48
      ],
      "parameters": {
        "color": 7,
        "content": "## Nano Banana \ud83c\udf4c + VEO3 Fast UGC Generator by Growth Ai"
      },
      "typeVersion": 1
    },
    {
      "id": "884ea1d0-5d83-4af4-956b-cebe286ca40d",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1056,
        848
      ],
      "parameters": {
        "color": 3,
        "width": 768,
        "height": 528,
        "content": "# Phase 1: Image Reception and Enhancement\n\n## What you do:\n\nSend your image on Telegram (product photo, sketch, anything)\nType your instructions when the bot prompts you\n\nExample: \"Professional advertising style\" or \"Improve lighting\"\n\n## What the system does:\n\n\nAnalyzes your image with Gemini AI\nGenerates an optimized version in square format (1:1)\nSends back the enhanced image ready for video\n\n## Result:\n\n\u2705 Professional quality image in seconds\n\u2705 Photorealistic style perfect for advertising\n\u2705 Format optimized for social media"
      },
      "typeVersion": 1
    },
    {
      "id": "d0a2e994-bb8a-4dd7-a8da-2da217c13372",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        848
      ],
      "parameters": {
        "color": 3,
        "width": 768,
        "height": 512,
        "content": "# Phase 2: Analysis and Script Creation\n\n## What you do:\n\nGive your dialogue idea when the bot asks you\nExample: \"Talk about product benefits\" or \"Satisfied customer testimonial\"\n\n## What the system does:\n\n2. Analyzes the image in detail (objects present, person's position, environment)\n3. Combines your idea with visual analysis\n4. Generates a script in 2 segments of 7-8 seconds each with Claude AI\n5. Respects realistic constraints (no added objects, only possible actions)\n\n## Result:\n\n\u2705 Video script ready to film in 2 parts\n\u2705 Natural and authentic dialogue\n\u2705 Achievable actions with what's visible in the image"
      },
      "typeVersion": 1
    },
    {
      "id": "b76566b7-5e1a-4fad-a357-f4a26359e5e5",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        848
      ],
      "parameters": {
        "color": 3,
        "width": 768,
        "height": 608,
        "content": "# Phase 3: Video Generation\n\n## What you do:\n\nNothing! Just wait for the magic to happen\n\n## What the system does:\n\n2. Generates 2 distinct videos with VEO3 (one per script segment)\n3. Checks generation status every 10 seconds\n4. Merges the 2 segments into one fluid video\n5. Sends you the final video on Telegram\n\n## In case of problems:\n\nIf generation fails \u2192 Automatic error message\nIf it takes too long \u2192 The system automatically re-checks\n\n## Result:\n\n\u2705 Complete UGC video in vertical format (9:16)\n\u2705 Cinematic quality with VEO3\n\u2705 Ready to publish on TikTok, Instagram, YouTube Shorts"
      },
      "typeVersion": 1
    },
    {
      "id": "0d47b8f4-5cc1-4efc-b4af-c498fa1db3ad",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1776,
        144
      ],
      "parameters": {
        "color": 5,
        "width": 592,
        "height": 816,
        "content": "# Phase 0: Initialization and Prerequisites\n\n## What you need to configure:\n\n### 1. Required Accounts and APIs:\n\nTelegram Bot: Create a bot via @BotFather\nOpenRouter: Account with access to Gemini 2.5 Flash\nAnthropic: Claude 4 Sonnet API\nKIE.AI: Access to VEO3 Fast\nN8N: Instance to host the workflow\n\n### 2. Credentials to configure in N8N:\n\ntelegramApi: Your Telegram bot token\nopenRouterApi: OpenRouter API key\nanthropicApi: Anthropic API key\nhttpBearerAuth: KIE.AI token for VEO3\n\n### 3. Final Configuration:\n\nTelegram Token: To replace in the \"Edit Fields\" node\nWebhook: Configure the Telegram bot URL\nTest: Verify that all services respond\n\n## Result:\n\n\u2705 Automation ready to receive your images\n\u2705 All services connected and functional\n\u2705 24/7 operational workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "36a57d06-fa2e-465e-8738-d2e2c1590292",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1184,
        -240
      ],
      "parameters": {
        "width": 816,
        "height": 336,
        "content": "## Need more advanced automation solutions? Contact us for custom enterprise workflows!\n\n# Growth-AI.fr\n\n## https://www.linkedin.com/in/allanvaccarizi/\n## https://www.linkedin.com/in/hugo-marinier-%F0%9F%A7%B2-6537b633/"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Merge video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "HTTP Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get a file": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Send message and wait for response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get a file1": {
      "main": [
        [
          {
            "node": "HTTP Request3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge video": {
      "main": [
        [
          {
            "node": "Send a video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request1": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request2": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request3": {
      "main": [
        [
          {
            "node": "Send message and wait for response1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Send a photo message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Send a photo message": {
      "main": [
        [
          {
            "node": "Get a file1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Send message and wait for response": {
      "main": [
        [
          {
            "node": "Get a file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send message and wait for response1": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This powerful n8n workflow automatically converts product images into professional User-Generated Content (UGC) videos using cutting-edge AI technologies including Gemini 2.5 Flash, Claude 4 Sonnet, and VEO3 Fast. Content creators looking to scale video production E-commerce…

Source: https://n8n.io/workflows/8927/ — 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

A Telegram bot that converts natural-language work descriptions into detailed cost estimates using AI parsing, vector search, and the open-source DDC CWICR database with 55,000+ construction work item

HTTP Request, Telegram, Telegram Trigger +6
AI & RAG

Template Carnaval - time instagram. Uses toolWorkflow, lmChatOpenAi, memoryBufferWindow, agent. Event-driven trigger; 56 nodes.

Tool Workflow, OpenAI Chat, Memory Buffer Window +10
AI & RAG

Automatically capture, categorize, and log expenses from receipts, PDFs, voice notes, or text — powered by AI and integrated with Telegram and Google Sheets.

HTTP Request, OpenAI, Chain Llm +6
AI & RAG

With this workflow you can extract data from resume documents uploaded via a Telegram bot. Workflow transform readable content of PDF resume into structured data, using AI nodes and returns PDF with f

OpenAI Chat, Output Parser Autofixing, Output Parser Structured +4
AI & RAG

This n8n template demonstrates how to create authentic-looking User Generated Content (UGC) advertisements using AI image generation, voice synthesis, and lip-sync technology. The workflow transforms

Chain Llm, Output Parser Structured, Agent +5