AutomationFlowsAI & RAG › Create AI Instagram Reels with Gpt-4.1, Veo3, Google Sheets and Bloatato

Create AI Instagram Reels with Gpt-4.1, Veo3, Google Sheets and Bloatato

BySpaGreen Creative @spagreen on n8n.io

This workflow is designed for social media managers, content creators, digital marketers, and entrepreneurs who want to automate the entire lifecycle of creating and publishing short-form video content (like TikToks or Instagram Reels). It's perfect for anyone looking to…

Cron / scheduled trigger★★★★☆ complexityAI-powered29 nodesTool ThinkOutput Parser StructuredGoogle SheetsOpenAI ChatAgentHTTP RequestN8N Nodes RapiwaTelegram
AI & RAG Trigger: Cron / scheduled Nodes: 29 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Google Sheets 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": "FC8kRipaqOXvANsB",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Automated AI Video Creation with Veo3 for Instagram Publishing",
  "tags": [],
  "nodes": [
    {
      "id": "09970c2f-8a8d-48b1-aeed-8a2499973782",
      "name": "Think",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        928,
        496
      ],
      "parameters": {
        "description": "Use this tool to record internal reasoning or intermediate thoughts. It does not retrieve new information or modify the database; instead, it appends entries to a log for reference. This is particularly useful for complex reasoning tasks or when temporary memory is required."
      },
      "typeVersion": 1
    },
    {
      "id": "d66a6d7a-fdc9-4277-bff3-151e119926f5",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1040,
        480
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"title\": \"string\",\n  \"final_prompt\": \"string\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "911817a7-b87d-40a8-9ac3-1ba10d59c0db",
      "name": "Update Status to \"Publish\"",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2864,
        320
      ],
      "parameters": {
        "columns": {
          "value": {
            "idea": "={{ $('Save Idea in google sheet').first().json.idea }}",
            "production": "Publish"
          },
          "schema": [
            {
              "id": "idea",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "idea",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "caption",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "production",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "production",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "environment_prompt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "environment_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sound_prompt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "sound_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "idea"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1o8a6roAbvIUyJ6yZ5u3fsom3ubr9g6A0lCzfx961V-M/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1o8a6roAbvIUyJ6yZ5u3fsom3ubr9g6A0lCzfx961V-M",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1o8a6roAbvIUyJ6yZ5u3fsom3ubr9g6A0lCzfx961V-M/edit?usp=drivesdk",
          "cachedResultName": "Save Video Idea"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "32d138c8-9548-4525-bbec-89c4ab3e9cbc",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        48,
        480
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "2551e8f2-a2b6-4cf9-b0da-99ab790db77a",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        816,
        512
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "9f58a3ab-6c22-4085-b321-1b5b64362b87",
      "name": "Start Daily  Two Times",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -208,
        336
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "320f0e4b-f6d7-41aa-99ed-5122e2fed608",
      "name": "Make Professional Prompt",
      "type": "n8n-nodes-base.set",
      "position": [
        672,
        336
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "cc2e0500-57b1-4615-82cb-1c950e5f2ec4",
              "name": "json_master",
              "type": "string",
              "value": "={\n  \"description\": \"A concise narrative describing the scene, highlighting key visual storytelling elements and product transformation.\",\n  \n  \"style\": \"Defines the visual tone (e.g., cinematic, photorealistic, stylized, gritty, elegant).\",\n  \n  \"camera\": {\n    \"type\": \"Specifies camera setup (e.g., fixed, dolly, Steadicam, crane).\",\n    \"movement\": \"Describes camera motion (e.g., slow push-in, pan, orbit).\",\n    \"lens\": \"Optional \u2013 lens type or focal length for cinematic effect.\"\n  },\n  \n  \"lighting\": {\n    \"type\": \"Lighting style (e.g., natural, dramatic, high-contrast).\",\n    \"sources\": \"Primary light sources (e.g., sunlight, halogen, ambient glow).\",\n    \"FX\": \"Optional \u2013 visual effects like fog, reflections, lens flares.\"\n  },\n  \n  \"environment\": {\n    \"location\": \"Scene location (e.g., kitchen, desert, basketball court).\",\n    \"set_pieces\": [\n      \"Key props or background elements (e.g., hardwood floors, chain-link fence, velvet surface).\"\n    ],\n    \"mood\": \"Overall atmosphere (e.g., moody, clean, epic).\"\n  },\n  \n  \"elements\": [\n    \"Primary physical objects (e.g., product box, accessories, vehicles).\",\n    \"Include visible branding such as logos, packaging, textures.\"\n  ],\n  \n  \"subject\": {\n    \"character\": {\n      \"description\": \"Optional \u2013 character appearance and outfit.\",\n      \"pose\": \"Optional \u2013 character positioning or gesture.\",\n      \"lip_sync_line\": \"Optional \u2013 dialogue or spoken line.\"\n    },\n    \"product\": {\n      \"brand\": \"Brand name.\",\n      \"model\": \"Product name or model.\",\n      \"action\": \"Description of product transformation, usage, or assembly.\"\n    }\n  },\n  \n  \"motion\": {\n    \"type\": \"Type of motion (e.g., transformation, explosion, vortex).\",\n    \"details\": \"Step-by-step description of how elements move or evolve visually.\"\n  },\n  \n  \"VFX\": {\n    \"transformation\": \"Optional \u2013 visual style (e.g., neon trails, motion blur).\",\n    \"impact\": \"Optional \u2013 effects like shockwave, glow, distortion.\",\n    \"particles\": \"Optional \u2013 particles such as sparks, embers, dust.\",\n    \"environment\": \"Optional \u2013 environmental effects like wind, ripples.\"\n  },\n  \n  \"audio\": {\n    \"music\": \"Optional \u2013 background music style (e.g., cinematic score, ambient).\",\n    \"sfx\": [\n      \"List of sound effects (e.g., whoosh, pop, click).\"\n    ],\n    \"ambience\": \"Optional \u2013 environmental sounds (e.g., traffic, wind).\",\n    \"voiceover\": {\n      \"delivery\": \"Tone and style (e.g., confident, deep, whisper).\",\n      \"line\": \"Spoken narration or dialogue.\"\n    }\n  },\n  \n  \"ending\": \"Description of the final frame (e.g., logo reveal, freeze frame, glow effect).\",\n  \n  \"text\": \"Text usage (none, overlay, tagline, logo-only ending).\",\n  \n  \"format\": \"Output format (e.g., 16:9, 4K, vertical).\",\n  \n  \"keywords\": [\n    \"Relevant tags describing brand, style, motion, camera, audio mood, and theme.\"\n  ]\n}"
            },
            {
              "id": "3c6ea609-e426-46d3-8617-2e289a833a64",
              "name": "model",
              "type": "string",
              "value": "veo3_fast"
            },
            {
              "id": "f15acf81-840c-4e09-9ff3-1647b634875f",
              "name": "aspectRatio",
              "type": "string",
              "value": "9:16"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d4b893c3-891a-4f2a-a578-ea631c29ac4f",
      "name": "AI Agent (Create Video Script)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        896,
        336
      ],
      "parameters": {
        "text": "=Create a BEFORE/AFTER transformation video prompt using the provided idea.\n\n**Inputs**\n\n- idea : {{ $('Save Idea in google sheet').item.json.idea }}\n- environment : {{ $('Save Idea in google sheet').item.json.environment_prompt }}\n- sound : {{ $('Save Idea in google sheet').item.json.sound_prompt }}\n\n**Rules**\n- The style must be cinematic, visually striking, and optimized for vertical 9:16 TikTok content.\n- Explicitly include: BEFORE scene, AFTER scene, TRANSITION style, CAMERA movement, LIGHTING, COLOR PALETTE, and MOOD.\n- Default model: `veo3_fast` (unless otherwise specified).\n- Output only **one JSON object** with the keys: `title` and `final_prompt`.\n- Use the Think tool to review your output\n",
        "options": {
          "systemMessage": "=\"system_prompt:\n  ## SYSTEM PROMPT: Structured Transformation Video Prompt Generator\n  A - Ask:\n    Generate a structured BEFORE/AFTER transformation video prompt for VEO 3 cinematic generation, strictly based on the master schema provided in: {{ $json.json_master }}.\n    The final result must be a JSON object with exactly two top-level keys: `title` and `final_prompt`.\n\n  G - Guidance:\n    role: Creative Director\n    output_count: 1\n    character_limit: None\n    constraints:\n      - The output must be valid JSON.\n      - The `title` field should contain a short, descriptive and unique title (max 15 words).\n      - The `final_prompt` field must contain a **single-line JSON string** that follows the exact structure of {{ $json.json_master }} with all fields preserved.\n      - The `final_prompt` string must clearly describe: BEFORE scene, AFTER scene, TRANSITION, CAMERA, LIGHTING, PALETTE, STYLE, and SOUND.\n      - Do not include any explanations, markdown, or extra text \u2014 only the JSON object.\n      - Escape all inner quotes in the `final_prompt` string so it is valid as a stringified JSON inside another JSON.\n    tool_usage:\n      - Ensure consistent alignment across all fields (camera, lighting, transition, palette, etc.).\n      - Maintain full structure even for optional fields (use \"none\", \"\", or [] as needed).\n\n  N - Notation:\n    format: JSON\n    expected_output:\n      {\n        \"title\": \"A unique short title for the transformation\",\n        \"final_prompt\": \"{...stringified JSON of the full prompt...}\"\n      }\n\"\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "ac252362-ef6a-440e-8819-e2840e7aaa8f",
      "name": "Code (Format Prompt)",
      "type": "n8n-nodes-base.code",
      "position": [
        1248,
        336
      ],
      "parameters": {
        "jsCode": "const structuredPrompt = $input.first().json.output.final_prompt;\nreturn {\n  json: {\n    prompt: JSON.stringify(structuredPrompt), // this escapes it correctly!\n    model: \"veo3_fast\",\n    aspectRatio: \"9:16\"\n  }\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "64e7af1b-f526-4619-97ba-8f35c13d4417",
      "name": "HTTP (Create Video with VEO3)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1440,
        336
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/veo/generate",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"prompt\": {{ $json.prompt }},\n  \"model\": \"{{ $('Make Professional Prompt').item.json.model }}\",\n  \"aspectRatio\": \"{{ $('Make Professional Prompt').item.json.aspectRatio }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4c913db8-4b1e-42da-ae33-c904dcc57868",
      "name": "Wait 3m for Rendering video",
      "type": "n8n-nodes-base.wait",
      "position": [
        1648,
        336
      ],
      "parameters": {
        "amount": 3
      },
      "typeVersion": 1.1
    },
    {
      "id": "77b63988-a6b4-4b15-9d70-81b20950dfa3",
      "name": "HTTP (Download Video from VEO3)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1856,
        336
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/veo/record-info",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "taskId",
              "value": "={{ $('HTTP (Create Video with VEO3)').item.json.data.taskId }}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "84adb93a-f8cc-4b1d-973a-a0c68839e2f4",
      "name": "If (Check Video Status)",
      "type": "n8n-nodes-base.if",
      "position": [
        2048,
        336
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "57f70829-d058-494e-b438-7ce9dc8a6384",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "SUCCESS"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "afc352b4-b71b-4820-95fd-4ebdbf6b124d",
      "name": "Wait 30s if video still processing",
      "type": "n8n-nodes-base.wait",
      "position": [
        2224,
        352
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "8c74f84d-b15b-4191-be0b-ae21309c6592",
      "name": "HTTP (Upload Bloatato Media)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2448,
        320
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{$json[\"data\"][\"videoUrl\"]}}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "da358197-25ac-4af4-a119-2321cb3b8c38",
      "name": "Save Idea in google sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        448,
        336
      ],
      "parameters": {
        "columns": {
          "value": {
            "idea": "={{ $json.output[0].Idea }}",
            "caption": "={{ $json.output[0].Caption }}",
            "production": "={{ $json.output[0].Status }}",
            "sound_prompt": "={{ $json.output[0].Sound }}",
            "environment_prompt": "={{ $json.output[0].Environment }}"
          },
          "schema": [
            {
              "id": "idea",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "idea",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "caption",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "production",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "production",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "environment_prompt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "environment_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sound_prompt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sound_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1o8a6roAbvIUyJ6yZ5u3fsom3ubr9g6A0lCzfx961V-M/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1o8a6roAbvIUyJ6yZ5u3fsom3ubr9g6A0lCzfx961V-M",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1o8a6roAbvIUyJ6yZ5u3fsom3ubr9g6A0lCzfx961V-M/edit?usp=drivesdk",
          "cachedResultName": "Save Video Idea"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "76b1fc6e-2dce-49bc-b643-a56585f678c4",
      "name": "Make a Creative Video Idea",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        48,
        336
      ],
      "parameters": {
        "text": "=Generate a highly original visual concept centered on a single non-human subject (object, environment, or natural phenomenon), showcasing a compelling BEFORE and AFTER transformation.\n\nRequirements:\n* Clearly define a visually distinct **BEFORE state** and a strongly contrasting **AFTER state**\n* Specify a **TRANSITION** using exactly one word (e.g., morph, timelapse, glitch, wipe, burst)\n* Include 2\u20133 **STYLE** descriptors (e.g., cinematic, macro, surreal, minimalist)\n* Define a concise **COLOR PALETTE** (2\u20133 colors)\n* Specify one **CAMERA movement** (e.g., slow push-in, top-down, dolly-in)\n* Specify one **LIGHTING** descriptor (e.g., soft backlight, moody rim light)\n\nConstraints:\n* Do not include humans or brands\n* Avoid clich\u00e9s (e.g., messy-to-clean, food swaps, generic glow-ups)\n* Prioritize originality, strong visual contrast, and immediate clarity\n* Optimize for vertical (9:16) short-form video impact\n\nOutput Format (strictly one line):\n\"BEFORE: [short phrase] \u2192 AFTER: [short phrase] | TRANSITION: [one word] | STYLE: [tag1, tag2] | PALETTE: [color1, color2] | CAMERA: [movement] | LIGHTING: [descriptor]\"\n",
        "options": {
          "systemMessage": "=**Role:**\nYou are an AI specialized in generating **one original BEFORE/AFTER transformation video concept**, fully optimized for TikTok and the VEO 3 API. Output must be a **single-line JSON array** following the specifications below precisely.\n\n---\n\n### RULES\n\n1. **Number of ideas**\n\n   * Generate **exactly one idea** per request.\n\n2. **Theme**\n\n   * Theme is always **\u201cBefore/After transformation\u201d**.\n   * Each idea must showcase a clear, visually striking **contrast** between the BEFORE and AFTER states.\n\n3. **Idea**\n\n   * Maximum **15 words**.\n   * Describe the transformation cinematically, visually compelling, and immediately understandable.\n\n4. **Caption**\n\n   * Short, punchy, and viral-friendly.\n   * Include **one emoji**.\n   * Exactly **12 hashtags** in this order:\n\n     1. Four transformation-relevant hashtags\n     2. Four all-time most popular hashtags\n     3. Four currently trending hashtags (based on live research)\n   * All lowercase, without punctuation in hashtags.\n\n5. **Environment**\n\n   * Maximum **20 words**.\n   * Must match the action in the Idea.\n   * Specify location (room, landscape, lab\u2026), visual details (lighting, textures, transitions\u2026), and style (cinematic, stylized, timelapse, slow-motion\u2026).\n\n6. **Sound**\n\n   * Maximum **15 words**.\n   * Describe primary sound design (e.g., \u201cbeat drop at transition,\u201d \u201csoft rain before, energetic music after\u201d).\n\n7. **Status**\n\n   * Always set to `\"for production\"`.\n\n---\n\n### OUTPUT FORMAT\n\nReturn the concept as a **single-line JSON array**:\n\n```json\n[\n  {\n    \"Caption\": \"Your short viral title with emoji #4_topic_hashtags #4_all_time_popular_hashtags #4_trending_hashtags\",\n    \"Idea\": \"Your before/after transformation idea under 15 words\",\n    \"Environment\": \"Your vivid setting under 20 words matching the action\",\n    \"Sound\": \"Your primary sound description under 15 words\",\n    \"Status\": \"for production\"\n  }\n]\n```\n\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "4192e01d-8a0e-4765-95dd-b7bd809c9f3c",
      "name": "Tool (Make More Creative Thinking in Action)",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        144,
        592
      ],
      "parameters": {
        "description": "Use this tool to record internal reasoning or intermediate thoughts. It does not retrieve new information or modify the database; instead, it appends entries to a log for reference. This is particularly useful for complex reasoning tasks or when temporary memory is required."
      },
      "typeVersion": 1
    },
    {
      "id": "6103f7ba-7e5b-45ee-852c-00dc656e3113",
      "name": "Parse AI Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        224,
        480
      ],
      "parameters": {
        "jsonSchemaExample": "[\n  {\n    \"Caption\": \"Stray dog gets a second chance \ud83d\udc36\u2764\ufe0f #dogrescue #animalrescue #kindness #humanity #viral #feelgood #rescueanimals #loveanimals\",\n    \"Idea\": \"A homeless injured dog is rescued from the street and slowly recovers with human care\",\n    \"Environment\": \"Urban street to cozy shelter transition, warm lighting, emotional storytelling, before-and-after transformation\",\n    \"Sound\": \"Soft piano music with gentle city ambience fading into calm indoor sounds\",\n    \"Status\": \"Ready for production\"\n  }\n]\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "d8dc340f-8dc7-40eb-a7ec-5020ed51bdd6",
      "name": "Rapiwa (Send WhatsApp Notification)",
      "type": "n8n-nodes-rapiwa.rapiwa",
      "position": [
        3104,
        320
      ],
      "parameters": {
        "number": "add_your_whatsapp_number",
        "message": "=New Shorts Video Publish:\nTime: {{ $now.format(\"DD-MMM-YYYY t\") }}\nTitle: {{ $('Save Idea in google sheet').first().json.idea }}"
      },
      "credentials": {
        "rapiwaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5f82907c-018d-4ee1-b82f-4ad04a39c610",
      "name": "Send Telegram Notification",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3104,
        144
      ],
      "parameters": {
        "text": "=New Shorts Video Publish:\nTime: {{ $now.format(\"DD-MMM-YYYY t\") }}\nTitle: {{ $('Save Idea in google sheet').first().json.idea }}",
        "chatId": "add_your_ID",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "389ae64f-8821-4adc-9bf8-c8cc709dab6f",
      "name": "Send Slack Notification",
      "type": "n8n-nodes-base.slack",
      "position": [
        3104,
        496
      ],
      "parameters": {
        "text": "=New Shorts Video Publish:\nTime: {{ $now.format(\"DD-MMM-YYYY t\") }}\nTitle: {{ $('Save Idea in google sheet').first().json.idea }}",
        "user": {
          "__rl": true,
          "mode": "username",
          "value": "@add_your_username"
        },
        "select": "user",
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "362d7004-51ff-4473-ad2d-65ef1e5aa17c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -752,
        240
      ],
      "parameters": {
        "width": 496,
        "height": 1216,
        "content": "## Overview\nThis workflow automates the creation and publishing of viral short-form videos for social media. It leverages AI to generate a unique \"before/after\" transformation concept, uses the VEO 3 API to render the video, and then publishes it to Instagram, complete with a viral-ready caption and hashtags.\n\n## Workflow Steps\n* **Scheduled Trigger** \u2013 Runs automatically on a set schedule to generate new content.\n* **AI Idea Generation** \u2013 GPT creates viral \u201cbefore/after\u201d concepts, captions, and video prompts.\n* **Data Storage** \u2013 Saves ideas, captions, and prompts in Google Sheets.\n* **Structured Prompting** \u2013 Converts ideas into JSON prompts for VEO 3 video generation.\n* **Video Generation** \u2013 Sends prompts to VEO 3 API for cinematic video rendering.\n* **Polling for Completion** \u2013 Checks video status every 30 seconds until ready.\n* **Media Upload** \u2013 Uploads finished video to Bloatato for social media hosting.\n* **Social Publishing** \u2013 Posts video and caption to Instagram via Bloatato.\n* **Status Update** \u2013 Marks idea as \u201cPublish\u201d in Google Sheets.\n* **Multi-Channel Notifications** \u2013 Sends final success alerts via WhatsApp, Telegram, and Slack.\n\n## Requirements \n* **n8n** \u2013 Automation platform for the workflow.\n* **APIs & Keys** \u2013 OpenAI (ideas & scripts), Google Sheets (tracking), VEO 3 (video generation), Bloatato (media hosting & Instagram), plus credentials for Instagram, Rapiwa, Telegram, and Slack.\n\n## Customization Options\n* **Content Theme** \u2013 Change AI prompts for tutorials, product reveals, educational clips, etc.\n* **Schedule** \u2013 Adjust the Cron node frequency.\n* **Platforms** \u2013 Swap Instagram/Bloatato for TikTok, YouTube Shorts, or Facebook Reels.\n* **AI Model** \u2013 Switch GPT to Anthropic Claude, Google Gemini, or others.\n* **Video Settings** \u2013 Modify `aspectRatio` for vertical (9:16) or horizontal (16:9) formats.\n* **Notifications** \u2013 Add/remove channels like email, Slack, WhatsApp, or Telegram.\n\n## Useful Links\n* **n8n Documentation**: [n8n.io](https://docs.n8n.io/)\n* **OpenAI API**: [platform.openai.com](https://platform.openai.com/docs/api-reference)\n* **Google Sheets API**: [developers.google.com](https://developers.google.com/sheets/api)\n* **VEO 3 API**: [kie.ai](https://kie.ai/)\n* **Bloatato API**: [backend.blotato.com](https://backend.blotato.com/)\n* **Instagram Graph API**: [developers.facebook.com](https://developers.facebook.com/docs/instagram-api/)"
      },
      "typeVersion": 1
    },
    {
      "id": "dcda96dc-94bc-4f35-a1ab-f4fda5c93ea8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        272
      ],
      "parameters": {
        "width": 832,
        "height": 448,
        "content": "# Idea Generation & Storage Group"
      },
      "typeVersion": 1
    },
    {
      "id": "5b62bfc7-9a9d-45a7-9987-aa7593aac1ba",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        272
      ],
      "parameters": {
        "width": 576,
        "height": 352,
        "content": "# Professional Scripting Group\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0d190958-76b1-418c-887b-50506c954b0c",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1200,
        272
      ],
      "parameters": {
        "width": 1168,
        "height": 272,
        "content": "# Video Generation & Retrieval Group\n"
      },
      "typeVersion": 1
    },
    {
      "id": "96953a0a-8145-4675-ab76-11d26d1e3d69",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2384,
        256
      ],
      "parameters": {
        "width": 592,
        "height": 240,
        "content": "# Publishing Group\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "94bdf7b1-d660-4149-8880-368103e4563b",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3040,
        96
      ],
      "parameters": {
        "height": 544,
        "content": "## Notification Group\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5ac4c746-fec4-4479-bfbe-4083aa35361e",
      "name": "HTTP (Publish to Instagram)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2672,
        320
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"post\": {\n    \"target\": {\n      \"targetType\": \"instagram\"\n    },\n    \"content\": {\n      \"text\": {{ $('Save Idea in google sheet').first().json.idea }},\n      \"platform\": \"instagram\",\n      \"mediaUrls\": [\"{{ $json.url }}\"]\n    },\n    \"accountId\": \"add_your_instagram_ID\"\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "875ce5e2-fe04-4e51-ac56-255a141c4cd3",
  "connections": {
    "Think": {
      "ai_tool": [
        [
          {
            "node": "AI Agent (Create Video Script)",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Output": {
      "ai_outputParser": [
        [
          {
            "node": "Make a Creative Video Idea",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Make a Creative Video Idea",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent (Create Video Script)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Code (Format Prompt)": {
      "main": [
        [
          {
            "node": "HTTP (Create Video with VEO3)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Daily  Two Times": {
      "main": [
        [
          {
            "node": "Make a Creative Video Idea",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If (Check Video Status)": {
      "main": [
        [
          {
            "node": "HTTP (Upload Bloatato Media)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 30s if video still processing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Make Professional Prompt": {
      "main": [
        [
          {
            "node": "AI Agent (Create Video Script)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent (Create Video Script)",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Save Idea in google sheet": {
      "main": [
        [
          {
            "node": "Make Professional Prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Make a Creative Video Idea": {
      "main": [
        [
          {
            "node": "Save Idea in google sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Status to \"Publish\"": {
      "main": [
        [
          {
            "node": "Send Telegram Notification",
            "type": "main",
            "index": 0
          },
          {
            "node": "Rapiwa (Send WhatsApp Notification)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Slack Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP (Publish to Instagram)": {
      "main": [
        [
          {
            "node": "Update Status to \"Publish\"",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 3m for Rendering video": {
      "main": [
        [
          {
            "node": "HTTP (Download Video from VEO3)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP (Upload Bloatato Media)": {
      "main": [
        [
          {
            "node": "HTTP (Publish to Instagram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP (Create Video with VEO3)": {
      "main": [
        [
          {
            "node": "Wait 3m for Rendering video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent (Create Video Script)": {
      "main": [
        [
          {
            "node": "Code (Format Prompt)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP (Download Video from VEO3)": {
      "main": [
        [
          {
            "node": "If (Check Video Status)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 30s if video still processing": {
      "main": [
        [
          {
            "node": "If (Check Video Status)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tool (Make More Creative Thinking in Action)": {
      "ai_tool": [
        [
          {
            "node": "Make a Creative Video Idea",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This workflow is designed for social media managers, content creators, digital marketers, and entrepreneurs who want to automate the entire lifecycle of creating and publishing short-form video content (like TikToks or Instagram Reels). It's perfect for anyone looking to…

Source: https://n8n.io/workflows/14554/ — 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

Created by: Peyton Leveillee Last updated: October 2025

OpenAI Chat, Google Sheets, HTTP Request +5
AI & RAG

This workflow automates end-to-end ESG (Environmental, Social, and Governance) sustainability reporting for enterprise sustainability teams, compliance officers, and green governance leads. It solves

Agent, OpenAI Chat, Output Parser Structured +12
AI & RAG

This n8n workflow is designed for content creators, digital marketers, and social media managers who want to automate their entire content creation and publishing process across multiple platforms. It

Google Sheets, WordPress, Edit Image +13
AI & RAG

Generate creative ASMR cutting video concepts with GPT-5.1, create high-quality video clips using Sora v2, stitch them together with Cloudinary, and automatically post to Twitter/X—transforming ideas

OpenAI Chat, HTTP Request, Agent +3
AI & RAG

Automates sales data analysis and strategic insight generation for sales managers and strategists needing actionable intelligence. Fetches multi-source data from sales, marketing, and financial system

HTTP Request, Agent, OpenAI Chat +6