AI Product Videography Automation

    Shared 11/26/2025

    422 views

    Visual Workflow

    JSON Code

    {
      "id": "XpMQV36znIpoKb6T",
      "meta": {
        "instanceId": "9fb634bb746cbe3fe9f7fa86fdd635510d2f0c24c4ba919fbba1ca6aec3c4e57",
        "templateCredsSetupCompleted": true
      },
      "name": "AI  Product Videography Automation",
      "tags": [
        {
          "id": "XjapSTYfKWctIuwO",
          "name": "N8N Course",
          "createdAt": "2025-11-10T06:08:02.634Z",
          "updatedAt": "2025-11-10T06:08:02.634Z"
        },
        {
          "id": "XZ2fZUKyIdD6LbGn",
          "name": "Content Creation",
          "createdAt": "2025-10-22T09:44:29.381Z",
          "updatedAt": "2025-10-22T09:44:29.381Z"
        }
      ],
      "nodes": [
        {
          "id": "1d64d7e2-5152-4215-b054-eefa77bca419",
          "name": "On form submission",
          "type": "n8n-nodes-base.formTrigger",
          "position": [
            16,
            -160
          ],
          "webhookId": "af13c24d-f792-46fb-ab9f-e1660bb6f068",
          "parameters": {
            "options": {},
            "formTitle": "Get Ecom Product Video",
            "formFields": {
              "values": [
                {
                  "fieldType": "file",
                  "fieldLabel": "Product Photo",
                  "multipleFiles": false,
                  "requiredField": true
                },
                {
                  "fieldLabel": "Product Title",
                  "placeholder": "Toothpaste",
                  "requiredField": true
                },
                {
                  "fieldLabel": "Product Description",
                  "placeholder": "Ayurvedic, fluoride-free toothpaste that contains 13 traditional herbal ingredients, such as clove, mint, and ginger, to fight against seven dental problems: toothache, cavities, plaque, germs, bad breath, yellowing, and bleeding gums",
                  "requiredField": true
                },
                {
                  "fieldType": "email",
                  "fieldLabel": "Email",
                  "placeholder": "name@example.com",
                  "requiredField": true
                }
              ]
            },
            "authentication": "basicAuth",
            "formDescription": "Give us a product photo, title, and description, and we'll get back to you with professional marketing materials. "
          },
          "credentials": {
            "httpBasicAuth": {
              "id": "O7N5g2KgopMXpAXg",
              "name": "Sohail Creds"
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "03decdba-e769-49f2-afa5-a043fe92f4c7",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -32,
            -256
          ],
          "parameters": {
            "color": 7,
            "width": 208,
            "height": 376,
            "content": "## Form Trigger"
          },
          "typeVersion": 1
        },
        {
          "id": "ed65f76a-bccb-4781-9593-e779983548c8",
          "name": "Upload Photo",
          "type": "n8n-nodes-base.googleDrive",
          "position": [
            272,
            -160
          ],
          "parameters": {
            "name": "={{ $json['Product Title'] }} (Original)",
            "driveId": {
              "__rl": true,
              "mode": "list",
              "value": "My Drive"
            },
            "options": {},
            "folderId": {
              "__rl": true,
              "mode": "list",
              "value": "1hQwuRrRZP3NX-xTcIPBxOjTofaNcM4uV",
              "cachedResultUrl": "https://drive.google.com/drive/folders/1hQwuRrRZP3NX-xTcIPBxOjTofaNcM4uV",
              "cachedResultName": "n8n - Product Videography"
            },
            "inputDataFieldName": "Product_Photo"
          },
          "credentials": {
            "googleDriveOAuth2Api": {
              "id": "O8QFm2vAr476EdaM",
              "name": "Google Drive account"
            }
          },
          "typeVersion": 3
        },
        {
          "id": "ef49bc84-7359-4ed7-89cf-dbd8a331ef1d",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            208,
            -256
          ],
          "parameters": {
            "width": 228,
            "height": 376,
            "content": "## Upload File"
          },
          "typeVersion": 1
        },
        {
          "id": "2d3b5fe7-ffa6-40b4-a334-963fad57a9ef",
          "name": "GPT 4.1",
          "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
          "position": [
            224,
            416
          ],
          "parameters": {
            "model": "openai/gpt-4.1",
            "options": {}
          },
          "credentials": {
            "openRouterApi": {
              "id": "6z6zYFNsqyqFRUEB",
              "name": "OpenRouter account"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "ce1fd31a-6aa7-4aba-8d8c-0b4f9434c931",
          "name": "Download File",
          "type": "n8n-nodes-base.googleDrive",
          "position": [
            528,
            -160
          ],
          "parameters": {
            "fileId": {
              "__rl": true,
              "mode": "id",
              "value": "={{ $('Upload Photo').item.json.id }}"
            },
            "options": {},
            "operation": "download"
          },
          "credentials": {
            "googleDriveOAuth2Api": {
              "id": "O8QFm2vAr476EdaM",
              "name": "Google Drive account"
            }
          },
          "typeVersion": 3
        },
        {
          "id": "bdef4b71-0316-4089-9887-9ef7718b9c4c",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            464,
            -256
          ],
          "parameters": {
            "width": 468,
            "height": 376,
            "content": "## Get File URL"
          },
          "typeVersion": 1
        },
        {
          "id": "763a4155-b653-4606-af4b-9418fdc92279",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            960,
            -256
          ],
          "parameters": {
            "color": 4,
            "width": 704,
            "height": 376,
            "content": "## Image Generation"
          },
          "typeVersion": 1
        },
        {
          "id": "67d44f8f-7231-44c4-8940-19549d452d41",
          "name": "Generate Video",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            560,
            240
          ],
          "parameters": {
            "url": "https://api.dev.runwayml.com/v1/image_to_video",
            "method": "POST",
            "options": {},
            "sendBody": true,
            "sendHeaders": true,
            "authentication": "genericCredentialType",
            "bodyParameters": {
              "parameters": [
                {
                  "name": "promptText",
                  "value": "={{ $('Product Photography Agent').item.json.output }}"
                },
                {
                  "name": "model",
                  "value": "gen4_turbo"
                },
                {
                  "name": "promptImage",
                  "value": "={{ $json.data.image.url }}"
                },
                {
                  "name": "duration",
                  "value": "={{ Number(10) }}"
                },
                {
                  "name": "ratio",
                  "value": "960:960"
                }
              ]
            },
            "genericAuthType": "httpHeaderAuth",
            "headerParameters": {
              "parameters": [
                {
                  "name": "X-Runway-Version",
                  "value": "2024-11-06"
                }
              ]
            }
          },
          "credentials": {
            "httpHeaderAuth": {
              "id": "loddmUMVkQD6CbKT",
              "name": "Runway Auth"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "d45a1be5-75ec-45ff-896b-be5261c81b17",
          "name": "5 Secs",
          "type": "n8n-nodes-base.wait",
          "position": [
            1392,
            192
          ],
          "webhookId": "dd3eae86-f75c-41fe-a48c-58788f1ee73d",
          "parameters": {},
          "typeVersion": 1.1
        },
        {
          "id": "aaed05b6-3e9e-48ba-ba4b-15e4f9121d65",
          "name": "Get Video",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            1024,
            240
          ],
          "parameters": {
            "url": "=https://api.dev.runwayml.com/v1/tasks/{{ $json.id }}",
            "options": {},
            "sendHeaders": true,
            "authentication": "genericCredentialType",
            "genericAuthType": "httpHeaderAuth",
            "headerParameters": {
              "parameters": [
                {
                  "name": "X-Runway-Version",
                  "value": "2024-11-06"
                }
              ]
            }
          },
          "credentials": {
            "httpHeaderAuth": {
              "id": "loddmUMVkQD6CbKT",
              "name": "Runway Auth"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "eb2dc6bf-c245-4c8a-89ab-2ce5b6d62df8",
          "name": "Sticky Note6",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -32,
            144
          ],
          "parameters": {
            "color": 6,
            "width": 784,
            "height": 388,
            "content": "## Video Generation"
          },
          "typeVersion": 1
        },
        {
          "id": "4a6576b0-6d6c-47b7-8ea9-d28d9492f73f",
          "name": "Sticky Note7",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            784,
            144
          ],
          "parameters": {
            "color": 3,
            "width": 884,
            "height": 388,
            "content": "## Polling"
          },
          "typeVersion": 1
        },
        {
          "id": "e5cf9d30-b5e7-41a7-83af-240ea0893316",
          "name": "Send Finished Products",
          "type": "n8n-nodes-base.gmail",
          "position": [
            16,
            656
          ],
          "webhookId": "779028aa-2c69-4e60-8d40-ff55f32042bc",
          "parameters": {
            "sendTo": "={{ $('On form submission').item.json.Email }}",
            "message": "=Hey!\n\nHere is your photo: {{ $('Get New File URL').item.json.data.url }}\n\nHere is your video: {{ $json.output[0] }}\n\nCheers!",
            "options": {
              "appendAttribution": false
            },
            "subject": "=Marketing Materials: {{ $('On form submission').item.json['Product Title'] }}",
            "emailType": "text"
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "pT69eutSGot4W4td",
              "name": "Gmail account"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "95eb9bc3-13e8-4169-851d-44faa877ec82",
          "name": "Sticky Note8",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -32,
            560
          ],
          "parameters": {
            "color": 2,
            "width": 292,
            "height": 292,
            "content": "## Done"
          },
          "typeVersion": 1
        },
        {
          "id": "ae61993e-c2fb-474d-918d-eb765ad048a7",
          "name": "Product Photography Agent",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            224,
            240
          ],
          "parameters": {
            "text": "=Product: {{ $('On form submission').item.json['Product Title'] }}\nDescription: {{ $('On form submission').item.json['Product Description'] }}",
            "options": {
              "systemMessage": "=You are to generate a clean e-commerce product video. Use the input image only as reference to reconstruct a photorealistic 3D version of the product. Do not display the original image. Present a smooth 360° rotation around the product with soft, neutral studio lighting and a seamless white background. Keep framing centered, motion steady, and details realistic.\n"
            },
            "promptType": "define"
          },
          "typeVersion": 1.9
        },
        {
          "id": "ff588aec-263e-4533-b3b9-3d857b6206bb",
          "name": "Sticky Note9",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -576,
            -256
          ],
          "parameters": {
            "width": 500,
            "height": 560,
            "content": "# 🛠️ Setup Guide\n---\n\n**Author: [Sohail Jafri](https://link.thesohailjafri.me/web_ai) | [Youtube](https://link.thesohailjafri.me/yt_ai) | [Instagram](https://link.thesohailjafri.me/ig_ai) | [Join Skool](https://link.thesohailjafri.me/join-skool)**\n\nFollow these steps to complete your setup:\n\n1. **Connect Google Credentials**  \n   - Allow access to your **Google Drive** and **Gmail**.\n\n2. **Connect [OpenRouter](https://openrouter.ai/) API Key**  \n   - This will enable the chat model for your AI agent as well as image generation.\n\n3. **Connect [ImageBB](https://imgbb.com/) API Key**  \n   - Needed for the **Git URL HTTP request**.\n\n4. **Connect [Runway](https://runwayml.com/api) API Key**  \n   - Used to **generate** and **Git** the videos.\n\n---\n\nOnce all keys are connected, you're ready to start using the system!\n"
          },
          "typeVersion": 1
        },
        {
          "id": "a5b4fbf8-8cbf-4768-a7c7-ad7f0c3ff0f1",
          "name": "Nano Banana Image Processor",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            1040,
            -160
          ],
          "parameters": {
            "url": "https://openrouter.ai/api/v1/chat/completions",
            "method": "POST",
            "options": {},
            "jsonBody": "={\n  \"model\": \"google/gemini-2.5-flash-image\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"Use the provided image as reference and generate a clean produtt photo. Preserve the product exactly as it is, including all original logos, labels, and text printed on it. Remove everything else: no background, no table, no environment, no shadows, no props, no reflections. Place the product on a pure white background (RGB #FFFFFF) with even soft lighting. Keep the product centered, sharp, and high-resolution with no added elements.\"\n        },\n        {\n          \"type\": \"image_url\",\n          \"image_url\": {\n            \"url\": \"{{ $json.data.url }}\"\n          }\n        }\n      ]\n    }\n  ]\n}",
            "sendBody": true,
            "specifyBody": "json",
            "authentication": "predefinedCredentialType",
            "nodeCredentialType": "openRouterApi"
          },
          "credentials": {
            "openRouterApi": {
              "id": "6z6zYFNsqyqFRUEB",
              "name": "OpenRouter account"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "b4ac7046-6905-4d26-9ac8-fc8bbcfd62b3",
          "name": "Get OG File URL",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            752,
            -160
          ],
          "parameters": {
            "url": "https://api.imgbb.com/1/upload",
            "method": "POST",
            "options": {},
            "sendBody": true,
            "contentType": "multipart-form-data",
            "authentication": "genericCredentialType",
            "bodyParameters": {
              "parameters": [
                {
                  "name": "image",
                  "parameterType": "formBinaryData",
                  "inputDataFieldName": "data"
                }
              ]
            },
            "genericAuthType": "httpQueryAuth"
          },
          "credentials": {
            "httpQueryAuth": {
              "id": "i16wZHQApYNmkYlF",
              "name": "ImageBB Auth"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "fe54715c-8e45-4084-96fd-22606d35b460",
          "name": "Set Base64",
          "type": "n8n-nodes-base.set",
          "position": [
            1248,
            -160
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "92d42d90-c9c7-4535-8efc-a43db58b8927",
                  "name": "base",
                  "type": "string",
                  "value": "={{ $json.choices[0].message.images[0].image_url.url.split(',')[1] }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "8da4a791-345d-4ef0-b96c-70dc2a278d40",
          "name": "Convert to File",
          "type": "n8n-nodes-base.convertToFile",
          "position": [
            1472,
            -64
          ],
          "parameters": {
            "options": {},
            "operation": "toBinary",
            "sourceProperty": "base"
          },
          "typeVersion": 1.1
        },
        {
          "id": "d5ad3777-e50a-4c12-be4f-3afcf886d529",
          "name": "Wait 2 Minutes",
          "type": "n8n-nodes-base.wait",
          "position": [
            848,
            240
          ],
          "webhookId": "ae4ab48f-6ebe-4768-88f0-743989181262",
          "parameters": {
            "unit": "minutes",
            "amount": 2
          },
          "typeVersion": 1.1
        },
        {
          "id": "a09c3a33-efe2-4990-ac9a-bdd281437d31",
          "name": "Stop and Error",
          "type": "n8n-nodes-base.stopAndError",
          "position": [
            1728,
            384
          ],
          "parameters": {
            "errorMessage": "Invalid Status Received"
          },
          "typeVersion": 1
        },
        {
          "id": "ee7021ed-5727-4336-8660-8f90a68e9da1",
          "name": "If RUNNING",
          "type": "n8n-nodes-base.if",
          "position": [
            1184,
            240
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "b45aec04-a6dc-4118-8318-42f40f903935",
                  "operator": {
                    "name": "filter.operator.equals",
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json.status }}",
                  "rightValue": "RUNNING"
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "48b7e23c-4086-4617-948a-713eea0689b5",
          "name": "If SUCCEEDED",
          "type": "n8n-nodes-base.if",
          "position": [
            1488,
            368
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "abaa5360-1d70-48e4-8ee4-b9e75faf2441",
                  "operator": {
                    "name": "filter.operator.equals",
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json.status }}",
                  "rightValue": "SUCCEEDED"
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "d14aec1b-bc67-4fb5-a9b5-f89f132875e8",
          "name": "Get New File URL",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            16,
            240
          ],
          "parameters": {
            "url": "https://api.imgbb.com/1/upload",
            "method": "POST",
            "options": {},
            "sendBody": true,
            "contentType": "multipart-form-data",
            "authentication": "genericCredentialType",
            "bodyParameters": {
              "parameters": [
                {
                  "name": "image",
                  "parameterType": "formBinaryData",
                  "inputDataFieldName": "data"
                }
              ]
            },
            "genericAuthType": "httpQueryAuth"
          },
          "credentials": {
            "httpQueryAuth": {
              "id": "i16wZHQApYNmkYlF",
              "name": "ImageBB Auth"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "98adffd7-5603-45a8-a394-55c2efc9afe4",
          "name": "Error Trigger",
          "type": "n8n-nodes-base.errorTrigger",
          "position": [
            320,
            656
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "684404e4-e4ce-4054-b0d2-f3e5f258b696",
          "name": "Sticky Note5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            288,
            560
          ],
          "parameters": {
            "color": 3,
            "width": 464,
            "height": 288,
            "content": "## 🚨 Error and Loop Control Flow\n---"
          },
          "typeVersion": 1
        },
        {
          "id": "ae8af777-7ff4-4888-b06a-e04dd1badbdd",
          "name": "Send a message",
          "type": "n8n-nodes-base.gmail",
          "position": [
            544,
            656
          ],
          "webhookId": "d5abd570-74b9-483b-adfb-8a6044143c8c",
          "parameters": {
            "sendTo": "={{ $('On form submission').item.json.Email }}",
            "message": "=Error: {{ $json.execution.error.message }} Please check workflow {{ $json.execution.url }} Last Node Exe.: {{ $json.execution.lastNodeExecuted }}",
            "options": {},
            "subject": "Error In AI Product Videography Automation"
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "pT69eutSGot4W4td",
              "name": "Gmail account"
            }
          },
          "typeVersion": 2.1
        }
      ],
      "active": true,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "4156ee7d-dcfe-4420-aec3-ad3438957d2a",
      "connections": {
        "5 Secs": {
          "main": [
            [
              {
                "node": "Get Video",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "GPT 4.1": {
          "ai_languageModel": [
            [
              {
                "node": "Product Photography Agent",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Get Video": {
          "main": [
            [
              {
                "node": "If RUNNING",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "If RUNNING": {
          "main": [
            [
              {
                "node": "5 Secs",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "If SUCCEEDED",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Set Base64": {
          "main": [
            [
              {
                "node": "Convert to File",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "If SUCCEEDED": {
          "main": [
            [
              {
                "node": "Send Finished Products",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Stop and Error",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Upload Photo": {
          "main": [
            [
              {
                "node": "Download File",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Download File": {
          "main": [
            [
              {
                "node": "Get OG File URL",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Error Trigger": {
          "main": [
            [
              {
                "node": "Send a message",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Video": {
          "main": [
            [
              {
                "node": "Wait 2 Minutes",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Wait 2 Minutes": {
          "main": [
            [
              {
                "node": "Get Video",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Convert to File": {
          "main": [
            [
              {
                "node": "Get New File URL",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get OG File URL": {
          "main": [
            [
              {
                "node": "Nano Banana Image Processor",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get New File URL": {
          "main": [
            [
              {
                "node": "Product Photography Agent",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "On form submission": {
          "main": [
            [
              {
                "node": "Upload Photo",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Product Photography Agent": {
          "main": [
            [
              {
                "node": "Generate Video",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Nano Banana Image Processor": {
          "main": [
            [
              {
                "node": "Set Base64",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    }