This workflow corresponds to n8n.io template #11163 — 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "5fa084d2-aae6-4cde-bdcf-fc9b55aad1d1",
"name": "Describe ad selected",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
96,
128
],
"parameters": {
"text": "describe the image extremely comprehensively. don't leave anything behind ",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o",
"cachedResultName": "GPT-4O"
},
"options": {},
"resource": "image",
"inputType": "base64",
"operation": "analyze",
"binaryPropertyName": "=data"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "869aaca7-69e6-4b8c-94cc-bedf8ee39dc9",
"name": "Create variants of the prompt",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
528,
128
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-5",
"cachedResultName": "GPT-5"
},
"options": {
"textFormat": {
"textOptions": {
"type": "json_object"
}
}
},
"responses": {
"values": [
{
"role": "system",
"content": "You are a helpful, intelligent prompt rewriting assistant. You help rewrite prompts"
},
{
"content": "=You are tasked with generating {{ $json.number_ads }} image description variants for ad creatives based on a specific creative methodology.\n\nINPUT PARAMETERS:\n- Company Name: {{ $json.company_name }}\n- Number of Ads to Generate: {{ $json.number_ads }}\n- Creative Recipe: {{ $json.ad_creative_recipe }}\n- User Instructions: {{ $json.user_comments }}\n- Copy writting inspiration: {{ $json['Provide an example of copy writting for inspiration'] }}\n\nORIGINAL IMAGE DESCRIPTION:\n{{ $json.image_description }}\n\nCREATIVE METHODOLOGY GUIDE:\n\n**IF \"The metaphor bake\" is selected:**\n- Turn the key message into a visual metaphor or analogy\n- Use figurative imagery (objects, scenes, symbols, idioms, cultural references)\n- The visual should communicate the message clearly without needing extra copy\n- Make it instantly understandable and human, not overly conceptual\n- Ensure the product/brand connects logically back to the metaphor\n- Examples: Running after money on a fishing rod (chasing gains), board game representing guesswork\n\n**IF \"The pointer platter\" is selected:**\n- Show the product UI or mockup clearly\n- Feature 3-4 visual pointers/callouts highlighting key features or capabilities\n- Keep labels short (1-3 words) and position them around the UI with arrows or pills\n- Make the value proposition unmissable at a glance\n- Ensure all text elements stay readable and not cluttered\n- Focus on product education and clarity\n\n**IF \"The comparison combo\" is selected:**\n- Show a clear Before/After, Us vs. Them, With vs. Without, or Old Way vs. New Way comparison\n- Split the visual into two contrasting sides\n- Use visual or textual elements to show the \"hard way\" vs. the \"better way\"\n- Make the contrast unmistakable even without reading text\n- Use color, structure, or layout to emphasize the difference\n- Show transformation or improvement that the product creates\n\n**IF NO recipe is selected or field is empty:**\n- Keep the style and approach similar to the original image description\n- Maintain the same visual language and messaging approach\n- Focus on clarity and brand consistency\n\nTASK:\n1. First, determine which creative recipe applies (or if none selected)\n2. Modify the original image description according to:\n - The selected creative recipe methodology\n - The User Instructions provided\n - The ORIGINAL IMAGE DESCRIPTION\n - Copy writting must be based on the company and copy writting instruccions. not based on the image provided\n3. Generate {{ $json.number_ads }} additional variants with modifications to:\n - Color schemes and backgrounds\n - Visual styling and composition\n - Copy/text positioning and wording\n - Character poses, UI layouts, or comparison elements\n - Creative execution details\n\nRULES:\n- Keep the company name \"{{ $json.company_name }}\" consistent across all variants\n- Make sure copy writting is related to the company and inspiration provided in {{ $json['Provide an example of copy writting for inspiration'] }}\n- Apply BOTH the creative recipe methodology AND user instructions to ALL variants\n- Each variant must follow the same recipe but with distinct visual execution\n- Ensure descriptions are detailed enough for image generation\n- All variants should feel cohesive as part of the same ad campaign\n\nOUTPUT FORMAT (strict JSON):\n{\"variants\":[\"First variant following the recipe + user instructions\", \"Second variant with color/style changes\", \"Third variant with different composition\", \"Fourth variant with alternative styling\", \"Fifth variant with unique creative twist\"]}\n\n---\n\nEXAMPLE 1 - \"The metaphor bake\":\n{\"variants\":[\"A cheerful cartoon character with long hair and a beard running behind a dollar tied to a rod that comes from his back. The character is placed on a solid blue background, featuring the motivational text 'Don't let your gains run from you.' The finixhub text logo is positioned in the lower right corner.\", \"A cheerful cartoon character with long hair and a beard chasing a dollar on a fishing rod, set against a vibrant purple gradient background with subtle chart patterns. Bold white text reads 'Don't let your gains run from you.' The finixhub text logo appears in the lower right corner.\", \"A determined cartoon character with long hair and a beard running energetically after a glowing dollar bill attached to a fishing rod from his backpack. Orange sunset gradient background. Text in modern sans-serif font: 'Don't let your gains run from you.' The finixhub text logo in the lower right corner.\", \"A playful cartoon character with long hair and a beard sprinting behind a dollar symbol dangling from a rod on his back. Set on a teal solid background with geometric accents. White and yellow text states 'Don't let your gains run from you.' The finixhub text logo positioned in the lower right corner.\", \"A focused cartoon character with long hair and a beard in mid-run chasing a floating dollar on a fishing line. Deep navy blue background with subtle financial icons. Bold motivational text: 'Don't let your gains run from you.' The finixhub text logo in the lower right corner.\"]}\n\nEXAMPLE 2 - \"The pointer platter\":\n{\"variants\":[\"A clean finixhub dashboard interface on a gradient blue background showing real-time charts and financial data. Three white pill-shaped callouts with arrows point to key features: 'Real-time alerts' pointing to notification bell, 'AI insights' pointing to analysis panel, 'Custom dashboards' pointing to layout controls. Bold headline at top: 'Your trading command center.' The finixhub text logo in the lower right corner.\", \"A sleek finixhub mobile and desktop UI mockup on a purple gradient background. Four labeled arrows highlight: 'Live data' at the top chart, 'Smart signals' at the indicator panel, 'One-click trades' at the action button, and 'Risk management' at the portfolio section. Header text: 'Everything you need in one place.' The finixhub text logo in the lower right corner.\", \"A modern finixhub platform interface displayed on a dark navy background with subtle grid patterns. Three bright cyan callout boxes with connecting lines point to: 'Multi-exchange sync' at connection icons, 'Advanced analytics' at the metrics dashboard, 'Instant notifications' at the alert center. Tagline: 'Trade smarter, not harder.' The finixhub text logo in the lower right corner.\", \"A vibrant finixhub app interface on an orange-to-pink gradient background. Four white circular callouts with arrows highlight: 'Portfolio tracking' pointing to holdings view, 'Market scanner' pointing to opportunities list, 'Price alerts' pointing to notification settings, 'Performance metrics' pointing to analytics chart. Header: 'All your tools, unified.' The finixhub text logo in the lower right corner.\", \"A professional finixhub trading dashboard on a teal background with abstract financial shapes. Three rounded-rectangle callouts indicate: 'Technical indicators' at the chart tools, 'News feed' at the updates panel, 'Backtesting' at the strategy module. Bold text above: 'Professional trading made accessible.' The finixhub text logo in the lower right corner.\"]}\n\nEXAMPLE 3 - \"The comparison combo\":\n{\"variants\":[\"A split-screen comparison ad with 'BEFORE' on the left and 'AFTER' on the right. Left side shows chaos: multiple browser tabs, spreadsheets, calculators, sticky notes scattered on a cluttered desk in muted gray tones with text 'The old way: scattered tools, missed opportunities.' Right side shows calm: a single clean finixhub dashboard with organized charts and alerts in vibrant blue with text 'The finixhub way: everything unified, nothing missed.' The finixhub text logo in the lower right corner.\", \"A Before/After visual split vertically. Top half labeled 'WITHOUT finixhub' shows a stressed trader surrounded by multiple screens, papers, and coffee cups in dark, chaotic tones with caption 'Hours of manual analysis.' Bottom half labeled 'WITH finixhub' displays a relaxed person using one sleek interface with automated insights in bright, organized colors with caption 'Instant AI-powered insights.' The finixhub text logo in the lower right corner.\", \"A side-by-side comparison with 'OLD WAY' on left in red/orange warning colors showing a checklist of tedious tasks: 'Check 5 different platforms, Calculate indicators manually, Set alerts one by one, Track performance in Excel.' Right side 'NEW WAY' in green/blue success colors shows finixhub UI with text: 'One platform, Automated analysis, Smart alerts, Built-in tracking.' Bold header: 'Stop working harder. Start trading smarter.' The finixhub text logo in the lower right corner.\", \"A transformation visual with left panel 'THEN' showing fragmented puzzle pieces labeled with different trading tools in grayscale, representing disconnected workflow. Right panel 'NOW' shows those pieces perfectly connected forming the finixhub logo in full color, with text 'From fragmented to unified.' Main headline: 'Your complete trading system.' The finixhub text logo in the lower right corner.\", \"A comparison layout with two columns: 'THEM' on left shows generic trading platforms with limitations listed as red X marks: 'Delayed data X, Complex setup X, Hidden fees X' in muted colors. 'US' on right shows finixhub interface with green checkmarks: 'Real-time data \u2713, Ready in minutes \u2713, Transparent pricing \u2713' in vibrant brand colors. Header text: 'Why traders switch to finixhub.' The finixhub text logo in the lower right corner.\"]}\n\n---\n\nGenerate the {{ $json.number_ads }} variants now based on the creative recipe \"{{ $json.ad_creative_recipe }}\":\n"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "045c023d-daed-495b-a9e7-6860288c1abb",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
0
],
"parameters": {
"color": 2,
"width": 828,
"height": 348,
"content": "## Stage 2: AI Logic: Analysis & Recipe Selection"
},
"typeVersion": 1
},
{
"id": "756d7126-7362-4239-b301-bbbfbde25d87",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
352
],
"parameters": {
"color": 3,
"width": 828,
"height": 364,
"content": "## Stage 3: Generation: Batch Processing with Fal.ai\n"
},
"typeVersion": 1
},
{
"id": "56ba7f69-31b2-4470-a213-1d7f5dbfe2ae",
"name": "Set variables for Ad generation",
"type": "n8n-nodes-base.set",
"position": [
304,
848
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4807c116-ed98-4a0e-8dba-aab1dd2ee971",
"name": "prompt",
"type": "string",
"value": "={{ $json['output[0].content[0].text.variants'] }}"
},
{
"id": "7ae3773a-9d5d-44c1-b9a1-0fe6fba7b816",
"name": "image",
"type": "string",
"value": "={{ $json.image_base64 }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "019c7cf2-27c2-47cc-a26c-fb3d31b7e3d5",
"name": "Get image url",
"type": "n8n-nodes-base.httpRequest",
"position": [
112,
1552
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/nano-banana/requests/{{ $('Submit Request to generate image').item.json.request_id }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Key <YOUR_API_KEY>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "4c6b5eac-f534-4422-a7fe-aa5f85055eb6",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
96,
848
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "84bd1abf-c4d2-48a4-a337-6529022c5f67",
"name": "Check if image is ready",
"type": "n8n-nodes-base.if",
"position": [
544,
1200
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ac50759b-e2f3-4efd-a2af-f28b7d209b45",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "5a21ad17-546f-47b5-8b5a-9721c09862cb",
"name": "Submit Request to generate image",
"type": "n8n-nodes-base.httpRequest",
"position": [
528,
848
],
"parameters": {
"url": "https://queue.fal.run/fal-ai/nano-banana/edit",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prompt\": \"{{ $json.prompt }}\",\n \"image_urls\": [\n \"data:image/png;base64,{{ $json.image }}\"\n ]\n } ",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "authorization",
"value": "Key <YOUR_API_KEY>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "0f24ed1f-0d8a-49fe-a7fe-fc58ea9a9fcc",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
96,
480
],
"parameters": {
"options": {},
"operation": "binaryToPropery",
"destinationKey": "image_base64"
},
"typeVersion": 1
},
{
"id": "6cb6c0c8-4cde-4540-81ba-302ea770fde0",
"name": "Download in n8n",
"type": "n8n-nodes-base.httpRequest",
"position": [
288,
1552
],
"parameters": {
"url": "={{ $json.images[0].url }}",
"options": {}
},
"typeVersion": 4.3
},
{
"id": "d309f5a5-e485-400d-95c6-77b55978bbfb",
"name": "Upload generated ad to output folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
480,
1552
],
"parameters": {
"name": "={{ $json.images[0].file_name.replace(/\\.[^.]*$/, '') }}\n",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1BNcXE5_Rwj2-pCYeW4xhO8xOYG7M_CXu",
"cachedResultUrl": "https://drive.google.com/drive/folders/1BNcXE5_Rwj2-pCYeW4xhO8xOYG7M_CXu",
"cachedResultName": "Output files"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "333f14a4-37ec-446f-ab50-5d21d16fc392",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
720
],
"parameters": {
"color": 4,
"width": 828,
"height": 364,
"content": "## Stage 4: Delivery: Drive Upload & Final Polish\n"
},
"typeVersion": 1
},
{
"id": "fe85c4f7-36e4-4682-837a-35535c977067",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
1088
],
"parameters": {
"color": 5,
"width": 828,
"height": 364,
"content": "## Stage 4.1: Get creative ad generation status\n"
},
"typeVersion": 1
},
{
"id": "c224bf41-3dc7-4703-8f84-c1bbeca9c9f4",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
1456
],
"parameters": {
"color": 6,
"width": 828,
"height": 364,
"content": "## Stage 4.2: Download file and upload to Google Drive\n\n"
},
"typeVersion": 1
},
{
"id": "fac3db24-2120-41bf-9617-bf2b7815fa99",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
1824
],
"parameters": {
"color": 7,
"width": 828,
"height": 364,
"content": "## Stage 5: final step. You can add other steps here when the loop is done\n"
},
"typeVersion": 1
},
{
"id": "dc7bf6a0-9722-4f16-a8f9-2767e7f99e96",
"name": "Wait 10 seconds",
"type": "n8n-nodes-base.wait",
"position": [
96,
1200
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "f026f3fd-8db3-4ea9-9736-9dd60a6e80be",
"name": "Get Image status",
"type": "n8n-nodes-base.httpRequest",
"position": [
304,
1200
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/nano-banana/requests/{{ $json.request_id }}/status",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Key <YOUR_API_KEY>"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "cf0ae33e-5cbf-43bb-9903-e0e2c9e8b4b7",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
80,
-256
],
"parameters": {
"options": {
"appendAttribution": false
},
"formTitle": "Create up to 100 creative ads with 1 click",
"formFields": {
"values": [
{
"fieldLabel": "What is your company name?",
"requiredField": true
},
{
"fieldType": "file",
"fieldLabel": "Can you provide an ad inspiration you have?",
"multipleFiles": false,
"requiredField": true
},
{
"fieldType": "number",
"fieldLabel": "How many ads you want?",
"placeholder": "1",
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Which Ad creative recipe do you want?",
"fieldOptions": {
"values": [
{
"option": "The metaphor bake"
},
{
"option": "The pointer platter"
},
{
"option": "The comparison combo"
},
{
"option": "None of them. let AI figure out what is best"
}
]
},
"requiredField": true
},
{
"fieldLabel": "Provide an example of copy writting for inspiration",
"placeholder": "Making Smart Investing Accessible to Everyone",
"requiredField": true
},
{
"fieldLabel": "Can you give some description of what you want the ad to have?",
"placeholder": "you can specify anythin like colors, style, copy writting or anything that comes to yout mind",
"requiredField": true
}
]
},
"formDescription": "fill the form with this basic info and see the magic happpens"
},
"typeVersion": 2.3
},
{
"id": "92d664dd-1328-4e38-adb2-356b423033aa",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
-352
],
"parameters": {
"color": 7,
"width": 828,
"height": 348,
"content": "## Stage 1: Trigger: Input & Brand Settings"
},
"typeVersion": 1
},
{
"id": "9ffe51c8-d9b7-4da7-9b80-5eefbc335abc",
"name": "Upload file",
"type": "n8n-nodes-base.googleDrive",
"position": [
336,
-256
],
"parameters": {
"name": "={{ $json['Can you provide an ad inspiration you have?'].filename }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1OgO_eGfiq5Qv8S55aurQAIs7UMAgDDkJ",
"cachedResultUrl": "https://drive.google.com/drive/folders/1OgO_eGfiq5Qv8S55aurQAIs7UMAgDDkJ",
"cachedResultName": "Source files"
},
"inputDataFieldName": "Can_you_provide_an_ad_inspiration_you_have_"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "8401565f-46ca-4964-a719-8f7058cb18ab",
"name": "Download file to process",
"type": "n8n-nodes-base.googleDrive",
"position": [
576,
-256
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "ac157b9f-8b05-4120-8360-1cb2879b0547",
"name": "map form answers",
"type": "n8n-nodes-base.set",
"position": [
336,
128
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b5587a5c-63a0-4114-ab41-a424fc2816e2",
"name": "company_name",
"type": "string",
"value": "={{ $('On form submission').item.json['What is your company name?'] }}"
},
{
"id": "92450d80-f491-4243-b3f4-3ed61535d8d7",
"name": "number_ads",
"type": "number",
"value": "={{ $('On form submission').item.json['How many ads you want?'] }}"
},
{
"id": "861ff63f-5848-4688-b004-c8bab10bf4cc",
"name": "ad_creative_recipe",
"type": "string",
"value": "={{ $('On form submission').item.json['Which Ad creative recipe do you want?'] }}"
},
{
"id": "17dfc247-eb08-458e-9160-781fa2a81e20",
"name": "user_comments",
"type": "string",
"value": "={{ $('On form submission').item.json['Can you give some description of what you want the ad to have?'] }}"
},
{
"id": "d1ea12df-0f96-4691-a736-bb2450e9b734",
"name": "image_description",
"type": "string",
"value": "={{ $json['0'].content[0].text }}"
},
{
"id": "73bf9615-5b8d-45e2-96e7-3cc7f68e8883",
"name": "Provide an example of copy writting for inspiration",
"type": "string",
"value": "={{ $('On form submission').item.json['Provide an example of copy writting for inspiration'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "81cfaf01-9266-41da-9bf9-81459f68580f",
"name": "Split Out variants",
"type": "n8n-nodes-base.splitOut",
"position": [
320,
480
],
"parameters": {
"include": "allOtherFields",
"options": {},
"fieldToSplitOut": "output[0].content[0].text.variants"
},
"typeVersion": 1
},
{
"id": "beb1f790-4a15-440f-abdc-321841c7570c",
"name": "Merge with image inspiration",
"type": "n8n-nodes-base.merge",
"position": [
544,
480
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3.2
},
{
"id": "939fbb0c-4a00-41a9-8b8e-b40bf5ef1a01",
"name": "Replace Me",
"type": "n8n-nodes-base.noOp",
"position": [
96,
1968
],
"parameters": {},
"typeVersion": 1
},
{
"id": "496421de-fb06-4d6a-b92a-6d17b61324ea",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-720,
-352
],
"parameters": {
"color": 3,
"width": 672,
"height": 1056,
"content": "## Scale Your Creative Strategy: 100+ Ads from 1 Image\nInstantly turn a single reference image into hundreds of high-performing ad creatives using Fal.AI\u2019s **Nano Banana** model and **GPT-4o**.\n\n### \ud83d\udcb0 Estimated Costs (Fal.AI)\n* **1 Image Variant:** ~$0.04\n* **100 Image Variants:** ~$4.00\n\n### **Step 1: The Automation Trigger**\nThis workflow uses a built-in **n8n Form**.\n* Open the \"On form submission\" node.\n* Copy the **Test URL** or **Production URL** to share with your team.\n* Fields include: *Company Name, Ad Inspiration (Upload), Creative Recipe, & Copywriting Inspiration*.\n\n### **Step 2: Connect Google Drive**\n* Add your **Google Drive** credentials in n8n.\n* **Input:** The workflow uploads your reference image to a Drive folder (Update `folderId` in \"Upload file\").\n* **Output:** Generated images are saved to a specific folder (Update `folderId` in \"Upload generated ad...\").\n\n### **Step 3: Connect OpenAI**\nThe automation uses **GPT-4o Mini** to analyze your image and rewrite prompts.\n* Add your **OpenAI API Key** to the \"Describe ad selected\" and \"Create variants\" nodes.\n\n### **Step 4: Set Up Fal.ai**\n* Sign up at [fal.ai](https://fal.ai) and get your API Key.\n* Update the **HTTP Request** nodes (\"Submit Request...\", \"Get Image status\", \"Get image url\").\n* Replace the `Authorization` header with: `Key <YOUR_API_KEY>`.\n\n### **Step 5: View Results**\nOnce submitted, the automation analyzes the reference, generates prompts based on your \"Recipe\" (e.g., *The Metaphor Bake*), and saves the final images to your Google Drive output folder.\n\n### **Troubleshooting**\n* **Looping:** Images are processed one by one.\n* **Permissions:** Ensure your Google Drive connection has read/write access to the defined folders.\n* **Support:** Contact in X[@maxrojasdelgado](https://x.com/maxrojasdelgado)\n"
},
"typeVersion": 1
}
],
"connections": {
"Replace Me": {
"main": [
[]
]
},
"Upload file": {
"main": [
[
{
"node": "Download file to process",
"type": "main",
"index": 0
}
]
]
},
"Get image url": {
"main": [
[
{
"node": "Download in n8n",
"type": "main",
"index": 0
}
]
]
},
"Download in n8n": {
"main": [
[
{
"node": "Upload generated ad to output folder",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Replace Me",
"type": "main",
"index": 0
}
],
[
{
"node": "Set variables for Ad generation",
"type": "main",
"index": 0
}
]
]
},
"Wait 10 seconds": {
"main": [
[
{
"node": "Get Image status",
"type": "main",
"index": 0
}
]
]
},
"Get Image status": {
"main": [
[
{
"node": "Check if image is ready",
"type": "main",
"index": 0
}
]
]
},
"map form answers": {
"main": [
[
{
"node": "Create variants of the prompt",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Merge with image inspiration",
"type": "main",
"index": 1
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"Split Out variants": {
"main": [
[
{
"node": "Merge with image inspiration",
"type": "main",
"index": 0
}
]
]
},
"Describe ad selected": {
"main": [
[
{
"node": "map form answers",
"type": "main",
"index": 0
}
]
]
},
"Check if image is ready": {
"main": [
[
{
"node": "Get image url",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 10 seconds",
"type": "main",
"index": 0
}
]
]
},
"Download file to process": {
"main": [
[
{
"node": "Describe ad selected",
"type": "main",
"index": 0
},
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Merge with image inspiration": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Create variants of the prompt": {
"main": [
[
{
"node": "Split Out variants",
"type": "main",
"index": 0
}
]
]
},
"Set variables for Ad generation": {
"main": [
[
{
"node": "Submit Request to generate image",
"type": "main",
"index": 0
}
]
]
},
"Submit Request to generate image": {
"main": [
[
{
"node": "Wait 10 seconds",
"type": "main",
"index": 0
}
]
]
},
"Upload generated ad to output folder": {
"main": [
[
{
"node": "Loop Over Items",
"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.
googleDriveOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow turns a single reference image into up to 100 high-performing ad variations using Fal.AI's Nano Banana model and GPT-5.1. Simply upload your inspiration to a form, and watch as unique, campaign-ready images appear in your Google Drive.
Source: https://n8n.io/workflows/11163/ — 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.