Photographie de produits - Révision
Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 37 nœuds.Utilise principalement des nœuds comme Set, Merge, Switch, Webhook, Airtable. Utiliser Airtable et Gemini Nano Banana pour créer de la photographie de produits stylisée
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Clé API Airtable
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
Nœuds utilisés (37)
Catégorie
{
"id": "6PKg5iRas6OJzsXR",
"meta": {
"instanceId": "fc8c505a7d97c0ad5142b508476a4b135c5d385dc29af946d69365fb9717edee",
"templateCredsSetupCompleted": true
},
"name": "Product photography - review",
"tags": [],
"nodes": [
{
"id": "9d581fc1-2b21-41f2-b61f-e1b2984eba34",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-544,
-48
],
"webhookId": "736029f4-2d85-409f-8841-1ca9a010e385",
"parameters": {
"path": "736029f4-2d85-409f-8841-1ca9a010e385",
"options": {}
},
"typeVersion": 2.1
},
{
"id": "0cf73e67-9194-4fb8-af9c-05604e337d40",
"name": "Obtenir le travail",
"type": "n8n-nodes-base.airtable",
"position": [
0,
-48
],
"parameters": {
"id": "={{ $('Webhook').item.json.query.recordId }}",
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $json.airtableBaseId }}"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblN7ikAWki5s5jcd",
"cachedResultUrl": "https://airtable.com/app3umoCF1t88Mg0q/tblN7ikAWki5s5jcd",
"cachedResultName": "Jobs"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 2.1
},
{
"id": "0a022036-95d0-4409-8a61-60afe3c767eb",
"name": "Nettoyer",
"type": "n8n-nodes-base.set",
"position": [
368,
-48
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a3ccbf23-1cbe-4c72-a98f-2739d9ff86bb",
"name": "products",
"type": "array",
"value": "={{ $json[\"Product Images\"] }}"
},
{
"id": "393ff00d-6976-4e2f-894a-e8faac20df59",
"name": "templates",
"type": "array",
"value": "={{ $json.Templates }}"
},
{
"id": "531d603d-168e-484d-9543-a002d57b64f6",
"name": "job_id",
"type": "string",
"value": "={{ $json.id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "1e5d84ca-72c4-462f-b5a8-68861652eb65",
"name": "Diviser les produits",
"type": "n8n-nodes-base.splitOut",
"position": [
-256,
512
],
"parameters": {
"options": {},
"fieldToSplitOut": "products"
},
"typeVersion": 1
},
{
"id": "0c3dfd3a-0871-4a7b-9252-6070289d8a9e",
"name": "Obtenir les produits",
"type": "n8n-nodes-base.airtable",
"position": [
-48,
512
],
"parameters": {
"id": "={{ $json.products }}",
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('parameters').item.json.airtableBaseId }}"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblZeNi5MVPOEj7Hp",
"cachedResultUrl": "https://airtable.com/app3umoCF1t88Mg0q/tblZeNi5MVPOEj7Hp",
"cachedResultName": "Product Images"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 2.1
},
{
"id": "a3487dd1-d051-447e-8f38-dd4150ad4a9e",
"name": "Diviser les modèles",
"type": "n8n-nodes-base.splitOut",
"position": [
-304,
880
],
"parameters": {
"options": {},
"fieldToSplitOut": "templates"
},
"typeVersion": 1
},
{
"id": "bbfb9c8b-7356-4dcf-b028-9d9b320b4a76",
"name": "Obtenir les modèles",
"type": "n8n-nodes-base.airtable",
"position": [
-96,
880
],
"parameters": {
"id": "={{ $json.templates }}",
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('parameters').item.json.airtableBaseId }}"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblGJpUnqFpLMlVFe",
"cachedResultUrl": "https://airtable.com/app3umoCF1t88Mg0q/tblGJpUnqFpLMlVFe",
"cachedResultName": "Templates"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 2.1
},
{
"id": "a161d2a7-1487-4676-9a01-b34a9d5de3f3",
"name": "Modifier les produits",
"type": "n8n-nodes-base.set",
"position": [
160,
512
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "01aa86b1-9db5-4e37-85b3-bc9310086a34",
"name": "product_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "1683c450-7ce9-4f4d-bbe7-aa3adec0268e",
"name": "product_image_url",
"type": "string",
"value": "={{ $json.Image[0].url }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0c2ea55a-6403-4cc6-9d5b-cc0923a0c700",
"name": "Modifier les modèles",
"type": "n8n-nodes-base.set",
"position": [
112,
880
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "30c708da-5ecd-47f5-8464-491c2fe57dac",
"name": "template_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "00dad2c3-d89f-4cb2-b6a1-0b5c2a059ed3",
"name": "prompt",
"type": "string",
"value": "={{ $json[\"Text Prompt\"] }}"
},
{
"id": "066fe522-da75-479e-891a-83bc7382bd04",
"name": "reference_images",
"type": "array",
"value": "={{ $json[\"Reference Images\"] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0be8b4ac-5135-49bf-902f-898ea1fc292f",
"name": "Boucler sur les modèles",
"type": "n8n-nodes-base.splitInBatches",
"position": [
320,
1056
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "f0ccedc8-7f2d-43c2-a95b-6fcd25b4a638",
"name": "Diviser les images de référence",
"type": "n8n-nodes-base.splitOut",
"position": [
512,
1056
],
"parameters": {
"options": {},
"fieldToSplitOut": "reference_images"
},
"typeVersion": 1
},
{
"id": "7c1bcb47-53f9-49f7-b113-e47fd343f257",
"name": "Obtenir l'image de référence",
"type": "n8n-nodes-base.airtable",
"position": [
720,
1056
],
"parameters": {
"id": "={{ $json.reference_images }}",
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('parameters').item.json.airtableBaseId }}"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbl4STKAfNWhTsJjl",
"cachedResultUrl": "https://airtable.com/app3umoCF1t88Mg0q/tbl4STKAfNWhTsJjl",
"cachedResultName": "Reference Images"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 2.1
},
{
"id": "84a1f3a1-f07c-4b96-8230-8f6ac5b3aa09",
"name": "Modifier l'image de référence",
"type": "n8n-nodes-base.set",
"position": [
928,
1056
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "04e74aef-d137-46e3-b3dc-8c7df312a082",
"name": "image_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "9a1d608a-6899-4e8f-a176-49aecee80071",
"name": "image_url",
"type": "string",
"value": "={{ $json.Image[0].url }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "aa125477-4571-4f0e-8048-ede5399e1dc8",
"name": "Agréger",
"type": "n8n-nodes-base.aggregate",
"position": [
1344,
1056
],
"parameters": {
"options": {
"includeBinaries": true
},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "reference_images"
},
"typeVersion": 1
},
{
"id": "aea3c143-19d0-4e78-ac42-77169a9aee23",
"name": "Fusionner les données des modèles",
"type": "n8n-nodes-base.merge",
"position": [
544,
896
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "57503692-1718-4a0b-9571-876157d03c7d",
"name": "Toutes les combinaisons",
"type": "n8n-nodes-base.merge",
"position": [
832,
320
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3.2
},
{
"id": "21a21132-0aa5-4c93-988e-5619bdaf283a",
"name": "Télécharger l'image produit",
"type": "n8n-nodes-base.httpRequest",
"position": [
368,
512
],
"parameters": {
"url": "={{ $json.product_image_url }}",
"options": {
"response": {
"response": {
"responseFormat": "file",
"outputPropertyName": "product_data"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "85fb61ce-6ad2-4459-b7fa-8d364e1b20de",
"name": "Commutateur",
"type": "n8n-nodes-base.switch",
"position": [
1040,
304
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "1",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8211d8e0-11b2-418c-9841-4895024a6b68",
"operator": {
"type": "array",
"operation": "lengthEquals",
"rightType": "number"
},
"leftValue": "={{ $json.reference_images }}",
"rightValue": 1
}
]
},
"renameOutput": true
},
{
"outputKey": "2",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "398d3cf3-4956-47fa-bee6-57d9a7918cfd",
"operator": {
"type": "array",
"operation": "lengthEquals",
"rightType": "number"
},
"leftValue": "={{ $json.reference_images }}",
"rightValue": 2
}
]
},
"renameOutput": true
},
{
"outputKey": "3",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f60c5fb0-725d-4978-b0ce-bb5ca877cff8",
"operator": {
"type": "array",
"operation": "lengthGte",
"rightType": "number"
},
"leftValue": "={{ $json.reference_images }}",
"rightValue": 3
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "d39bb48d-cc1f-4a25-90b8-8954a25cbbe7",
"name": "Générer avec 1 réf",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1328,
128
],
"parameters": {
"images": {
"values": [
{
"binaryPropertyName": "product_data"
},
{}
]
},
"prompt": "={{ $json.prompt }}",
"options": {
"binaryPropertyOutput": "edited"
},
"resource": "image",
"operation": "edit"
},
"credentials": {
"googlePalmApi": {
"id": "ybwzU4ruTo49PRfX",
"name": "Google Gemini vadim.ai.lab"
}
},
"typeVersion": 1
},
{
"id": "5e05fb1a-349a-47db-ba61-5eda06ad21a4",
"name": "Générer avec 2 réfs",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1328,
320
],
"parameters": {
"images": {
"values": [
{
"binaryPropertyName": "product_data"
},
{},
{
"binaryPropertyName": "data_1"
}
]
},
"prompt": "={{ $json.prompt }}",
"options": {
"binaryPropertyOutput": "edited"
},
"resource": "image",
"operation": "edit"
},
"credentials": {
"googlePalmApi": {
"id": "ybwzU4ruTo49PRfX",
"name": "Google Gemini vadim.ai.lab"
}
},
"typeVersion": 1
},
{
"id": "e2e5fa21-2410-4d2b-b5fb-0098aaefcfe8",
"name": "Générer avec 3 réfs",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1328,
512
],
"parameters": {
"images": {
"values": [
{
"binaryPropertyName": "product_data"
},
{},
{
"binaryPropertyName": "data_1"
},
{
"binaryPropertyName": "data_2"
}
]
},
"prompt": "={{ $json.prompt }}",
"options": {
"binaryPropertyOutput": "edited"
},
"resource": "image",
"operation": "edit"
},
"credentials": {
"googlePalmApi": {
"id": "ybwzU4ruTo49PRfX",
"name": "Google Gemini vadim.ai.lab"
}
},
"typeVersion": 1
},
{
"id": "cd75753a-af60-4cfa-8df4-20e66024dfe7",
"name": "Fusionner",
"type": "n8n-nodes-base.merge",
"position": [
1600,
304
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3.2
},
{
"id": "535911c6-7163-4492-bb65-a6784e10f02f",
"name": "Extraire du fichier",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1872,
320
],
"parameters": {
"options": {
"encoding": "utf8",
"keepSource": "json"
},
"operation": "binaryToPropery",
"destinationKey": "output_base64",
"binaryPropertyName": "edited"
},
"typeVersion": 1
},
{
"id": "8d0504da-1d78-4162-b661-7fb8af37e8e5",
"name": "paramètres",
"type": "n8n-nodes-base.set",
"position": [
-288,
-48
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c7691548-c717-4a29-b983-5a394f2a7ad2",
"name": "airtableBaseId",
"type": "string",
"value": "app3umoCF1t88Mg0q"
},
{
"id": "4282bb3a-8ab7-4742-99bd-2a3343bfe62c",
"name": "airtableResultImageFieldId",
"type": "string",
"value": "fldzhCsleyyBrPyKj"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "1f4e2221-0180-4e9c-939b-3ca229dda498",
"name": "Mettre à jour le statut du travail",
"type": "n8n-nodes-base.airtable",
"position": [
192,
-208
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('parameters').item.json.airtableBaseId }}"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblN7ikAWki5s5jcd",
"cachedResultUrl": "https://airtable.com/app3umoCF1t88Mg0q/tblN7ikAWki5s5jcd",
"cachedResultName": "Jobs"
},
"columns": {
"value": {
"id": "={{ $json.id }}",
"Status": "In progress"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product Images",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Product Images",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Templates",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Templates",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created Time",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Created Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Created",
"value": "Created"
},
{
"name": "In progress",
"value": "In progress"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Results",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Results",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Generate",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Generate",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 2.1
},
{
"id": "2795c78d-39e0-453e-8013-103c792122ff",
"name": "Mettre à jour le statut du travail (terminé)",
"type": "n8n-nodes-base.airtable",
"position": [
2704,
320
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('parameters').item.json.airtableBaseId }}"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblN7ikAWki5s5jcd",
"cachedResultUrl": "https://airtable.com/app3umoCF1t88Mg0q/tblN7ikAWki5s5jcd",
"cachedResultName": "Jobs"
},
"columns": {
"value": {
"id": "={{ $('Get Job').item.json.id }}",
"Status": "Done"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product Images",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Product Images",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Templates",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Templates",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created Time",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Created Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Created",
"value": "Created"
},
{
"name": "In progress",
"value": "In progress"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Results",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Results",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Generate",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Generate",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 2.1
},
{
"id": "e6711f0b-f985-46a9-9adf-0408ec0c062d",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
1824,
176
],
"parameters": {
"color": 6,
"width": 1072,
"height": 336,
"content": "## Step 4. Create new Result records in Airtable\n- For each generated image, create new Result record\n- Upload generated image and attach it to its Result record via HTTP node\n- Set Job's status to 'done' "
},
"typeVersion": 1
},
{
"id": "566017ed-7968-4ba5-b930-88e6c542a5b4",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
784,
0
],
"parameters": {
"color": 6,
"width": 960,
"height": 672,
"content": "## Step 3. Generate new product images\n- Create all combinations of original images and templates\n- Pick generation node based on the number of reference images (up to 3)\n- Generate new product images"
},
"typeVersion": 1
},
{
"id": "0a3f8a80-d670-41ec-af49-cd8d5711cd3f",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
768
],
"parameters": {
"color": 6,
"width": 1856,
"height": 496,
"content": "## Step 2b. Get templates with reference images\n- Fetch Template records specified in Job (each template contains a **prompt** and one or several **reference images**)\n- For each template, download reference images (in the loop)"
},
"typeVersion": 1
},
{
"id": "73da7bc0-d36a-4c69-96bd-116876e1025b",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-288,
400
],
"parameters": {
"color": 6,
"width": 816,
"height": 288,
"content": "## Step 2a. Get original product image\n- Fetch Product records specified in Job\n- Download product images"
},
"typeVersion": 1
},
{
"id": "f324e87b-1821-4c92-8c67-3276fa79fcb4",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
-192
],
"parameters": {
"color": 5,
"width": 224,
"height": 304,
"content": "## Configure\n➤ set Airtable base ID\n➤ set Airtable field ID for generated images"
},
"typeVersion": 1
},
{
"id": "4b0b80c7-8f71-4032-83bb-3df0042e449b",
"name": "Note adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-32,
-320
],
"parameters": {
"color": 6,
"width": 528,
"height": 432,
"content": "## Step 1. Fetch Job record by ID\nAlso set Job's status to 'in progress' in Airtable"
},
"typeVersion": 1
},
{
"id": "c4c76af6-3023-40cd-b27f-d4a144edff6b",
"name": "Téléverser la pièce jointe",
"type": "n8n-nodes-base.httpRequest",
"position": [
2496,
320
],
"parameters": {
"url": "=https://content.airtable.com/v0/{{ $('parameters').item.json.airtableBaseId }}/{{ $json.id }}/{{ $('parameters').item.json.airtableResultImageFieldId }}/uploadAttachment",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "contentType",
"value": "={{ $('Collect variables').item.json.mimeType }}"
},
{
"name": "file",
"value": "={{ $('Collect variables').item.json.outputBase64 }}"
},
{
"name": "filename",
"value": "image.png"
}
]
},
"nodeCredentialType": "airtableTokenApi"
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 4.2
},
{
"id": "fb2d292d-f389-4761-8fac-8a02bd81366f",
"name": "Créer un enregistrement de résultat",
"type": "n8n-nodes-base.airtable",
"position": [
2288,
320
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('parameters').item.json.airtableBaseId }}"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblSoB3qTeeKXjsov",
"cachedResultUrl": "https://airtable.com/app3umoCF1t88Mg0q/tblSoB3qTeeKXjsov",
"cachedResultName": "Results"
},
"columns": {
"value": {
"Jobs": "=[\"{{ $json.jobId }}\"]",
"Status": "Pending",
"Template": "=[\"{{ $json.templateId }}\"]",
"Timestamp": "={{ $now }}",
"Product Image": "=[\"{{ $json.productId }}\"]"
},
"schema": [
{
"id": "ID",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Generated Image",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Generated Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Jobs",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Jobs",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product Image",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Product Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Template",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Template",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Timestamp",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Approved",
"value": "Approved"
},
{
"name": "Rejected",
"value": "Rejected"
},
{
"name": "",
"value": ""
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "N8Xyxqz7hb8XrETy",
"name": "Airtable account"
}
},
"typeVersion": 2.1
},
{
"id": "7b9cf6ec-84ae-45b4-9b7d-ea46fdf2c48e",
"name": "Collecter les variables",
"type": "n8n-nodes-base.set",
"position": [
2080,
320
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "3e057dd9-283b-4722-bd2e-23f725f5137f",
"name": "outputBase64",
"type": "string",
"value": "={{ $json.output_base64 }}"
},
{
"id": "b4c377ad-ed0d-42fa-85ca-f08416751595",
"name": "mimeType",
"type": "string",
"value": "={{ $json.mimeType }}"
},
{
"id": "8da67ef3-319b-486e-8f0c-1cd6db274a56",
"name": "templateId",
"type": "string",
"value": "={{ $('All combinations').item.json.template_id }}"
},
{
"id": "3f4967da-e951-4408-9684-ff1c5463d9c3",
"name": "productId",
"type": "string",
"value": "={{ $('All combinations').item.json.product_id }}"
},
{
"id": "990586ac-cd48-4ed6-be37-62472176bfc6",
"name": "jobId",
"type": "string",
"value": "={{ $('Get Job').item.json.id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3d346e31-2372-4261-b596-291c71b2f629",
"name": "Note adhésive6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1248,
208
],
"parameters": {
"width": 768,
"height": 752,
"content": "## AI Product Photography using Airtable and Gemini (Nano Banana)\n\nThis workflow automates the process of generating stylized product photos for e-commerce by combining real product shots with creative templates. It enables the creation of a complete set of images for an SKU from a single product photo and a set of reusable templates. The workflow uses Google Gemini (Nano Banana) for image editing and Airtable as the data source.\n\n### Airtable tables\n\nThis workflow expects the following Airtable table setup:\n- **\"Product Images\"** - contains original product photos, one per record.\n- **\"Reference Images\"** - contains reference images for templates, one per record.\n- **\"Templates\"** - contains reusable generation templates. Each template includes a text prompt and up to three reference images.\n- **\"Jobs\"** - contains batch generation jobs. Each job references multiple product images and multiple templates.\n- **\"Results\"** - contains the generated outputs. Each result includes a generated image, references to the job, product image, and template, and a status field (pending, approved, rejected).\n\n\nThe workflow is triggered by a webhook that receives a job ID from Airtable.\n\n### Requirements\n1. Airtable Personal Access Token\n2. Google Gemini API key\n\n### Setup\n1. Ensure all required Airtable tables exist.\n2. Configure parameters in the **parameters** node:\n - Set Airtable Base ID\n - Set ID of the attachment field in the \"Results\" table (where the generated images will be uploaded) \n4. Configure credentials for all Airtable nodes.\n5. Set Google Gemini API key for the \"Generate...\" nodes.\n"
},
"typeVersion": 1
},
{
"id": "bacc0136-0fcf-4f69-8417-d9ba848085ef",
"name": "Télécharger l'image de référence",
"type": "n8n-nodes-base.httpRequest",
"position": [
1136,
1056
],
"parameters": {
"url": "={{ $json.image_url }}",
"options": {}
},
"typeVersion": 4.2
}
],
"active": false,
"pinData": {
"Clean up": [
{
"json": {
"job_id": "recJV3zfx8GVv1Hzf",
"products": [
"recfkmrLLZZiqGRdW"
],
"templates": [
"recUzp3aSes2n9EUC"
]
}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "9d566c64-537d-4b89-bcdf-f6abec5cd490",
"connections": {
"cd75753a-af60-4cfa-8df4-20e66024dfe7": {
"main": [
[
{
"node": "535911c6-7163-4492-bb65-a6784e10f02f",
"type": "main",
"index": 0
}
]
]
},
"85fb61ce-6ad2-4459-b7fa-8d364e1b20de": {
"main": [
[
{
"node": "d39bb48d-cc1f-4a25-90b8-8954a25cbbe7",
"type": "main",
"index": 0
}
],
[
{
"node": "5e05fb1a-349a-47db-ba61-5eda06ad21a4",
"type": "main",
"index": 0
}
],
[
{
"node": "e2e5fa21-2410-4d2b-b5fb-0098aaefcfe8",
"type": "main",
"index": 0
}
]
]
},
"0cf73e67-9194-4fb8-af9c-05604e337d40": {
"main": [
[
{
"node": "1f4e2221-0180-4e9c-939b-3ca229dda498",
"type": "main",
"index": 0
},
{
"node": "0a022036-95d0-4409-8a61-60afe3c767eb",
"type": "main",
"index": 0
}
]
]
},
"9d581fc1-2b21-41f2-b61f-e1b2984eba34": {
"main": [
[
{
"node": "8d0504da-1d78-4162-b661-7fb8af37e8e5",
"type": "main",
"index": 0
}
]
]
},
"0a022036-95d0-4409-8a61-60afe3c767eb": {
"main": [
[
{
"node": "1e5d84ca-72c4-462f-b5a8-68861652eb65",
"type": "main",
"index": 0
},
{
"node": "a3487dd1-d051-447e-8f38-dd4150ad4a9e",
"type": "main",
"index": 0
}
]
]
},
"aa125477-4571-4f0e-8048-ede5399e1dc8": {
"main": [
[
{
"node": "0be8b4ac-5135-49bf-902f-898ea1fc292f",
"type": "main",
"index": 0
}
]
]
},
"8d0504da-1d78-4162-b661-7fb8af37e8e5": {
"main": [
[
{
"node": "0cf73e67-9194-4fb8-af9c-05604e337d40",
"type": "main",
"index": 0
}
]
]
},
"0c3dfd3a-0871-4a7b-9252-6070289d8a9e": {
"main": [
[
{
"node": "a161d2a7-1487-4676-9a01-b34a9d5de3f3",
"type": "main",
"index": 0
}
]
]
},
"a161d2a7-1487-4676-9a01-b34a9d5de3f3": {
"main": [
[
{
"node": "21a21132-0aa5-4c93-988e-5619bdaf283a",
"type": "main",
"index": 0
}
]
]
},
"bbfb9c8b-7356-4dcf-b028-9d9b320b4a76": {
"main": [
[
{
"node": "0c2ea55a-6403-4cc6-9d5b-cc0923a0c700",
"type": "main",
"index": 0
}
]
]
},
"0c2ea55a-6403-4cc6-9d5b-cc0923a0c700": {
"main": [
[
{
"node": "0be8b4ac-5135-49bf-902f-898ea1fc292f",
"type": "main",
"index": 0
},
{
"node": "aea3c143-19d0-4e78-ac42-77169a9aee23",
"type": "main",
"index": 0
}
]
]
},
"1e5d84ca-72c4-462f-b5a8-68861652eb65": {
"main": [
[
{
"node": "0c3dfd3a-0871-4a7b-9252-6070289d8a9e",
"type": "main",
"index": 0
}
]
]
},
"a3487dd1-d051-447e-8f38-dd4150ad4a9e": {
"main": [
[
{
"node": "bbfb9c8b-7356-4dcf-b028-9d9b320b4a76",
"type": "main",
"index": 0
}
]
]
},
"57503692-1718-4a0b-9571-876157d03c7d": {
"main": [
[
{
"node": "85fb61ce-6ad2-4459-b7fa-8d364e1b20de",
"type": "main",
"index": 0
}
]
]
},
"7b9cf6ec-84ae-45b4-9b7d-ea46fdf2c48e": {
"main": [
[
{
"node": "fb2d292d-f389-4761-8fac-8a02bd81366f",
"type": "main",
"index": 0
}
]
]
},
"535911c6-7163-4492-bb65-a6784e10f02f": {
"main": [
[
{
"node": "7b9cf6ec-84ae-45b4-9b7d-ea46fdf2c48e",
"type": "main",
"index": 0
}
]
]
},
"1f4e2221-0180-4e9c-939b-3ca229dda498": {
"main": [
[]
]
},
"c4c76af6-3023-40cd-b27f-d4a144edff6b": {
"main": [
[
{
"node": "2795c78d-39e0-453e-8013-103c792122ff",
"type": "main",
"index": 0
}
]
]
},
"d39bb48d-cc1f-4a25-90b8-8954a25cbbe7": {
"main": [
[
{
"node": "cd75753a-af60-4cfa-8df4-20e66024dfe7",
"type": "main",
"index": 0
}
]
]
},
"7c1bcb47-53f9-49f7-b113-e47fd343f257": {
"main": [
[
{
"node": "84a1f3a1-f07c-4b96-8230-8f6ac5b3aa09",
"type": "main",
"index": 0
}
]
]
},
"0be8b4ac-5135-49bf-902f-898ea1fc292f": {
"main": [
[
{
"node": "aea3c143-19d0-4e78-ac42-77169a9aee23",
"type": "main",
"index": 1
}
],
[
{
"node": "f0ccedc8-7f2d-43c2-a95b-6fcd25b4a638",
"type": "main",
"index": 0
}
]
]
},
"fb2d292d-f389-4761-8fac-8a02bd81366f": {
"main": [
[
{
"node": "c4c76af6-3023-40cd-b27f-d4a144edff6b",
"type": "main",
"index": 0
}
]
]
},
"84a1f3a1-f07c-4b96-8230-8f6ac5b3aa09": {
"main": [
[
{
"node": "bacc0136-0fcf-4f69-8417-d9ba848085ef",
"type": "main",
"index": 0
}
]
]
},
"5e05fb1a-349a-47db-ba61-5eda06ad21a4": {
"main": [
[
{
"node": "cd75753a-af60-4cfa-8df4-20e66024dfe7",
"type": "main",
"index": 1
}
]
]
},
"e2e5fa21-2410-4d2b-b5fb-0098aaefcfe8": {
"main": [
[
{
"node": "cd75753a-af60-4cfa-8df4-20e66024dfe7",
"type": "main",
"index": 2
}
]
]
},
"aea3c143-19d0-4e78-ac42-77169a9aee23": {
"main": [
[
{
"node": "57503692-1718-4a0b-9571-876157d03c7d",
"type": "main",
"index": 1
}
]
]
},
"21a21132-0aa5-4c93-988e-5619bdaf283a": {
"main": [
[
{
"node": "57503692-1718-4a0b-9571-876157d03c7d",
"type": "main",
"index": 0
}
]
]
},
"f0ccedc8-7f2d-43c2-a95b-6fcd25b4a638": {
"main": [
[
{
"node": "7c1bcb47-53f9-49f7-b113-e47fd343f257",
"type": "main",
"index": 0
}
]
]
},
"bacc0136-0fcf-4f69-8417-d9ba848085ef": {
"main": [
[
{
"node": "aa125477-4571-4f0e-8048-ede5399e1dc8",
"type": "main",
"index": 0
}
]
]
},
"2795c78d-39e0-453e-8013-103c792122ff": {
"main": [
[]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Création de contenu, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Vadim
@coderikI help businesses implement innovative AI/ML solutions, redesign existing systems to cut costs and boost reliability, and conduct applied R&D. I specialize in AI automation, agents, LLMs, Generative AI and Computer Vision. Need help customizing workflows? Just find me on Upwork.
Partager ce workflow