{
  "id": "qsPabEXD8eVN2BNw",
  "name": "2026 - Image to Video Social Media Reel Autopost",
  "tags": [],
  "nodes": [
    {
      "id": "d30fe378-28bd-47ba-bce1-ab160eae8fa9",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -112,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "c7dcfe4f-5f5b-4c00-8e53-875d195bffcc",
      "name": "Search files and folders",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        96,
        0
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "url",
            "value": "https://drive.google.com/drive/u/0/folders/REPLACE_WITH_YOUR_FOLDER_ID"
          }
        },
        "options": {},
        "resource": "fileFolder",
        "returnAll": true
      },
      "typeVersion": 3
    },
    {
      "id": "cc46d9c5-514a-4194-8ba5-fc0e17a398fe",
      "name": "Randomizer",
      "type": "n8n-nodes-base.code",
      "position": [
        304,
        0
      ],
      "parameters": {
        "jsCode": "const files = $input.all();\nconst randomIndex = Math.floor(Math.random() * files.length);\nconst randomFile = files[randomIndex];\nreturn [randomFile];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "fe2119fc-4e4e-454d-9898-eab643871ba5",
      "name": "Upload media",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        512,
        0
      ],
      "parameters": {
        "mediaUrl": "=https://drive.google.com/file/d/{{ $('Search files and folders').item.json.id }}/view",
        "resource": "media"
      },
      "typeVersion": 2
    },
    {
      "id": "8a2c30ff-e4e7-4ef9-ace2-29b5e4df0ceb",
      "name": "Prompt Generator",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        720,
        0
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5.1",
          "cachedResultName": "GPT-5.1"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "content": "=Image Name/Description: {{ $('Randomizer').item.json.name }}"
            },
            {
              "role": "system",
              "content": "=You are an expert cinematic prompt engineer for image-to-video generation models (e.g. Sora 2, Veo 3).\nYou will receive a product image (or image title + description). These are commercial product visuals.\n\nYour task is to generate a single, highly optimized video prompt that transforms the image into a 8-second, high-impact, photo-realistic marketing reel.\n\nThe prompt must:\n\nPreserve the product\u2019s nature based on the descriptive title of the image\n\nDescribe cinematic camera movement (subtle parallax, push-in, orbit, tilt, or macro motion)\n\nSpecify lighting (studio, natural, cinematic rim light, softbox, volumetric, reflections)\n\nDefine visual style (ultra-realistic, premium, lifestyle, commercial, editorial, cinematic)\n\nSet mood and tone (confident, energetic, elegant, playful, futuristic, luxurious, etc.)\n\nInclude environment or background only if it enhances realism and brand positioning\n\nOptimize for clarity, realism, and visual impact in a short-form vertical or square reel\n\nAudio:\n\nInclude a concise spoken audio transcript (1 short line max) designed to fit naturally within 8 seconds\n\nSpecify voice characteristics (gender, age range, tone, pace, energy, emotion)\n\nDialogue should sound natural, confident, and marketing-ready\n\nDo NOT include captions, subtitles, or on-screen text instructions\n\nConstraints:\n\nDo NOT explain your reasoning\n\nDo NOT include meta commentary\n\nDo NOT include instructions outside the video prompt itself\n\nOutput only the final video generation prompt, ready to be passed directly to the model"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2.1
    },
    {
      "id": "fcc6087b-60de-46b1-aeea-328cacb18cee",
      "name": "Wavespeed Post Request (To generate reels)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1072,
        0
      ],
      "parameters": {
        "url": "https://api.wavespeed.ai/api/v3/google/veo3.1-fast/image-to-video",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "aspect_ratio",
              "value": "9:16"
            },
            {
              "name": "duration",
              "value": "8"
            },
            {
              "name": "generate_audio",
              "value": "true"
            },
            {
              "name": "image",
              "value": "={{ $('Upload media').item.json.url }}"
            },
            {
              "name": "prompt",
              "value": "={{ $json.output[0].content[0].text }}"
            },
            {
              "name": "resolution",
              "value": "1080p"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.3
    },
    {
      "id": "b6ad76be-27c6-4f1d-84cf-77eac9db8c68",
      "name": "Wait 30 Secs",
      "type": "n8n-nodes-base.wait",
      "position": [
        1280,
        0
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "970e96a8-6adf-461c-a762-eac6e3ad5f97",
      "name": "GET Result from Wavespeed",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1488,
        0
      ],
      "parameters": {
        "url": "=https://api.wavespeed.ai/api/v3/predictions/{{ $json.data.id }}/result",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.3
    },
    {
      "id": "8d99d218-c971-4fd9-9aaa-1d5ea57e7753",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1696,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "72cb45a3-36a4-4cc0-9f0c-68406f65e5ed",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "completed"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "867b69d2-4e7d-46ba-847e-bbe887f346a9",
      "name": "Submagic Post Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -48,
        320
      ],
      "parameters": {
        "url": "https://api.submagic.co/v1/projects",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "title",
              "value": "Daily Short"
            },
            {
              "name": "language",
              "value": "en"
            },
            {
              "name": "videoUrl",
              "value": "={{ $json.data.outputs[0] }}"
            },
            {
              "name": "templateName",
              "value": "Hormozi 2"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.3
    },
    {
      "id": "c566b9ae-5576-4467-93bc-a20371f24e98",
      "name": "30 Secs",
      "type": "n8n-nodes-base.wait",
      "position": [
        160,
        320
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "602ac9f9-c3cf-4ffc-a1df-81fd22074920",
      "name": "Submagic Get Result",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        368,
        320
      ],
      "parameters": {
        "url": "=https://api.submagic.co/v1/projects/{{ $json.id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.3
    },
    {
      "id": "afc27b01-0649-4fb9-9708-98af06cf5a02",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        576,
        320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cb914a3b-5ba4-46a4-b1b0-4744997bc6fc",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "completed"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "27a786aa-abc6-4ad4-967a-bf6402bf6b72",
      "name": "Send message and wait for response",
      "type": "n8n-nodes-base.gmail",
      "position": [
        800,
        304
      ],
      "parameters": {
        "sendTo": "REPLACE_WITH_YOUR_EMAIL",
        "message": "=Reel: {{ $json.previewUrl }}\nCaption: {{ $json.description }}",
        "options": {},
        "subject": "Daily Short Approval",
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "214d44dc-ba51-4672-aac1-d427404f821d",
      "name": "If2",
      "type": "n8n-nodes-base.if",
      "position": [
        1008,
        304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0fb35ab6-70b5-481c-8472-9d6d94e12293",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "8cdd8a25-477d-4fa0-bb8c-dd0529610d08",
      "name": "Upload to Blotato",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1248,
        304
      ],
      "parameters": {
        "mediaUrl": "={{ $('If1').item.json.directUrl }}",
        "resource": "media"
      },
      "typeVersion": 2
    },
    {
      "id": "8992a735-6b91-4261-8643-3fc9d81433f2",
      "name": "Post to Instagram",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1552,
        304
      ],
      "parameters": {
        "options": {},
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "REPLACE_WITH_ACCOUNT_ID",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/7680",
          "cachedResultName": "placeholder"
        },
        "postContentText": "={{ $('Submagic Get Result').item.json.description }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "03d1cbe7-be59-48eb-893e-cafa03788a88",
      "name": "Post to Tik Tok",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1552,
        496
      ],
      "parameters": {
        "options": {},
        "platform": "tiktok",
        "accountId": {
          "__rl": true,
          "mode": "id",
          "value": "REPLACE_WITH_ACCOUNT_ID"
        },
        "postContentText": "={{ $('Submagic Get Result').item.json.description }}"
      },
      "typeVersion": 2
    },
    {
      "id": "4b0eee4a-2a77-42a4-8c48-46385cb27142",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -256,
        -112
      ],
      "parameters": {
        "width": 944,
        "height": 336,
        "content": "Pick Base Image File"
      },
      "typeVersion": 1
    },
    {
      "id": "80c370fa-958e-438c-a065-5219dec7ea1f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -112
      ],
      "parameters": {
        "color": 6,
        "width": 1248,
        "height": 336,
        "content": "Prompt and Post to Video Generation Model"
      },
      "typeVersion": 1
    },
    {
      "id": "8dd6ae45-c0fa-48b3-a462-e2b767192b19",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -256,
        240
      ],
      "parameters": {
        "color": 4,
        "width": 944,
        "height": 432,
        "content": "Post to Text Overlay Tool (Submagic)"
      },
      "typeVersion": 1
    },
    {
      "id": "358c3de8-fd0b-4208-be02-57672ff3b65e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        240
      ],
      "parameters": {
        "color": 3,
        "width": 1248,
        "height": 432,
        "content": "Post to Text Overlay Tool (Submagic)"
      },
      "typeVersion": 1
    },
    {
      "id": "bb2c5915-6995-4a8a-beeb-fae3d5c17678",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1120,
        -112
      ],
      "parameters": {
        "color": 5,
        "width": 800,
        "height": 1520,
        "content": "Image to Video Social Media Reel Generator + Autopost\n\nGoogle Drive \u2192 AI Video Generation \u2192 Captions \u2192 Approval \u2192 Instagram & TikTok\n\nTurn a folder of images into fully-produced short-form social media reels\u2014automatically.\nThis workflow picks a random image, generates a cinematic AI video from it, adds text overlays and captions, waits for your approval, and then posts to Instagram and TikTok.\n\nWatch Step By Step Guide on How to Build: https://www.youtube.com/watch?v=jPOYxQF25ws\n\nWhat this template does\nOn a scheduled basis (default: daily at 9:00 AM), this workflow:\nSelects a random image from a Google Drive folder\nUploads the image for processing\nGenerates a cinematic image-to-video prompt using AI\nCreates an 8-second vertical video using an image-to-video model (via Wavespeed)\nApplies captions and text overlays using Submagic\nWaits for human approval via email\nAutomatically posts the approved reel to:\nInstagram\nTikTok\nIf the video is not approved, the workflow loops and tries again on the next run.\n\nWhy this workflow is useful\nConverts static existing product/service images into high-engagement video content\nRemoves repetitive manual work in short-form content creation\nKeeps a human-in-the-loop before anything is published\n\nPerfect for:\nCreators & solopreneurs\nSocial media managers\nSmall businesses & local brands\nAI-first content pipelines\n\nHigh-level flow\nSchedule \u2192 Pick Image \u2192 Generate Video \u2192 Add Captions \u2192 Approve \u2192 Post\n\nNode overview\nSchedule Trigger\nRuns the workflow automatically at a fixed time (default: daily at 9 AM).\nGoogle Drive \u2013 Search Files fetches all images from a selected Drive folder.\nRandomizer (Code Node) selects one random image to avoid repetitive posting.\nUpload Media Uploads the selected image so it can be used by downstream tools.\nPrompt Generator (GPT-5.1) Generates a high-quality cinematic prompt optimized for image-to-video models\nWavespeed \u2013 Image to Video creates an 8-second, 9:16 video from the image + prompt.\nWait & Polling (IF Nodes) Waits and checks until video generation is completed.\nSubmagic \u2013 Text Overlay & Captioning Adds captions and overlays in a short-form style optimized for social platforms.\nGmail \u2013 Send for Approval Sends a preview link and caption to your inbox and waits for approval.\nIF (Approved?) Yes: posts the reel automatically No: skips posting and retries in the next run\nBlotato \u2013 Social Posting Publishes the approved reel to Instagram & Tik Tok\n\nRequirements\nBefore running this template, you\u2019ll need to configure:\nGoogle Drive OAuth (image source folder)\nOpenAI API key (prompt generation)\nWavespeed API key (image-to-video generation)\nSubmagic API key (captions & overlays)\nGmail OAuth (approval workflow)\nBlotato account (Instagram & TikTok posting)\nAll credentials must be added manually after importing.\n\nSetup instructions\nImport the template into your n8n workspace\nConnect your Google Drive account and set your image folder\nAdd credentials for:\nOpenAI\nWavespeed\nSubmagic\nGmail\nBlotato\nAdjust the Schedule Trigger if needed\nRun the workflow once to test the full flow\nEnable the workflow to start daily automated posting\nStore generated videos in cloud storage or a content database\n\nTroubleshooting\n\nNo images found: check Drive folder ID and permissions\nVideo stuck generating: increase wait time or polling interval\nApproval email not received: verify Gmail OAuth and inbox filters\nPosting fails: confirm Blotato account and platform permissions"
      },
      "typeVersion": 1
    },
    {
      "id": "4c41c272-b2d5-432f-b6c8-ebeb4ef645ea",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -592
      ],
      "parameters": {
        "width": 736,
        "height": 448,
        "content": "- [ ] @[youtube](jPOYxQF25ws)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "b225156a-4aee-462c-89ff-5ac928ecb18a",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Submagic Post Request",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 30 Secs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If1": {
      "main": [
        [
          {
            "node": "Send message and wait for response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "30 Secs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If2": {
      "main": [
        [
          {
            "node": "Upload to Blotato",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Search files and folders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "30 Secs": {
      "main": [
        [
          {
            "node": "Submagic Get Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Randomizer": {
      "main": [
        [
          {
            "node": "Upload media",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload media": {
      "main": [
        [
          {
            "node": "Prompt Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 30 Secs": {
      "main": [
        [
          {
            "node": "GET Result from Wavespeed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prompt Generator": {
      "main": [
        [
          {
            "node": "Wavespeed Post Request (To generate reels)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Search files and folders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post to Instagram": {
      "main": [
        []
      ]
    },
    "Upload to Blotato": {
      "main": [
        [
          {
            "node": "Post to Instagram",
            "type": "main",
            "index": 0
          },
          {
            "node": "Post to Tik Tok",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submagic Get Result": {
      "main": [
        [
          {
            "node": "If1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submagic Post Request": {
      "main": [
        [
          {
            "node": "30 Secs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search files and folders": {
      "main": [
        [
          {
            "node": "Randomizer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET Result from Wavespeed": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send message and wait for response": {
      "main": [
        [
          {
            "node": "If2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wavespeed Post Request (To generate reels)": {
      "main": [
        [
          {
            "node": "Wait 30 Secs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}