AutomationFlowsAI & RAG › Generate Daily AI Reels From Google Drive Images with Gpt‑5.1, Wavespeed and…

Generate Daily AI Reels From Google Drive Images with Gpt‑5.1, Wavespeed and…

Original n8n title: Generate Daily AI Reels From Google Drive Images with Gpt‑5.1, Wavespeed and Submagic

ByAutomate With Marc @marconi on n8n.io

Google Drive → AI Video Generation → Captions → Approval → Instagram & TikTok

Cron / scheduled trigger★★★★☆ complexityAI-powered24 nodesGoogle Drive@Blotato/N8N Nodes BlotatoOpenAIHTTP RequestGmail
AI & RAG Trigger: Cron / scheduled Nodes: 24 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #13110 — we link there as the canonical source.

This workflow follows the Blotaton8N Nodes Blotato → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "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
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Google Drive → AI Video Generation → Captions → Approval → Instagram & TikTok

Source: https://n8n.io/workflows/13110/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

💥 Automate YouTube thumbnail creation from video links -vide. Uses telegramTrigger, httpRequest, googleDrive, gmail. Event-driven trigger; 25 nodes.

Telegram Trigger, HTTP Request, Google Drive +6
AI & RAG

💥 Automate YouTube thumbnail creation from video links -vide. Uses telegramTrigger, httpRequest, googleDrive, gmail. Event-driven trigger; 25 nodes.

Telegram Trigger, HTTP Request, Google Drive +6
AI & RAG

Automatically turn your existing content library into approved, AI-written social media posts. This workflow selects a random file from Google Drive, generates an Instagram caption using AI, sends it

Google Drive, @Blotato/N8N Nodes Blotato, OpenAI +1
AI & RAG

This comprehensive n8n automation template orchestrates a complete end-to-end workflow for generating engaging short-form Point-of-View (POV) style videos using multiple AI services and automatically

HTTP Request, OpenAI, Google Drive +4
AI & RAG

A scheduled process aggregates content from eight distinct data sources and standardizes all inputs into a unified format. AI models perform sentiment scoring, detect conspiracy or misinformation sign

HTTP Request, OpenAI, Postgres +2