This workflow corresponds to n8n.io template #9390 — we link there as the canonical source.
This workflow follows the Google Drive → Google Drive Trigger 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 →
{
"nodes": [
{
"id": "0aa63dbd-bbb8-4caa-a864-6ffea6dd7b9a",
"name": "File Created",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
-2064,
576
],
"parameters": {
"event": "fileCreated",
"options": {
"fileType": "all"
},
"pollTimes": {
"item": [
{
"mode": "everyX",
"unit": "minutes",
"value": 5
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e98ece61-7f83-420b-914a-4236926ab67c",
"name": "File Updated",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
-2064,
736
],
"parameters": {
"event": "fileUpdated",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyX",
"unit": "minutes",
"value": 5
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7f75e919-7b84-48cd-a60d-dba089ec35d8",
"name": "Set File ID",
"type": "n8n-nodes-base.set",
"position": [
-1664,
672
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "500b4c9d-617a-4d88-9d74-9beb5922a00a",
"name": "input_file_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "d5779b2e-12fd-4a73-9181-da4b9eec5b67",
"name": "input_file_name",
"type": "string",
"value": "={{ $json.name }}"
},
{
"id": "f79e2578-3375-4e1d-88e0-748e2daac35b",
"name": "input_file_name_no_ext",
"type": "string",
"value": "={{ $json.name.split('.').slice(0, -1).join('.'); }}"
},
{
"id": "45b4ffe8-1ebc-48f8-8234-c497c4081f39",
"name": "input_mime_type",
"type": "string",
"value": "={{ $json.mimeType }}"
},
{
"id": "f61545a2-a33d-484e-a901-5e5bec875628",
"name": "input_file_url",
"type": "string",
"value": "={{ $json.webContentLink }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "c04350a6-3c05-43f7-a26f-5f45e7761864",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
400
],
"parameters": {
"color": 7,
"width": 400,
"height": 908,
"content": "## 4. Update entry in Google Sheet\n\n"
},
"typeVersion": 1
},
{
"id": "c1ba3367-fbe1-4ae7-ad5e-0bf10551fa94",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-272,
400
],
"parameters": {
"color": 7,
"width": 896,
"height": 908,
"content": "## 3. Transform the Image\n\n[Read more about Google Gemini node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.googlegemini/)\n[Read more about Google Gemini image generation (Nano Banana) documentation](https://ai.google.dev/gemini-api/docs/image-generation)\n\nThis workflow uses `Image Editing (Image + Text to Image)`, where the provided image is transformed based on the text prompt.\n"
},
"typeVersion": 1
},
{
"id": "c83064ba-22d6-4c21-9d32-6de3dfd95ae2",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-896,
400
],
"parameters": {
"color": 7,
"width": 568,
"height": 908,
"content": "## 2. Create Entry in Google Sheet\n\n* Add a row to the Google Sheet to track progress.\n The row identifier is the unique URL of the output folder in Google Drive.\n"
},
"typeVersion": 1
},
{
"id": "008a490a-b105-4093-a247-25a641c25903",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2160,
400
],
"parameters": {
"color": 7,
"width": 728,
"height": 908,
"content": "## 1. Watch for New and Updated Images in Google Drive Folder\n\n[Read more about the Google Drive Trigger node](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.googledrivetrigger/)\n[Read more about Google Credentials](https://docs.n8n.io/integrations/builtin/credentials/google/)\n\nOther sources, such as local file system, OneDrive, or S3, can be used instead.\n\n"
},
"typeVersion": 1
},
{
"id": "854076d5-d55a-41d3-aac1-edb63ef4148c",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1376,
400
],
"parameters": {
"color": 4,
"width": 432,
"height": 448,
"content": "## \u2699\ufe0f Update the Workflow Configuration Node\n\n- `google_sheet_id`: Set this to the ID of your Google Sheet. See **Google Sheets Configuration** for the sheet name and column details.\n- `dest_folder_id`: Set this to the ID of the folder where all output files will be stored.\n- `text_prompt`: Contains the prompt for the image transformation. You can customize it to accommodate other use cases. "
},
"typeVersion": 1
},
{
"id": "8f8ea999-2d8b-493f-87af-24b6b77095fe",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"position": [
-1216,
672
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c16e829e-d2f6-49e0-9ffe-ee0c4fca0487",
"name": "google_sheet_id",
"type": "string",
"value": ""
},
{
"id": "4c4d3dc8-d102-40dc-9943-7de13cb2324a",
"name": "dest_folder_id",
"type": "string",
"value": ""
},
{
"id": "9d5a411b-53f8-4f68-80ee-c3ca9f42d276",
"name": "text_prompt",
"type": "string",
"value": "Transform this product photo into a high-quality, studio-style image. - Background: Remove the original background completely and replace it with a clean, light gray gradient (e.g., #f0f0f0 to #e0e0e0).\\n- Lighting: Apply soft, diffused, and balanced lighting to eliminate harsh shadows and highlight the product's details. The lighting should feel natural and professional.\\n- Color & Realism: Perform subtle color correction to enhance vibrancy and ensure colors are true-to-life. Do not oversaturate.\\n- Integrity: Keep the product's shape, texture, and all original details perfectly intact. Do not add, remove, or alter any part of the product itself. If the product contains any text, especially ensure that the text is readable and identical in the new image.\\n- Final Look: The result should be a crisp, modern, and professional image suitable for a high-end e-commerce catalog."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5fe5cb99-1fcc-46ec-a781-332593765cd8",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1376,
880
],
"parameters": {
"color": 4,
"width": 432,
"height": 432,
"content": "## \ud83d\udd12 Setup credentials\n- `Edit Image` node: Configure authentication in the node using your Google AI Studio. \n [Read more about Google Gemini(PaLM) credentials](https://docs.n8n.io/integrations/builtin/credentials/googleai/)\n\n- All `Google` nodes: Configure authentication in all the Google nodes (Drive and Sheet).\n [Read more about Google credentials](https://docs.n8n.io/integrations/builtin/credentials/google/)\n\n\n"
},
"typeVersion": 1
},
{
"id": "6a90fc9c-133a-4f18-9921-86af48ca8cdc",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-864,
704
],
"parameters": {
"color": 6,
"width": 512,
"height": 592,
"content": "## \ud83d\udcca Google Sheets Configuration\n\n**Required Sheet Name:** `\"Photos\"` \nThe spreadsheet can have any name and contain any number of sheets, but it must include a sheet named `Photos`.\n\n**Required Headers (Row 1):**\n- **File name** \u2013 Name of the input file\n- **Status** \u2013 Job status (`Not Started`, `Done`, `Error`)\n- **Start Time** \u2013 Timestamp when the job starts\n- **End Time** \u2013 Timestamp when the job completes\n- **Input File** \u2013 Link to the input file (used a row identifier)\n- **Output File** \u2013 Link to the output file\n\n\n**\ud83d\udd17 Account Permissions** \nThe signed-in account must have **Editor** access to the Google Sheet.\n\n**\u2699\ufe0f Setup** \nThe `Google Sheet ID` is set in the `Workflow Configuration` step."
},
"typeVersion": 1
},
{
"id": "16ba7ad1-328a-4d00-bd76-07ec72a5e4f3",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3248,
352
],
"parameters": {
"width": 1036,
"height": 1024,
"content": "## Automated image processing for e-commerce catalog\n\n### Use cases \n* Monitor a Google Drive folder, process each image based on the prompt defined in `Workflow Configuration` and save the new image to the specified output Google Drive folder.\n* Maintain a processing log in Google Sheets.\n\n\ud83d\udc4d This use case can be extended to any scenario requiring batch image processing, for example, unifying the look and feel of team photos on a company website.\n\n### How it works\n* Trigger: Watches a Google Drive folder for new or updated files.\n* Downloads the image, processes it using Google Gemini (Nano Banana), and uploads the new image to the specified output folder.\n\n### How to use\n* Google Drive and Google Sheets nodes:\n * Create Google credentials with access to Google Drive and Google Sheets. [Read more about Google Credentials](https://docs.n8n.io/integrations/builtin/credentials/google/).\n * Update **all** Google Drive and Google Sheets nodes (6 nodes total) to use these credentials\n* Gemini AI node:\n * Create Google Gemini(PaLM) Api credentials. [Read more about Google Gemini(PaLM) credentials](https://docs.n8n.io/integrations/builtin/credentials/googleai/).\n * Update the `Edit Image` node to use the Gemini Api credentials.\n* Create a Google Sheets spreadsheet following the steps in `Google Sheets Configuration` (see right \u27a1\ufe0f). Ensure the spreadsheet can be accessed as `Editor` by the account used for the Google Credentials.\n* Create input and output directories in Google Drive. Ensure these directories are accessible by the account used for the credentials.\n* Update the `File Created`, `File Updated` and `Workflow Configuration` node following the steps in the green Notes (see right \u27a1\ufe0f).\n\n\n### Requirements\n* Google account with Google API access\n* Google AI Studio account with ability to create a Google Gemini API key.\n* Basic n8n knowledge: understanding of triggers, expressions, and credential management\n\n\n### Who\u2019s it for\nAnyone wanting to batch process images for product catalog. \nOther use cases are applicable. Please [reach out](https://www.linkedin.com/in/ytkaczyk/) reach out if you need help customizing this workflow. \n\n\n### \ud83d\udd12 Security\nAll credentials are stored securely using n8n's credential system.\nThe only potentially sensitive information stored in the workflow is the Google Drive folder and Sheet IDs. These should be secured according to your organization\u2019s needs.\n\n\n### Need Help?\nReach out on [LinkedIn](https://www.linkedin.com/in/ytkaczyk/) or Ask in the [Forum](https://community.n8n.io/)!\n"
},
"typeVersion": 1
},
{
"id": "fee74492-82f0-41ed-bca8-4d4168aa3cb6",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2112,
896
],
"parameters": {
"color": 4,
"width": 656,
"height": 384,
"content": "## \u2699\ufe0f Configuration\n\n* **`File Created` and `File Updated` nodes**: \n Update the `Folder` field in both Google Drive trigger nodes to point to the ID of the folder you want to monitor. You can also set the folder by URL or select it from a list.\n\n### \u2754 How to Get the ID of a Sheet or Directory \u2754\n\nOpen the sheet or directory in your browser. The ID is the randomly generated alphanumeric string in the URL.\n\n* **For a directory**: The ID appears after the last `/` in the URL and looks like `abcdefghijklmnopqr_abcdefghijklmn`.\n* **For a sheet**: The ID is located in the middle of the URL and looks like `abcdefghijklmnopqrstuvwxyzABCDE_abcdefghijkl`.\n"
},
"typeVersion": 1
},
{
"id": "e103517d-f85f-46f2-9491-43d20591cf08",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"disabled": true,
"position": [
-160,
1056
],
"parameters": {
"options": {},
"operation": "binaryToPropery",
"destinationKey": "input_file_data_64",
"binaryPropertyName": "input_file_data"
},
"typeVersion": 1
},
{
"id": "60d46eda-a9f0-405d-a77a-2a11c300fce5",
"name": "Get Image Contents",
"type": "n8n-nodes-base.set",
"disabled": true,
"position": [
224,
1056
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "021aad70-de11-4387-844e-7e7dfd3b1044",
"name": "output_file_data_64",
"type": "string",
"value": "={{ $json.candidates?.[0]?.content?.parts?.find(part => part.inlineData).inlineData.data }}"
},
{
"id": "62877ef7-2057-4d35-a44b-1d58fa1f1769",
"name": "output_file_mime_type",
"type": "string",
"value": "={{ $json.candidates?.[0]?.content?.parts?.find(part => part.inlineData).inlineData.mimeType }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "570ed095-ac62-42c6-893b-ae8c8473d42e",
"name": "Convert to File",
"type": "n8n-nodes-base.convertToFile",
"onError": "continueRegularOutput",
"disabled": true,
"position": [
416,
1056
],
"parameters": {
"options": {
"mimeType": "={{ $json.output_file_mime_type }}"
},
"operation": "toBinary",
"sourceProperty": "output_file_data_64",
"binaryPropertyName": "output_file_data"
},
"typeVersion": 1.1
},
{
"id": "b268283a-2069-4dd4-b5df-68a563b582b8",
"name": "Save image",
"type": "n8n-nodes-base.googleDrive",
"position": [
320,
608
],
"parameters": {
"name": "={{ $('Set File ID').item.json.input_file_name_no_ext }}_clean.{{ $json.fileExtension }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').item.json.dest_folder_id }}"
},
"inputDataFieldName": "output_file_data"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "fdb5e876-5e73-4fd4-bfa7-d18eb58ad220",
"name": "Gemini Image",
"type": "n8n-nodes-base.httpRequest",
"disabled": true,
"position": [
32,
1056
],
"parameters": {
"url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image:generateContent",
"method": "POST",
"options": {},
"jsonBody": "={\n \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"{{ $('Workflow Configuration').item.json.text_prompt }}\"\n },\n {\n \"inline_data\": {\n \"mime_type\": \"{{ $('Set File ID').item.json.input_mime_type }}\",\n \"data\": \"{{ $json.input_file_data_64 }}\"\n }\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"TEXT\",\n \"IMAGE\"\n ]\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googlePalmApi"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "9970cfd8-ad69-4bf0-a623-234911af8e92",
"name": "Edit Image",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"onError": "continueErrorOutput",
"position": [
128,
672
],
"parameters": {
"images": {
"values": [
{
"binaryPropertyName": "input_file_data"
}
]
},
"prompt": "={{ $('Workflow Configuration').item.json.text_prompt }}",
"options": {
"binaryPropertyOutput": "output_file_data"
},
"resource": "image",
"operation": "edit"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b11f0837-3508-446c-ae3d-ce665480da8c",
"name": "Download Image",
"type": "n8n-nodes-base.googleDrive",
"position": [
-64,
672
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set File ID').item.json.input_file_id }}"
},
"options": {
"binaryPropertyName": "input_file_data"
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "9b5ef10d-66e4-4436-b571-8f06dd53fc5a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
896
],
"parameters": {
"width": 832,
"height": 384,
"content": "## \ud83e\udd13 Technical note\n\nThe Gemini node `Edit Image` replaces the following nodes. Using the detailed workflow may still be helpful is you need finer-grainer configuration (e.g., model selection). \n\nFeel free to reach out if you need help with this."
},
"typeVersion": 1
},
{
"id": "b2318f31-dcfb-4562-b5da-b3d302bda9e4",
"name": "Update Entry to Done",
"type": "n8n-nodes-base.googleSheets",
"position": [
832,
608
],
"parameters": {
"columns": {
"value": {
"Status": "Completed",
"End Time": "={{ $now.format('yyyy-MM-dd hh:mm:ss') }}",
"Input File": "={{ $('Set File ID').item.json.input_file_url }}",
"Output File": "={{ $json.webContentLink }}"
},
"schema": [
{
"id": "File name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "File name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Start Time",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Start Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "End Time",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "End Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Input File",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Input File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Output File",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Input File"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 636612761,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1AA79VkgHlRW6UwkZ7CYqQjnPVPM31lX3jlYlofWQZlU/edit#gid=636612761",
"cachedResultName": "Photos"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').item.json.google_sheet_id }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "783e886c-b912-454c-8cd4-270626d4c0dd",
"name": "Update Entry to Error",
"type": "n8n-nodes-base.googleSheets",
"position": [
832,
800
],
"parameters": {
"columns": {
"value": {
"Status": "Error",
"End Time": "={{ $now.format('yyyy-MM-dd hh:mm:ss') }}",
"Input File": "={{ $('Set File ID').item.json.input_file_url }}",
"Output File": "={{ $json.webContentLink }}"
},
"schema": [
{
"id": "File name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "File name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Start Time",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Start Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "End Time",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "End Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Input File",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Input File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Output File",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Input File"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 636612761,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1AA79VkgHlRW6UwkZ7CYqQjnPVPM31lX3jlYlofWQZlU/edit#gid=636612761",
"cachedResultName": "Photos"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').item.json.google_sheet_id }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "94e0f337-bc82-40f2-87f6-8fe237fe0f37",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1920,
16
],
"parameters": {
"color": 5,
"width": 224,
"height": 336,
"content": "## Mug 2\n"
},
"typeVersion": 1
},
{
"id": "a26bfb77-40d6-481f-89e7-5e38e4eafd22",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
0
],
"parameters": {
"color": 5,
"width": 224,
"height": 352,
"content": "## Mug 2\n"
},
"typeVersion": 1
},
{
"id": "e821cff4-c02b-4740-9245-ca5b4b4e12d4",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2160,
16
],
"parameters": {
"color": 5,
"width": 224,
"height": 336,
"content": "## Mug 1\n"
},
"typeVersion": 1
},
{
"id": "363fd8c8-f073-4609-9247-1feae8046317",
"name": "Sticky Note13",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"parameters": {
"color": 5,
"width": 224,
"height": 352,
"content": "## Mug 1\n"
},
"typeVersion": 1
},
{
"id": "c55c79bf-045a-41e0-aff1-c019f12fea4c",
"name": "Sticky Note14",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1680,
16
],
"parameters": {
"color": 5,
"width": 224,
"height": 336,
"content": "## Speaker "
},
"typeVersion": 1
},
{
"id": "2c1eb78f-b0f1-4544-b75b-b2a5b54328e2",
"name": "Sticky Note15",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
0
],
"parameters": {
"color": 5,
"width": 224,
"height": 352,
"content": "## Speaker "
},
"typeVersion": 1
},
{
"id": "b6d8cc04-5fd2-4996-8d9a-c6657c722df3",
"name": "Sticky Note16",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1440,
16
],
"parameters": {
"color": 5,
"width": 352,
"height": 336,
"content": "## Flowers\n"
},
"typeVersion": 1
},
{
"id": "946aa565-298a-4d3a-a459-44ef78767d03",
"name": "Sticky Note17",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
0
],
"parameters": {
"color": 5,
"width": 352,
"height": 352,
"content": "## Flowers\n\n"
},
"typeVersion": 1
},
{
"id": "b7ade6bd-5873-44cd-9b7b-56c9a2a7b380",
"name": "Create Entry",
"type": "n8n-nodes-base.googleSheets",
"position": [
-688,
544
],
"parameters": {
"columns": {
"value": {
"Status": "Not Started",
"File name": "={{ $('Set File ID').item.json.input_file_name }}",
"Input File": "={{ $('Set File ID').item.json.input_file_url }}",
"Start Time": "={{ $now.format('yyyy-MM-dd hh:mm:ss') }}"
},
"schema": [
{
"id": "File name",
"type": "string",
"display": true,
"required": false,
"displayName": "File name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Start Time",
"type": "string",
"display": true,
"required": false,
"displayName": "Start Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "End Time",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "End Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Input File",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Input File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Output File",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Output File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Input File"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 636612761,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1AA79VkgHlRW6UwkZ7CYqQjnPVPM31lX3jlYlofWQZlU/edit#gid=636612761",
"cachedResultName": "Photos"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').item.json.google_sheet_id }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
}
],
"connections": {
"Edit Image": {
"main": [
[
{
"node": "Save image",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Entry to Error",
"type": "main",
"index": 0
}
]
]
},
"Save image": {
"main": [
[
{
"node": "Update Entry to Done",
"type": "main",
"index": 0
}
]
]
},
"Set File ID": {
"main": [
[
{
"node": "Workflow Configuration",
"type": "main",
"index": 0
}
]
]
},
"Create Entry": {
"main": [
[
{
"node": "Download Image",
"type": "main",
"index": 0
}
]
]
},
"File Created": {
"main": [
[
{
"node": "Set File ID",
"type": "main",
"index": 0
}
]
]
},
"File Updated": {
"main": [
[
{
"node": "Set File ID",
"type": "main",
"index": 0
}
]
]
},
"Gemini Image": {
"main": [
[
{
"node": "Get Image Contents",
"type": "main",
"index": 0
}
]
]
},
"Download Image": {
"main": [
[
{
"node": "Edit Image",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Gemini Image",
"type": "main",
"index": 0
}
]
]
},
"Get Image Contents": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Create Entry",
"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.
googleDriveOAuth2ApigooglePalmApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
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.
Source: https://n8n.io/workflows/9390/ — 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.
The Problem That it Solves
Content creators, YouTubers, and social media managers who want to repurpose long form videos into short clips without doing it manually. Works on self hosted n8n instances.
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 workflow is designed for teams and businesses that receive invoices in Google Drive and want to automatically extract structured financial data without manual processing. It is ideal for finance