Hi! I’ve been stuck for some days now building this flow and I’m finally giving up and seeking for help as I’m not seeing a way out. I’ll first explain what I intend to do in case you guys think of a better solution:The whole workflow idea is give my comercial team the possibility to drop a slash command in slack that triggers the flow to create a deck with the products we have (exactly our products not a generative task) and to this add the logo not paste it on top of our product image but kind of give it sort of an “embroidered look” of any brand to multiple images through Cloudinary. I also tried using Replicate and DALL E 2 and 3. None of this were functional and read that Cloudinary was my best option. I already got to the point it should be working but at the end the “overlayUrl” gives a url but wasn’t creating a real image so the flow failed when it had to add the real image to google slides. Now GPT5 and the AI asisstant from N8N adviced me to add a new http request node between “Generate Cloudinary URL” and “Set Final…” but I can’t get that node to work and I know that if I make it work the flow won’t be functional yet. It would mean a lot if someone could help me with this please please please. I’m beyond exahusted fighting against this flow *Also if you think cloudinary is not the best option to do what I’m describing I’m open to other options, but I really need help with this friends):
{“nodes”: [{“parameters”: {“httpMethod”: “POST”,“path”: “001ab407-3fb7-4ef3-bf41-5cc806e96948”,“options”: {}},“type”: “n8n-nodes-base.webhook”,“typeVersion”: 2,“position”: [0,0],“id”: “a40b4cfb-3222-4970-b996-36db0f6b2779”,“name”: “Webhook”,“webhookId”: “001ab407-3fb7-4ef3-bf41-5cc806e96948”},{“parameters”: {“assignments”: {“assignments”: [{“id”: “7e922013-db94-4692-9e53-3cbdbaca580e”,“name”: “=brand”,“value”: “={{$json[“body”][“text”].trim().toLowerCase()}}”,“type”: “string”}]},“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [224,0],“id”: “19a91117-b1a8-4fe5-89ab-4e4617ebf644”,“name”: “Edit Fields”},{“parameters”: {“operation”: “copy”,“fileId”: {“_rl": true,“value”: “11K9k_osPRDqororq22BSW1ZQSnkXYs5G0pnFUQpxeYI”,“mode”: “list”,“cachedResultName”: “Bot Logo”,“cachedResultUrl”: “https://docs.google.com/presentation/d/11K9k_osPRDqororq22BSW1ZQSnkXYs5G0pnFUQpxeYI/edit?usp=drivesdk”},“name”: "=Presentation{{$(‘Edit Fields’).item.json.brand}}”,“options”: {}},“type”: “n8n-nodes-base.googleDrive”,“typeVersion”: 3,“position”: [848,0],“id”: “40190412-6a39-4199-a617-28c6ba5c3ba8”,“name”: “Copy file”,“credentials”: {“googleDriveOAuth2Api”: {“id”: “bqn1L7sY8Oxvs53y”,“name”: “Google Drive account”}}},{“parameters”: {“assignments”: {“assignments”: [{“id”: “e38a7c30-6f99-4327-bdc6-b1b7e047988c”,“name”: “logoUrl”,“value”: “=={{ $(‘Get Brand Row’).item.json[“logo_url”] }}”,“type”: “string”}]},“includeOtherFields”: true,“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [656,0],“id”: “442f46d9-5705-4781-96ca-886c044abed5”,“name”: “Set”},{“parameters”: {“documentId”: {“__rl”: true,“value”: “https://docs.google.com/spreadsheets/d/1aJGV9j35VYhCsGIwNP1JRh6STMvzmMLwOQbZZvtuetQ/edit?gid=0#gid=0”,“mode”: “url”},“sheetName”: {“__rl”: true,“value”: “gid=0”,“mode”: “list”,“cachedResultName”: “Hoja 1”,“cachedResultUrl”: “https://docs.google.com/spreadsheets/d/1aJGV9j35VYhCsGIwNP1JRh6STMvzmMLwOQbZZvtuetQ/edit#gid=0”},“filtersUI”: {“values”: [{“lookupColumn”: “brand”,“lookupValue”: “={{ $node[“Edit Fields”].json[“brand”] }}”}]},“options”: {}},“type”: “n8n-nodes-base.googleSheets”,“typeVersion”: 4.6,“position”: [432,112],“id”: “a1ab4556-50e9-4452-b42e-03ce73979ddd”,“name”: “Get Brand Row”,“credentials”: {“googleSheetsOAuth2Api”: {“id”: “xD9Nb1z9vB4yvspN”,“name”: “Google Sheets account”}}},{“parameters”: {“jsCode”: “const row = $input.item.json;\nconst results = ;\n\n// headers you actually use in the sheet\nconst validProductNames = [\n “BACKPACK”,“LIGHTPACK”,“ESSENTIAL CASE”,“CROSSBODY”,“MINI CROSSBODY”,\n “TOTE BAG”,“TOTE BAG W/G”,“LAPTOP CASE”,“TRAVEL POUCH”,“CARD WALLET”,\n “ORGANIZER CASE”,“BUCKET HAT”,“EVERYTHING BAG”,“POCKETS B2B”,“COMPUTER BAG”\n];\n\n// helper to generate safe keys that match your slide placeholders\nconst toKey = s => s.toUpperCase().replace(/\s+/g,‘').replace(/[^A-Z0-9]/g,’‘);\n\nconst brand = (row.brand || ‘’).toString().trim();\nconst logoUrl = (row.logo_url || ‘’).toString().trim();\n\nfor (const productName of validProductNames) {\n const cell = row[productName];\n if (!cell) continue;\n\n const urls = cell.toString()\n .split(’,')\n .map(u => u.trim())\n .filter(Boolean);\n\n const key = toKey(productName);\n\n urls.forEach((imageUrl, idx) => {\n const index = idx + 1;\n const placeholderText = ${key}-${index}; // e.g. TRAVEL_POUCH-3\n const placeholderImageUrl =\n https://res.cloudinary.com/dedfpdqfm/image/upload/brand_deck_slides/${placeholderText}.png;\n\n results.push({\n productName,\n productKey: key,\n imageUrl,\n imageIndex: index,\n // per-image placement reference for the AI Agent:\n placeholderImageUrl,\n // this is what Slides will search for:\n placeholderText,\n // keep brand + logo for downstream nodes\n brand,\n logoUrl\n });\n });\n}\n\nreturn results;”},“type”: “n8n-nodes-base.code”,“typeVersion”: 2,“position”: [1904,320],“id”: “26a17909-837d-484d-9ea0-9dfecf273054”,“name”: “Split Products”},{“parameters”: {“assignments”: {“assignments”: [{“id”: “a0ff9270-58bf-4cf6-9fe6-f556ac41f0d4”,“name”: “slideTitle”,“value”: “={{ $json.productName }}”,“type”: “string”},{“id”: “4ac19fe8-0ed5-409b-8c05-c34645877d13”,“name”: “imageUrl”,“value”: “={{ $json.imageUrl }}”,“type”: “string”},{“id”: “1b5ca0a8-9221-4fab-84b9-3a114c69acb9”,“name”: “placeholder”,“value”: “={{ $json.placeholderText ? $json.placeholderText.trim() : ‘’ }}”,“type”: “string”}]},“includeOtherFields”: true,“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [5296,-288],“id”: “438d45ad-dee0-411e-8eeb-6b69d32767ae”,“name”: “Prepare for Slides”},{“parameters”: {“method”: “POST”,“url”: “=https://slides.googleapis.com/v1/presentations/{{$json.presentationId}}:batchUpdate\n”,“authentication”: “predefinedCredentialType”,“nodeCredentialType”: “googleSlidesOAuth2Api”,“sendBody”: true,“specifyBody”: “json”,“jsonBody”: “={{ {\n requests: [\n {\n replaceAllShapesWithImage: {\n imageUrl: $json.imageUrl,\n replaceMethod: “CENTER_INSIDE”,\n containsText: {\n text: $json.placeholder,\n matchCase: true\n }\n }\n }\n ]\n} }}”,“options”: {}},“type”: “n8n-nodes-base.httpRequest”,“typeVersion”: 4.2,“position”: [5696,-304],“id”: “25a947e2-ddca-4def-ba5d-5ba1ce6781e4”,“name”: “Insert into Slides”,“credentials”: {“googleSlidesOAuth2Api”: {“id”: “AWy3oBXDFtWdjVfI”,“name”: “Google Slides account”}}},{“parameters”: {“assignments”: {“assignments”: [{“id”: “70b9ee79-fa89-4edd-83b3-aad1d1505291”,“name”: “placementJson”,“value”: “={{ $json.output }}”,“type”: “string”}]},“includeOtherFields”: true,“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [3008,0],“id”: “e8c57f01-3e94-4568-b04b-3079069fc4c3”,“name”: “Extract Prompt”},{“parameters”: {“promptType”: “define”,“text”: “=You will receive these per-item fields:\n- placeholder reference image (shows exact logo position): {{$json.placeholderImageUrl}}\n- real product image: {{$json.imageUrl}}\n- brand logo image: {{$json.logoUrl}}\n\nTask:\nAnalyze the placeholder reference and infer where the logo should be placed on the real product image.\nReturn ONLY a valid JSON object (no prose) with:\n\n{\n “overlay”: “logo”,\n “gravity”: “north|south|east|west|center|north_east|north_west|south_east|south_west”,\n “x”: , // px offset from gravity anchor (can be 0, negative allowed)\n “y”: , // px offset from gravity anchor (can be 0, negative allowed)\n “width”: , // logo width in px\n “crop”: “scale”\n}”,“options”: {}},“type”: “/n8n-nodes-langchain.agent”,“typeVersion”: 2.1,“position”: [2704,336],“id”: “95001889-faba-4a85-b70c-7ba38a65c3aa”,“name”: “AI Agent”},{“parameters”: {“model”: {“__rl”: true,“value”: “chatgpt-4o-latest”,“mode”: “list”,“cachedResultName”: “chatgpt-4o-latest”},“options”: {}},“type”: “/n8n-nodes-langchain.lmChatOpenAi”,“typeVersion”: 1.2,“position”: [2704,592],“id”: “b0724d48-2e8e-4e31-bb8d-2a1840fd8d65”,“name”: “OpenAI Chat Model”,“credentials”: {“openAiApi”: {“id”: “pydof6eggyYpTHvl”,“name”: “OpenAi account 2”}}},{“parameters”: {“assignments”: {“assignments”: [{“id”: “6a8ea502-0a7a-429f-a03a-3777d84a6506”,“name”: “imageUrl”,“value”: “={{ $(‘Split Products’).item.json.imageUrl }}”,“type”: “string”},{“id”: “1c5b3435-8377-4956-8140-abe7fda56eb2”,“name”: “logoUrl”,“value”: “={{ $(‘Split Products’).item.json.logoUrl }}”,“type”: “string”},{“id”: “2f5c380d-93c7-4b6e-9a13-192d5f8dc80d”,“name”: “placementJson”,“value”: “={{ $(‘Set placementJson’).item.json.placementJson }}”,“type”: “string”},{“id”: “49fa0b4e-50d6-4d4a-b68f-ef3b4b44a309”,“name”: “productName”,“value”: “={{ $(‘Split Products’).item.json.productName }}”,“type”: “string”},{“id”: “43f09d51-4c56-47cb-8e04-00bd244e04de”,“name”: “placeholderText”,“value”: “={{ $(‘Split Products’).item.json.placeholderText }}”,“type”: “string”},{“id”: “56a1a57c-62de-40e5-9a3f-67bb836d7a12”,“name”: “brand”,“value”: “={{ $(‘Split Products’).item.json.brand }}”,“type”: “string”}]},“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [3600,-304],“id”: “f5effb0c-8852-4841-ba87-365fce83ecae”,“name”: “Set Clean Image Payload”},{“parameters”: {“jsCode”: “// Cloudinary faux-embroidery styling (FREE plan friendly)\n// We now consume AI placement JSON (gravity, x, y, width) per image.\n// If the JSON is missing/invalid, we fall back to a reasonable default.\n\nconst cloudName = ‘dedfpdqfm’;\n\n// Optional: brand → thread color (hex without #)\nconst threadColorByBrand = {\n adidas: ‘efefef’,\n nike: ‘ededed’,\n default:‘f5f5f5’,\n};\n\nconst ALLOWED_GRAVITIES = new Set([\n ‘north’,‘south’,‘east’,‘west’,‘center’,\n ‘north_east’,‘north_west’,‘south_east’,‘south_west’\n]);\n\nfunction safeParsePlacement(str) {\n if (!str) return null;\n try { return JSON.parse(str); } catch (e) {}\n const m = String(str).match(/\{[\s\S]\}/);\n if (!m) return null;\n try { return JSON.parse(m[0]); } catch (e) { return null; }\n}\n\nfunction sanitizePlacement(obj) {\n const out = {\n overlay: ‘logo’,\n gravity: ‘south_east’,\n x: 0,\n y: 0,\n width: 200,\n crop: ‘scale’,\n };\n if (!obj || typeof obj !== ‘object’) return out;\n\n if (typeof obj.gravity === ‘string’ && ALLOWED_GRAVITIES.has(obj.gravity)) {\n out.gravity = obj.gravity;\n }\n if (Number.isFinite(+obj.x)) out.x = Math.trunc(+obj.x);\n if (Number.isFinite(+obj.y)) out.y = Math.trunc(+obj.y);\n if (Number.isFinite(+obj.width)) {\n const w = Math.trunc(+obj.width);\n out.width = Math.min(Math.max(w, 40), 1200);\n }\n return out;\n}\n\n// NEW: Detect if image is already on Cloudinary (avoid fetch-of-Cloudinary)\nfunction buildBasePathFromCloudinary(url, cloudName) {\n try {\n const u = new URL(url);\n if (\n u.hostname === ‘res.cloudinary.com’ &&\n u.pathname.includes(/${cloudName}/image/upload/)\n ) {\n const afterUpload = u.pathname.split(‘/image/upload/’)[1] || ‘’;\n const noExt = afterUpload.replace(/\.[a-z0-9]+$/i, ‘’);\n return { type: ‘upload’, path: noExt };\n }\n } catch {}\n return { type: ‘fetch’, path: encodeURIComponent(url) };\n}\n\nreturn $input.all().map(item => {\n const imageUrl = item.json.imageUrl;\n const logoUrl = item.json.logoUrl;\n const brand = (item.json.brand || ‘’).toLowerCase();\n const placementRaw = item.json.placementJson || item.json.logoPrompt || ‘’;\n\n const encodedLogoUrl = encodeURIComponent(logoUrl || ‘’);\n const placementParsed = sanitizePlacement(safeParsePlacement(placementRaw));\n const threadColor = threadColorByBrand[brand] || threadColorByBrand.default;\n\n // — LOGO layer —\n const logoLayer =\n l_fetch:${encodedLogoUrl}, +\n e_grayscale, +\n e_colorize:40:${threadColor}, +\n o_70, +\n e_shadow:20, +\n w_${placementParsed.width},c_fit, +\n g_${placementParsed.gravity}, +\n x_${placementParsed.x},y_${placementParsed.y};\n\n // — TEXTURE layer —\n const textureLayer =\n l_textures:stitch, +\n o_12, +\n w_${placementParsed.width},c_fit, +\n g_${placementParsed.gravity}, +\n x_${placementParsed.x},y_${placementParsed.y};\n\n // — Base path fix —\n const base = buildBasePathFromCloudinary(imageUrl, cloudName);\n const front = f_jpg,q_auto:eco,fl_strip_profile,c_limit,w_1600,h_1600/;\n const baseUrl =\n base.type === ‘upload’\n ? https://res.cloudinary.com/${cloudName}/image/upload/${front}\n : https://res.cloudinary.com/${cloudName}/image/fetch/${front};\n\n // Compose final overlay URL\n const overlayUrl = ${baseUrl}${logoLayer}/${textureLayer}/${base.path};\n\n return {\n json: {\n overlayUrl,\n productImage: imageUrl,\n logoImage: logoUrl,\n placement: placementParsed.gravity,\n offsetX: placementParsed.x,\n offsetY: placementParsed.y,\n logoSize: ${placementParsed.width},\n brand,\n logoUrl,\n productName: item.json.productName,\n placeholderText: item.json.placeholderText,\n }\n };\n});"},“type”: “n8n-nodes-base.code”,“typeVersion”: 2,“position”: [3856,-288],“id”: “1dd3b0e0-54a2-4d26-b83c-58b30961e5f8”,“name”: “Generate Cloudinary Overlay URL”},{“parameters”: {“assignments”: {“assignments”: [{“id”: “298e727c-445d-41e3-a853-fa4147090786”,“name”: “imageUrl”,“value”: “={{ $(‘Generate Cloudinary Overlay URL’).item.json.overlayUrl }}”,“type”: “string”},{“id”: “889c7d66-7da9-4a9a-834e-49b9536993fd”,“name”: “productName”,“value”: “={{ $(‘Generate Cloudinary Overlay URL’).item.json.productName }}”,“type”: “string”},{“id”: “3f9cf549-5f8c-4f52-8c81-d594250a30e1”,“name”: “placeholderText”,“value”: “={{ $(‘Generate Cloudinary Overlay URL’).item.json.placeholderText }}”,“type”: “string”},{“id”: “4ac56f7e-fcd1-43f9-aac7-68aafce9148d”,“name”: “brand”,“value”: “={{ $(‘Generate Cloudinary Overlay URL’).item.json.brand }}”,“type”: “string”},{“id”: “5e2e97d0-fc2b-473e-80aa-db4d058e0598”,“name”: “logoUrl”,“value”: “={{ $(‘Generate Cloudinary Overlay URL’).item.json.logoUrl }}”,“type”: “string”}]},“includeOtherFields”: true,“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [4432,-272],“id”: “d61c8c18-cc5d-4d81-a627-9ee8d0b5fb1a”,“name”: “Set Final Cloudinary URL”},{“parameters”: {“select”: “channel”,“channelId”: {“__rl”: true,“value”: “C093U507YFL”,“mode”: “list”,“cachedResultName”: “askthedogsigner”},“text”: “==Your branded deck for {{$(‘Set Final Cloudinary URL’).item.json.brand}} is ready: {{$(‘Set presentationId’).item.json.presentationLink}}”,“otherOptions”: {}},“type”: “n8n-nodes-base.slack”,“typeVersion”: 2.3,“position”: [5984,-432],“id”: “09b1e443-9ed3-4707-ba24-18f2971c4d61”,“name”: “Send a message”,“webhookId”: “c7a69663-b7b3-4fa4-a906-df6bac6ec524”,“credentials”: {“slackApi”: {“id”: “a1LE2g7Ns8cSCVBC”,“name”: “Slack account 3”}}},{“parameters”: {“options”: {}},“type”: “n8n-nodes-base.splitInBatches”,“typeVersion”: 3,“position”: [5472,-448],“id”: “59275925-451a-4758-a4b4-bf66adc4a81f”,“name”: “Loop Over Items”},{“parameters”: {“assignments”: {“assignments”: [{“id”: “3a4a487e-848f-4e1d-8fa1-aa4e22ba08e1”,“name”: “presentationId”,“value”: “={{ $(‘Copy file’).item.json.id }}”,“type”: “string”},{“id”: “ebaed7d9-9284-4180-bb4f-6d35306d416e”,“name”: “presentationLink”,“value”: “={{ $(‘HTTP Request’).item.json.webViewLink || $(‘Copy file’).item.json.webViewLink }}”,“type”: “string”}]},“includeOtherFields”: true,“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [1888,0],“id”: “f3c7dec4-c743-4d99-ac6e-e49ec81c300b”,“name”: “Set presentationId”,“executeOnce”: true},{“parameters”: {“mode”: “combineBySql”,“query”: "SELECT \n i1.,\n i2.presentationId,\n i2.presentationLink\nFROM input1 i1\nCROSS JOIN input2 i2”,“options”: {}},“type”: “n8n-nodes-base.merge”,“typeVersion”: 3.2,“position”: [4944,-160],“id”: “4c472704-9187-483d-9d5b-bb22a05b3b35”,“name”: “Merge”},{“parameters”: {“assignments”: {“assignments”: [{“id”: “f5252c0c-5cc5-4c07-a3bb-a23d73592fea”,“name”: “placeholderImageUrl”,“value”: “={{ ‘https://res.cloudinary.com/dedfpdqfm/image/upload/brand_deck_slides/’ + $json.placeholderText + ‘.png’ }}”,“type”: “string”}]},“includeOtherFields”: true,“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [2416,320],“id”: “56139379-8353-4ead-a134-1814034453cd”,“name”: “Build Placeholder URL”},{“parameters”: {“fields”: {“values”: [{“name”: “placementJson”,“stringValue”: “={{ $json.output }}”}]},“options”: {}},“id”: “86a19d83-9a77-4c69-949d-74464b509732”,“name”: “Set placementJson”,“type”: “n8n-nodes-base.set”,“typeVersion”: 3,“position”: [3168,0]},{“parameters”: {“url”: “=https://www.googleapis.com/drive/v3/files/{{$(‘Copy file’).item.json.id}}?fields=webViewLink,name&supportsAllDrives=true”,“authentication”: “predefinedCredentialType”,“nodeCredentialType”: “googleDriveOAuth2Api”,“options”: {}},“type”: “n8n-nodes-base.httpRequest”,“typeVersion”: 4.2,“position”: [1264,0],“id”: “a2aacf40-1df3-4b2f-9761-39e8b94d7b45”,“name”: “HTTP Request”,“credentials”: {“googleDriveOAuth2Api”: {“id”: “bqn1L7sY8Oxvs53y”,“name”: “Google Drive account”}}},{“parameters”: {“operation”: “share”,“fileId”: {“__rl”: true,“value”: “={{ $(‘Copy file’).item.json.id }}”,“mode”: “id”},“permissionsUi”: {“permissionsValues”: {“role”: “reader”,“type”: “anyone”,“allowFileDiscovery”: “={{ false }}”}},“options”: {}},“type”: “n8n-nodes-base.googleDrive”,“typeVersion”: 3,“position”: [1056,0],“id”: “f0534031-fa2d-4d74-9590-3b7f5970c3b2”,“name”: “Share file”,“credentials”: {“googleDriveOAuth2Api”: {“id”: “bqn1L7sY8Oxvs53y”,“name”: “Google Drive account”}}},{“parameters”: {“method”: “POST”,“url”: “https://api.cloudinary.com/v1_1/dedfpdqfm/image/upload”,“sendBody”: true,“contentType”: “multipart-form-data”,“bodyParameters”: {“parameters”: [{“name”: “upload_preset”,“value”: “slides_store”},{“name”: “file”,“value”: “{{ $json.overlayUrl }}”},{“name”: “public_id”,“value”: “={{ ‘branded/’ + $json.brand + ‘/’ + $json.productName + ‘-’ + $json.counter }}”}]},“options”: {}},“type”: “n8n-nodes-base.httpRequest”,“typeVersion”: 4.2,“position”: [4064,-288],“id”: “6ca124d4-a968-4e9a-8049-3c5aa4d8ea9d”,“name”: “HTTP Request1”}],“connections”: {“Webhook”: {“main”: [[{“node”: “Edit Fields”,“type”: “main”,“index”: 0}]]},“Edit Fields”: {“main”: [[{“node”: “Get Brand Row”,“type”: “main”,“index”: 0}]]},“Copy file”: {“main”: [[{“node”: “Share file”,“type”: “main”,“index”: 0}]]},“Set”: {“main”: [[{“node”: “Copy file”,“type”: “main”,“index”: 0}]]},“Get Brand Row”: {“main”: [[{“node”: “Set”,“type”: “main”,“index”: 0},{“node”: “Split Products”,“type”: “main”,“index”: 0}]]},“Split Products”: {“main”: [[{“node”: “Build Placeholder URL”,“type”: “main”,“index”: 0}]]},“Prepare for Slides”: {“main”: [[{“node”: “Loop Over Items”,“type”: “main”,“index”: 0}]]},“Insert into Slides”: {“main”: [[{“node”: “Loop Over Items”,“type”: “main”,“index”: 0}]]},“Extract Prompt”: {“main”: [[{“node”: “Set placementJson”,“type”: “main”,“index”: 0}]]},“AI Agent”: {“main”: [[{“node”: “Extract Prompt”,“type”: “main”,“index”: 0}]]},“OpenAI Chat Model”: {“ai_languageModel”: [[{“node”: “AI Agent”,“type”: “ai_languageModel”,“index”: 0}]]},“Set Clean Image Payload”: {“main”: [[{“node”: “Generate Cloudinary Overlay URL”,“type”: “main”,“index”: 0}]]},“Generate Cloudinary Overlay URL”: {“main”: [[{“node”: “HTTP Request1”,“type”: “main”,“index”: 0},{“node”: “Set Final Cloudinary URL”,“type”: “main”,“index”: 0}]]},“Set Final Cloudinary URL”: {“main”: [[{“node”: “Merge”,“type”: “main”,“index”: 0}]]},“Loop Over Items”: {“main”: [[{“node”: “Send a message”,“type”: “main”,“index”: 0}],[{“node”: “Insert into Slides”,“type”: “main”,“index”: 0}]]},“Set presentationId”: {“main”: [[{“node”: “Merge”,“type”: “main”,“index”: 1}]]},“Merge”: {“main”: [[{“node”: “Prepare for Slides”,“type”: “main”,“index”: 0}]]},“Build Placeholder URL”: {“main”: [[{“node”: “AI Agent”,“type”: “main”,“index”: 0}]]},“Set placementJson”: {“main”: [[{“node”: “Set Clean Image Payload”,“type”: “main”,“index”: 0}]]},“HTTP Request”: {“main”: [[{“node”: “Set presentationId”,“type”: “main”,“index”: 0}]]},“Share file”: {“main”: [[{“node”: “HTTP Request”,“type”: “main”,“index”: 0}]]},“HTTP Request1”: {“main”: [[{“node”: “Set Final Cloudinary URL”,“type”: “main”,“index”: 0}]]}},“pinData”: {“Webhook”: [{“headers”: {“host”: “dlab2b.app.n8n.cloud”,“user-agent”: “Slackbot 1.0 (+https://api.slack.com/robots)”,“content-length”: “438”,“accept”: “application/json,/”,“accept-encoding”: “gzip, br”,“cdn-loop”: “cloudflare; loops=1; subreqs=1”,“cf-connecting-ip”: “3.84.101.57”,“cf-ew-via”: “15”,“cf-ipcountry”: “US”,“cf-ray”: “96da3e4f87f88029-IAD”,“cf-visitor”: “{“scheme”:“https”}”,“cf-worker”: “n8n.cloud”,“content-type”: “application/x-www-form-urlencoded”,“x-forwarded-for”: “3.84.101.57, 172.68.15.147”,“x-forwarded-host”: “dlab2b.app.n8n.cloud”,“x-forwarded-port”: “443”,“x-forwarded-proto”: “https”,“x-forwarded-server”: “traefik-prod-users-gwc-56-6f4b847c49-t2pzn”,“x-is-trusted”: “yes”,“x-real-ip”: “3.84.101.57”,“x-slack-request-timestamp”: “1754941631”,“x-slack-signature”: “v0=7c0fe015b3ceffcee3b34956acaf11ad412ac37ff4ef9e294075aac28620a59a”},“params”: {},“query”: {},“body”: {“token”: “prStzRtcQydpd5XmHN4zm6hx”,“team_id”: “T093C2KDF1D”,“team_domain”: “someonesomewh-ip81027”,“channel_id”: “C093U507YFL”,“channel_name”: “askthedogsigner”,“user_id”: “U093T8MAL3W”,“user_name”: “daniel”,“command”: “/branded”,“text”: “adidas”,“api_app_id”: “A095JCZ9A22”,“is_enterprise_install”: “false”,“response_url”: “,“trigger_id”: “9330878172851.9114087457047.d7f0aabe1d8de93d4a7ad848c84edc5c”},“webhookUrl”: “https://dlab2b.app.n8n.cloud/webhook/001ab407-3fb7-4ef3-bf41-5cc806e96948”,“executionMode”: “production”}]},“meta”: {“templateCredsSetupCompleted”: true,“instanceId”: “734a4659add086cce1bb58a98b191aacab526b5d523ff7209e48ae9600c58dcd”}}