End-to-end UGC overlay with degaus

    You can generate end-to-end UGC Overlays / talking heads from just one product image. This workflow understands the product, generates the script, generates the A-roll and B-roll, and fully edits it in a ready made end-to-end ad

    Shared 12/22/2025

    42 views

    Visual Workflow

    JSON Code

    {
      "id": "n53S93Zz4bRnBX4R",
      "meta": {
        "instanceId": "28fca458a4f03b4ef51827c7585755ab680738d185a73962d747481e60ea16a0",
        "templateCredsSetupCompleted": true
      },
      "name": "Degaus - UGC overlay (simple)",
      "tags": [],
      "nodes": [
        {
          "id": "89af89a5-7d59-4a26-a7f2-d987e4809f15",
          "name": "Media Upload Instructions",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -96,
            48
          ],
          "parameters": {
            "width": 400,
            "height": 560,
            "content": "## 📁 Media Upload (Optional)\n\n**To upload new media files:**\n1. Click \"Execute Step\" on the \"Select Files\" node\n2. Select your files in the form that opens; you can leave fields empty to use existing workflow media\n3. Run all nodes up to and including \"Collect Uploads\"\n4. After upload completes, **pin the output** of all nodes up to and including \"Collect Uploads\" (right-click → Pin) to avoid running them again\n\n## ✏️ Changing Prompts\n\nClick on the \"Change Prompts\" node to manually edit prompts. Leave them as-is or empty to use the ones already in the blueprint. Do not change the media ID links or the uploaded files will not work.\n\n## 🔑 Authentication\n\n**Before running:** Save General Cred Type=>Bearer token=>Paste the key"
          },
          "typeVersion": 1
        },
        {
          "id": "6ece837f-1ded-4bb5-9076-1732afa9161d",
          "name": "Select Files",
          "type": "n8n-nodes-base.formTrigger",
          "position": [
            368,
            176
          ],
          "webhookId": "05d3b196-5f0b-4821-84a5-8b7ce02d0fb6",
          "parameters": {
            "options": {},
            "formTitle": "Upload Media Files (Optional)",
            "formFields": {
              "values": [
                {
                  "fieldType": "file",
                  "fieldLabel": "Product Image",
                  "acceptFileTypes": ".jpg, .jpeg, .png, .webp"
                }
              ]
            },
            "formDescription": "Upload files to override the media inputs, or leave empty to use the existing media in the blueprint."
          },
          "typeVersion": 2.3
        },
        {
          "id": "f76674f4-3690-4452-9922-0951d417067a",
          "name": "Split Files",
          "type": "n8n-nodes-base.code",
          "position": [
            592,
            176
          ],
          "parameters": {
            "jsCode": "// Split form binary fields into separate items for individual upload\nconst fieldMappings = [{\"fieldName\":\"Product_Image\"}];\nconst items = [];\n\nfor (const mapping of fieldMappings) {\n  const binaryData = $input.first().binary?.[mapping.fieldName];\n\n  if (binaryData) {\n    items.push({\n      json: { fieldName: mapping.fieldName },\n      binary: { file: binaryData }\n    });\n  }\n}\n\n// Return empty marker if no files uploaded\nreturn items.length > 0 ? items : [{ json: { noFiles: true } }];\n"
          },
          "typeVersion": 2
        },
        {
          "id": "14c86363-f121-468b-9f78-f19ec3d883d0",
          "name": "Has File?",
          "type": "n8n-nodes-base.if",
          "position": [
            816,
            176
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "idcph9eb-miwtuswi",
                  "operator": {
                    "type": "string",
                    "operation": "notEquals"
                  },
                  "leftValue": "={{ $json.fieldName }}",
                  "rightValue": ""
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "b6119412-a9c6-49f7-a5db-562bec54f718",
          "name": "Upload File",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            1040,
            112
          ],
          "parameters": {
            "url": "https://api.degaus.com/api/v1/media/upload",
            "method": "POST",
            "options": {
              "response": {
                "response": {
                  "responseFormat": "json"
                }
              }
            },
            "sendBody": true,
            "contentType": "multipart-form-data",
            "authentication": "genericCredentialType",
            "bodyParameters": {
              "parameters": [
                {
                  "name": "={{ $json.fieldName }}",
                  "parameterType": "formBinaryData",
                  "inputDataFieldName": "file"
                }
              ]
            },
            "genericAuthType": "httpBearerAuth"
          },
          "credentials": {
            "httpBearerAuth": {
              "id": "Jr79Mjyo9St3z7WL",
              "name": "Mat's dgs bearer token"
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "4502833a-e74c-465c-bdfa-b69217f746ff",
          "name": "Collect Uploads",
          "type": "n8n-nodes-base.code",
          "position": [
            1264,
            176
          ],
          "parameters": {
            "jsCode": "// Collect upload results into a single object keyed by field name\nconst uploads = {};\n\nfor (const item of $input.all()) {\n  const response = item.json;\n\n  // Handle response format: { uploads: { fieldName: { mediaId, url, mimeType } } }\n  if (response.uploads) {\n    for (const [fieldName, data] of Object.entries(response.uploads)) {\n      uploads[fieldName] = data;\n    }\n  }\n  // Handle alternative format: { mediaId, url, mimeType } with fieldName preserved\n  else if (response.mediaId && response.fieldName) {\n    uploads[response.fieldName] = {\n      mediaId: response.mediaId,\n      url: response.url,\n      mimeType: response.mimeType\n    };\n  }\n}\n\nreturn [{\n  json: {\n    uploads,\n    uploadCount: Object.keys(uploads).length\n  }\n}];\n"
          },
          "typeVersion": 2
        },
        {
          "id": "3c1d98e3-b126-4d60-a4ba-c4eda39bc355",
          "name": "Change Prompts",
          "type": "n8n-nodes-base.set",
          "notes": "Text values are editable. Media IDs auto-populate from uploads, or use existing if no file uploaded.",
          "position": [
            352,
            976
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "yjlad21l-miwtuswi",
                  "name": "prompt_b_roll_1_image_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_1_image_gen }}"
                },
                {
                  "id": "7069an13-miwtuswi",
                  "name": "prompt_b_roll_1_video_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_1_video_gen }}"
                },
                {
                  "id": "rw5s4jcj-miwtuswi",
                  "name": "prompt_b_roll_2_image_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_2_image_gen }}"
                },
                {
                  "id": "wzz8xte6-miwtuswi",
                  "name": "prompt_b_roll_2_video_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_2_video_gen }}"
                },
                {
                  "id": "0khfpfii-miwtuswi",
                  "name": "prompt_b_roll_3_image_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_3_image_gen }}"
                },
                {
                  "id": "c475nj78-miwtuswi",
                  "name": "prompt_b_roll_3_video_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_3_video_gen }}"
                },
                {
                  "id": "ijosi2oz-miwtuswi",
                  "name": "prompt_b_roll_4_image_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_4_image_gen }}"
                },
                {
                  "id": "0cwk0h8o-miwtuswi",
                  "name": "prompt_b_roll_4_video_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_4_video_gen }}"
                },
                {
                  "id": "d3395842-d4e7-4cc2-9d6d-6ce4d5cd4323",
                  "name": "prompt_b_roll_5_image_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_5_image_gen }}"
                },
                {
                  "id": "eff30c27-af69-4b88-ae06-483c90d6119d",
                  "name": "prompt_b_roll_5_video_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_b_roll_5_video_gen }}"
                },
                {
                  "id": "oz6o20uv-miwtuswi",
                  "name": "prompt_a_roll_video_gen",
                  "type": "string",
                  "value": "={{ $json.output.prompt_a_roll_video_gen }}"
                },
                {
                  "id": "qmjwyegi-miwtuswi",
                  "name": "image_image_product",
                  "type": "string",
                  "value": "={{ $('Collect Uploads').item.json.uploads?.['Product_Image']?.mediaId }}"
                }
              ]
            }
          },
          "notesInFlow": true,
          "typeVersion": 3.4
        },
        {
          "id": "9dceb177-6144-4c41-963b-4dae595364a3",
          "name": "Upload Section",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            320,
            48
          ],
          "parameters": {
            "color": 5,
            "width": 1168,
            "height": 300,
            "content": "## Upload Section"
          },
          "typeVersion": 1
        },
        {
          "id": "40483fd8-4c72-4181-839e-eb8e12579136",
          "name": "Run Workflow",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            688,
            976
          ],
          "parameters": {
            "url": "=https://api.degaus.com/api/v1/blueprints/{{ $('Set Blueprint ID').item.json.blueprint_id }}/runs",
            "method": "POST",
            "options": {
              "response": {
                "response": {
                  "responseFormat": "json"
                }
              }
            },
            "jsonBody": "={{ $json.string }}",
            "sendBody": true,
            "specifyBody": "json",
            "authentication": "genericCredentialType",
            "genericAuthType": "httpBearerAuth"
          },
          "credentials": {
            "httpBearerAuth": {
              "id": "Jr79Mjyo9St3z7WL",
              "name": "Mat's dgs bearer token"
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "7ca2f346-1fc5-42fb-a333-87cf8bfc9712",
          "name": "Check Run Status",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            1072,
            912
          ],
          "parameters": {
            "url": "=https://api.degaus.com/api/v1/runs/{{ $('Run Workflow').item.json.runId }}",
            "options": {
              "response": {
                "response": {
                  "responseFormat": "json"
                }
              }
            },
            "authentication": "genericCredentialType",
            "genericAuthType": "httpBearerAuth"
          },
          "credentials": {
            "httpBearerAuth": {
              "id": "Jr79Mjyo9St3z7WL",
              "name": "Mat's dgs bearer token"
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "64949461-d780-42c2-80f6-6b7ed295da0a",
          "name": "Still Running?",
          "type": "n8n-nodes-base.if",
          "position": [
            1312,
            976
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "7ktgxyun-miwtuswi",
                  "operator": {
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json.status }}",
                  "rightValue": "running"
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "eae2b97e-d32a-4618-8224-afa4d6860838",
          "name": "Run Successful?",
          "type": "n8n-nodes-base.if",
          "position": [
            368,
            1312
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "q049erv5-miwtuswi",
                  "operator": {
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json.status }}",
                  "rightValue": "succeeded"
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "7d20e863-e7e7-4b3a-9725-e461e2def895",
          "name": "Blueprint Run Failed",
          "type": "n8n-nodes-base.stopAndError",
          "position": [
            576,
            1328
          ],
          "parameters": {
            "errorMessage": "=Blueprint run failed with status: {{ $('Check Run Status').item.json.status }}"
          },
          "typeVersion": 1
        },
        {
          "id": "8d41ef6c-40f4-44dc-b46a-443e5b5e00ab",
          "name": "Results",
          "type": "n8n-nodes-base.set",
          "notes": "All workflow outputs",
          "position": [
            576,
            1504
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "448783f6-ea93-4d9c-b37e-3fd83a6383ba",
                  "name": "product",
                  "type": "string",
                  "value": "={{ $('Visual Context Gen').item.json.output.ProductNameBrand }}"
                },
                {
                  "id": "15153997-141d-4bd4-8fac-2bf4649cc181",
                  "name": "hook",
                  "type": "string",
                  "value": "={{ $('Set Vars').item.json.hook }}"
                },
                {
                  "id": "7twe3lrj-miwtuswi",
                  "name": "video_url",
                  "type": "string",
                  "value": "={{ (($json.steps || []).find(step => step.stepId === \"1f29a7cb-f148-4c9b-a9d3-d20a243bdaf6\")?.outputs?.[0] || {}).url }}"
                },
                {
                  "id": "cd782b3a-4195-4f98-9a97-ad55477511e7",
                  "name": "image_url",
                  "type": "string",
                  "value": "={{ $('Collect Uploads').item.json.uploads.Product_Image.url }}"
                },
                {
                  "id": "c3c31527-a32b-41e7-8bc3-46aa47998ec9",
                  "name": "date",
                  "type": "string",
                  "value": "={{ $now.format('yyyy-MM-dd') }}"
                }
              ]
            }
          },
          "notesInFlow": true,
          "typeVersion": 3.4
        },
        {
          "id": "9a51a9d4-13d4-4a2b-8910-5740ef86e137",
          "name": "Run Section",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            320,
            848
          ],
          "parameters": {
            "color": 5,
            "width": 1168,
            "height": 364,
            "content": "## Run Degaus Workflow"
          },
          "typeVersion": 1
        },
        {
          "id": "2ff416b8-3e71-41c4-86f5-d62d0c632b22",
          "name": "Visual Context Gen",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            528,
            448
          ],
          "parameters": {
            "text": "=Here is the product info and other details:\n\n{{ $json.choices[0].message.content }}\n\nPlease analyze and provide a JSON output with the following fields:\n\nProductNameBrand: Extract and provide the full product name and brand.\n\nProductTypeDescription: Give a concise but enriched description of the product type, what it's used for, its packaging, and its benefits compared to other similar products. Use websearch if needed to understand what the product is about.\n\nFormat the output exactly as a JSON object.",
            "options": {
              "systemMessage": "=You are a creative director that generates iphone-style UGC advert for tiktok. You will create A-roll and B-roll prompts for – the goal is to make them feel as natural as possible, the less “ad” the better, this is what converts the best.\n\nYou will receive structured creative input in JSON format containing:\n\nproduct\nproduct_info\nworking_example\n\nThe working_example field contains sample prompts that produce the best results for a similar video. Make sure to variate only as much as you need for it to make sense in relation to the product, keep the original sentiment. \n\nFor prompt a-roll video gen: you must generate a 25 seconds long UGC video; it’s important that your script is at least 25 seconds, otherwise the model will hallucinate. \n\nMake the script as natural as possible. Make sure it starts with a strong, catchy hook (eg: for a sunscreen product: “I threw away all my sunscreens…”; for skin care “I couldn’t stop breaking out…”). Then naturally say the ProductNameBrand and mention 2–3 real benefits from ProductTypeDescription. When creating the description for the person, have a bias towards hot person (eg: hot girl in her early 20s, blue eyes, brunette, slight tan).  Make sure it makes sense for the product; eg: for talking about diapers it should be a mom, for talking about male skin care it should be a man. Unless it makes sense for the category (eg: wrinkles solution -> old person, looking hot), have a bias towards young and attractive people; keep the tan where possible. Use the working_example field to variate only as much as you need for it to make sense in relation to the product. \n\nFor prompt b-roll image gen: make sure to variate only as much as you need for it to make sense in relation to the product, keep the original style and sentiment; for instance for a cream: dollup on the back of the hand makes sense, for an icecream: holding it in her hand makes sense; for dissolvable powder, scooping it in a spoon makes sense; for a banana, holding it in her hand makes sense; for a product showcase, showing holding the product makes sense.\n\nFor prompt b-roll video gen: Based on the below product overview, and previous image prompt, generate a B-roll video to animate the image. Keep the prompt simple and focus on camera motions like: Dolly in / out: move closer / farther, Slide left / right: move sideways, Tilt up / down: turn camera up/down, Orbit / arc: move around the product. If there is a required motion, make sure it makes sense in that context; eg a woman scooping a product, a hand applying the product. Make sure to make it very descriptive but in few words.\n\nSTRICT OUTPUT FORMAT (DO NOT CHANGE ANY KEYS)\n\nReturn ONLY this object:\n\n{\n\"prompt_b_roll_1_image_gen\": \"prompt\",\n\"prompt_b_roll_1_video_gen\": \"prompt\",\n\"prompt_b_roll_2_image_gen\": \"prompt\",\n\"prompt_b_roll_2_video_gen\": \"prompt\",\n\"prompt_b_roll_3_image_gen\": \"prompt\",\n\"prompt_b_roll_3_video_gen\": \"prompt\",\n\"prompt_b_roll_4_image_gen\": \"prompt\",\n\"prompt_b_roll_4_video_gen\": \"prompt\",\n\"prompt_b_roll_5_image_gen\": \"prompt\",\n\"prompt_b_roll_5_video_gen\": \"prompt\",\n\"prompt_a_roll_video_gen\": \"prompt\"\n}\n\nEach value must be a single clean text prompt\n\nNo arrays\nNo nested objects\nNo explanations\nNo markdown\nNo extra output"
            },
            "promptType": "define",
            "hasOutputParser": true
          },
          "retryOnFail": true,
          "typeVersion": 3
        },
        {
          "id": "b84195bc-8a7a-4f40-9aa4-2f9534cf8296",
          "name": "Visual Context Gen Output Parser",
          "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
          "position": [
            688,
            656
          ],
          "parameters": {
            "schemaType": "manual",
            "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"ProductNameBrand\": {\n      \"type\": \"string\"\n    },\n    \"ProductTypeDescription\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"ProductNameBrand\",\n    \"ProductTypeDescription\"\n  ],\n  \"additionalProperties\": false\n}\n"
          },
          "typeVersion": 1.3
        },
        {
          "id": "96abce27-60d9-4de7-912e-fce6ddd16503",
          "name": "UGC Video Script Gen Output Parser",
          "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
          "position": [
            1328,
            672
          ],
          "parameters": {
            "schemaType": "manual",
            "inputSchema": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"required\": [\n    \"prompt_b_roll_1_image_gen\",\n    \"prompt_b_roll_1_video_gen\",\n    \"prompt_b_roll_2_image_gen\",\n    \"prompt_b_roll_2_video_gen\",\n    \"prompt_b_roll_3_image_gen\",\n    \"prompt_b_roll_3_video_gen\",\n    \"prompt_b_roll_4_image_gen\",\n    \"prompt_b_roll_4_video_gen\",\n    \"prompt_b_roll_5_image_gen\",\n    \"prompt_b_roll_5_video_gen\",\n    \"prompt_a_roll_video_gen\"\n  ],\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"prompt_b_roll_1_image_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_1_video_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_2_image_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_2_video_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_3_image_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_3_video_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_4_image_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_4_video_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_5_image_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_b_roll_5_video_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"prompt_a_roll_video_gen\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    }\n  }\n}\n"
          },
          "typeVersion": 1.3
        },
        {
          "id": "0f124d36-a043-4c28-80fe-d53367cc22c3",
          "name": "Prompts Gen",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            1248,
            448
          ],
          "parameters": {
            "text": "=product: {{ $('Set Vars').item.json.product}}\nproduct_info: {{ $('Set Vars').item.json.product_info }}\nworking_example: {{ JSON.stringify($json.inputs.filter(item => item.targetField === 'stepPrompt').map(item => ({ name: item.name, currentValue: item.currentValue }))) }}",
            "options": {
              "systemMessage": "=You are a creative director that generates iphone-style UGC advert for tiktok. You will create A-roll and B-roll prompts for – the goal is to make them feel as natural as possible, the less “ad” the better, this is what converts the best.\n\nYou will receive structured creative input in JSON format containing:\n\nproduct\nproduct_info\nworking_example\n\nThe working_example field contains sample prompts that produce the best results for a similar video. Make sure to variate only as much as you need for it to make sense in relation to the product, keep the original sentiment. \n\nFor prompt a-roll video gen: you must generate a 25 seconds long UGC video; it’s important that your script is at least 25 seconds, otherwise the model will hallucinate. Make the script as natural as possible. Make sure it starts with a strong, catchy hook (eg: for a sunscreen product: “I threw away all my sunscreens…”; for skin care “I couldn’t stop breaking out…”). Then naturally say the ProductNameBrand and mention 2–3 real benefits from ProductTypeDescription. When creating the description for the person, have a bias towards hot person (eg: hot girl in her early 20s, blue eyes, brunette, slight tan).  Make sure it makes sense for the product; eg: for talking about diapers it should be a mom, for talking about male skin care it should be a man. Unless it makes sense for the category (eg: wrinkles solution -> old person, looking hot), have a bias towards young and attractive people; keep the tan where possible. Use the working_example field to variate only as much as you need for it to make sense in relation to the product. \n\nFor prompt b-roll image gen: make sure to variate only as much as you need for it to make sense in relation to the product, keep the original style and sentiment; for instance for a cream: dollup on the back of the hand makes sense, for an icecream: holding it in her hand makes sense; for dissolvable powder, scooping it in a spoon makes sense; for a banana, holding it in her hand makes sense; for a product showcase, showing holding the product makes sense.\n\nFor prompt b-roll video gen: Based on the below product overview, and previous image prompt, generate a B-roll video to animate the image. Keep the prompt simple and focus on camera motions like: Dolly in / out: move closer / farther, Slide left / right: move sideways, Tilt up / down: turn camera up/down, Orbit / arc: move around the product. If there is a required motion, make sure it makes sense in that context; eg a woman scooping a product, a hand applying the product. Make sure to make it very descriptive but in few words.\n\nIn general, make the scene cohesive (eg: if talking about a skin care product → bedroom or bathroom setting; if a health food supplement → kitchen), avoid things that are difficult for AI to reproduce like golden hour light, complex mirror shots, or text.\n\nSTRICT OUTPUT FORMAT (DO NOT CHANGE ANY KEYS)\n\nReturn ONLY this object:\n\n{\n\"prompt_b_roll_1_image_gen\": \"prompt\",\n\"prompt_b_roll_1_video_gen\": \"prompt\",\n\"prompt_b_roll_2_image_gen\": \"prompt\",\n\"prompt_b_roll_2_video_gen\": \"prompt\",\n\"prompt_b_roll_3_image_gen\": \"prompt\",\n\"prompt_b_roll_3_video_gen\": \"prompt\",\n\"prompt_b_roll_4_image_gen\": \"prompt\",\n\"prompt_b_roll_4_video_gen\": \"prompt\",\n\"prompt_b_roll_5_image_gen\": \"prompt\",\n\"prompt_b_roll_5_video_gen\": \"prompt\",\n\"prompt_a_roll_video_gen\": \"prompt\"\n}\n\nEach value must be a single clean text prompt\n\nNo arrays\nNo nested objects\nNo explanations\nNo markdown\nNo extra output"
            },
            "promptType": "define",
            "hasOutputParser": true
          },
          "retryOnFail": true,
          "typeVersion": 3
        },
        {
          "id": "98e0ff5b-0655-4064-9c68-e3c0d3c40581",
          "name": "Set Vars",
          "type": "n8n-nodes-base.set",
          "position": [
            800,
            448
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "51c2e14c-528d-4940-a767-053c8025ffe7",
                  "name": "product",
                  "type": "string",
                  "value": "={{ $('Visual Context Gen').item.json.output.ProductNameBrand }}"
                },
                {
                  "id": "1de98522-c1c9-42f7-91a1-bc7e91f38e40",
                  "name": "product_info",
                  "type": "string",
                  "value": "={{ $('Visual Context Gen').item.json.output.ProductTypeDescription }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "190f9897-5f45-4e97-a887-934a270616e7",
          "name": "Send a message",
          "type": "n8n-nodes-base.gmail",
          "position": [
            1072,
            1520
          ],
          "webhookId": "bab5e9b4-7d8d-4a83-8808-54a2eb8c4a1f",
          "parameters": {
            "sendTo": "your@gmail.com",
            "message": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n  <title>UGC Video Content</title>\n</head>\n<body style=\"font-family: Arial, sans-serif; color: #333; line-height: 1.5; margin: 0; padding: 20px;\">\n  <h2 style=\"color: #2c3e50;\">Check Out Your New UGC Video for {{ $json.product }}</h2>\n\n  <p>You can watch the generated video by clicking the link below:</p>\n  <p>\n    <a href=\"{{ $json.video_url }}\" target=\"_blank\" style=\"color: #2980b9; font-weight: bold; text-decoration: none;\">Watch Your UGC Video</a>\n  </p>\n  \n  <p><strong>Hook:</strong> <em>\"{{ $json.hook }}\"</em></p>\n  <p><strong>Image:</strong> \n  <a href=\"{{ $json.image_url }}\" target=\"_blank\" style=\"color: #2980b9; font-weight: bold; text-decoration: none;\">View The Input Image</a>\n  </p>\n  <p><strong>Date:</strong> <em>\"{{ $json.date }}\"</em></p>\n  \n  <p>Feel free to share this video or use it in your campaigns!</p>\n  \n  <p>Degaus</p>\n</body>\n</html>\n",
            "options": {},
            "subject": "={{ $('Set Vars').item.json.product }} UGC Video - Degaus "
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "GJK7jlRcgYZGEg9I",
              "name": "Gmail account"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "12f80c8d-1f5c-472b-b7cb-41481c6b0037",
          "name": "Wait 5 Mins",
          "type": "n8n-nodes-base.wait",
          "position": [
            864,
            976
          ],
          "webhookId": "827b686c-1d2e-4145-9fa0-51e1414febc7",
          "parameters": {
            "unit": "minutes"
          },
          "typeVersion": 1.1
        },
        {
          "id": "3ca23693-468d-4f2e-99e1-40827ac867ce",
          "name": "Workflow Payload",
          "type": "n8n-nodes-base.code",
          "position": [
            528,
            976
          ],
          "parameters": {
            "jsCode": "const prompts = $input.first().json\nconst data= {\n  inputs: [\n    // B-Roll 1\n    { stepName: \"b-roll-1-video-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_1_video_gen },\n    { stepName: \"b-roll-1-image-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_1_image_gen },\n\n    // B-Roll 2\n    { stepName: \"b-roll-2-video-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_2_video_gen },\n    { stepName: \"b-roll-2-image-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_2_image_gen },\n\n    // B-Roll 3\n    { stepName: \"b-roll-3-video-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_3_video_gen },\n    { stepName: \"b-roll-3-image-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_3_image_gen },\n\n    // B-Roll 4\n    { stepName: \"b-roll-4-video-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_4_video_gen },\n    { stepName: \"b-roll-4-image-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_4_image_gen },\n\n    // B-Roll 4\n    { stepName: \"b-roll-5-video-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_5_video_gen },\n    { stepName: \"b-roll-5-image-gen\", targetField: \"stepPrompt\", value: prompts.prompt_b_roll_5_image_gen },\n\n    // A-Roll\n    { stepName: \"a-roll-video-gen\", targetField: \"stepPrompt\", value: prompts.prompt_a_roll_video_gen },\n\n    // Product Image\n    { stepName: \"image_product\", targetField: \"stepMedia\", value: prompts.image_image_product }\n  ].filter(i => i.value && String(i.value).trim() !== \"\")\n}\n\nreturn {\n  data,\n  string: JSON.stringify(data)\n}\n\n"
          },
          "typeVersion": 2
        },
        {
          "id": "1cb650ea-57b1-419e-af46-7ace563387e0",
          "name": "Save In Sheet",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            1248,
            1424
          ],
          "parameters": {
            "columns": {
              "value": {},
              "schema": [
                {
                  "id": "product",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "product",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "hook",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "hook",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "video_url",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "video_url",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "image_url",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "image_url",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "date",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "date",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "autoMapInputData",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": "gid=0",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cNy-hvuwwzrVJigGjWvrE1K_K5EdBwdUtE-WIO8j9sw/edit#gid=0",
              "cachedResultName": "outputs"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "1cNy-hvuwwzrVJigGjWvrE1K_K5EdBwdUtE-WIO8j9sw",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cNy-hvuwwzrVJigGjWvrE1K_K5EdBwdUtE-WIO8j9sw/edit?usp=drivesdk",
              "cachedResultName": "Degaus - UGC Gen"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "40aWOuPvQL7eHPDU",
              "name": "Google Sheets account"
            }
          },
          "typeVersion": 4.7
        },
        {
          "id": "4a79dbc7-8de8-4b48-bd5c-b994163e3286",
          "name": "Upload Section3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            320,
            352
          ],
          "parameters": {
            "color": 6,
            "width": 1168,
            "height": 508,
            "content": "## Script Selection And Degaus Prompts Gen"
          },
          "typeVersion": 1
        },
        {
          "id": "c704de8f-80b9-4ac0-b289-2ae38f3140fc",
          "name": "Run Section1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            320,
            1216
          ],
          "parameters": {
            "color": 6,
            "width": 688,
            "height": 460,
            "content": "## Output/Results"
          },
          "typeVersion": 1
        },
        {
          "id": "e131643e-83c2-4f1c-83e1-45fd23bc25e7",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1008,
            1216
          ],
          "parameters": {
            "color": 3,
            "width": 496,
            "height": 464,
            "content": "## Handle Error"
          },
          "typeVersion": 1
        },
        {
          "id": "56a7f7c1-a372-408c-8c84-d4cda2a94f3c",
          "name": "Error Trigger",
          "type": "n8n-nodes-base.errorTrigger",
          "position": [
            1056,
            1312
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "eb75f37a-bf44-416f-b74e-32144d77f745",
          "name": "Send a error",
          "type": "n8n-nodes-base.gmail",
          "position": [
            1312,
            1248
          ],
          "webhookId": "523a7864-3218-4698-b358-da993bc463d0",
          "parameters": {
            "sendTo": "your@gmail.com",
            "message": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Workflow Error Notification</title>\n</head>\n<body style=\"margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: #f5f5f5;\">\n    <table role=\"presentation\" style=\"width: 100%; border-collapse: collapse;\">\n        <tr>\n            <td style=\"padding: 40px 20px;\">\n                <table role=\"presentation\" style=\"max-width: 600px; margin: 0 auto; background-color: #ffffff; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\">\n                    <!-- Header -->\n                    <tr>\n                        <td style=\"background: linear-gradient(135deg, #ff4757 0%, #ff6348 100%); padding: 30px; border-radius: 8px 8px 0 0; text-align: center;\">\n                            <h1 style=\"margin: 0; color: #ffffff; font-size: 24px; font-weight: 600;\">⚠️ Workflow Error Alert</h1>\n                        </td>\n                    </tr>\n                    \n                    <!-- Content -->\n                    <tr>\n                        <td style=\"padding: 40px 30px;\">\n                            <p style=\"margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.6;\">\n                                An error occurred in your n8n workflow execution. Please review the details below:\n                            </p>\n                            \n                            <!-- Error Details Box -->\n                            <table role=\"presentation\" style=\"width: 100%; border-collapse: collapse; margin: 20px 0;\">\n                                <tr>\n                                    <td style=\"background-color: #fff5f5; border-left: 4px solid #ff4757; padding: 20px; border-radius: 4px;\">\n                                        <h2 style=\"margin: 0 0 15px; color: #ff4757; font-size: 18px; font-weight: 600;\">Error Message</h2>\n                                        <p style=\"margin: 0; color: #666666; font-size: 14px; font-family: 'Courier New', monospace; white-space: pre-wrap; word-break: break-word;\">{{ $json.execution.error.message }}</p>\n                                    </td>\n                                </tr>\n                            </table>\n                            \n                            <!-- Workflow Info -->\n                            <table role=\"presentation\" style=\"width: 100%; border-collapse: collapse; margin: 25px 0;\">\n                                <tr>\n                                    <td style=\"padding: 12px 0; border-bottom: 1px solid #e0e0e0;\">\n                                        <strong style=\"color: #333333; font-size: 14px;\">Workflow Name:</strong>\n                                        <span style=\"color: #666666; font-size: 14px; margin-left: 10px;\">{{ $json.workflow.name }}</span>\n                                    </td>\n                                </tr>\n                                <tr>\n                                    <td style=\"padding: 12px 0; border-bottom: 1px solid #e0e0e0;\">\n                                        <strong style=\"color: #333333; font-size: 14px;\">Workflow ID:</strong>\n                                        <span style=\"color: #666666; font-size: 14px; margin-left: 10px;\">{{ $json.workflow.id }}</span>\n                                    </td>\n                                </tr>\n                                <tr>\n                                    <td style=\"padding: 12px 0; border-bottom: 1px solid #e0e0e0;\">\n                                        <strong style=\"color: #333333; font-size: 14px;\">Execution ID:</strong>\n                                        <span style=\"color: #666666; font-size: 14px; margin-left: 10px;\">{{ $json.execution.id }}</span>\n                                    </td>\n                                </tr>\n                                <tr>\n                                    <td style=\"padding: 12px 0; border-bottom: 1px solid #e0e0e0;\">\n                                        <strong style=\"color: #333333; font-size: 14px;\">Failed Node:</strong>\n                                        <span style=\"color: #666666; font-size: 14px; margin-left: 10px;\">{{ $json.execution.lastNodeExecuted }}</span>\n                                    </td>\n                                </tr>\n                                <tr>\n                                    <td style=\"padding: 12px 0; border-bottom: 1px solid #e0e0e0;\">\n                                        <strong style=\"color: #333333; font-size: 14px;\">Execution Mode:</strong>\n                                        <span style=\"color: #666666; font-size: 14px; margin-left: 10px;\">{{ $json.execution.mode }}</span>\n                                    </td>\n                                </tr>\n                                <tr>\n                                    <td style=\"padding: 12px 0;\">\n                                        <strong style=\"color: #333333; font-size: 14px;\">Retry Count:</strong>\n                                        <span style=\"color: #666666; font-size: 14px; margin-left: 10px;\">{{ $json.execution.retryOf }}</span>\n                                    </td>\n                                </tr>\n                            </table>\n                            \n                            <!-- Stack Trace (if available) -->\n                            <table role=\"presentation\" style=\"width: 100%; border-collapse: collapse; margin: 20px 0;\">\n                                <tr>\n                                    <td style=\"background-color: #f8f9fa; padding: 15px; border-radius: 4px; border: 1px solid #e0e0e0;\">\n                                        <h3 style=\"margin: 0 0 10px; color: #333333; font-size: 14px; font-weight: 600;\">Stack Trace:</h3>\n                                        <p style=\"margin: 0; color: #666666; font-size: 12px; font-family: 'Courier New', monospace; white-space: pre-wrap; word-break: break-word; max-height: 200px; overflow-y: auto;\">{{ $json.execution.error.stack }}</p>\n                                    </td>\n                                </tr>\n                            </table>\n                            \n                            <!-- Action Button -->\n                            <table role=\"presentation\" style=\"width: 100%; margin: 30px 0;\">\n                                <tr>\n                                    <td style=\"text-align: center;\">\n                                        <a href=\"{{ $json.execution.url }}\" style=\"display: inline-block; padding: 14px 32px; background-color: #ff4757; color: #ffffff; text-decoration: none; border-radius: 6px; font-size: 16px; font-weight: 600; box-shadow: 0 2px 4px rgba(255,71,87,0.3);\">View Execution Details</a>\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- Footer -->\n                    <tr>\n                        <td style=\"background-color: #f8f9fa; padding: 20px 30px; border-radius: 0 0 8px 8px; text-align: center;\">\n                            <p style=\"margin: 0; color: #999999; font-size: 12px;\">\n                                This is an automated notification from your n8n + degaus workflow system.<br>\n                                Please do not reply to this email.\n                            </p>\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    </table>\n</body>\n</html>",
            "options": {},
            "subject": "={{ $json.execution.error.message }} | UGC Video - Degaus "
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "GJK7jlRcgYZGEg9I",
              "name": "Gmail account"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "aace916e-ed0d-4cc6-98b9-3e32bcf9e903",
          "name": "Set Blueprint ID",
          "type": "n8n-nodes-base.set",
          "position": [
            944,
            448
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "2d212b6e-d63e-4fe0-9e0f-60a8402b335a",
                  "name": "blueprint_id",
                  "type": "string",
                  "value": "019b227f-31c2-812b-a364-96f5577e6823"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "e91e6631-611f-4b61-90fa-3e7d4cb6adc4",
          "name": "Get Default Prompts",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            1104,
            448
          ],
          "parameters": {
            "url": "=https://api.degaus.com/api/v1/blueprints/{{ $('Set Blueprint ID').item.json.blueprint_id }}/metadata",
            "options": {},
            "authentication": "predefinedCredentialType",
            "nodeCredentialType": "httpBearerAuth"
          },
          "credentials": {
            "httpBearerAuth": {
              "id": "Jr79Mjyo9St3z7WL",
              "name": "Mat's dgs bearer token"
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "1883400d-72ae-402e-a248-2abce2cc7762",
          "name": "Image Research",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            368,
            448
          ],
          "parameters": {
            "url": "https://openrouter.ai/api/v1/chat/completions",
            "method": "POST",
            "options": {},
            "jsonBody": "={\n  \"model\": \"google/gemini-3-pro-preview\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"get me full product details and what will be best the best background or scene to feature this product in UGC setting like The character details (perfereed young and hot) male or female will depend on product\"\n        },\n        {\n          \"type\": \"image_url\",\n          \"image_url\": {\n                \"url\": \"{{ $json.uploads.Product_Image.url }}\"\n          }\n        }\n      ]\n    }\n  ],\n  \"stream\": false\n}",
            "sendBody": true,
            "specifyBody": "json",
            "authentication": "predefinedCredentialType",
            "nodeCredentialType": "openRouterApi"
          },
          "credentials": {
            "openRouterApi": {
              "id": "dTJhbjqAVPRuc46Z",
              "name": "OpenRouter account"
            },
            "perplexityApi": {
              "id": "mTs36kJOjESDtNxi",
              "name": "Perplexity account"
            }
          },
          "typeVersion": 4.3
        },
        {
          "id": "06393d31-077b-4af8-9991-210bdc8a2848",
          "name": "GPT 5.2 pro",
          "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
          "position": [
            544,
            672
          ],
          "parameters": {
            "model": "openai/gpt-5.1",
            "options": {}
          },
          "credentials": {
            "openRouterApi": {
              "id": "dTJhbjqAVPRuc46Z",
              "name": "OpenRouter account"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "15cb06e8-5d0a-4c53-85d3-5f0e346523f3",
          "name": "Claude-opus-4.5",
          "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
          "position": [
            1216,
            688
          ],
          "parameters": {
            "model": "anthropic/claude-opus-4.5",
            "options": {}
          },
          "credentials": {
            "openRouterApi": {
              "id": "dTJhbjqAVPRuc46Z",
              "name": "OpenRouter account"
            }
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "0d8310b5-72db-45cb-9678-46a03fecce78",
      "connections": {
        "Results": {
          "main": [
            [
              {
                "node": "Send a message",
                "type": "main",
                "index": 0
              },
              {
                "node": "Save In Sheet",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Set Vars": {
          "main": [
            [
              {
                "node": "Set Blueprint ID",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Has File?": {
          "main": [
            [
              {
                "node": "Upload File",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Collect Uploads",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "GPT 5.2 pro": {
          "ai_languageModel": [
            [
              {
                "node": "Visual Context Gen",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Prompts Gen": {
          "main": [
            [
              {
                "node": "Change Prompts",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Split Files": {
          "main": [
            [
              {
                "node": "Has File?",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Upload File": {
          "main": [
            [
              {
                "node": "Collect Uploads",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Wait 5 Mins": {
          "main": [
            [
              {
                "node": "Check Run Status",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Run Workflow": {
          "main": [
            [
              {
                "node": "Wait 5 Mins",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Select Files": {
          "main": [
            [
              {
                "node": "Split Files",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Error Trigger": {
          "main": [
            [
              {
                "node": "Send a error",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Change Prompts": {
          "main": [
            [
              {
                "node": "Workflow Payload",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Image Research": {
          "main": [
            [
              {
                "node": "Visual Context Gen",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Still Running?": {
          "main": [
            [
              {
                "node": "Wait 5 Mins",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Run Successful?",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Claude-opus-4.5": {
          "ai_languageModel": [
            [
              {
                "node": "Prompts Gen",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Collect Uploads": {
          "main": [
            [
              {
                "node": "Image Research",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Run Successful?": {
          "main": [
            [
              {
                "node": "Results",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Blueprint Run Failed",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Check Run Status": {
          "main": [
            [
              {
                "node": "Still Running?",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Set Blueprint ID": {
          "main": [
            [
              {
                "node": "Get Default Prompts",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Workflow Payload": {
          "main": [
            [
              {
                "node": "Run Workflow",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Visual Context Gen": {
          "main": [
            [
              {
                "node": "Set Vars",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get Default Prompts": {
          "main": [
            [
              {
                "node": "Prompts Gen",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Visual Context Gen Output Parser": {
          "ai_outputParser": [
            [
              {
                "node": "Visual Context Gen",
                "type": "ai_outputParser",
                "index": 0
              }
            ]
          ]
        },
        "UGC Video Script Gen Output Parser": {
          "ai_outputParser": [
            [
              {
                "node": "Prompts Gen",
                "type": "ai_outputParser",
                "index": 0
              }
            ]
          ]
        }
      }
    }