{
  "id": "R3YzGYGRE9MM0P9n",
  "name": "Comedic Marketing Reel & Autopost",
  "tags": [],
  "nodes": [
    {
      "id": "158e33d0-3d6c-4d07-9148-cc0952478134",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -224,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 19
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f1dc41ad-c448-4b5e-85ff-35d37de0255c",
      "name": "Video Prompt Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        112,
        0
      ],
      "parameters": {
        "text": "Generate an effective video prompt for a comedy reel promoting Sally's Coffee",
        "options": {
          "systemMessage": "=You are a Text-to-Video Prompt Generator Agent that creates ultra-realistic, short 12-second video prompts for OpenAI Sora2.\nEach video must feel like a cinematic short film or viral reel, with humor that feels natural, situational, and modern \u2014 not slapstick.\nThe purpose of each video is to promote \u201cSally\u2019s Coffee\u201d, a local, friendly coffee shop known for unique drinks like its Nutella Cinnamon Latte.\n\n\ud83c\udfaf Your Objective\n\nGenerate one vivid, self-contained text-to-video prompt that:\n\nDescribes the scene, setting, lighting, tone, and camera style\n\nIncludes realistic human dialogue with funny, relatable moments\n\nEnds with a short spoken or written caption promoting Sally\u2019s Coffee\n\nIs short enough for a 12-second reel (tight pacing)\n\nLooks as real as possible (avoid cartoonish or surreal scenes)\n\n\u2699\ufe0f Rules\n\nOutput only the final text-to-video prompt.\n\nDo not include explanations, annotations, or formatting.\n\nAvoid brand slogans that sound forced \u2014 keep humor subtle and human.\n\nAlways integrate the brand naturally in dialogue or visuals.\n\nEnsure video looks like a real camera-recorded scene (handheld, cinematic, or bodycam if relevant).\n\n\ud83d\udca1 Example Output\n\nUltra-realistic 12-second short film, police bodycam footage style, daytime suburban street.\nA police officer walks up to a car window, camera shakes slightly.\nOfficer (serious tone): \u201cYou know why I pulled you over?\u201d\nDriver (a little confused): \"No officer\"\nOfficer: \u201cYou look like you need a cup of Sally\u2019s Nutella Cinnamon Latte. Just head down Lincoln, it\u2019s right on the corner \u2014 you can thank me later.\u201d\nBig title /commercial to end off on screen: \u201cYou gotta start your day with Sally\u2019s.\u201d"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "3d342bb4-7ca2-4ae4-b790-ef7d100d19a3",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        80,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "gpt-5"
        },
        "options": {
          "timeout": 6000000
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "75024a29-704b-40b7-aa7f-358bac3eea52",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        224,
        208
      ],
      "parameters": {
        "sessionKey": "={{ $execution.id }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "145c2a6e-92ed-4498-bbf9-5f2fb9ecfb64",
      "name": "Insert row",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        560,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "Video_Prompt": "={{ $json.output }}"
          },
          "schema": [
            {
              "id": "Video_Prompt",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Video_Prompt",
              "defaultMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Video_Prompt"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "WllAiOHjO4I5b1IH",
          "cachedResultUrl": "/projects/IeB6bpnkXkUlj9NH/datatables/WllAiOHjO4I5b1IH",
          "cachedResultName": "Demo Sally's Coffee"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a552731a-002b-4177-bb29-f8549c1fcef3",
      "name": "Sora2 POST Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        768,
        0
      ],
      "parameters": {
        "url": "https://api.wavespeed.ai/api/v3/openai/sora-2/text-to-video",
        "method": "POST",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "duration",
              "value": "12"
            },
            {
              "name": "prompt",
              "value": "={{ $json.Video_Prompt }}"
            },
            {
              "name": "size",
              "value": "720*1280"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.3
    },
    {
      "id": "bbba0cd9-ec56-48bc-8dd3-b315f5a3f6dd",
      "name": "Wait 30 Secs",
      "type": "n8n-nodes-base.wait",
      "position": [
        976,
        0
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "d0fdfbd2-6d6c-4c82-9824-b7ac60e571b2",
      "name": "GET Sora2 Result",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1184,
        0
      ],
      "parameters": {
        "url": "=https://api.wavespeed.ai/api/v3/predictions/{{ $json.data.id }}/result",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.3
    },
    {
      "id": "21ec9866-1ecd-41cc-8696-211cfb69404e",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1392,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0bf58770-7c0b-42c0-9e9c-05e150e46c7b",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "completed"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "12871eb5-c334-4b4a-97a9-a2d20bed1975",
      "name": "Wait Another 30 Secs",
      "type": "n8n-nodes-base.wait",
      "position": [
        1328,
        240
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "10c63d69-d3de-4195-b71e-3d495666f183",
      "name": "Upload media",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1600,
        -96
      ],
      "parameters": {
        "mediaUrl": "={{ $json.data.outputs[0] }}",
        "resource": "media"
      },
      "typeVersion": 2
    },
    {
      "id": "2dd919f1-ff88-4988-bd2b-5cf5228d93b2",
      "name": "Create post",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2160,
        -96
      ],
      "parameters": {
        "options": {},
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "7680",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/7680",
          "cachedResultName": "automatewithmarc"
        },
        "postContentText": "={{ $json.output[0].content[0].text }}",
        "postContentMediaUrls": "={{ $('Upload media').item.json.url }}"
      },
      "typeVersion": 2
    },
    {
      "id": "bbbb41cd-1305-442d-bb67-da6ea9c93915",
      "name": "Caption Generator",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1808,
        -96
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4",
          "cachedResultName": "GPT-4"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "content": "Generate an Instagram/Tik Tok Caption for Sally's Coffee"
            },
            {
              "role": "system",
              "content": "You're an Instagram Caption Writer Agent. Your job is to create effective Instagram or Tik Tok captions for Sally's Coffee, a local neighborhood brand. Include relevant hastags."
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2
    },
    {
      "id": "209468ed-cc8b-436a-bdef-f9edaad4b1e4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -240
      ],
      "parameters": {
        "color": 2,
        "width": 368,
        "height": 896,
        "content": "Schdeule Trigger"
      },
      "typeVersion": 1
    },
    {
      "id": "b5dc7759-ff94-4598-90d6-42261b5c4bb8",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -240
      ],
      "parameters": {
        "color": 4,
        "width": 496,
        "height": 896,
        "content": "Video Generation"
      },
      "typeVersion": 1
    },
    {
      "id": "4df214af-e42d-410e-b065-abe8b1058fb2",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        -240
      ],
      "parameters": {
        "width": 208,
        "height": 896,
        "content": "Logging"
      },
      "typeVersion": 1
    },
    {
      "id": "f82cb2d3-0813-4db1-bad1-99164784956b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -240
      ],
      "parameters": {
        "color": 5,
        "width": 816,
        "height": 896,
        "content": "POST and GET from Sora2"
      },
      "typeVersion": 1
    },
    {
      "id": "82ca2f23-0049-4138-ae7a-5d5e0b3e54b3",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1568,
        -240
      ],
      "parameters": {
        "color": 3,
        "width": 816,
        "height": 896,
        "content": "Upload to Bloatato (Instagram & Tik Tok)"
      },
      "typeVersion": 1
    },
    {
      "id": "1e9cc0ec-cd70-4fb0-acab-5d51219fc9b5",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1376,
        -176
      ],
      "parameters": {
        "width": 944,
        "height": 800,
        "content": "Funny Marketing Reels Autopilot with Sora2 and Blotato\n\nTurn one n8n workflow into your always-on, funny short-form marketing machine. This template automatically generates a comedic video idea, turns it into a Sora2 video, writes a social caption, and auto-posts to your chosen social account via Blotato \u2013 all on a schedule you control.\n\nWatch Step by Step Tutorial of this build: https://www.youtube.com/watch?v=lKZknEzhivo\n\nWhat this template does\n\nTriggers on a schedule (e.g. every day at 7pm) to create a new short comedic reel.\nUses an AI \u201cVideo Prompt Agent\u201d to generate an ultra-realistic 12-second text-to-video prompt designed to promote a coffee shop (you can adapt this to your own brand).\nSends the prompt to Sora2 (via Wavespeed) to generate a 720\u00d71280 vertical video.\nWaits and polls the Sora2 prediction endpoint until the video is ready.\nUploads the generated video file to Blotato.\nGenerates a platform-ready Instagram/TikTok caption with hashtags using an AI Caption Generator.\nCreates and schedules/publishes a post via Blotato using the new video + caption.\nLogs each generated video prompt into an n8n Data Table for tracking and reuse.\n\nTypical use cases\nLocal cafes, stores, or service businesses that want consistent, funny reels promoting daily specials or signature products.\nCreators and agencies who want to prototype \u201cAI-first\u201d social content pipelines for clients.\nMarketing teams testing comedic content formats without manually scripting, editing, and posting every day.\n\nKey tools and integrations\n\nSchedule Trigger (n8n) \u2013 runs the workflow at your preferred time.\nOpenAI Chat / LangChain Agent \u2013 generates vivid, cinematic Sora2 prompts with natural dialogue.\nWavespeed + Sora2 \u2013 creates short vertical videos from the AI prompt.\nn8n Data Table \u2013 logs each video prompt for audit and inspiration.\nOpenAI (caption model) \u2013 writes social-friendly, hashtag-ready captions.\nBlotato \u2013 uploads media and auto-posts to Instagram, TikTok, or other connected accounts.\n\nBefore you start\nAdd or configure your OpenAI API credentials in n8n.\nAdd or configure your Wavespeed/Sora2 credentials and base URL.\nSet up Blotato, connect your social accounts, and add your Blotato API credentials.\n(Optional) Update the Data Table ID to your own table for logging prompts.\nReview all AI prompts in the nodes to align with your brand voice and content policies.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5e52c235-11d4-42dc-90cf-6d8d5d29a43f",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        -544
      ],
      "parameters": {
        "width": 528,
        "height": 336,
        "content": "@[youtube](lKZknEzhivo)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6dbd6c71-3f6b-4ffb-a06e-ce951c1352cd",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Upload media",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait Another 30 Secs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert row": {
      "main": [
        [
          {
            "node": "Sora2 POST Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload media": {
      "main": [
        [
          {
            "node": "Caption Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 30 Secs": {
      "main": [
        [
          {
            "node": "GET Sora2 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Video Prompt Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "GET Sora2 Result": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Video Prompt Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Caption Generator": {
      "main": [
        []
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Video Prompt Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Sora2 POST Request": {
      "main": [
        [
          {
            "node": "Wait 30 Secs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Video Prompt Agent": {
      "main": [
        [
          {
            "node": "Insert row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait Another 30 Secs": {
      "main": [
        [
          {
            "node": "GET Sora2 Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}