This workflow corresponds to n8n.io template #13117 — we link there as the canonical source.
This workflow follows the Google Drive → 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": "5JAOuTvww6BSDWi0",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI Style Analysis and Consistent Image Generation with Gemini",
"tags": [],
"nodes": [
{
"id": "6b6e8fcf-bb93-42c5-be89-7260d0caff0f",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-64,
368
],
"parameters": {
"path": "d14dbf90-e292-4c61-ac70-5b7414894abe",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "0c99665c-5c2f-4119-baba-3a1fbcbc8bba",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
144,
368
],
"parameters": {
"options": {
"responseHeaders": {
"entries": [
{
"name": "Access-Control-Allow-Origin",
"value": "*"
},
{
"name": "Access-Control-Allow-Methods",
"value": "POST, GET, OPTIONS"
},
{
"name": "Access-Control-Allow-Headers",
"value": "Content-Type, Authorization"
}
]
}
},
"respondWith": "json",
"responseBody": "{\n \"status\": \"success\",\n \"message\": \"Workflow ba\u015flat\u0131ld\u0131\",\n \"timestamp\": \"{{ $now.toISO() }}\"\n }"
},
"typeVersion": 1.5
},
{
"id": "507824ec-e131-4477-8d3a-47e2ea4c59b1",
"name": "Wait #1",
"type": "n8n-nodes-base.wait",
"position": [
928,
384
],
"parameters": {
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "3501bc89-a138-415a-ba96-d337934e56c5",
"name": "Wait #2",
"type": "n8n-nodes-base.wait",
"position": [
2208,
240
],
"parameters": {
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "c1c7db36-d2d6-43b9-a4f1-e1911c964f76",
"name": "Wait #3",
"type": "n8n-nodes-base.wait",
"position": [
2416,
656
],
"parameters": {
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "acaa45b5-33c4-45ae-81c0-3c47fe56d7e6",
"name": "Wait #4",
"type": "n8n-nodes-base.wait",
"position": [
2032,
656
],
"parameters": {
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "12a906ec-db30-44e9-993a-cf91d8955b5c",
"name": "ntfy - Start Alert",
"type": "n8n-nodes-base.httpRequest",
"position": [
352,
176
],
"parameters": {
"url": "https://ntfy.sh/YOUR-PREFER-NAME",
"method": "POST",
"options": {},
"jsonBody": "={\n \"topic\": \"YOUR-PREFER-NAME\",\n \"message\": \"YOUR-PREFER-MESSAGE\",\n \"title\": \"start\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.3
},
{
"id": "be1dd045-4748-43d7-ab3d-1aeecee7fd05",
"name": "ntfy - Task Error Alert",
"type": "n8n-nodes-base.httpRequest",
"position": [
2064,
496
],
"parameters": {
"url": "https://ntfy.sh/YOUR-PREFER-NAME",
"method": "POST",
"options": {},
"jsonBody": "={\n \"topic\": \"YOUR-PREFER-NAME\",\n \"message\": \"YOUR-PREFER-MESSAGE\",\n \"title\": \"error\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.3
},
{
"id": "8d571483-8930-4044-b908-2464d0cfe1aa",
"name": "ntfy - Workflow Completion Alert",
"type": "n8n-nodes-base.httpRequest",
"position": [
816,
192
],
"parameters": {
"url": "https://ntfy.sh/YOUR-PREFER-NAME",
"method": "POST",
"options": {},
"jsonBody": "{\n \"topic\": \"YOUR-PREFER-NAME\",\n \"message\": \"YOUR-PREFER-MESSAGE\",\n \"title\": \"finish\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.3
},
{
"id": "675e11c3-e8ff-4eec-a0e7-737790dc5c35",
"name": "ntfy - Task Success Alert",
"type": "n8n-nodes-base.httpRequest",
"position": [
2432,
32
],
"parameters": {
"url": "https://ntfy.sh/YOUR-PREFER-NAME",
"method": "POST",
"options": {},
"jsonBody": "={\n \"topic\": \"YOUR-PREFER-NAME\",\n \"message\": \"YOUR-PREFER-MESSAGE\",\n \"title\": \"task_completed\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.3
},
{
"id": "dce5c96f-121c-469c-8826-8ab89fddd7ab",
"name": "If - Check Analysis Result",
"type": "n8n-nodes-base.if",
"position": [
1280,
384
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8a61989e-0f37-48ec-bf15-42a6a108713b",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.candidates[0].content.parts[0].text }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "f122cc75-368b-46f8-850a-1edae3a90069",
"name": "If - Check Image Generation",
"type": "n8n-nodes-base.if",
"position": [
1648,
384
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "a0ab186b-99c5-407b-9cb9-5fef85686131",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $binary.data !== undefined }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "19351547-5932-4704-992d-b66c1c43c6ed",
"name": "Read \u2013 Google Sheets \u2013 Pending Prompts",
"type": "n8n-nodes-base.googleSheets",
"position": [
352,
368
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "="
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "c57fa259-aa2f-4164-9865-e11a9886a995",
"name": "Split \u2013 Process Items Individually",
"type": "n8n-nodes-base.splitInBatches",
"position": [
576,
368
],
"parameters": {
"options": {}
},
"executeOnce": false,
"typeVersion": 3,
"alwaysOutputData": false
},
{
"id": "fe69679a-fe26-4ac7-a1b1-712692bedc24",
"name": "Download \u2013 Reference Image",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
768,
384
],
"parameters": {
"url": "={{ $json.referans_url }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"executeOnce": false,
"retryOnFail": false,
"typeVersion": 4.2
},
{
"id": "cd3e66bd-1c88-4b42-b58b-37510a8cfd00",
"name": "Analyze \u2013 Gemini \u2013 Visual Style",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"onError": "continueRegularOutput",
"position": [
1088,
384
],
"parameters": {
"text": "=YOUR PROMPT",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash",
"cachedResultName": "models/gemini-2.5-flash"
},
"options": {},
"resource": "image",
"simplify": false,
"inputType": "binary",
"operation": "analyze",
"binaryPropertyName": "=data"
},
"retryOnFail": false,
"typeVersion": 1.1
},
{
"id": "8640d9a5-67ba-463d-b857-6e4fd536c9ae",
"name": "Create \u2013 Gemini \u2013 New Image From Style",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"onError": "continueRegularOutput",
"position": [
1456,
272
],
"parameters": {
"prompt": "=YOUR PROMPT",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash-image",
"cachedResultName": "models/gemini-2.5-flash-image (Nano Banana)"
},
"options": {
"sampleCount": 1
},
"resource": "image"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "ba08e170-3cdc-4b1f-9f7e-9c2f57e245d4",
"name": "ransform \u2013 Code \u2013 Prepare Image Binary",
"type": "n8n-nodes-base.code",
"position": [
1840,
240
],
"parameters": {
"jsCode": "// DALL-E binary'yi al ve metadata ekle\nconst items = $input.all();\n\n// Binary data kontrol\nif (!items[0].binary || !items[0].binary.data) {\n throw new Error('DALL-E binary data bulunamad\u0131!');\n}\n\n// Reference node'dan bilgileri al\nconst referenceNode = $('Download \u2013 Reference Image').item.json;\nconst gorselId = referenceNode.gorsel_id || 'generated';\nconst fileName = `${gorselId}_output.png`;\n\n// n8n binary'yi direkt kullan, sadece filename'i de\u011fi\u015ftir\nconst binaryData = items[0].binary.data;\n\nreturn {\n json: {\n gorsel_id: gorselId,\n fileName: fileName,\n ana_prompt: referenceNode.ana_prompt,\n stil_prompt: referenceNode.stil_prompt\n },\n binary: {\n data: {\n ...binaryData, // Mevcut binary data'y\u0131 koru\n fileName: fileName // Sadece filename'i g\u00fcncelle\n }\n }\n};"
},
"typeVersion": 2
},
{
"id": "933f1eca-9c61-41da-9a5f-d85210cbccb5",
"name": "Upload \u2013 Google Drive \u2013 Store Generated Image",
"type": "n8n-nodes-base.googleDrive",
"position": [
2032,
240
],
"parameters": {
"name": "=",
"driveId": {
"__rl": true,
"mode": "id",
"value": ""
},
"options": {
"simplifyOutput": false,
"appPropertiesUi": {
"appPropertyValues": [
{
"key": "fields",
"value": "=webViewLink,webContentLink,id,name"
}
]
}
},
"folderId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"typeVersion": 3
},
{
"id": "91d2a44c-3be0-44fe-aac9-c10f0473f074",
"name": "Update \u2013 Google Sheets \u2013 Success Status",
"type": "n8n-nodes-base.googleSheets",
"position": [
2432,
240
],
"parameters": {
"columns": {
"value": {
"tarih": "=",
"row_number": 0
},
"schema": [
{
"id": "gorsel_id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "gorsel_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ana_prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "ana_prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "stil_prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "stil_prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "referans_url",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "referans_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "durum",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "durum",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "gorsel_url",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "gorsel_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hata_mesaji",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "hata_mesaji",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tarih",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "tarih",
"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": [
"tarih"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 54612697,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WqalnqFoFdJngObmgW7HF4JIU7XcK9QnDoiExazAXLU/edit#gid=54612697",
"cachedResultName": "Prompts 2"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1WqalnqFoFdJngObmgW7HF4JIU7XcK9QnDoiExazAXLU",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WqalnqFoFdJngObmgW7HF4JIU7XcK9QnDoiExazAXLU/edit?usp=drivesdk",
"cachedResultName": "Prompt Okuma"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "641ea6c1-b3b9-4c84-a3ae-4d0fc8bbebd8",
"name": "Update \u2013 Google Sheets \u2013 Error Status",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
1808,
528
],
"parameters": {
"columns": {
"value": {
"gorsel_id": "=",
"row_number": 0
},
"schema": [
{
"id": "gorsel_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "gorsel_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ana_prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "ana_prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "stil_prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "stil_prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "referans_url",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "referans_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "durum",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "durum",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "gorsel_url",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "gorsel_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hata_mesaji",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "hata_mesaji",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tarih",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "tarih",
"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": [
"gorsel_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "id",
"value": "="
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "="
}
},
"executeOnce": false,
"retryOnFail": false,
"typeVersion": 4.7,
"alwaysOutputData": false
},
{
"id": "41d55e89-ffb1-4fc4-9f09-e9d638a5cd2c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1056,
-96
],
"parameters": {
"color": 7,
"width": 1568,
"height": 592,
"content": "## Setup Instructions\n\n- Google Sheets: Create a sheet with columns: gorsel_id, ana_prompt, stil_prompt, referans_url, durum.\n\n- Credentials: Set up and connect Google Sheets, Google Drive, and Google Gemini API credentials.\n\n- Resource IDs: Update the Google Sheets \"Document ID\" and Google Drive \"Folder ID\" in the respective nodes to match your own files.\n\n- Webhooks: Use the Webhook URL in your dashboard or external app to trigger the process."
},
"typeVersion": 1
},
{
"id": "04d003e2-24a9-4bf8-92eb-105ef60aa9da",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-112,
-96
],
"parameters": {
"color": 7,
"width": 1168,
"height": 672,
"content": "## Monitoring & Notifications\n\n\nThis workflow uses ntfy.sh for real-time progress updates.\n\n- Topic: Replace the topic name ai-gorsel-uretimi100 in all HTTP Request nodes with your own unique topic.\n\n- Live Feed: Connect your dashboard or mobile app to the same ntfy topic to see live logs and status changes."
},
"typeVersion": 1
},
{
"id": "c8658fab-e8b1-4022-90bc-241db5d5290f",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1056,
496
],
"parameters": {
"color": 7,
"width": 1584,
"height": 432,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Logic & Error Handling\n\n- Rate Limiting: 'Wait' nodes are strategically placed to prevent hitting API rate limits during bulk processing.\n\n- Looping: The workflow processes images one by one to ensure stability.\n\n- Error Management: If an analysis or generation fails, the \"Update \u2013 Google Sheets \u2013 Error Status\" node automatically records the failure reason in your spreadsheet."
},
"typeVersion": 1
},
{
"id": "eea26e51-711e-4def-96fc-96f88e446a9b",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
128
],
"parameters": {
"width": 432,
"height": 896,
"content": "##Main Overview\n\n### How it works\nThis workflow automates a sophisticated image generation pipeline designed to maintain visual consistency by replicating styles from reference images. Triggered via a Webhook, the system first retrieves pending tasks from a Google Sheet. For each entry, it downloads a reference image and utilizes Google Gemini 2.5 Flash to perform a deep visual analysis. This analysis identifies the specific art style, color palette, and composition of the reference. \n\nGemini then uses these insights as a stylistic framework to generate a new image based on the user's prompt. Once created, the workflow transforms the binary data, uploads the final image to a designated Google Drive folder, and updates the original Google Sheet with the new image link and completion status. Throughout the process, real-time status updates are broadcasted to an ntfy.sh topic, allowing for live monitoring via a dashboard or mobile device.\n\n### Setup steps\n1. **Spreadsheet Preparation:** Create a Google Sheet with columns for `gorsel_id`, `ana_prompt`, `stil_prompt`, `referans_url`, and `durum`. Ensure the status column uses English keywords (e.g., \"Pending\").\n2. **Credentials:** Set up and link your credentials for Google Sheets, Google Drive, and the Google Gemini API.\n3. **Configure Resource IDs:** Replace the placeholder Document ID in the Google Sheets nodes and the Folder ID in the Google Drive node with your specific resource IDs.\n4. **Notification Topic:** In all HTTP Request nodes (ntfy), replace the topic `ai-gorsel-uretimi100` with a unique name of your choice.\n5. **Deployment:** Activate the workflow and trigger it using the Webhook URL provided in the trigger node.\n\n### Customization tips\nYou can modify the \"Wait\" node durations if you are using a Gemini API tier with strict rate limits. To change the level of detail in style replication, you can adjust the instructions inside the \"Analyze \u2013 Gemini \u2013 Visual Style\" node."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"timezone": "Europe/Istanbul",
"callerPolicy": "workflowsFromSameOwner",
"timeSavedMode": "fixed",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "a1396781-cc31-472c-8699-50b962f2cefa",
"connections": {
"Wait #1": {
"main": [
[
{
"node": "Analyze \u2013 Gemini \u2013 Visual Style",
"type": "main",
"index": 0
}
]
]
},
"Wait #2": {
"main": [
[
{
"node": "Update \u2013 Google Sheets \u2013 Success Status",
"type": "main",
"index": 0
},
{
"node": "ntfy - Task Success Alert",
"type": "main",
"index": 0
}
]
]
},
"Wait #3": {
"main": [
[
{
"node": "Split \u2013 Process Items Individually",
"type": "main",
"index": 0
}
]
]
},
"Wait #4": {
"main": [
[
{
"node": "Split \u2013 Process Items Individually",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Respond to Webhook": {
"main": [
[
{
"node": "Read \u2013 Google Sheets \u2013 Pending Prompts",
"type": "main",
"index": 0
},
{
"node": "ntfy - Start Alert",
"type": "main",
"index": 0
}
]
]
},
"If - Check Analysis Result": {
"main": [
[
{
"node": "Create \u2013 Gemini \u2013 New Image From Style",
"type": "main",
"index": 0
}
],
[
{
"node": "Update \u2013 Google Sheets \u2013 Error Status",
"type": "main",
"index": 0
}
]
]
},
"If - Check Image Generation": {
"main": [
[
{
"node": "ransform \u2013 Code \u2013 Prepare Image Binary",
"type": "main",
"index": 0
}
],
[
{
"node": "Update \u2013 Google Sheets \u2013 Error Status",
"type": "main",
"index": 0
}
]
]
},
"Download \u2013 Reference Image": {
"main": [
[
{
"node": "Wait #1",
"type": "main",
"index": 0
}
]
]
},
"Analyze \u2013 Gemini \u2013 Visual Style": {
"main": [
[
{
"node": "If - Check Analysis Result",
"type": "main",
"index": 0
}
]
]
},
"Split \u2013 Process Items Individually": {
"main": [
[
{
"node": "ntfy - Workflow Completion Alert",
"type": "main",
"index": 0
}
],
[
{
"node": "Download \u2013 Reference Image",
"type": "main",
"index": 0
}
]
]
},
"Update \u2013 Google Sheets \u2013 Error Status": {
"main": [
[
{
"node": "Wait #4",
"type": "main",
"index": 0
},
{
"node": "ntfy - Task Error Alert",
"type": "main",
"index": 0
}
]
]
},
"Create \u2013 Gemini \u2013 New Image From Style": {
"main": [
[
{
"node": "If - Check Image Generation",
"type": "main",
"index": 0
}
]
]
},
"Read \u2013 Google Sheets \u2013 Pending Prompts": {
"main": [
[
{
"node": "Split \u2013 Process Items Individually",
"type": "main",
"index": 0
}
]
]
},
"ransform \u2013 Code \u2013 Prepare Image Binary": {
"main": [
[
{
"node": "Upload \u2013 Google Drive \u2013 Store Generated Image",
"type": "main",
"index": 0
}
]
]
},
"Update \u2013 Google Sheets \u2013 Success Status": {
"main": [
[
{
"node": "Wait #3",
"type": "main",
"index": 0
}
]
]
},
"Upload \u2013 Google Drive \u2013 Store Generated Image": {
"main": [
[
{
"node": "Wait #2",
"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.
googleApigooglePalmApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is designed for creators, designers, and automation builders who need to generate visually consistent images at scale. It is ideal for teams producing branded visuals, social media assets, or AI-generated images where preserving a recognizable visual style is…
Source: https://n8n.io/workflows/13117/ — 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.
Monitor a Google Drive folder, process each image based on the prompt defined in and save the new image to the specified output Google Drive folder. Maintain a processing log in Google Sheets.
Understand your customers before you build for them. This workflow, Market Segmentation: Buyer Persona Pain Point Report, automates the grueling process of primary market research. By scraping real-wo
Automate your product visuals! This n8n workflow instantly processes new product photography requests from Jotform or Google Sheets, uses an AI agent (Gemini Nano Banana) to generate professional AI p
This system meticulously guides each lead through a fully automated journey, from initial contact to a personalized follow-up and CRM integration.
A smart, fully automated coding pipeline built inside n8n that leverages Cursor AI to write, refactor, review, and optimize code projects — triggered by a webhook, schedule, or manual prompt. Every ou