This workflow corresponds to n8n.io template #8601 — we link there as the canonical source.
This workflow follows the Form Trigger → Google Drive 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": "iVrdFL6VgI0UgfnX",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Generate creative ADV image from your multiple image references",
"tags": [],
"nodes": [
{
"id": "8c02f25d-6c9f-4491-99b8-8f09d1cf3341",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-480
],
"parameters": {
"color": 3,
"width": 740,
"height": 312,
"content": "# Generate creative ADV image from your multiple image references \n\nThis workflow automates the process of **generating advertising (ADV)** images from multiple reference images and publishing them directly to social media (**Instagram** and **Facebook** with [Upload-Post](https://www.upload-post.com/?linkId=lp_144414&sourceId=n3witalia&tenantId=upload-post-app)) with **Seedream v4** AI.\n\nThis workflow automates the process of generating an AI image based on a user's text prompt and up to 6 reference images. The process is triggered by a user submitting a web form.\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "a4d0dae9-43cc-455f-99fb-2464d7b0b04b",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
320
],
"parameters": {
"width": 740,
"height": 100,
"content": "## STEP 2 - MAIN FLOW\nStart the workflow manually or periodically by hooking the \"Schedule Trigger\" node. It is recommended to set it at 5 minute intervals."
},
"typeVersion": 1
},
{
"id": "e49bf79e-cc29-447b-a37a-7e97fff2d2d8",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-128
],
"parameters": {
"width": 740,
"height": 140,
"content": "## STEP 1 - GET API KEY (YOURAPIKEY)\nCreate an account [here](https://fal.ai/) and obtain API KEY.\nIn the node \"Create Image\" set \"Header Auth\" and set:\n- Name: \"Authorization\"\n- Value: \"Key YOURAPIKEY\""
},
"typeVersion": 1
},
{
"id": "1daab616-0c5e-44a6-8395-45c11c6f3b7c",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
48
],
"parameters": {
"width": 740,
"height": 232,
"content": "## STEP 2 - Upload video on Instagram and Facebook\n- Find your API key in your [Upload-Post Manage Api Keys](https://www.upload-post.com/?linkId=lp_144414&sourceId=n3witalia&tenantId=upload-post-app) 10 FREE uploads per month\n- Set the the \"Auth Header\":\n-- Name: Authorization\n-- Value: Apikey YOUR_API_KEY_HERE\n- Create profiles to manage your social media accounts. The \"Profile\" you choose will be used in the field YOUR_USRNAME (eg. test1 or test2). \n\n\nThe free plan allows uploads to all platforms except TikTok. To enable, please upgrade to a paid plan."
},
"typeVersion": 1
},
{
"id": "c2ec6ba1-cc64-42e0-b4ec-451192a58da4",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-480
],
"parameters": {
"color": 4,
"width": 736,
"height": 896,
"content": "## Example On Form Submit\nPrompt:\nThe girl is showing a pair of shoes to the monkey in the forest\n\nReference images:\nhttps://n3wstorage.b-cdn.net/n3witalia/result3.png,\nhttps://n3wstorage.b-cdn.net/n3witalia/shoes.png,\nhttps://n3wstorage.b-cdn.net/n3witalia/monkey.jpeg\n\nResult:\n\n\n"
},
"typeVersion": 1
},
{
"id": "fa13b896-e1ab-417d-a9a4-c1ec002c661b",
"name": "Get status",
"type": "n8n-nodes-base.httpRequest",
"position": [
944,
544
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/bytedance/requests/{{ $('Create Video').item.json.request_id }}/status ",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "166d0035-7490-4bb1-807b-44f2ee0e2683",
"name": "Wait 60 sec.",
"type": "n8n-nodes-base.wait",
"position": [
768,
544
],
"parameters": {
"amount": 60
},
"typeVersion": 1.1
},
{
"id": "521a3631-8e04-4ff9-84dd-3957beb5f27c",
"name": "Completed?",
"type": "n8n-nodes-base.if",
"position": [
1120,
544
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "383d112e-2cc6-4dd4-8985-f09ce0bd1781",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "1818397a-b027-47fe-b392-5518b80d96d1",
"name": "Set data",
"type": "n8n-nodes-base.set",
"position": [
320,
544
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c713d31f-9abd-496a-ac79-e8e2efe60aa0",
"name": "prompt",
"type": "string",
"value": "={{ $('On form submission').item.json.Prompt }}"
},
{
"id": "2308096c-702f-4ed1-9de3-c77d9685609e",
"name": "reference_images",
"type": "array",
"value": "={{ $json.reference_image_urls }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a8dbf5d9-5054-4897-ac44-0e3e08a4038e",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
496,
480
],
"parameters": {
"width": 180,
"height": 200,
"content": "Set API Key created in Step 1"
},
"typeVersion": 1
},
{
"id": "f40dd07e-9fba-4393-84f1-f472f00809b8",
"name": "Create Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
544,
544
],
"parameters": {
"url": "https://queue.fal.run/fal-ai/bytedance/seedream/v4/edit",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prompt\": \"{{ $json.prompt }}\",\n \"image_urls\": {{ $json.reference_images.toJsonString() }},\n \"image_size\": {\n \"height\": 1280,\n \"width\": 1280\n },\n \"num_images\": 1,\n \"max_images\": 1,\n \"enable_safety_checker\": true\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "b0988738-207f-457b-9c6e-26698405b923",
"name": "Generate title",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
128,
928
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Input: {{ $('Set data').item.json.prompt }}"
},
{
"role": "system",
"content": "You are a YouTube SEO expert specialized in creating engaging and optimized titles.\n\nYour task is to generate an effective title for a YouTube video based on the user's video description.\n\nGUIDELINES:\n- Maximum 60 characters to avoid truncation\n- Use relevant keywords for SEO\n- Make the title catchy and clickable\n- Avoid excessive or misleading clickbait\n- Consider the target audience of the content\n- Use numbers, questions, or power words when appropriate\n- IMPORTANT: Generate the title in the same language as the input description\n\nOUTPUT FORMAT:\nProvide only the title, without additional explanations.\n\nEXAMPLE:\nInput: \"Tutorial video on how to cook perfect pasta carbonara\"\nOutput: \"PERFECT Carbonara in 10 Minutes - Chef's Secrets\""
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "ad54e7e5-4eaf-43b8-9f28-e5bc8b022c54",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
960
],
"parameters": {
"width": 180,
"height": 408,
"content": "Set YOUR_USERNAME in Step 2"
},
"typeVersion": 1
},
{
"id": "4f077650-7887-4d02-b16b-64a4f47c452b",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-96,
544
],
"parameters": {
"options": {},
"formTitle": "Reference to video",
"formFields": {
"values": [
{
"fieldLabel": "Prompt",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Reference images",
"requiredField": true
}
]
},
"formDescription": "In \"Refernce images\" add url images separated by comma (the last one without) eg:\n\nhttps://url.com/1.jpg,\nhttps://url.com/1.jpg,\nhttps://url.com/1.jpg\n"
},
"typeVersion": 2.2
},
{
"id": "d29f1819-9e31-4cb8-b9f4-fd1ed5b34989",
"name": "Array",
"type": "n8n-nodes-base.code",
"position": [
112,
544
],
"parameters": {
"jsCode": "const inputString = $json[\"Reference images\"];\n\nconst urlsArray = inputString\n .split(/,\\s*|\\r\\n+/) // divide su virgole e newline\n .filter(url => url.trim() !== \"\");\n\nreturn [\n {\n json: {\n reference_image_urls: urlsArray\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "139a76f3-1de2-4959-8157-2f37709e1f34",
"name": "Post to Instagram",
"type": "n8n-nodes-base.httpRequest",
"position": [
784,
1024
],
"parameters": {
"url": "https://api.upload-post.com/api/upload",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "title",
"value": "={{ $('Generate title').item.json.message.content }}"
},
{
"name": "user",
"value": "YOUR_USERNAME"
},
{
"name": "platform[]",
"value": "instagram"
},
{
"name": "image",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "9be2b560-26f3-46a0-a76c-9e0a0dbdd7a0",
"name": "Upload Image",
"type": "n8n-nodes-base.googleDrive",
"position": [
784,
800
],
"parameters": {
"name": "={{ $now.format('yyyyLLddHHmmss') }}-{{ $('Get Url Image').item.json.video.file_name }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1aHRwLWyrqfzoVC8HoB-YMrBvQ4tLC-NZ",
"cachedResultUrl": "https://drive.google.com/drive/folders/1aHRwLWyrqfzoVC8HoB-YMrBvQ4tLC-NZ",
"cachedResultName": "Fal.run"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "20d5d6e0-08d5-43d3-a0cc-f2ed5c541eca",
"name": "Get Url Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
-128,
928
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/bytedance/requests/{{ $json.request_id }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "fbdbbc54-2af3-40e5-bbd1-d09327a8e2e2",
"name": "Get File Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
480,
928
],
"parameters": {
"url": "={{ $('Get Url Image').item.json.images.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "ee69cde0-cb06-4f70-bff6-2a20b99ddf23",
"name": "Post to Facebook",
"type": "n8n-nodes-base.httpRequest",
"position": [
784,
1216
],
"parameters": {
"url": "https://api.upload-post.com/api/upload",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "title",
"value": "={{ $('Generate title').item.json.message.content }}"
},
{
"name": "user",
"value": "YOUR_USERNAME"
},
{
"name": "platform[]",
"value": "facebook"
},
{
"name": "image",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "34ad7d56-5a0d-4252-8f01-752565d20273",
"connections": {
"Array": {
"main": [
[
{
"node": "Set data",
"type": "main",
"index": 0
}
]
]
},
"Set data": {
"main": [
[
{
"node": "Create Video",
"type": "main",
"index": 0
}
]
]
},
"Completed?": {
"main": [
[
{
"node": "Get Url Image",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 60 sec.",
"type": "main",
"index": 0
}
]
]
},
"Get status": {
"main": [
[
{
"node": "Completed?",
"type": "main",
"index": 0
}
]
]
},
"Create Video": {
"main": [
[
{
"node": "Wait 60 sec.",
"type": "main",
"index": 0
}
]
]
},
"Wait 60 sec.": {
"main": [
[
{
"node": "Get status",
"type": "main",
"index": 0
}
]
]
},
"Get Url Image": {
"main": [
[
{
"node": "Generate title",
"type": "main",
"index": 0
}
]
]
},
"Generate title": {
"main": [
[
{
"node": "Get File Image",
"type": "main",
"index": 0
}
]
]
},
"Get File Image": {
"main": [
[
{
"node": "Upload Image",
"type": "main",
"index": 0
},
{
"node": "Post to Instagram",
"type": "main",
"index": 0
},
{
"node": "Post to Facebook",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Array",
"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.
googleDriveOAuth2ApihttpHeaderAuthopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates the process of generating advertising (ADV) images from multiple reference images and publishing them directly to social media (Instagram and Facebook with Upload-Post) with Seedream v4 AI.
Source: https://n8n.io/workflows/8601/ — 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.
Goal: This workflow demonstrates the full fluidX THE EYE integration — starting a live session, inviting both the customer (via SMS) and the service agent (via email), and then accessing the media (ph
This workflow is ideal for content creators, training providers, agencies, and businesses that need to quickly turn raw videos into polished, captioned, or narrated content — without hiring editors or
What it is An automated LinkedIn content system that takes a simple form (idea + optional file), generates LinkedIn posts with OpenAI, stores them in Notion, builds Google Slides carousels, and auto-p
Automate the entire process of converting any website or domain into clean, structured, AI-ready knowledge bases for Large Language Models (LLMs), semantic search, and chatbot development. URL Input v
In this tutorial, I’ll show how to create UGC (User Generated Content) videos automatically using n8n and Sora 2.