{
  "name": "VietlinhAI | Tạo video review sản phẩm từ ảnh bằng Veo 3",
  "nodes": [
    {
      "parameters": {
        "formTitle": "UGC Video",
        "formDescription": "Nhập hình ảnh sản phẩm để sản xuất nội dung",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Image Goc",
              "fieldType": "file",
              "fieldName": "Image"
            },
            {
              "fieldLabel": "Description"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.5,
      "position": [
        128,
        -16
      ],
      "id": "fa41a934-0f4e-40ee-b4b8-0047887888b4",
      "name": "On form submission",
      "webhookId": "bcac3ed9-a6ea-44dd-926f-87cac2739ce3"
    },
    {
      "parameters": {
        "resource": "image",
        "operation": "analyze",
        "modelId": {
          "__rl": true,
          "value": "models/gemini-3-flash-preview",
          "mode": "list",
          "cachedResultName": "models/gemini-3-flash-preview"
        },
        "inputType": "binary",
        "binaryPropertyName": "Image",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "typeVersion": 1.2,
      "position": [
        560,
        -16
      ],
      "id": "2a971796-8d89-479a-bf1c-2836ee579b3e",
      "name": "Analyze an image"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Nhiệm vụ của bạn: Tạo một prompt tạo ảnh theo đúng các hướng dẫn hệ thống của bạn.\n\nHãy đảm bảo rằng hình ảnh tham chiếu được tái hiện CHÍNH XÁC nhất có thể trong các hình ảnh được tạo ra, đặc biệt là toàn bộ phần chữ.\n\nĐây là mô tả do người dùng cung cấp:\n{{ $('On form submission').item.json.Description }}\n\nMô tả của hình ảnh tham chiếu:\n{{ $json.content.parts[0].text }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "=VAI TRÒ\nBạn là UGC Image Prompt Builder.\n\nMỤC TIÊU\nDựa trên ảnh tham chiếu / ảnh sản phẩm, hãy tạo một prompt mô tả ảnh ngắn gọn, tự nhiên để dùng cho AI tạo ảnh hoặc video UGC đời thực.\n\n⚙️ QUY TẮC CHUNG (BẮT BUỘC)\n\nPhong cách UGC chân thật, như ảnh/video quay bằng điện thoại.\n\nKhông dàn dựng, không ánh sáng studio, không ngôn ngữ quảng cáo.\n\nChấp nhận sự không hoàn hảo: tóc con, nếp nhăn, texture da, nền hơi bừa bộn.\n\nNếu không có yêu cầu rõ -> đặt sản phẩm trong bối cảnh đời thường hợp lý.\n\nMỌI CHỮ trên bao bì/phần hiển thị phải giữ nguyên 100% như ảnh gốc.\n\nTUYỆT ĐỐI KHÔNG bịa:\n\nchứng nhận\n\ncon số\n\ntuyên bố marketing\n\nbadge / logo không có thật\n\n📸 GỢI Ý PHONG CÁCH MÁY ẢNH\n\n(mỗi prompt dùng ít nhất 2-3 ý)\n\nảnh chụp điện thoại\n\nkhung hình cầm tay\n\nbố cục lệch tâm\n\nánh sáng tự nhiên trong nhà\n\nbóng đổ mềm\n\nnhòe chuyển động nhẹ\n\nphơi sáng tự động\n\nphong cách chưa chỉnh sửa\n\nhạt nhiễu nhẹ\n\n🚫 GIỚI HẠN\n\nKhông nêu tên nhân vật có bản quyền.\n\nKhông viết hội thoại hoặc kịch bản.\n\nChỉ xuất ra prompt tạo ảnh.\n\n📂 ĐỊNH DẠNG ĐẦU RA (BẮT BUỘC)\n\n👉 Chỉ trả về 1 object JSON duy nhất, đúng cấu trúc sau:\n\n{\n  \"image_prompt\": \"Mô tả dạng văn xuôi (tối đa 120 từ), bao gồm:\n  - Chủ thể (ai)\n  - Hành động (đang làm gì)\n  - Cảm xúc / mood\n  - Bối cảnh đời thực\n  - Phong cách / máy ảnh\n  - Màu sắc tổng thể\n  - Ghi chú độ chính xác chữ (giữ nguyên 100% text nhìn thấy)\"\n}\n\nTHIẾT LẬP MẶC ĐỊNH VỀ NHÂN VẬT\n\nNếu không chỉ định: đa dạng giới tính & chủng tộc tự nhiên.\n\nĐộ tuổi mặc định: 21–38.\n\nƯu tiên không gian thật: nhà, đường phố, cửa hàng, phòng gym, văn phòng.\n\n✅ CHECK TRƯỚC KHI TRẢ KẾT QUẢ\n\nCó đúng 1 key image_prompt\n\nKhông ngôn ngữ quảng cáo\n\nCó yếu tố đời thực, không hoàn hảo\n\nCó ghi chú giữ nguyên chữ trên sản phẩm\n\n≤ 120 từ"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        752,
        -16
      ],
      "id": "cacfd36e-647f-42b2-bdd5-8283e2ccfb42",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1.1,
      "position": [
        720,
        -176
      ],
      "id": "a58d3cb5-4bdd-48ea-8466-e7779e495bab",
      "name": "Google Gemini Chat Model"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n  \"image_prompt\": \"string\"\n}\n"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        928,
        -176
      ],
      "id": "2e742fc8-da2f-4935-8678-2eaf01fdc702",
      "name": "Structured Output Parser"
    },
    {
      "parameters": {
        "content": "## TẠO IMAGE PROMPT\n",
        "height": 464,
        "width": 1248,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        352,
        -240
      ],
      "id": "82eac6f3-61d0-4bf7-9a4c-f4ec1ce4a16c",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "amount": 15
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        784,
        352
      ],
      "id": "6e85a370-7a84-4ebc-93ec-e380d2c9aa7a",
      "name": "Wait",
      "webhookId": "d7ae234f-7f5f-4539-8f9a-f791ce5c7119"
    },
    {
      "parameters": {
        "content": "## TẠO HÌNH ẢNH",
        "height": 304,
        "width": 1248
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        352,
        256
      ],
      "id": "fb14e059-07ba-40d8-8ea4-70f0b24b9782",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=“Tạo một prompt video phong cách UGC dựa trên hình ảnh tham chiếu và mô tả của người dùng.”\n\nMô tả của người dùng (có thể để trống):\n{{ $json.input_text }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "=ROLE\nYou are a UGC Continuation Video Sequence Agent.\n\nYour job is to create a SEQUENCE of 3 short UGC ad videos (≈8 seconds each) that feel like ONE continuous real-life moment split into 3 clips – NOT 3 separate or restarted videos.\n\nYou must think about all 3 scenes in a single pass and preserve:\n\n- motion continuity\n- body and hand state\n- camera rhythm\n- spoken dialogue continuity\n-----\nCORE CONTINUITY RULES (CRITICAL)\n\n- Each scene must feel like the VERY NEXT MOMENT after the previous one.\n- This is NOT a restart.\n- Treat the reference image as PRE-CONTEXT, not the opening frame.\n- Do NOT start from a neutral pose or static framing.\n- Always start IN THE MIDDLE of an ongoing action or reaction.\n- Assume the same space, same outfit, same product, same general framing.\n- The camera is perceived as continuously rolling across scenes.\n\nIf any scene feels like it “starts over”, it is WRONG.\n-----\nVOICE RULES (EMBEDDED IN VIDEO PROMPT)\n\n- Spoken lines MUST be written INSIDE the video prompt.\n- All spoken dialogue MUST be in VIETNAMESE.\n- Voice sounds casual, unscripted, like self-talk or vlog speech.\n- Dialogue happens WHILE the action is ongoing.\n- No narration, no ad-speak, no exaggerated claims.\n-----\nVIDEO TITLE (HOOK) – PAIN & NEED AWARENESS AND VIDEO DESCRIPTION (REQUIRED)\n\nIn addition to the 3 scenes, you MUST generate ONE video title that acts as a scroll-stopping HOOK.\n\nHOOK OBJECTIVE\n\n- Clearly surface a real, relatable PROBLEM or PAIN the customer experiences.\n- Make the viewer think: “That’s exactly me.”\n- Trigger NEED awareness without mentioning any solution.\n-----\nTITLE REQUIREMENTS\n\n- Written in VIETNAMESE\n- Maximum 12 words\n- Casual, spoken language (inner thoughts, complaints, or self-questions)\n- Focus ONLY on the problem or its consequence\n- Do NOT mention the product or solution\n- No praise, no marketing tone, no CTA\n\nHOOK-SCENE ALIGNMENT (CRITICAL)\n- The title represents the viewer’s internal thought.\n- Scene 1 must visually and emotionally show that exact problem in real life.\n\nVideo Description Goals\n\n- Briefly summarize the problem, solution, and CTA\n- Quickly visualize the video content for the viewer\n- Arouse customer demand\n\nVideo Description Requirements\n\n- Written in Vietnamese\n- Maximum 120 words\n- Everyday, natural language\n-----\nGLOBAL GOAL (3 × 8s)\nScene 1: Hook + personal reason for using the product\nScene 2: Active usage (proof of use)\nScene 3: After-use state + soft CTA\n-----\nSCENE RESPONSIBILITIES\n\nSCENE 1 – HOOK + WHY\n- Start mid-action (already moving, reaching, adjusting, preparing).\n- Casually reveal a personal reason or small problem.\n- No demo.\n- No CTA.\n\nSCENE 2 – HOW / PROOF\n- Begin from the EXACT body and hand state where Scene 1 ended.\n- Show real usage in progress.\n- Spoken words describe what the person is doing, NOT benefits.\n\nSCENE 3 – RESULT + SOFT CTA\n- Begin from the after-use state of Scene 2.\n- Minimal action, relaxed posture.\n- Soft CTA phrased like a personal suggestion, NOT a sales pitch.\n-----\nUGC VISUAL STYLE\n\n- Phone-shot, handheld feel\n- Natural or mixed indoor lighting\n- Slight motion blur or micro shake is acceptable\n- Product is visible but NEVER posed like a product shot\n-----\nOUTPUT CONTRACT (STRICT)\nReturn ONLY ONE valid JSON object.\nDo NOT include any text outside the JSON.\n\nUse EXACTLY this structure:\n{\n  \"video_title\": \"Pain-based hook in natural Vietnamese\",\n  \"video_description\": \"Briefly summarize the problem, solution, and CTA\",\n  \"scene_1\": {\n    \"video_prompt\": \"Describe the scene starting mid-action, including camera movement, environment, body motion, AND embedded Vietnamese spoken dialogue in quotes, spoken naturally while the action continues.\"\n  },\n  \"scene_2\": {\n    \"video_prompt\": \"Direct continuation of scene 1 with uninterrupted motion and framing, including embedded Vietnamese spoken dialogue describing the usage while it happens.\"\n  },\n  \"scene_3\": {\n    \"video_prompt\": \"Continuation from the after-use state, calm ending, including embedded Vietnamese spoken dialogue with a soft, non-pushy CTA.\"\n  }\n}\n-----\nABSOLUTE PROHIBITIONS\n- No restarts\n- No neutral poses\n- No product re-introduction\n- No unboxing\n- No slogans or ad language\n- No claims or exaggerated benefits\n- No text outside the JSON\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        560,
        832
      ],
      "id": "41831bdc-bc76-4681-a973-0a3e6db69ac9",
      "name": "VEO Video Prompt"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1.1,
      "position": [
        560,
        688
      ],
      "id": "50f54a83-c5de-49d0-b9c5-721e5041c267",
      "name": "Google Gemini Chat Model1"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n  \"video_title\" : \"string\",\n  \"video_description\": \"string\",\n  \"scenes\": {\n    \"scene_1\": {\n      \"video_prompt\": \"string\"\n    },\n    \"scene_2\": {\n      \"video_prompt\": \"string\"\n    },\n    \"scene_3\": {\n      \"video_prompt\": \"string\"\n    }\n  }\n}",
        "autoFix": true
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        704,
        672
      ],
      "id": "0a999ca8-a760-4f7b-a63d-04d70c357cf2",
      "name": "Structured Output Parser1"
    },
    {
      "parameters": {
        "fieldToSplitOut": "output.scenes",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        912,
        832
      ],
      "id": "1e798092-cc1c-479a-a0b9-9bf07f17b82d",
      "name": "Split Out"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        544,
        1264
      ],
      "id": "7877b613-50fb-43c9-ab97-af35a488aab1",
      "name": "Loop Over Items"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.geminigen.ai/uapi/v1/video-gen/veo",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "={{ $json.video_prompt }}"
            },
            {
              "name": "model",
              "value": "veo-3.1-fast"
            },
            {
              "name": "resolution",
              "value": "720p"
            },
            {
              "name": "aspect_ratio",
              "value": "9:16"
            },
            {
              "name": "file_urls",
              "value": "={{ $('Get Image').first().json.generated_image[0].image_url }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        784,
        1280
      ],
      "id": "a11f309e-64e5-4b1d-991a-4d04a27aab67",
      "name": "Create Veo3 Video"
    },
    {
      "parameters": {
        "content": "## TẠO VIDEO PROMPT\n",
        "height": 528,
        "width": 1248,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        352,
        592
      ],
      "id": "f8511fae-65ea-47f2-83e2-1f5e3885aebe",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "amount": 15
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        960,
        1280
      ],
      "id": "eb862dfc-044b-478e-80c6-ea657217c559",
      "name": "Wait1",
      "webhookId": "f613d9a3-9c71-44a6-b333-bfe4d008809f"
    },
    {
      "parameters": {
        "url": "=https://api.geminigen.ai/uapi/v1/history/{{ $json.uuid }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        1168,
        1280
      ],
      "id": "42f46617-d2f0-4764-ba9e-b385a623c663",
      "name": "Get Video"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "a12db492-0a97-40fd-8bdd-43679829d5e5",
              "leftValue": "={{ $json.status }}",
              "rightValue": 2,
              "operator": {
                "type": "number",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        1360,
        1280
      ],
      "id": "838fc32b-5135-4765-959b-18adce4a5685",
      "name": "If"
    },
    {
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "generated_video[0].video_url"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        544,
        1648
      ],
      "id": "f89ed091-653f-4db9-be7a-95830524dfa6",
      "name": "Aggregate"
    },
    {
      "parameters": {
        "content": "## TẠO VIDEO\n",
        "height": 400,
        "width": 1248
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        352,
        1152
      ],
      "id": "8f1074d8-a4ef-470a-b4e6-5188ad4fed3c",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "jsCode": "// 1. Lấy item đầu tiên từ node Aggregate\nconst item = $input.first();\n\n// 2. Lấy danh sách link (đang là mảng các chuỗi text)\n// Dữ liệu lấy từ trường 'video_url'\nconst originalUrls = item.json.video_url;\n\n// 3. Biến đổi thành dạng [{\"video_url\": \"link1\"}, {\"video_url\": \"link2\"}]\nconst formattedList = originalUrls.map(url => ({\n  video_url: url\n}));\n\n// 4. Tạo object tổng theo đúng cấu trúc yêu cầu\nconst finalObject = {\n  video_urls: formattedList,\n  id: \"2323\"\n};\n// 5. Trả về kết quả\n// Quan trọng: Dùng JSON.stringify() để biến object thành chuỗi text như bạn muốn\nreturn {\n  json: {\n    output: JSON.stringify(finalObject)\n  }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        736,
        1648
      ],
      "id": "fa5f929e-86ea-4f43-8d5e-e81db33bdcd1",
      "name": "Code in JavaScript"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.geminigen.ai/uapi/v1/generate_image",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "={{ $json.output.image_prompt }}"
            },
            {
              "name": "model",
              "value": "nano-banana-2"
            },
            {
              "name": "aspect_ratio",
              "value": "9:16"
            },
            {
              "name": "style",
              "value": "Photorealistic"
            },
            {
              "name": "file_urls",
              "value": "YOUR_PRODUCT_IMAGE_URL"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        576,
        352
      ],
      "id": "72ac4b92-544f-4b96-a580-c3dfe72fa255",
      "name": "Generate Image"
    },
    {
      "parameters": {
        "url": "=https://api.geminigen.ai/uapi/v1/history/{{ $json.uuid }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        944,
        352
      ],
      "id": "0048b623-cc1c-4b55-9df5-4120a3f742ae",
      "name": "Get Image"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://YOUR-NCA-TOOLKIT-URL/v1/video/concatenate",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR_X_API_KEY"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ $json.output }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        944,
        1648
      ],
      "id": "269fd8db-0873-4bfe-92a7-09cc9049e6b5",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "resource": "media"
      },
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "typeVersion": 2,
      "position": [
        1152,
        1648
      ],
      "id": "5af76dca-e4ed-4618-b4bf-5e95a48e6c3c",
      "name": "Upload media"
    }
  ],
  "pinData": {},
  "connections": {
    "On form submission": {
      "main": [
        [
          {
            "node": "Analyze an image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze an image": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Generate Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Get Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "VEO Video Prompt",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Structured Output Parser1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "VEO Video Prompt",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "VEO Video Prompt": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Veo3 Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Veo3 Video": {
      "main": [
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "Get Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Video": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Image": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Image": {
      "main": [
        [
          {
            "node": "VEO Video Prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Upload media",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false
  },
  "nodeGroups": [],
  "tags": []
}
