{
  "name": "Generate accessible alt text with AI from Google Sheets to WordPress",
  "nodes": [
    {
      "id": "52c0fcb7-84c7-4971-9e5c-74ac49e9bc7a",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2928,
        208
      ]
    },
    {
      "id": "be9755fd-2b18-4de0-843a-6aae71b21f28",
      "name": "Update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4624,
        192
      ]
    },
    {
      "id": "1caa92ef-ac89-4512-9227-41fce424bb71",
      "name": "Get URLs",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1776,
        208
      ]
    },
    {
      "id": "d6993d38-bd0c-4edf-9213-231e168817b2",
      "name": "Get WP Key + website URL WITHOUT https://",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        640,
        208
      ]
    },
    {
      "id": "d54f0603-ecd2-4c2a-9f42-4a40c6a6c0a8",
      "name": "Get Base64 key",
      "type": "n8n-nodes-base.code",
      "position": [
        1216,
        208
      ]
    },
    {
      "id": "889e7165-bf4d-437a-9c6d-85959ad24dcc",
      "name": "Update WP image alt",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5248,
        192
      ]
    },
    {
      "id": "bb6e57b4-3b6c-425f-8c46-a3471989e14a",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        4080,
        208
      ]
    },
    {
      "id": "999c913e-9014-4ccb-9cde-d2b2848eaba1",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        2384,
        208
      ]
    },
    {
      "id": "3f4459a1-1a57-4ce5-9dfa-e572e0bfefa6",
      "name": "Analyze image",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3520,
        208
      ]
    },
    {
      "id": "cbe6d804-4bda-4f0d-82d0-34025b56b5cd",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 1: Webhook Initialization"
      }
    },
    {
      "id": "f7ff1207-ba9c-4e69-983d-43d5c07400b0",
      "name": "Send Sheets URL",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        48,
        208
      ]
    },
    {
      "id": "132d0793-3abd-43f2-b609-f949cba544d0",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 432,
        "content": "### What you do:\n\nSend the Google Sheets URL containing image data to the webhook endpoint\nTrigger the workflow by providing the spreadsheet link\nEnsure the spreadsheet contains \"Export media\" and \"In"
      }
    },
    {
      "id": "3e1ebd12-8bf7-4f9a-af3c-129ae0811e67",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 2: Client Configuration Retrieval"
      }
    },
    {
      "id": "3f8faf83-1cb8-4d2c-a2c2-2693f356eed4",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nConnects to the \"Infos client\" sheet in your Google Sheets document\nRetrieves WordPress credentials including admin name and API key\nExtracts domain information for WordPres"
      }
    },
    {
      "id": "34cea31d-e634-4b13-a088-dd47d5dc95e2",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 3: Authentication Setup"
      }
    },
    {
      "id": "ccc298e4-4b46-457f-b96c-1c86930dbb0c",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nProcesses WordPress credentials from the client information\nGenerates Base64 encoded authentication using username and API key\nCreates authorization header for WordPress RES"
      }
    },
    {
      "id": "83e226d4-c289-44fb-ab0a-05e63ae8ec0c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1568,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 4: Image URL Collection"
      }
    },
    {
      "id": "34828847-0d4b-43f9-bfec-10a1c6f49572",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1568,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nReads the \"Export media\" sheet from your Google Sheets\nExtracts all image URLs and associated metadata\nRetrieves image IDs for WordPress integration\nPrepares dataset for alt"
      }
    },
    {
      "id": "ba44f618-6933-4e3d-b439-3fc21cde3315",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 4.5: Empty Alt Text Filtering"
      }
    },
    {
      "id": "fdade840-2587-436f-9c72-3803ebe6c166",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nFilters images to identify those missing alt text descriptions\nExcludes images that already have alt text content\nCreates focused dataset of images needing descriptions\nOpti"
      }
    },
    {
      "id": "4eb87232-5a27-4044-8f9f-c8d7fb3a13a4",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2720,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 5: Sequential Image Processing\n"
      }
    },
    {
      "id": "8e68f27f-e717-4331-bb17-393c02e332f1",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2720,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nProcesses each image without alt text one at a time\nMaintains data integrity throughout the iteration\nPrepares individual images for AI analysis\nEnsures systematic handling "
      }
    },
    {
      "id": "3c7116c6-a024-4270-a1b8-d10a87f1792e",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3296,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 6: AI-Powered Alt Text Generation"
      }
    },
    {
      "id": "39921110-7b6f-45ca-8d28-6aae9a5047f3",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3296,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nAnalyzes each image using GPT-4O-mini vision capabilities\nGenerates descriptive alt text following accessibility best practices\nApplies specific guidelines for maximum 125 c"
      }
    },
    {
      "id": "dbf74b4c-a20c-44e2-bff1-c2be66e0637a",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3872,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 7: Error Handling Validation"
      }
    },
    {
      "id": "211d9a55-87c5-42e3-a04f-734a109c471b",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3872,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nChecks AI analysis results for any processing errors\nValidates successful alt text generation before proceeding\nHandles failed analyses by continuing with other images\nEnsur"
      }
    },
    {
      "id": "deccfabb-e18d-4240-9b1a-12ca35ece20e",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4448,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 8: Spreadsheet Update"
      }
    },
    {
      "id": "c8e8d52f-15b4-4101-ae65-a439aff7df0c",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4448,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nUpdates the Google Sheets with generated alt text\nMatches URLs to ensure correct image association\nPopulates the \"Alt text\" column with AI-generated descriptions\nMaintains d"
      }
    },
    {
      "id": "b96bbe94-95f8-4d69-b90c-bce92d88708c",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5024,
        64
      ],
      "parameters": {
        "width": 528,
        "height": 304,
        "content": "# Phase 9: WordPress Integration"
      }
    },
    {
      "id": "f1f2f561-bb80-4d22-9543-15b156bb133e",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5024,
        400
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "### What the system does:\n\nConnects to WordPress REST API using authenticated credentials\nUpdates each media item with the generated alt text\nUses WordPress media ID for precise targeting\nApplies alt "
      }
    },
    {
      "id": "ff04a19d-c5f3-4ed1-a875-e0a3be2a3acf",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1280,
        160
      ],
      "parameters": {
        "width": 816,
        "height": 336,
        "content": "## Need more advanced automation solutions? Contact us for custom enterprise workflows!\n\n# Growth-AI.fr\n\n## https://www.linkedin.com/in/allanvaccarizi/\n## https://www.linkedin.com/in/hugo-marinier-%F0"
      }
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Update row in sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get URLs": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze image": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Base64 key": {
      "main": [
        [
          {
            "node": "Get URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Analyze image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Sheets URL": {
      "main": [
        [
          {
            "node": "Get WP Key + website URL WITHOUT https://",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update WP image alt": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update row in sheet": {
      "main": [
        [
          {
            "node": "Update WP image alt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get WP Key + website URL WITHOUT https://": {
      "main": [
        [
          {
            "node": "Get Base64 key",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}