This workflow corresponds to n8n.io template #13085 — we link there as the canonical source.
This workflow follows the Agent → Googlegemini 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 →
{
"id": "t0lp3QCoEA7KBVi6",
"name": "AI videos with Sora 2 Cameos",
"tags": [],
"nodes": [
{
"id": "b80d7c0f-23bd-49a0-8859-f1eb143113a8",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
224
],
"parameters": {
"color": 7,
"width": 464,
"height": 1152,
"content": "### Video Generation\nAutomatically creates AI videos using Sora 2 Cameos based on generated prompts, with retry and status handling."
},
"typeVersion": 1
},
{
"id": "875f6c25-175c-4aa2-9687-d0d334895a9e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1760,
224
],
"parameters": {
"color": 7,
"width": 320,
"height": 1152,
"content": "### Video Merges\nMerges, processes, and finalizes video outputs into a publish-ready format."
},
"typeVersion": 1
},
{
"id": "3dcc173b-5660-45d8-bb90-dd97726a6b9d",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2080,
224
],
"parameters": {
"color": 7,
"width": 384,
"height": 1152,
"content": "### Auto Publishing\nAutomatically publishes videos to multiple social platforms (TikTok, Facebook, Instagram)."
},
"typeVersion": 1
},
{
"id": "85729f71-c04b-4a93-a0c0-08f83ca487b8",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2464,
224
],
"parameters": {
"color": 7,
"width": 384,
"height": 1152,
"content": "### Logging & Status Tracking\nUpdates Google Sheets with success or error status for monitoring and analytics."
},
"typeVersion": 1
},
{
"id": "c2dae1ed-7001-4b63-81e6-ba6920fce2f4",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
592,
-80
],
"parameters": {
"color": 7,
"width": 2256,
"height": 304,
"content": "### Viral Content Collector\nAutomatically collects viral content ideas for AI video creation."
},
"typeVersion": 1
},
{
"id": "57f9c9b9-5f81-4c0a-aa10-64f15392755e",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
592,
224
],
"parameters": {
"color": 7,
"width": 704,
"height": 1152,
"content": "### Prompt & Script Generation\nAnalyzes viral content and uses AI to generate structured video prompts and scripts optimized for Sora 2 Cameos."
},
"typeVersion": 1
},
{
"id": "4ce28d56-06a9-4c46-be84-dfc5f5aee3c5",
"name": "Daily Content Scheduler",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
688,
0
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"typeVersion": 1.3
},
{
"id": "fac463de-b27b-4561-8dad-3f74e01c7e7b",
"name": "Fetch Viral Content Dataset",
"type": "@apify/n8n-nodes-apify.apify",
"position": [
928,
0
],
"parameters": {
"actorId": {
"__rl": true,
"mode": "list",
"value": "GdWCkxBtKWOsKjdch",
"cachedResultUrl": "https://console.apify.com/actors/GdWCkxBtKWOsKjdch/input",
"cachedResultName": "TikTok Scraper (clockworks/tiktok-scraper)"
},
"timeout": {},
"operation": "Run actor and get dataset",
"customBody": "={\n \"excludePinnedPosts\": false,\n \"profileScrapeSections\": [\n \"videos\"\n ],\n \"profileSorting\": \"popular\",\n \"profiles\": [\n \"@donal.store\"\n ],\n \"proxyCountryCode\": \"VN\",\n \"resultsPerPage\": 10,\n \"scrapeRelatedVideos\": false,\n \"shouldDownloadAvatars\": false,\n \"shouldDownloadCovers\": false,\n \"shouldDownloadMusicCovers\": false,\n \"shouldDownloadSlideshowImages\": false,\n \"shouldDownloadSubtitles\": false,\n \"shouldDownloadVideos\": true,\n \"videoKvStoreIdOrName\": \"my-tiktok-ASMR\"\n}",
"authentication": "apifyOAuth2Api"
},
"typeVersion": 1
},
{
"id": "be55f7c2-716c-4893-af5d-e85dee06d9d1",
"name": "Normalize Content Fields",
"type": "n8n-nodes-base.set",
"position": [
1200,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2927eb2d-7868-4945-b7c7-163782fc0044",
"name": "Caption",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "8b7c1f39-207f-4433-9694-9aa4c5ac8c55",
"name": "Date Post",
"type": "string",
"value": "={{ $json.createTimeISO.toDateTime().format('dd/LL/yyyy') }}"
},
{
"id": "3be36a1b-f1c3-4b44-b265-bd79ab6bddbe",
"name": "Username",
"type": "string",
"value": "={{ $json.authorMeta.name }}"
},
{
"id": "25128c7b-b6e0-4c63-8bcb-c71866976737",
"name": "Link user",
"type": "string",
"value": "={{ $json.authorMeta.profileUrl }}"
},
{
"id": "ada46de7-8651-422a-bf7a-a958aad7ce28",
"name": "Link video",
"type": "string",
"value": "={{ $json.webVideoUrl }}"
},
{
"id": "92d4e87b-9cc9-4609-8e17-383c61ca3058",
"name": "VideoURL",
"type": "array",
"value": "={{ $json.mediaUrls }}"
},
{
"id": "1f428824-106f-49f3-8816-92c7ff9ef324",
"name": "Likes",
"type": "number",
"value": "={{ $json.diggCount }}"
},
{
"id": "5f1c9240-7a37-424e-8318-333c8de42797",
"name": "Shares",
"type": "number",
"value": "={{ $json.shareCount }}"
},
{
"id": "56c177a1-b382-4674-8308-45f9423a6e54",
"name": "View",
"type": "number",
"value": "={{ $json.playCount }}"
},
{
"id": "73cb5bb3-bdbf-406b-a778-bf36e935ead9",
"name": "Save",
"type": "number",
"value": "={{ $json.collectCount }}"
},
{
"id": "a8bbcfbe-7c37-4f78-9e9d-ad9387a581d1",
"name": "Hasgtag",
"type": "array",
"value": "={{ $json.hashtags }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "bb187067-1533-4414-8609-ceccbe27d3f1",
"name": "Save Viral Content to Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1440,
0
],
"parameters": {
"columns": {
"value": {
"View": "={{$json.View }}",
"Likes": "={{ $json.Likes }}",
"Shares": "={{ $json.Shares }}",
"Status": "Pending",
"Caption": "={{ $json.Caption }}",
"Username": "{{ $json.Username }}",
"VideoURL": "={{ $json.VideoURL[0] }}",
"Date Post": "={{ $json['Date Post'] }}",
"Link user": "={{ $json['Link user'] }}",
"Link video": "={{ $json['Link video'] }}"
},
"schema": [
{
"id": "Caption",
"type": "string",
"display": true,
"required": false,
"displayName": "Caption",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Post",
"type": "string",
"display": true,
"required": false,
"displayName": "Date Post",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Username",
"type": "string",
"display": true,
"required": false,
"displayName": "Username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link user",
"type": "string",
"display": true,
"required": false,
"displayName": "Link user",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link video",
"type": "string",
"display": true,
"required": false,
"displayName": "Link video",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "VideoURL",
"type": "string",
"display": true,
"required": false,
"displayName": "VideoURL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Likes",
"type": "string",
"display": true,
"required": false,
"displayName": "Likes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Shares",
"type": "string",
"display": true,
"required": false,
"displayName": "Shares",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "View",
"type": "string",
"display": true,
"required": false,
"displayName": "View",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Save",
"type": "string",
"display": true,
"required": false,
"displayName": "Save",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Hasgtag",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Hasgtag",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4/edit?usp=drivesdk",
"cachedResultName": "Sora Cameos"
}
},
"typeVersion": 4.7
},
{
"id": "9dfc9a29-9f41-4935-ad86-d5d4efe79542",
"name": "Video Processing Scheduler",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
688,
368
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.3
},
{
"id": "66891aca-93d0-4202-8654-c6c62100f588",
"name": "Load Viral Content",
"type": "n8n-nodes-base.googleSheets",
"position": [
896,
368
],
"parameters": {
"options": {
"returnFirstMatch": true
},
"filtersUI": {
"values": [
{
"lookupValue": "Pending",
"lookupColumn": "Status"
},
{
"lookupValue": "Pending",
"lookupColumn": "Status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4/edit#gid=0",
"cachedResultName": "Trang t\u00ednh1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4/edit?usp=drivesdk",
"cachedResultName": "Sora Cameos"
}
},
"typeVersion": 4.7
},
{
"id": "0fdc3458-243f-4e08-99d3-67ef0fab1b75",
"name": "Analyze Viral Idea",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1120,
368
],
"parameters": {
"text": "Detailed video description including detailed analysis of setting and characters (no description with watermark if any)",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-3-pro-preview",
"cachedResultName": "models/gemini-3-pro-preview"
},
"options": {},
"resource": "video",
"operation": "analyze",
"videoUrls": "={{ $json.VideoURL }}"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "379ea756-c13c-4da6-9e2e-a49fa4010366",
"name": "AI Script & Prompt Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
944,
624
],
"parameters": {
"text": "=Reference analysis extracted from the video: {{ $json.content.parts[0].text }}\n",
"options": {
"systemMessage": "=MAIN CHARACTER REFERENCE:\nAll videos must revolve around ONE consistent main character, referenced as @cameo\nThis person represents someone on a personal development journey.\nAll scenes, actions, and spoken thoughts belong to the same person.\n\n\n\nVOICE PROFILE (FIXED AND UNCHANGING):\nThe spoken narration in ALL prompts must strictly follow the SAME voice profile:\n\nTone: gentle, calm, and warm\n\nStyle: sharing and reflective, as if speaking softly to oneself or a close friend\n\nPace: slow and steady, no rush\n\nEmotion: sincere, grounded, and composed\n\nDelivery: neutral and even, no strong emphasis, no dramatic shifts\n\nPerspective: first-person only\n\nThis voice profile is constant and must NOT change between prompts.\nDo NOT reinterpret, exaggerate, or vary the voice style in any prompt.\n\nINPUT:\nYou will receive a reference analysis of a successful personal development video.\nThis input includes key insights, reflections, or short spoken ideas that performed well.\n\nTASK:\nTransform the input into TWO SEPARATE video prompts.\nEach prompt represents ONE complete short-form video of approximately 15 seconds.\n\nFor each video prompt:\n\nPlace the same person into a calm, everyday lifestyle vlog scene\n\nEmbed spoken narration directly into the prompt\n\nEnsure the narration follows the FIXED VOICE PROFILE exactly\n\nWrite narration in first-person perspective\n\nEach video must feel complete on its own\n\nAcross both prompts:\n\nThe narration must sound as if spoken by the same person in the same emotional state\n\nWhen the two videos are played back-to-back, the voice must feel continuous and unified\n\nYour ONLY output must strictly follow the JSON structure below:\n{\n \"title\": \"Overall title for the video series\",\n \"description\": \"1\u20133 sentences summarizing the main message\",\n \"prompts\": [\n \"Video prompt #1 \u2013 15-second video, gentle tone, sharing style, following the voice profile\",\n \"Video prompt #2 \u2013 15-second video, KEEP the SAME voice profile, no changes in tone or style\"\n ]\n}\n\nRules:\n\nOutput valid JSON only.\n\nDo not include explanations or extra text outside the JSON.\n\nDo NOT create a separate script or dialogue section.\n\nThe voice must be embedded naturally inside each prompt.\n\nAvoid hype, teaching tone, selling language, or dramatic storytelling.\n\nPrompts must be safe, non-violent, and platform-friendly.\n\n\nEnsure the narration follows the FIXED VOICE PROFILE exactly\n\nWrite narration in first-person perspective\n\nEach video must feel complete on its own\n\nAcross both prompts:\n\nThe narration must sound as if spoken by the same person in the same emotional state\n\nWhen the two videos are played back-to-back, the voice must feel continuous and seamless"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3
},
{
"id": "b32b4115-e3da-4c33-a481-ec7f402d5c1d",
"name": "Reasoning Engine",
"type": "@n8n/n8n-nodes-langchain.toolThink",
"position": [
928,
816
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "ec3ddaca-df72-495a-a2fb-f958edee3a03",
"name": "Parse Script Output",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1024,
880
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"title\": \"string\",\n \"description\": \"string\",\n \"prompts\": [\n {\n \"prompt\": \"string\"\n }\n \n ]\n}\n"
},
"typeVersion": 1.3
},
{
"id": "65b6d1e8-f94a-42f5-8f4d-698fe7f1c4b1",
"name": "Gemini LLM",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
704,
720
],
"parameters": {
"options": {},
"modelName": "models/gemini-3-pro-preview"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5eda7ff6-b0d1-4310-a6a4-2ef982005877",
"name": "Split Video Prompt",
"type": "n8n-nodes-base.splitOut",
"position": [
1440,
352
],
"parameters": {
"options": {},
"fieldToSplitOut": "output.prompts"
},
"typeVersion": 1
},
{
"id": "2d0f4341-cc2e-4924-b503-8ac0f5a5a8b7",
"name": "Generate Sora Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
1456,
560
],
"parameters": {
"url": "https://api.geminigen.ai/uapi/v1/video-gen/sora",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "prompt",
"value": "={{ $json.prompt }}"
},
{
"name": "model",
"value": "sora-2"
},
{
"name": "resolution",
"value": "small"
},
{
"name": "duration",
"value": "15"
},
{
"name": "aspect_ratio",
"value": "portrait"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "8c6cbce3-7cce-4e1a-ac14-92dda477147a",
"name": "Render Status Check1",
"type": "n8n-nodes-base.switch",
"position": [
1472,
1168
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Processing",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "f59af75f-b4aa-4c00-9c8c-5e89ea224cff",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": 1
}
]
},
"renameOutput": true
},
{
"outputKey": "Completed",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "95b628d6-c13a-49cc-8d8e-7bdd3a77c3ca",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": 2
}
]
},
"renameOutput": true
},
{
"outputKey": "Failed",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "43a3ecb8-6e35-434c-8364-bda3429b7a57",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "3"
}
]
},
"renameOutput": true
}
]
},
"options": {},
"looseTypeValidation": true
},
"typeVersion": 3.4
},
{
"id": "b8adf756-c964-497f-b976-85ee50438cc4",
"name": "Get Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
1456,
976
],
"parameters": {
"url": "=https://api.geminigen.ai/uapi/v1/history/{{ $json.uuid }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.3
},
{
"id": "d21b9012-7fad-400a-81a3-cd5c0a097d26",
"name": "Aggregate Video Parts",
"type": "n8n-nodes-base.aggregate",
"position": [
1872,
464
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "generated_video[0].video_url"
}
]
}
},
"typeVersion": 1
},
{
"id": "ab96d636-9f49-4b22-b511-c663f200a80b",
"name": "Prepare Video Metadata",
"type": "n8n-nodes-base.code",
"position": [
1872,
720
],
"parameters": {
"jsCode": "// 1. L\u1ea5y item \u0111\u1ea7u ti\u00ean t\u1eeb node Aggregate\nconst item = $input.first();\n\n// 2. L\u1ea5y danh s\u00e1ch link (\u0111ang l\u00e0 m\u1ea3ng c\u00e1c chu\u1ed7i text)\n// D\u1eef li\u1ec7u l\u1ea5y t\u1eeb tr\u01b0\u1eddng 'video_url'\nconst originalUrls = item.json.video_url; \n\n// 3. Bi\u1ebfn \u0111\u1ed5i th\u00e0nh d\u1ea1ng [{\"video_url\": \"link1\"}, {\"video_url\": \"link2\"}]\nconst formattedList = originalUrls.map(url => ({\n video_url: url\n}));\n\n// 4. T\u1ea1o object t\u1ed5ng theo \u0111\u00fang c\u1ea5u tr\u00fac y\u00eau c\u1ea7u\nconst finalObject = {\n video_urls: formattedList,\n id: \"2323\"\n};\n\n// 5. Tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3\n// Quan tr\u1ecdng: D\u00f9ng JSON.stringify() \u0111\u1ec3 bi\u1ebfn object th\u00e0nh chu\u1ed7i text nh\u01b0 b\u1ea1n mu\u1ed1n\nreturn {\n json: {\n output: JSON.stringify(finalObject)\n }\n};"
},
"typeVersion": 2
},
{
"id": "bf682a1b-a5ed-4532-9cb0-350ac1281fbf",
"name": "Merge Video Clips",
"type": "n8n-nodes-base.httpRequest",
"position": [
1888,
960
],
"parameters": {
"url": "=https://no-code-architects-toolkit-843211623372.us-central1.run.app/v1/video/concatenate",
"method": "POST",
"options": {
"redirect": {
"redirect": {}
}
},
"jsonBody": "={{ $json.output }}",
"sendBody": true,
"contentType": "=json",
"specifyBody": "json",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{}
]
},
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "68f10f92-c592-4edb-99f2-844adfbeaafd",
"name": "Publish to TikTok",
"type": "@blotato/n8n-nodes-blotato.blotato",
"onError": "continueErrorOutput",
"position": [
2192,
528
],
"parameters": {
"options": {},
"platform": "tiktok",
"accountId": {
"__rl": true,
"mode": "list",
"value": "23867",
"cachedResultUrl": "https://backend.blotato.com/v2/accounts/23867",
"cachedResultName": "kytagiang"
},
"postContentText": "={{ $('AI Agent1').item.json.output.title }}",
"postContentMediaUrls": "={{ $json.response }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "2c5547b2-5ebf-4f0f-853d-c3583a574589",
"name": "Publish to Facebook",
"type": "@blotato/n8n-nodes-blotato.blotato",
"onError": "continueErrorOutput",
"position": [
2192,
816
],
"parameters": {
"options": {},
"platform": "facebook",
"accountId": {
"__rl": true,
"mode": "list",
"value": "16978",
"cachedResultUrl": "https://backend.blotato.com/v2/accounts/16978",
"cachedResultName": "Giang VT"
},
"facebookPageId": {
"__rl": true,
"mode": "list",
"value": "884148598111681",
"cachedResultUrl": "https://backend.blotato.com/v2/accounts/16978/subaccounts/884148598111681",
"cachedResultName": "Qu\u1ef3nh Hoa Tr\u1ea7n AI"
},
"postContentText": "={{ $('AI Agent1').item.json.output.title }}",
"postContentMediaUrls": "={{ $json.response }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "6561b970-a1fa-4c8d-b6bb-a2ea6fa415a8",
"name": "Publish to Instagram",
"type": "@blotato/n8n-nodes-blotato.blotato",
"onError": "continueErrorOutput",
"position": [
2208,
1120
],
"parameters": {
"options": {},
"accountId": {
"__rl": true,
"mode": "list",
"value": "25299",
"cachedResultUrl": "https://backend.blotato.com/v2/accounts/25299",
"cachedResultName": "giangxai.aff"
},
"postContentText": "={{ $('AI Agent1').item.json.output.title }}.\n{{ $('AI Agent1').item.json.output.description }}",
"postContentMediaUrls": "={{ $json.response }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "4c18ae2b-509b-4e1f-a735-b46cb46c14b7",
"name": "Update Success Status",
"type": "n8n-nodes-base.googleSheets",
"position": [
2672,
752
],
"parameters": {
"columns": {
"value": {
"Status": "Done",
"row_number": "={{ $('Load Viral Content').item.json.row_number }}"
},
"schema": [
{
"id": "Caption",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Caption",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Post",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Date Post",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Username",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link user",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Link user",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link video",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Link video",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "VideoURL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "VideoURL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Likes",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Likes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Shares",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Shares",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "View",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "View",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Save",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Save",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Hasgtag",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Hasgtag",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4/edit#gid=0",
"cachedResultName": "Trang t\u00ednh1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4/edit?usp=drivesdk",
"cachedResultName": "Sora Cameos"
}
},
"typeVersion": 4.7
},
{
"id": "db2a54c4-c5ce-4be6-b917-892dbb36266d",
"name": "Update Error Status",
"type": "n8n-nodes-base.googleSheets",
"position": [
2656,
976
],
"parameters": {
"columns": {
"value": {
"Status": "Error",
"row_number": "={{ $('Load Viral Content').item.json.row_number }}"
},
"schema": [
{
"id": "Caption",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Caption",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Post",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Date Post",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Username",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link user",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Link user",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link video",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Link video",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "VideoURL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "VideoURL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Likes",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Likes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Shares",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Shares",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "View",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "View",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Save",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Save",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Hasgtag",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Hasgtag",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4/edit#gid=0",
"cachedResultName": "Trang t\u00ednh1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12gO8JoMveX2vcM_mZBSe2HSJB3zKrjUer6NkkQoxaG4/edit?usp=drivesdk",
"cachedResultName": "Sora Cameos"
}
},
"typeVersion": 4.7
},
{
"id": "fb947e43-07cd-43ea-bfd2-bb21c88a8a38",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-80
],
"parameters": {
"width": 592,
"height": 1456,
"content": "# \ud83d\udee0\ufe0f Workflow Setup Guide\n\nAuthor: [GiangxAI](https://www.youtube.com/@giangxai.official)\n\n## How it works\n- Viral video ideas are automatically collected and stored in Google Sheets \n- A Sora 2 Cameos character is selected on Sora2.com and used as the video avatar \n- Each idea is analyzed and converted into a structured AI video script and prompt \n- Sora 2 Cameos generates AI video clips based on the prompts \n- Video clips are merged into a single final video \n- The video is published to social platforms via Blotato \n- Google Sheets is updated with publishing status and results \n\nThe entire workflow runs on a schedule and operates end-to-end without manual editing.\n\n---\n\n## Setup guide\n- Connect Google Sheets for content intake and status tracking \n- Select and configure a Cameos character on Sora2.com \n- Add credentials for your AI model (e.g. Gemini) \n- Add Sora 2 Cameos API credentials for video generation \n- Connect Blotato for automated publishing \n- Adjust the schedule to control video creation and publishing frequency \n\nSetup is fast and requires no coding knowledge.\n"
},
"typeVersion": 1
},
{
"id": "833e02ad-82f8-4706-a7e4-512a94c566ec",
"name": "Wait for Render",
"type": "n8n-nodes-base.wait",
"position": [
1456,
768
],
"parameters": {},
"typeVersion": 1.1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "5f5a13e2-8ec6-4b1f-aed8-ea7eb888b572",
"connections": {
"Get Video": {
"main": [
[
{
"node": "Render Status Check1",
"type": "main",
"index": 0
}
]
]
},
"Gemini LLM": {
"ai_languageModel": [
[
{
"node": "Parse Script Output",
"type": "ai_languageModel",
"index": 0
},
{
"node": "AI Script & Prompt Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Wait for Render": {
"main": [
[
{
"node": "Get Video",
"type": "main",
"index": 0
}
]
]
},
"Reasoning Engine": {
"ai_tool": [
[
{
"node": "AI Script & Prompt Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Merge Video Clips": {
"main": [
[
{
"node": "Publish to Facebook",
"type": "main",
"index": 0
},
{
"node": "Publish to TikTok",
"type": "main",
"index": 0
},
{
"node": "Publish to Instagram",
"type": "main",
"index": 0
}
]
]
},
"Publish to TikTok": {
"main": [
[
{
"node": "Update Success Status",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Error Status",
"type": "main",
"index": 0
}
]
]
},
"Analyze Viral Idea": {
"main": [
[
{
"node": "AI Script & Prompt Agent",
"type": "main",
"index": 0
}
]
]
},
"Load Viral Content": {
"main": [
[
{
"node": "Analyze Viral Idea",
"type": "main",
"index": 0
}
]
]
},
"Split Video Prompt": {
"main": [
[
{
"node": "Generate Sora Video",
"type": "main",
"index": 0
}
]
]
},
"Generate Sora Video": {
"main": [
[
{
"node": "Wait for Render",
"type": "main",
"index": 0
}
]
]
},
"Parse Script Output": {
"ai_outputParser": [
[
{
"node": "AI Script & Prompt Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Publish to Facebook": {
"main": [
[
{
"node": "Update Success Status",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Error Status",
"type": "main",
"index": 0
}
]
]
},
"Publish to Instagram": {
"main": [
[
{
"node": "Update Success Status",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Error Status",
"type": "main",
"index": 0
}
]
]
},
"Render Status Check1": {
"main": [
[
{
"node": "Wait for Render",
"type": "main",
"index": 0
}
],
[
{
"node": "Aggregate Video Parts",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Video Parts": {
"main": [
[
{
"node": "Prepare Video Metadata",
"type": "main",
"index": 0
}
]
]
},
"Prepare Video Metadata": {
"main": [
[
{
"node": "Merge Video Clips",
"type": "main",
"index": 0
}
]
]
},
"Daily Content Scheduler": {
"main": [
[
{
"node": "Fetch Viral Content Dataset",
"type": "main",
"index": 0
}
]
]
},
"AI Script & Prompt Agent": {
"main": [
[
{
"node": "Split Video Prompt",
"type": "main",
"index": 0
}
]
]
},
"Normalize Content Fields": {
"main": [
[
{
"node": "Save Viral Content to Sheet",
"type": "main",
"index": 0
}
]
]
},
"Video Processing Scheduler": {
"main": [
[
{
"node": "Load Viral Content",
"type": "main",
"index": 0
}
]
]
},
"Fetch Viral Content Dataset": {
"main": [
[
{
"node": "Normalize Content Fields",
"type": "main",
"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.
blotatoApigooglePalmApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically creates short-form AI videos using Sora 2 Cameos, powered by n8n and AI agents.
Source: https://n8n.io/workflows/13085/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
kisisel asistan. Uses toolWorkflow, toolHttpRequest, toolCalculator, toolThink. Scheduled trigger; 43 nodes.
Automatically generate viral short-form health videos using AI and publish them to social platforms with n8n and Veo 3. This workflow collects viral ideas, analyzes engagement patterns, generates AI v
This workflow is ideal for: Content creators who want to replicate successful LinkedIn strategies Social media managers monitoring competitor content performance Marketing teams analyzing trending top
Overview
Automatically generate AI avatar short videos and publish them to social platforms using n8n and HeyGen. This workflow turns viral ideas or prepared scripts into fully rendered AI avatar videos and ha