Photographie de produits - Révision

Avancé

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

Prérequis
  • 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
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "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": [
        []
      ]
    }
  }
}
Foire aux questions

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

Génération automatisée de prospects et de prospection personnalisée : Apollo, IA et Instantly.ai
Automatisation de la génération de prospects et du contact personnalisé : Apollo, IA et Instantly.ai
If
Set
Code
+
If
Set
Code
166 NœudsRuben AI
Nurturing de leads
Agrégation de contenu
Automatiser la publication de publications sur les réseaux sociaux à partir d'articles de site web vers LinkedIn et X/Twitter avec Gemini AI
If
Set
Xml
+
If
Set
Xml
34 NœudsVadim
Création de contenu
Génération automatisée de prospects LinkedIn et envoi de messages privés avec Airtable, OpenAI et Unipile
Génération automatique de prospects LinkedIn et contact par message direct avec Airtable, OpenAI et Unipile
If
Set
Code
+
If
Set
Code
143 NœudsRuben AI
Nurturing de leads
En direct - Automatisation de la création et de la publication de vidéos virales AI avec Gemini et Creatomate
Utiliser Gemini et Creatomate pour automatiser la création de vidéos IA et leur publication multiplateforme
Set
Code
Wait
+
Set
Code
Wait
47 NœudsIntuz
Création de contenu
Version professionnelle de l'automatisation de blog WordPress (recherche approfondie) v2.1 sur le marché
Automatisation de la création de blog optimisé pour le SEO avec GPT-4o, Perplexity AI et support multilingue
If
Set
Xml
+
If
Set
Xml
125 NœudsDaniel Ng
Création de contenu
Créer un blog WordPress optimisé pour le référencement avec des mots-clés et des médias en utilisant Perplexity et GPT
Créer un blog SEO optimisé pour WordPress avec des mots-clés et des supports média en utilisant Perplexity et GPT
Set
Code
Limit
+
Set
Code
Limit
124 NœudsPaul
Création de contenu
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds37
Catégorie2
Types de nœuds12
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur

I 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.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34