This workflow corresponds to n8n.io template #16168 — 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 →
{
"id": "39EhzyaZu4TacYbI",
"meta": {
"builderVariant": "mcp",
"aiBuilderAssisted": true,
"templateCredsSetupCompleted": true
},
"name": "Turn images into AI reels with GPT Image 2, Seedance, post via Blotato - vide",
"tags": [],
"nodes": [
{
"id": "416c6115-65b3-44b2-83ba-2eaa0f287bc4",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"position": [
960,
112
],
"parameters": {
"path": "489e51cf-c257-4cb3-acb5-b1136eed2010",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "90ff4b17-b10f-445b-817c-8d49c1455e58",
"name": "Config",
"type": "n8n-nodes-base.set",
"position": [
1184,
112
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a-prompt",
"name": "prompt",
"type": "string",
"value": "={{ $json.body?.prompt ?? $json.prompt }}"
},
{
"id": "a-caption",
"name": "caption",
"type": "string",
"value": "={{ $json.body?.caption ?? $json.caption ?? \"\" }}"
},
{
"id": "a-profile",
"name": "profile_image_url",
"type": "string",
"value": "YOUR_URL_HERE"
},
{
"id": "6a628659-07c5-4eb8-ba1f-bcffbc304b9b",
"name": "prompt_video",
"type": "string",
"value": "={{ $json.body?.prompt_video ?? $json.prompt_video }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "2036a6a9-c324-4e50-9b77-25f55093b182",
"name": "Wait Image",
"type": "n8n-nodes-base.wait",
"position": [
1632,
112
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "761ee780-c6b5-4b69-9f79-2e1432497c96",
"name": "Poll Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
1840,
112
],
"parameters": {
"url": "=https://api.atlascloud.ai/api/v1/model/prediction/{{ $(\"Generate Image with GPT Image 2 Model\").item.json.data.id }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_HERE"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.4
},
{
"id": "8a528d8a-de08-4580-94bf-f347cc3ced6b",
"name": "Generate Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
1040,
496
],
"parameters": {
"url": "https://api.atlascloud.ai/api/v1/model/generateVideo",
"method": "POST",
"options": {},
"jsonBody": "={\n \"model\": \"bytedance/seedance-2.0/image-to-video\",\n \"duration\": 10,\n \"resolution\": \"480p\",\n \"ratio\": \"9:16\",\n \"generate_audio\": true,\n \"watermark\": false,\n \"return_last_frame\": false,\n \"prompt\": {{ JSON.stringify($('Config').item.json.prompt_video) }},\n \"image\": {{ JSON.stringify($('Extract Image URL').item.json.image_url) }}\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_HERE"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.4
},
{
"id": "1926f9b5-e1b9-45f9-82f6-52d1dfed23fa",
"name": "Wait Video",
"type": "n8n-nodes-base.wait",
"position": [
1264,
496
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "068d0e4d-7802-4a52-b415-ae45c0a22fad",
"name": "Poll Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
1472,
496
],
"parameters": {
"url": "=https://api.atlascloud.ai/api/v1/model/prediction/{{ $(\"Generate Video\").item.json.data.id }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_HERE"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.4
},
{
"id": "63d599e5-b947-4a75-acee-44464248b592",
"name": "Generate Image with GPT Image 2 Model",
"type": "n8n-nodes-base.httpRequest",
"position": [
1408,
112
],
"parameters": {
"url": "https://api.atlascloud.ai/api/v1/model/generateImage",
"method": "POST",
"options": {},
"jsonBody": "={\n \"model\": \"openai/gpt-image-2/edit\",\n \"prompt\": {{ JSON.stringify($('Config').item.json.prompt) }},\n \"images\": [{{ JSON.stringify($('Config').item.json.profile_image_url) }}],\n \"quality\": \"high\",\n \"size\": \"1024x1536\"\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_HERE"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.4
},
{
"id": "24699b13-59ff-4ea9-9cf4-4b23ca4689c0",
"name": "Extract Image URL",
"type": "n8n-nodes-base.code",
"position": [
2384,
64
],
"parameters": {
"jsCode": "const r = $input.first().json;\nconst data = r.data || r;\nconst imageUrl = (data.outputs && data.outputs[0]) || data.output || data.image_url || data.image;\nif (!imageUrl) {\n throw new Error('No image URL found in AtlasCloud response: ' + JSON.stringify(data).substring(0, 300));\n}\nreturn [{ json: { image_url: imageUrl } }];"
},
"typeVersion": 2
},
{
"id": "5ba2aeb8-6243-44ac-8e7e-fdd6c493e7ac",
"name": "Extract Video URL",
"type": "n8n-nodes-base.code",
"position": [
2384,
464
],
"parameters": {
"jsCode": "const r = $input.first().json;\nconst data = r.data || r;\nconst videoUrl = (data.outputs && data.outputs[0]) || data.output || data.video_url;\nif (!videoUrl) {\n throw new Error('No video URL found in AtlasCloud response: ' + JSON.stringify(data).substring(0, 300));\n}\nreturn [{ json: { video_url: videoUrl } }];"
},
"typeVersion": 2
},
{
"id": "9348120d-3703-4355-9f75-32ba6b205f97",
"name": "Create post Tiktok",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
2720,
432
],
"parameters": {
"options": {},
"platform": "tiktok",
"accountId": {
"__rl": true,
"mode": "id",
"value": "YOUR_ID_TIKTOK_BLOTATO_HERE"
},
"postContentText": "={{ $('Config').item.json.caption }}",
"postContentMediaUrls": "={{ $json.video_url }}",
"postCreateTiktokOptionIsAiGenerated": true
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "28169c3b-a95f-45bb-ac8d-b702d8b8a282",
"name": "Create post Instagram",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
2720,
592
],
"parameters": {
"options": {
"scheduledTime": ""
},
"accountId": {
"__rl": true,
"mode": "id",
"value": "YOUR_ID_INSTAGRAM_BLOTATO_HERE"
},
"postContentText": "={{ $('Config').item.json.caption }}",
"postContentMediaUrls": "={{ $json.video_url }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "ed1a8ff6-fc09-4854-9830-1bd5ee02361b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2608,
-80
],
"parameters": {
"color": 2,
"width": 336,
"height": 816,
"content": "## STEP 3 \u2014 Publish to Facebook, TikTok & Instagram\nOnce the clip is ready, its URL is sent to [Blotato](https://blotato.com/?ref=firas), which first uploads the video and then publishes it across your three connected channels \u2014 Facebook, TikTok and Instagram \u2014 in a single pass.\n\nPick which accounts receive the post through your Blotato credential and the account IDs set in the \"Set your variables\" node. Posts go out publicly by default; adjust the privacy settings per platform as needed."
},
"typeVersion": 1
},
{
"id": "02743f36-7d93-4e52-b65f-b4b5181063db",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
-80
],
"parameters": {
"color": 7,
"width": 1664,
"height": 400,
"content": "## STEP 1 \u2014 Image generation with GPT Image 2 (AtlasCloud)\nThe webhook hands over three values \u2014 `prompt`, `prompt_video` and `caption` \u2014 which are stored in the \"Set your variables\" node together with your source image URL and account IDs.\n\n**GPT Image 2** ([AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE)) reworks your source image (image-to-image) following the image prompt, in a vertical 2:3 layout.\n\nBecause the API runs asynchronously, a Wait \u2192 Poll \u2192 Switch loop checks the prediction on each pass and moves forward only when the status reads \"completed\" or \"succeeded\". The \"Extract Image URL\" node then pulls the finished image link."
},
"typeVersion": 1
},
{
"id": "da3fad48-2e25-43f7-9a3e-d1406d7e762b",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
336
],
"parameters": {
"color": 7,
"width": 1664,
"height": 400,
"content": "## STEP 2 \u2014 Video generation with Seedance 2.0 (AtlasCloud)\n**Seedance 2.0** ([AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE)) takes the generated image and brings it to life (image-to-video) using the motion prompt, producing a native 9:16 clip ready for vertical feeds.\n\nThe same asynchronous logic applies: a Wait \u2192 Poll \u2192 Switch loop keeps checking until the video status is \"completed\" or \"succeeded\", and \"Extract Video URL\" returns the final clip link.\n\n\ud83d\udca1 Tip: keep `generate_audio` set to false \u2014 Seedance blocks renders when the generated audio is flagged, and you'll usually add your own music on the platform anyway. Note that Seedance rejects images containing real human faces; use products, scenes or stylised art."
},
"typeVersion": 1
},
{
"id": "8517b367-abd0-4828-8fd6-271f6eb75467",
"name": "Image Status",
"type": "n8n-nodes-base.switch",
"position": [
2064,
96
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "done",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "66660518-0c84-4332-b4fb-e848f63f5613",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "completed"
}
]
},
"renameOutput": true
},
{
"outputKey": "processing",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2885baf4-3583-4de8-9d77-2ab1cda7d2d7",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "processing"
}
]
},
"renameOutput": true
},
{
"outputKey": "Stop and Error",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "45757936-1524-45a6-b0ea-28ddc5e5265d",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "failed"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "402b4339-3f17-4965-adcc-feef0f862941",
"name": "Stop and Error",
"type": "n8n-nodes-base.stopAndError",
"position": [
2384,
192
],
"parameters": {
"errorMessage": "=={{ \"AtlasCloud image generation failed: \" + ($json.data.error || \"unknown error\") }}"
},
"typeVersion": 1
},
{
"id": "731fce6e-1743-4aec-a8f3-4f15e6cedc01",
"name": "Video Status",
"type": "n8n-nodes-base.switch",
"position": [
1680,
480
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "done",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "66660518-0c84-4332-b4fb-e848f63f5613",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "completed"
}
]
},
"renameOutput": true
},
{
"outputKey": "processing",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2885baf4-3583-4de8-9d77-2ab1cda7d2d7",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "processing"
}
]
},
"renameOutput": true
},
{
"outputKey": "Stop and Error",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "45757936-1524-45a6-b0ea-28ddc5e5265d",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.status }}",
"rightValue": "failed"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "29b39268-e5bb-42c3-85ad-312c43b20a09",
"name": "Stop and Error II",
"type": "n8n-nodes-base.stopAndError",
"position": [
2384,
608
],
"parameters": {
"errorMessage": "=={{ \"AtlasCloud image generation failed: \" + ($json.data.error || \"unknown error\") }}"
},
"typeVersion": 1
},
{
"id": "eb1cac9c-13b3-4bf4-ad53-c64d416ccf9c",
"name": "Create post Facebook",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
2720,
272
],
"parameters": {
"options": {},
"platform": "facebook",
"accountId": {
"__rl": true,
"mode": "id",
"value": "YOUR_ID_FACEBOOK_BLOTATO_HERE"
},
"facebookPageId": {
"__rl": true,
"mode": "id",
"value": "YOUR_ID_PAGE_FACEBOOK_BLOTATO_HERE"
},
"postContentText": "={{ $('Config').item.json.caption }}",
"postContentMediaUrls": "={{ $('Extract Image URL').item.json.image_url }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "b8b73732-c47d-4a12-afad-dfe4f87188e1",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
-80
],
"parameters": {
"width": 704,
"height": 816,
"content": "## Create AI video reels with GPT Image 2 and Seedance 2.0, post to social media via Blotato\n\n## \ud83d\udce5 [Open full documentation on Notion](https://automatisation.notion.site/Create-reels-with-GPT-Image-2-and-Seedance-2-0-post-to-Facebook-Instagram-TikTok-with-Blotato-3783d6550fd98085a55ce7bbbeee7bce?source=copy_link)\n\n\u26a0\ufe0f **Community node \u2014 self-hosted n8n only.** This workflow relies on the Blotato community node, which does not run on n8n Cloud.\n\nSend any image and two short prompts through a webhook, and this automation builds a ready-to-post vertical reel: it restyles your image, animates it into video, and pushes it straight to your social channels \u2014 no editing, no manual upload.\n\n### Who's it for\nMarketers, e-commerce sellers and creators who need a steady stream of eye-catching vertical videos (product promos, branded clips, viral hooks) without touching a video editor.\n\n### What it does\n- A **Webhook** collects an image prompt, a motion prompt and a caption.\n- **GPT Image 2** ([AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE)) restyles your source image into a polished visual.\n- A status loop waits for the render, then grabs the image URL.\n- **Seedance 2.0** ([AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE)) turns that image into a native 9:16 video.\n- A second status loop waits for the clip, then grabs the video URL.\n- **[Blotato](https://blotato.com/?ref=firas)** uploads the clip and posts it to Facebook, TikTok and Instagram at once.\n\n### How to set up\n1. Create a Header Auth credential for [AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE) (`Authorization: Bearer YOUR_KEY`).\n2. Link your [Blotato](https://blotato.com/?ref=firas) credential.\n3. Open the **Set your variables** node and drop in your source image URL plus your Facebook, TikTok and Instagram account IDs.\n\n### Requirements\n- [AtlasCloud](https://www.atlascloud.ai/?ref=8QKPJE) account (GPT Image 2 + Seedance 2.0)\n- [Blotato](https://blotato.com/?ref=firas) account linked to Facebook, TikTok and Instagram\n- Self-hosted n8n (community node)\n\n### How to customize\n- Point it at any subject: products, portraits-turned-anime, landscapes, sci-fi scenes.\n- Tune Seedance `resolution`, `duration` and `ratio` to fit each platform.\n- Drop or add destinations in the Blotato step."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"callerPolicy": "workflowsFromSameOwner",
"timeSavedMode": "fixed",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "8db0bb06-a78f-4027-adf3-72a67128b3af",
"connections": {
"Config": {
"main": [
[
{
"node": "Generate Image with GPT Image 2 Model",
"type": "main",
"index": 0
}
]
]
},
"Poll Image": {
"main": [
[
{
"node": "Image Status",
"type": "main",
"index": 0
}
]
]
},
"Poll Video": {
"main": [
[
{
"node": "Video Status",
"type": "main",
"index": 0
}
]
]
},
"Wait Image": {
"main": [
[
{
"node": "Poll Image",
"type": "main",
"index": 0
}
]
]
},
"Wait Video": {
"main": [
[
{
"node": "Poll Video",
"type": "main",
"index": 0
}
]
]
},
"Image Status": {
"main": [
[
{
"node": "Extract Image URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait Image",
"type": "main",
"index": 0
}
],
[
{
"node": "Stop and Error",
"type": "main",
"index": 0
}
]
]
},
"Video Status": {
"main": [
[
{
"node": "Extract Video URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait Video",
"type": "main",
"index": 0
}
],
[
{
"node": "Stop and Error II",
"type": "main",
"index": 0
}
]
]
},
"Generate Video": {
"main": [
[
{
"node": "Wait Video",
"type": "main",
"index": 0
}
]
]
},
"Webhook Trigger": {
"main": [
[
{
"node": "Config",
"type": "main",
"index": 0
}
]
]
},
"Extract Image URL": {
"main": [
[
{
"node": "Generate Video",
"type": "main",
"index": 0
}
]
]
},
"Extract Video URL": {
"main": [
[
{
"node": "Create post Tiktok",
"type": "main",
"index": 0
},
{
"node": "Create post Instagram",
"type": "main",
"index": 0
},
{
"node": "Create post Facebook",
"type": "main",
"index": 0
}
]
]
},
"Generate Image with GPT Image 2 Model": {
"main": [
[
{
"node": "Wait Image",
"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.
blotatoApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow receives a webhook with an image-edit prompt, a video-motion prompt, and a caption, generates a stylized image with AtlasCloud (OpenAI GPT Image 2) and a vertical video with AtlasCloud (ByteDance Seedance 2.0), then publishes the result to Facebook, TikTok, and…
Source: https://n8n.io/workflows/16168/ — 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.
Automated Email Verification & Digital Health Card Generator
A robust n8n workflow template that automates the university admission process for colleges, universities, and educational programs. This workflow validates student emails, generates professional PDF
An importable n8n workflow that creates, updates, and lists entries on Strapi v5 through a single webhook. It talks to Strapi’s REST API with HTTP Request nodes and a Strapi Token API credential, so i
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .