{
  "id": "u9SGQbuO50FSgnH5",
  "meta": {
    "builderVariant": "mcp",
    "aiBuilderAssisted": true
  },
  "name": "Generate an AI video ad from a product photo and publish it to YouTube",
  "tags": [],
  "nodes": [
    {
      "id": "b8817060-5383-4039-b732-c88a57921c7f",
      "name": "Receive product photo (Telegram Trigger)",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        0,
        224
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "3bee4fa4-2cb8-4d27-a368-79f9a833bb68",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "c1",
              "name": "ai_model",
              "type": "string",
              "value": "gpt-5.4"
            },
            {
              "id": "c2",
              "name": "vision_model",
              "type": "string",
              "value": "gpt-4o-mini"
            },
            {
              "id": "c3",
              "name": "video_model",
              "type": "string",
              "value": "bytedance/seedance-2.0/text-to-video"
            },
            {
              "id": "c4",
              "name": "video_duration",
              "type": "number",
              "value": 8
            },
            {
              "id": "c5",
              "name": "aspect_ratio",
              "type": "string",
              "value": "9:16"
            },
            {
              "id": "c6",
              "name": "generate_audio",
              "type": "boolean",
              "value": true
            },
            {
              "id": "c7",
              "name": "output_language",
              "type": "string",
              "value": "English"
            },
            {
              "id": "c8",
              "name": "poll_interval_seconds",
              "type": "number",
              "value": 15
            },
            {
              "id": "c9",
              "name": "youtube_privacy",
              "type": "string",
              "value": "unlisted"
            },
            {
              "id": "c10",
              "name": "campaign",
              "type": "string",
              "value": "={{ $('Receive product photo (Telegram Trigger)').item.json.message.caption || 'general product ad' }}"
            },
            {
              "id": "c11",
              "name": "chat_id",
              "type": "string",
              "value": "={{ $('Receive product photo (Telegram Trigger)').item.json.message.chat.id }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "9e569c78-9dcb-4733-a00c-1ca22700cb8d",
      "name": "Download product photo",
      "type": "n8n-nodes-base.telegram",
      "position": [
        448,
        192
      ],
      "parameters": {
        "fileId": "={{ $('Receive product photo (Telegram Trigger)').item.json.message.photo.at(-1).file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4d220468-457e-449a-9daf-be0707808c92",
      "name": "Analyze product photo (OpenAI Vision)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        672,
        192
      ],
      "parameters": {
        "text": "Describe this product in full detail for an advertising video: exact colors, shape, material, texture, logo/branding and any distinctive features. Ignore the background. Focus only on the product.",
        "images": {
          "values": [
            {}
          ]
        },
        "modelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Configuration').item.json.vision_model }}"
        },
        "options": {
          "detail": "auto"
        },
        "resource": "image",
        "inputType": "base64",
        "operation": "analyze"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "3d725d59-d00e-4882-b4ce-5af941fc592e",
      "name": "Generate video ad prompt",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        896,
        192
      ],
      "parameters": {
        "text": "=Product analysis (from vision AI): {{ $('Analyze product photo (OpenAI Vision)').item.json.content }}\nCampaign / caption from user: {{ $('Configuration').item.json.campaign }}\nOutput language: {{ $('Configuration').item.json.output_language }}\nTarget duration (seconds): {{ $('Configuration').item.json.video_duration }}\nAspect ratio: {{ $('Configuration').item.json.aspect_ratio }}\n\nDesign ONE cinematic, production-ready text-to-video advertising prompt for this product, then return the JSON.",
        "options": {
          "systemMessage": "You are a senior creative director specialized in short-form vertical video ads (YouTube Shorts, TikTok, Reels).\nYou turn a product description into ONE cinematic, production-ready text-to-video prompt for an AI video model (Seedance / Veo style).\n\nRules for the video_prompt:\n- Keep the product identity accurate: color, shape, material, texture and logo must stay faithful to the analysis.\n- Describe a single continuous scene with camera movement, lighting, environment, mood and pacing suited to a vertical ad of the given duration and aspect ratio.\n- Brand-safe, realistic advertising aesthetic (packshot / lifestyle / cinematic). No surreal or fantasy elements unless implied by the campaign.\n- Avoid heavy on-screen text overlays. Return it as one line, no line breaks.\n\nAlso produce:\n- youtube_title: a punchy, honest YouTube Short title under 100 characters (no clickbait).\n- caption: an engaging YouTube description in the requested output language, with a short hook and 3-5 relevant hashtags.\n\nReturn ONLY a JSON object matching the provided schema. No commentary."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3.1
    },
    {
      "id": "941bdae4-a3f7-4498-bf44-965c1647c22c",
      "name": "Video prompt model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        864,
        416
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Configuration').item.json.ai_model }}"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "0c99616c-c05f-428d-8d27-9188a2fc9e05",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1040,
        416
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"video_prompt\": \"8-second vertical cinematic product ad: slow dolly-in on the product on a matte surface, soft studio lighting, subtle rotation, premium mood\",\n  \"youtube_title\": \"Punchy Short title under 100 characters\",\n  \"caption\": \"Engaging YouTube description with a hook and 3-5 relevant hashtags #product #ad #shorts\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "a424c828-1818-4b68-a276-758b9fba0ef1",
      "name": "Review video prompt on Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1248,
        192
      ],
      "parameters": {
        "chatId": "={{ $('Configuration').item.json.chat_id }}",
        "message": "=\ud83c\udfac Proposed video ad prompt:\n\n{{ $('Generate video ad prompt').item.json.output.video_prompt }}\n\n\ud83d\udcfa YouTube title: {{ $('Generate video ad prompt').item.json.output.youtube_title }}\n\nApprove to generate the video?",
        "options": {
          "appendAttribution": false
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d84b390b-7d1e-4713-8fc1-f897876d1197",
      "name": "Prompt approved?",
      "type": "n8n-nodes-base.if",
      "position": [
        1472,
        192
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "p1",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "6a67d965-7aae-483b-81c7-2c5f1d739306",
      "name": "Notify generating video",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1648,
        176
      ],
      "parameters": {
        "text": "\u23f3 Generating your video ad with AtlasCloud Seedance... this can take a minute.",
        "chatId": "={{ $('Configuration').item.json.chat_id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "26584fb8-6b81-4b4c-9d0c-64245ed7e22e",
      "name": "Generate video (AtlasCloud)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1920,
        96
      ],
      "parameters": {
        "url": "https://api.atlascloud.ai/api/v1/model/generateVideo",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"{{ $('Configuration').item.json.video_model }}\",\n  \"prompt\": {{ JSON.stringify($('Generate video ad prompt').item.json.output.video_prompt) }},\n  \"duration\": {{ $('Configuration').item.json.video_duration }},\n  \"aspect_ratio\": \"{{ $('Configuration').item.json.aspect_ratio }}\",\n  \"generate_audio\": {{ $('Configuration').item.json.generate_audio }}\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "167bff82-96ba-421f-bfab-eea59b16c537",
      "name": "Wait for render",
      "type": "n8n-nodes-base.wait",
      "position": [
        2144,
        96
      ],
      "parameters": {
        "amount": "={{ $('Configuration').item.json.poll_interval_seconds }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "b02c0145-b95b-41fa-b742-01a39d00fed6",
      "name": "Check video status (AtlasCloud)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2368,
        96
      ],
      "parameters": {
        "url": "=https://api.atlascloud.ai/api/v1/model/prediction/{{ $('Generate video (AtlasCloud)').item.json.data.id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "e30826bd-d8d8-4ddc-b485-62dc661aba76",
      "name": "Video ready?",
      "type": "n8n-nodes-base.if",
      "position": [
        2592,
        96
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "v1",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "completed"
            },
            {
              "id": "v2",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "succeeded"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "c4ca017a-ac87-467e-a8e5-f8f6e8308741",
      "name": "Send video preview on Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2816,
        96
      ],
      "parameters": {
        "file": "={{ $('Check video status (AtlasCloud)').item.json.data.outputs[0] }}",
        "chatId": "={{ $('Configuration').item.json.chat_id }}",
        "operation": "sendVideo",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5ad6e10a-5a2a-4e8f-8b41-2d3f263a809b",
      "name": "Review video on Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3040,
        96
      ],
      "parameters": {
        "chatId": "={{ $('Configuration').item.json.chat_id }}",
        "message": "\u2705 Your AI video ad is ready (preview above). Approve to publish it to YouTube as a Short?",
        "options": {
          "appendAttribution": false
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "75ae9b87-9346-4964-88c6-a532ef80a70c",
      "name": "Video approved?",
      "type": "n8n-nodes-base.if",
      "position": [
        3264,
        96
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a1",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "78b9ce95-a817-4d73-8ab5-9235250770f4",
      "name": "Publish to YouTube (Blotato)",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        3440,
        80
      ],
      "parameters": {
        "options": {},
        "platform": "youtube",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "8047",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/8047",
          "cachedResultName": "DR FIRASS (Dr. Firas)"
        },
        "postContentText": "={{ $('Generate video ad prompt').item.json.output.caption }}",
        "postContentMediaUrls": "={{ $('Check video status (AtlasCloud)').item.json.data.outputs[0] }}",
        "postCreateYoutubeOptionTitle": "={{ $('Generate video ad prompt').item.json.output.youtube_title }}",
        "postCreateYoutubeOptionPrivacyStatus": "={{ $('Configuration').item.json.youtube_privacy }}",
        "postCreateYoutubeOptionContainsSyntheticMedia": true
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "a5716124-a2c4-49d7-841a-500308998368",
      "name": "Notify published",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3760,
        96
      ],
      "parameters": {
        "text": "\ud83d\ude80 Sent to YouTube via Blotato - your Short will appear on your channel shortly.",
        "chatId": "={{ $('Configuration').item.json.chat_id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "57be8a08-d91d-4df5-bd94-c4b578db76b7",
      "name": "Notify video declined",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3344,
        304
      ],
      "parameters": {
        "text": "\u274c Video declined. Nothing was published. Send a new product photo to retry.",
        "chatId": "={{ $('Configuration').item.json.chat_id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a0acdf6e-a77e-4767-ac2e-76cd2ef12127",
      "name": "Notify prompt declined",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1616,
        352
      ],
      "parameters": {
        "text": "\u274c Prompt declined. Send a new product photo to start again.",
        "chatId": "={{ $('Configuration').item.json.chat_id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a2159129-4c68-4a80-aaf8-52f338009061",
      "name": "Sticky Note 9fba01b4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -560
      ],
      "parameters": {
        "width": 640,
        "height": 1948,
        "content": "# Generate an AI video ad from a product photo and publish it to YouTube\n# \ud83d\udce5  [Open full documentation on Notion](https://automatisation.notion.site/Course-Generate-an-AI-video-ad-from-a-product-photo-and-publish-it-to-YouTube-39b3d6550fd981cba160dc97f5f09c2c)\n\nSend a product photo to your Telegram bot and get a ready-to-publish AI video ad on YouTube. The bot analyzes the photo, writes a cinematic video prompt, generates a vertical video with [AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE) Seedance 2.0, and (after your approval) posts it to YouTube via [Blotato](https://blotato.com/?ref=firas). You approve the prompt and the final video before anything is published - the AI proposes, you stay in control.\n\n## How it works\n1. You send a product photo (with an optional caption/campaign) to the Telegram bot.\n2. OpenAI Vision analyzes the product; an AI agent writes a cinematic text-to-video prompt + a YouTube title & description.\n3. You approve the prompt on Telegram.\n4. AtlasCloud Seedance 2.0 generates a vertical video (the workflow polls until it is ready).\n5. You preview the video on Telegram and approve it.\n6. Blotato publishes it to YouTube as a Short, flagged as AI-generated.\n\n## Setup\n- Telegram: create a bot with @BotFather and connect it (Telegram account credential) on every Telegram node.\n- OpenAI: connect your \"OpenAi account\" credential on the Vision node and the model sub-node.\n- [AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE): create an HTTP Header Auth credential (Name: Authorization, Value: Bearer YOUR_KEY) named \"AtlasCloud API\" and select it on BOTH HTTP nodes.\n- [Blotato](https://blotato.com/?ref=firas): connect your \"Blotato account\" credential and pick your YouTube account in the publish node.\n- Open the Configuration node and set your defaults (model, duration, aspect ratio, language, privacy).\n\n## Requirements\n- n8n self-hosted (or n8n Cloud with Verified Community Nodes enabled) - Blotato is a community node.\n- A Telegram bot token, an OpenAI API key, an AtlasCloud API key, and a Blotato account with a connected YouTube channel.\n\n## Customization\n- Change the video model, duration, aspect ratio, language or YouTube privacy in the Configuration node.\n- Swap the target platform in the Blotato node (TikTok, Instagram, Facebook...).\n- Adjust the creative direction by editing the system prompt of the \"Generate video ad prompt\" agent.\n\nNeed help customizing?\nContact me for consulting and support : [Linkedin](https://www.linkedin.com/in/doctor-firass/)\n\n# MY NEW YOUTUBE CHANNEL\n\ud83d\udc49 [Subscribe to my new YouTube channel](https://www.youtube.com/@DrFiras_AI). Here I'll share videos and Shorts with practical tutorials and FREE templates for n8n.\n\n[![The AI Doctor](https://www.dr-firas.com/the-ai-doctor.png)](https://www.youtube.com/@DrFiras_AI)"
      },
      "typeVersion": 1
    },
    {
      "id": "f64c2e32-3711-49f6-998c-3e9249bef992",
      "name": "Sticky Note 07d3096e",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 360,
        "content": "## 1. Receive & configure\nProduct photo arrives on Telegram. The Configuration node centralizes every adjustable setting (model, duration, aspect ratio, language, privacy) - set them once here."
      },
      "typeVersion": 1
    },
    {
      "id": "279928d1-a3b7-481f-98d6-caa27bef37ba",
      "name": "Sticky Note 702908b4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 770,
        "height": 560,
        "content": "## 2. Analyze product & write video prompt\nVision reads the product; the agent writes a cinematic text-to-video prompt + a YouTube title and description."
      },
      "typeVersion": 1
    },
    {
      "id": "8a202ff0-fbc8-4f84-aadd-7aa5a22a242a",
      "name": "Sticky Note 3fb8058a",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 520,
        "height": 472,
        "content": "## 3. Human approval (prompt)\nYou approve or decline the proposed prompt on Telegram before any video is generated."
      },
      "typeVersion": 1
    },
    {
      "id": "ba1421ed-5e84-4691-aeca-d0c09f908c86",
      "name": "Sticky Note d2108aae",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1840,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 940,
        "height": 360,
        "content": "## 4. Generate video with AtlasCloud (poll)\nSeedance 2.0 generates the vertical video. The workflow waits and polls the prediction until status is completed/succeeded."
      },
      "typeVersion": 1
    },
    {
      "id": "65bb9e0b-0715-472b-bc48-9efc3d98e81e",
      "name": "Sticky Note 430dbedd",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2800,
        -64
      ],
      "parameters": {
        "color": 7,
        "width": 740,
        "height": 528,
        "content": "## 5. Preview & approve video\nThe generated video is previewed on Telegram; you approve it before publishing."
      },
      "typeVersion": 1
    },
    {
      "id": "aad73fd2-a5ea-4841-86a0-afb4ac658878",
      "name": "Sticky Note 5a9757be",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3584,
        -64
      ],
      "parameters": {
        "color": 7,
        "width": 460,
        "height": 532,
        "content": "## 6. Publish to YouTube via Blotato\nBlotato posts the video to YouTube as a Short, flagged as AI-generated (synthetic media)."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": true,
    "executionOrder": "v1"
  },
  "versionId": "d2a50ce6-5070-425e-8b60-40c4d056a002",
  "nodeGroups": [],
  "connections": {
    "Video ready?": {
      "main": [
        [
          {
            "node": "Send video preview on Telegram",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait for render",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configuration": {
      "main": [
        [
          {
            "node": "Download product photo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Video approved?": {
      "main": [
        [
          {
            "node": "Publish to YouTube (Blotato)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify video declined",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for render": {
      "main": [
        [
          {
            "node": "Check video status (AtlasCloud)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prompt approved?": {
      "main": [
        [
          {
            "node": "Notify generating video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify prompt declined",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Video prompt model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate video ad prompt",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Download product photo": {
      "main": [
        [
          {
            "node": "Analyze product photo (OpenAI Vision)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify generating video": {
      "main": [
        [
          {
            "node": "Generate video (AtlasCloud)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate video ad prompt": {
      "main": [
        [
          {
            "node": "Review video prompt on Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Review video on Telegram": {
      "main": [
        [
          {
            "node": "Video approved?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Generate video ad prompt",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Generate video (AtlasCloud)": {
      "main": [
        [
          {
            "node": "Wait for render",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to YouTube (Blotato)": {
      "main": [
        [
          {
            "node": "Notify published",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send video preview on Telegram": {
      "main": [
        [
          {
            "node": "Review video on Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check video status (AtlasCloud)": {
      "main": [
        [
          {
            "node": "Video ready?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Review video prompt on Telegram": {
      "main": [
        [
          {
            "node": "Prompt approved?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze product photo (OpenAI Vision)": {
      "main": [
        [
          {
            "node": "Generate video ad prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive product photo (Telegram Trigger)": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}