{"workflow":{"id":13605,"name":"Create AI social media carousels from Google Sheet and auto-publish with Blotato","views":308,"recentViews":1,"totalViews":308,"createdAt":"2026-02-22T22:22:31.784Z","description":"🚀 Create Pro-Level Social Media Carousels & Auto-Publish with Blotato\n======================================================================\n\n### By @nocodehack\n\n* * *\n\nWho is this for?\n----------------\n\nThis workflow is built for e-commerce brands, social media managers, marketing agencies, dropshippers, content creators, and automation builders who need to produce professional carousel posts at scale. Perfect for anyone running product marketing, brand campaigns, multi-platform social media, affiliate content, or any business that publishes carousel posts regularly and wants to eliminate design costs entirely.\n\n* * *\n\nWhat problem is this workflow solving? / Use case\n-------------------------------------------------\n\nCreating professional carousel posts is:\n\n*   **Slow** — designing even one carousel takes 30-60 minutes manually\n*   **Expensive** — Fiverr/Upwork designers charge $50-100 per carousel\n*   **Inconsistent** — AI-generated slides never visually match each other\n*   **Unscalable** — managing multiple brands multiplies every problem\n*   **Tedious** — exporting, uploading, scheduling, and publishing is repetitive busywork\n\nThis workflow solves:\n\n*   ❌ Manual carousel design (Canva, Photoshop, Figma)\n*   ❌ Paying designers per post\n*   ❌ AI images that look obviously AI-generated\n*   ❌ Visually inconsistent slides that don't match\n*   ❌ Manual copywriting for captions and hashtags\n*   ❌ Manual uploading and publishing to each platform\n*   ❌ Managing multiple brands with different visual identities\n\nIt turns one Google Sheet row into a fully designed, published carousel — across Instagram, Facebook, and X — for approximately **5 cents**.\n\n* * *\n\nWhat this workflow does\n-----------------------\n\nThis automation system acts as a complete AI-powered carousel design studio and publishing pipeline.\n\n### Step-by-step pipeline:\n\n#### Step 1 — Data Pipeline (Google Sheet)\n\n*   Runs on a schedule (configurable interval)\n*   Pulls the next unprocessed row from Google Sheets\n*   Each row = one carousel (one brand, one product, one post)\n*   Marks the row as \"Processing\" to prevent duplicate execution\n*   Checks if product description and images are provided — if missing, auto-scrapes from the product URL using Jina.ai (free, no account needed)\n*   Merges all data into one clean payload for the AI\n\n#### Step 2 — AI Creative Direction (Claude)\n\n*   Sends all product data (description, images as base64, brand logo, creative specifications) to Claude via the Anthropic API\n*   Claude acts as an executive creative director — not just generating content, but building a complete visual identity first:\n    *   Color palette (2-3 hex colors)\n    *   Typography style and hierarchy\n    *   Lighting direction and mood\n    *   Signature design element\n    *   Background texture concept\n*   Then generates for each slide: headline, body copy, layout approach, and a detailed 80+ word image prompt\n*   A 2000-word system prompt with banned elements list eliminates the generic AI look (no waves, no scattered leaves, no flat backgrounds, no Canva-style templates)\n*   Every image prompt ends with a negative prompt / AVOID block — same concept as Stable Diffusion negative prompts, applied to Gemini\n*   Output is structured JSON via a parser — no freeform text that could break the pipeline\n*   Also generates the Instagram caption and hashtags\n\n#### Step 3 — Image Generation with Visual Consistency Loop\n\n*   **This is the core innovation of the workflow**\n*   Slides are generated sequentially, NOT in parallel — this is critical\n*   For slide 1: Gemini generates the image from the prompt + product reference images\n*   For slide 2+: The workflow fetches all previously generated slides, converts them to base64, and attaches them as reference images alongside the current prompt\n*   The text prompt explicitly instructs: \"Match the exact typography, color palette, and lighting from the attached previous slides\"\n*   This creates a double enforcement system — visual reference + written instruction\n*   Result: every slide in the carousel shares the same visual identity without using templates or presets\n*   Images are generated via NanoBanana Pro (Gemini image generation API)\n*   Each generated slide is uploaded to Blotato media storage and saved to a global memory array for the next iteration\n*   Uses `$getWorkflowStaticData('global')` to persist slide URLs across loop iterations\n\n#### Step 4 — Publishing & Status Update\n\n*   Collects all uploaded slide URLs in correct order\n*   Reads the \"Socials\" field from the Google Sheet (comma-separated: instagram, facebook, x)\n*   Routes to the correct platform via a Switch node\n*   Publishes via Blotato API — supports immediate posting or scheduled posting (ISO 8601 format)\n*   One row can publish to all three platforms simultaneously\n*   Updates the Google Sheet row: Status → \"Published\" + direct Post URL\n*   If anything breaks: Status → \"Failed\" with error details\n\n**➡️ Result:** One Google Sheet row in, one fully designed and published multi-platform carousel out. ~5 cents. ~5 minutes.\n\n* * *\n\nSetup\n-----\n\n### Required accounts & API keys:\n\n*   **Google Sheets** — read/write access to your content spreadsheet\n*   **[Anthropic](https://anthropic.com)** — Claude API key (creative direction + copywriting)\n*   **[Google AI / Gemini](https://ai.google.dev)** — API key for image generation via NanoBanana Pro ($300 free credit per new Gmail)\n*   **[Blotato](https://blotato.com/?ref=nocodehack)** — API key for media upload + multi-platform publishing\n*   **[Jina.ai](https://jina.ai)** — free web scraping, no account required (10M tokens free)\n\n### Google Sheet structure:\n\nColumn\n\nDescription\n\nBrand Logo URL\n\nDirect link to your brand logo — placed on every slide automatically\n\nProduct URL\n\nLink to product page — used for auto-scraping if description/images are empty\n\nProduct Description\n\nOptional — write it yourself for best results, or leave blank to auto-scrape\n\nProduct Images URL\n\nDirect links to product photos (comma-separated for multiple)\n\nSpecification\n\nCreative direction hint (e.g. \"dark cinematic luxury\" or \"bright playful minimal\") — leave empty for AI to decide\n\nPost Date\n\nYYYY-MM-DD format — workflow only picks up rows matching today's date\n\nPost Hour\n\n`now` for immediate publish, or `14:00` / `2pm` for scheduled\n\nSocials\n\nComma-separated platforms: `instagram`, `facebook`, `x`\n\nStatus\n\nLeave empty — auto-filled: Processing → Published / Failed\n\nPost URL\n\nLeave empty — auto-filled with direct link to live post\n\n### Configuration steps:\n\n1.  Import the workflow JSON into n8n\n2.  Add all required API credentials in n8n's credential manager\n3.  Create your Google Sheet using the template provided (link in resources)\n4.  Set your Blotato profile IDs in each publishing node (one per platform)\n5.  Map platform outputs in the Switch node\n6.  Verify the Gemini image generation endpoint in the NanoBanana Pro node\n7.  Test with one row before activating production mode\n\n### Recommended hosting:\n\nn8n is free and open source but needs a server. A VPS with at least 2GB RAM handles image generation and multiple API calls without issues. The workflow runs 24/7 on schedule.\n\n* * *\n\nHow to customize\n----------------\n\n*   **Change AI model:** Swap Claude for GPT-4o or Gemini in the LLM Chain node — the structured output parser works with any model\n*   **Change slide count:** Edit the system prompt and user prompt (currently locked to 3 slides)\n*   **Change visual style:** Edit the creative direction in the system prompt — modify banned elements, change composition approaches, adjust the quality standard\n*   **Add platforms:** Add new outputs to the Switch node + new Blotato publish nodes (Blotato supports TikTok, LinkedIn, Pinterest, Threads, YouTube, Bluesky)\n*   **Add approval step:** Insert a Wait node before publishing to manually review before posting\n*   **Change image hosting:** Swap Blotato Upload for Cloudinary or any S3-compatible storage\n*   **Change scraper:** Swap Jina.ai for any other web scraping tool\n*   **Adjust scheduling:** Modify the Schedule Trigger interval and use the Post Hour column for per-post timing\n*   **Multi-brand setup:** Each row can have a different brand logo and creative specification — the AI generates a fresh visual identity per row\n\n* * *\n\nCost breakdown per carousel (approx.)\n-------------------------------------\n\nComponent\n\nCost\n\nClaude (creative direction + copy, ~8K tokens)\n\n~$0.02\n\nGemini (3 slide images via NanoBanana Pro)\n\n~$0.03\n\nJina.ai (web scraping)\n\nFree\n\nBlotato (publishing)\n\nPer plan\n\n**Total per carousel**\n\n**~$0.05**\n\nCompare: Fiverr/Upwork designers charge $50-100 per carousel post. This workflow does it for 5 cents.\n\nGemini offers $300 free credit per new Gmail account — enough for thousands of carousels before spending anything.\n\n* * *\n\nExpected outcome\n----------------\n\nYou get a fully automated carousel production system that can:\n\n*   Generate agency-quality carousel designs from a spreadsheet\n*   Maintain visual consistency across all slides without templates\n*   Handle multiple brands with completely different visual identities\n*   Publish to Instagram, Facebook, and X simultaneously\n*   Schedule content weeks in advance\n*   Scale from 1 carousel/day to dozens without additional effort\n*   Eliminate design costs almost entirely\n\n* * *\n\nTypical use cases\n-----------------\n\n*   E-commerce product marketing (daily product carousels)\n*   Brand awareness campaigns across multiple platforms\n*   Affiliate marketing content at scale\n*   Social media agency client deliverables\n*   Dropshipping product promotion\n*   Multi-brand social media management\n*   Content calendar automation\n*   A/B testing different creative directions for the same product\n\n* * *\n\nWatch the full step-by-step walkthrough.\n\n[🎥 Video Tutorial](https://youtu.be/A_QT-9qUkxc)\n-------------------------------------------------\n\n![](https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/Design_sans_titre_5_703bef59c9.png)\n\n* * *\n\n👋 Need help or want to customize?\n----------------------------------\n\n📩 Contact: [LinkedIn](https://www.linkedin.com/in/ing-seif/)\n\n📺 YouTube: [@nocodehack](https://youtube.com/@nocodehack)\n\n🌐 Resources & Downloads: [nocodehack.io](https://nocodehack.io/)","workflow":{"id":"0ar5o4lW1fUpHueMAC3PL","meta":{"instanceId":"cd8ff33dde04e389346982f06c7f2feed2561d3ea2af8c05544f44d32c7108d4","templateCredsSetupCompleted":true},"name":"Create Pro-Level Social Media Carousels & Auto-Publish with Blotato","tags":[{"id":"8PabTC3sQ4CJ83aT","name":"nano-banana-pro","createdAt":"2025-12-12T15:41:55.479Z","updatedAt":"2025-12-12T15:41:55.479Z"},{"id":"lcp924nVN9Y3IFFq","name":"Blotato","createdAt":"2026-02-21T01:07:22.668Z","updatedAt":"2026-02-21T01:07:22.668Z"}],"nodes":[{"id":"a4153a3e-38e5-40ba-bcbb-caed0ab0cd70","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-1088,-32],"parameters":{"rule":{"interval":[{"field":"minutes","minutesInterval":30}]}},"typeVersion":1.3},{"id":"79710fea-ada9-47d9-a3c7-eb408d43e3fe","name":"Get Rows","type":"n8n-nodes-base.googleSheets","position":[-880,-32],"parameters":{"options":{"returnFirstMatch":true},"filtersUI":{"values":[{"lookupColumn":"Status"},{"lookupValue":"={{ $now.toFormat('yyyy-MM-dd') }}","lookupColumn":"Post Date"}]},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1A9cV_0pFBGXpQtoWQaKSwFCIEIZhaxROn8bp6KiPmeI/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1A9cV_0pFBGXpQtoWQaKSwFCIEIZhaxROn8bp6KiPmeI","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1A9cV_0pFBGXpQtoWQaKSwFCIEIZhaxROn8bp6KiPmeI/edit?usp=drivesdk","cachedResultName":"carousel workflow"}},"credentials":{"googleSheetsOAuth2Api":{"id":"pA7xPJKo8LiFC9Zh","name":"Google Sheets account 2"}},"typeVersion":4.7},{"id":"5ad3bd61-8b15-4511-8072-99ef2f582736","name":"Set Processing","type":"n8n-nodes-base.googleSheets","position":[-656,-32],"parameters":{"columns":{"value":{"Status":"Processing","row_number":"={{ $json.row_number }}"},"schema":[{"id":"Brand Logo URL","type":"string","display":true,"required":false,"displayName":"Brand Logo URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Product URL","type":"string","display":true,"required":false,"displayName":"Product URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Product Description","type":"string","display":true,"required":false,"displayName":"Product Description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Product Image(s) URL","type":"string","display":true,"required":false,"displayName":"Product Image(s) URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Specification","type":"string","display":true,"required":false,"displayName":"Specification","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Post Date","type":"string","display":true,"required":false,"displayName":"Post Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Post Hour","type":"string","display":true,"required":false,"displayName":"Post Hour","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Socials","type":"string","display":true,"required":false,"displayName":"Socials","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Status","type":"string","display":true,"removed":false,"required":false,"displayName":"Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Post URL","type":"string","display":true,"required":false,"displayName":"Post URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"number","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["row_number"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1A9cV_0pFBGXpQtoWQaKSwFCIEIZhaxROn8bp6KiPmeI/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1A9cV_0pFBGXpQtoWQaKSwFCIEIZhaxROn8bp6KiPmeI","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1A9cV_0pFBGXpQtoWQaKSwFCIEIZhaxROn8bp6KiPmeI/edit?usp=drivesdk","cachedResultName":"carousel workflow"}},"credentials":{"googleSheetsOAuth2Api":{"id":"pA7xPJKo8LiFC9Zh","name":"Google Sheets account 2"}},"typeVersion":4.7},{"id":"11ba211b-969d-4c66-a03f-def1c1f5fde4","name":"Has Description?","type":"n8n-nodes-base.if","position":[-432,-32],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"or","conditions":[{"id":"0b449348-d4dc-4ae5-85bc-0d01aa22f91d","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $('Get Rows').item.json['Product Description'] }}","rightValue":"={{ $('Get Rows').item.json['Product Image(s) URL'] }}"},{"id":"2232cb69-fd96-4287-b2cc-d41f552732d6","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $('Get Rows').item.json['Product Image(s) URL'] }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.3},{"id":"7d8276ec-f06f-4e64-90ea-510e3ef189bd","name":"Merge Data","type":"n8n-nodes-base.code","position":[0,48],"parameters":{"jsCode":"const sheet = $('Get Rows').first().json;\nlet scrapedDesc = '';\nlet scrapedImage = '';\n\ntry {\n  const scraped = $('Scrape Product').first().json;\n  const meta = scraped.metadata || {};\n  \n  // Description fallback chain\n  scrapedDesc = meta['og:description'] \n    || meta['twitter:description'] \n    || meta['description'] \n    || '';\n\n  // Image fallback chain — try every possible metadata field\n  const imageCandidate = meta['og:image:secure_url']\n    || meta['og:image']\n    || meta['og:image:url']\n    || meta['twitter:image']\n    || meta['twitter:image:src']\n    || meta['image']\n    || meta['thumbnail']\n    || meta['sailthru.image.full']\n    || meta['msapplication-TileImage']\n    || '';\n\n  // If metadata failed, try to find image URLs in the raw scraped content\n  if (!imageCandidate && scraped.content) {\n    const imgRegex = /https?:\\/\\/[^\\s\"'<>]+?\\.(jpg|jpeg|png|webp|avif)(\\?[^\\s\"'<>]*)?/gi;\n    const matches = scraped.content.match(imgRegex);\n    if (matches && matches.length > 0) {\n      // Filter out tiny images (icons, tracking pixels) by looking for size hints\n      const goodImages = matches.filter(url => {\n        const lower = url.toLowerCase();\n        return !lower.includes('favicon') \n          && !lower.includes('icon') \n          && !lower.includes('logo')\n          && !lower.includes('pixel')\n          && !lower.includes('badge')\n          && !lower.includes('1x1');\n      });\n      scrapedImage = goodImages[0] || matches[0] || '';\n    }\n  } else {\n    scrapedImage = imageCandidate;\n  }\n\n  // Fix protocol-relative URLs (starting with //)\n  if (scrapedImage && scrapedImage.startsWith('//')) {\n    scrapedImage = 'https:' + scrapedImage;\n  }\n\n  // Fix relative URLs (starting with /)\n  if (scrapedImage && scrapedImage.startsWith('/') && !scrapedImage.startsWith('//')) {\n    const productURL = sheet['Product URL']?.trim() || '';\n    try {\n      const base = new URL(productURL);\n      scrapedImage = base.origin + scrapedImage;\n    } catch (e) {}\n  }\n\n  // Strip whitespace and quotes that sometimes wrap URLs\n  scrapedImage = scrapedImage.replace(/^[\"'\\s]+|[\"'\\s]+$/g, '');\n\n} catch (e) {}\n\nconst description = sheet['Product Description']?.trim() || scrapedDesc;\nconst imagesRaw = sheet['Product Image(s) URL']?.trim() || scrapedImage;\n\nconst images = imagesRaw\n  .split(/,(?=https?:\\/\\/)/)\n  .map(url => url.trim())\n  .filter(Boolean);\n\nreturn [{\n  json: {\n    rowNumber: sheet['row_number'],\n    brandLogo: sheet['Brand Logo URL']?.trim() || '',\n    productURL: sheet['Product URL']?.trim() || '',\n    productDescription: description,\n    productImages: images,\n    specification: sheet['Specification']?.trim() || '',\n    postDate: sheet['Post Date']?.trim() || '',\n    postHour: sheet['Post Hour']?.trim() || '',\n    socials: sheet['Socials'].split(',').map(s => s.trim().toLowerCase()),\n  }\n}];"},"typeVersion":2},{"id":"b61b39a2-4268-4b68-b3ba-1d0cb761cfe7","name":"Scrape Product","type":"n8n-nodes-base.jinaAi","position":[-208,-112],"parameters":{"url":"={{ $('Get Rows').item.json['Product URL'] }}","options":{"outputFormat":"","enableImageCaptioning":true},"requestOptions":{}},"credentials":{"jinaAiApi":{"id":"vndL9NFYca67M65L","name":"Jina AI account"}},"typeVersion":1},{"id":"de8f22e7-80a3-42a7-b17f-af8517ec6dee","name":"Parse AI Response","type":"n8n-nodes-base.code","position":[-688,400],"parameters":{"jsCode":"const parsed = $input.first().json.output;\n\nreturn [{\n  json: {\n    caption: parsed.caption,\n    hashtags: parsed.hashtags,\n    slides: parsed.slides,\n    productImages: $('Merge Data').first().json.productImages,\n    brandLogo: $('Merge Data').first().json.brandLogo,\n    rowNumber: $('Merge Data').first().json.rowNumber,\n    socials: $('Merge Data').first().json.socials,\n  }\n}];"},"typeVersion":2},{"id":"3facdfe4-e477-465b-8ecd-218e36f7dd25","name":"Fetch Images to Base64","type":"n8n-nodes-base.code","position":[-464,400],"parameters":{"jsCode":"const data = $input.first().json;\n\nasync function toBase64(url) {\n  if (!url) return null;\n  const response = await this.helpers.httpRequest({\n    method: 'GET',\n    url: url,\n    encoding: 'arraybuffer',\n    returnFullResponse: true,\n  });\n  return Buffer.from(response.body).toString('base64');\n}\n\nconst productImagesBase64 = await Promise.all(\n  data.productImages.map(url => toBase64(url))\n);\n\nconst brandLogoBase64 = await toBase64(data.brandLogo);\n\nreturn [{\n  json: {\n    ...data,\n    productImagesBase64,\n    brandLogoBase64,\n  }\n}];"},"typeVersion":2},{"id":"d9693b4e-6bca-406f-a33e-9e9f734d1f81","name":"Prepare Nano Banana Items","type":"n8n-nodes-base.code","position":[-240,400],"parameters":{"jsCode":"const data = $input.first().json;\nconst items = [];\n\nconst imageCount = data.productImagesBase64.filter(Boolean).length;\n\nfor (const slide of data.slides) {\n  const parts = [];\n\n  // Build prompt with image awareness\n  let prompt = slide.imagePrompt;\n\n  if (imageCount > 1) {\n    prompt += `\\n\\nPRODUCT IMAGES: You are provided ${imageCount} different product images (different sizes/angles of the same product). Use ALL of them in the composition — feature the main one as the hero and use the others as supporting elements at different scales or angles to create depth and variety. Do not ignore any provided product image.`;\n  }\n\n  parts.push({ text: prompt });\n\n  // Add product images with labels\n  for (let i = 0; i < data.productImagesBase64.length; i++) {\n    if (data.productImagesBase64[i]) {\n      parts.push({\n        inline_data: {\n          mime_type: 'image/jpeg',\n          data: data.productImagesBase64[i]\n        }\n      });\n    }\n  }\n\n  // Add brand logo\n  if (data.brandLogoBase64) {\n    parts.push({\n      inline_data: {\n        mime_type: 'image/png',\n        data: data.brandLogoBase64\n      }\n    });\n  }\n\n  items.push({\n    json: {\n      meta: {\n        slideNumber: slide.slideNumber,\n        headline: slide.headline,\n        body: slide.body,\n        caption: data.caption,\n        hashtags: data.hashtags,\n        rowNumber: data.rowNumber,\n        socials: data.socials,\n      },\n      parts,\n      generationConfig: {\n        responseModalities: [\"TEXT\", \"IMAGE\"],\n        imageConfig: {\n          aspectRatio: \"1:1\",\n          imageSize: \"2K\"\n        }\n      }\n    }\n  });\n}\n\nreturn items;"},"typeVersion":2},{"id":"8fa5c209-84fd-43fd-b9d8-06b6b32625b6","name":"Edit Fields1","type":"n8n-nodes-base.set","position":[-528,848],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b5b58c86-29ff-4815-84dd-e54331612abb","name":"data","type":"string","value":"={{ $json.candidates[0].content.parts[0].inlineData.data }}"}]}},"typeVersion":3.4},{"id":"01127227-53f3-433f-808b-7bc8a5045910","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[-1200,848],"parameters":{"options":{}},"typeVersion":3},{"id":"2e051a6b-d4bf-4471-8e62-b7b73ae55e5a","name":"Nano Banana Pro","type":"n8n-nodes-base.httpRequest","position":[-752,848],"parameters":{"url":"https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent","method":"POST","options":{"timeout":1000000},"jsonBody":"={{ { contents: $json.contents, generationConfig: $json.generationConfig } }}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"googlePalmApi"},"credentials":{"googlePalmApi":{"id":"3Shkq3Ifg4868YQ5","name":"Nano Banana Pro"}},"retryOnFail":true,"typeVersion":4.3},{"id":"ad05a6ab-5efc-46a0-a551-a906724800d2","name":"Add Previous Slides","type":"n8n-nodes-base.code","position":[-976,848],"parameters":{"jsCode":"const item = $input.first().json;\nconst slideNumber = item.meta.slideNumber;\nconst staticData = $getWorkflowStaticData('global');\n\nif (slideNumber === 1) {\n  staticData.slideUrls = [];\n}\n\nconst urls = staticData.slideUrls || [];\nconst basePrompt = item.parts[0].text;\n\nlet finalPrompt;\n\nconst renderingBlock = [\n  'RENDERING INSTRUCTIONS:',\n  '- The provided product photograph must be used as the MAIN SUBJECT.',\n  '- The product must fill at least 50% of the frame — LARGE and dominant.',\n  '- The provided brand logo must appear in the top-right or top-left corner at a tasteful size.',\n  '- The product must be the BRIGHTEST and SHARPEST element in the entire frame.',\n  '- Product shadow must be SOFT and SUBTLE — gentle contact shadow only. No heavy dark cast shadows.',\n  '- Background must have DEPTH and TEXTURE — never plain flat beige, linen, or cream.',\n  '- Typography must be LARGE and BOLD — headlines should fill at least 30% of the frame width.',\n  '- All text described in the prompt must be rendered ON the image with the exact words specified.',\n  '- Output must be exactly 1:1 square format (1024x1024).',\n  '- Quality standard: this must look like a paid campaign from a luxury brand.',\n  '- AVOID: organic wave shapes, scattered leaves, botanical decorations, heavy dark shadows, plain linen or beige textures, small product placement, soft pastel washes, Canva-style templates, decorative borders, blob shapes, flat backgrounds, competing fonts, purely decorative elements'\n].join('\\n');\n\nconst consistencyBlock = [\n  'CRITICAL - VISUAL CONSISTENCY:',\n  '- The PREVIOUS SLIDES from this carousel are attached as reference images.',\n  '- You MUST match their exact color palette, typography style, font weight, lighting direction, lighting color temperature, background texture family, and signature design element.',\n  '- The ONLY things that should change are: product position, product scale, text placement, composition layout, and background tone variation.',\n  '- If the previous slides have a specific text rendering style, you MUST replicate that exact same style.',\n  '- This slide must look like it belongs to the SAME campaign.'\n].join('\\n');\n\nif (slideNumber === 1) {\n  finalPrompt = basePrompt + '\\n\\n' + renderingBlock;\n} else {\n  finalPrompt = basePrompt + '\\n\\n' + renderingBlock + '\\n\\n' + consistencyBlock;\n}\n\nconst parts = [{ text: finalPrompt }];\n\nfor (let i = 1; i < item.parts.length; i++) {\n  parts.push(item.parts[i]);\n}\n\nfor (const url of urls) {\n  const response = await this.helpers.httpRequest({\n    method: 'GET',\n    url: url,\n    encoding: 'arraybuffer',\n    returnFullResponse: true,\n  });\n  const base64 = Buffer.from(response.body).toString('base64');\n  parts.push({\n    inline_data: {\n      mime_type: 'image/jpeg',\n      data: base64\n    }\n  });\n}\n\nreturn [{\n  json: {\n    meta: item.meta,\n    contents: [{ parts: parts }],\n    generationConfig: item.generationConfig,\n    _debug: {\n      slideNumber: slideNumber,\n      previousUrlsCount: urls.length,\n      previousUrls: urls.slice(),\n      totalParts: parts.length\n    }\n  }\n}];"},"typeVersion":2},{"id":"31253ae7-1329-4efe-8024-567ff4a00480","name":"Save Slide to Memory","type":"n8n-nodes-base.code","position":[144,928],"parameters":{"jsCode":"const staticData = $getWorkflowStaticData('global');\n\nif (!staticData.slideUrls) {\n  staticData.slideUrls = [];\n}\n\nconst mediaUrl = $('Blotato Upload').first().json.url;\nstaticData.slideUrls.push(mediaUrl);\n\nreturn [{\n  json: {\n    meta: $('Add Previous Slides').first().json.meta,\n    mediaUrl: mediaUrl,\n    // DEBUG — remove after confirming\n    _debug: {\n      savedUrl: mediaUrl,\n      totalStoredUrls: staticData.slideUrls.length,\n      allStoredUrls: [...staticData.slideUrls],\n    }\n  }\n}];"},"typeVersion":2},{"id":"66385310-9796-4fcc-947e-16c6e076bd28","name":"Convert to File","type":"n8n-nodes-base.convertToFile","position":[-304,848],"parameters":{"options":{},"operation":"toBinary","sourceProperty":"data"},"typeVersion":1.1},{"id":"b4c16c23-a029-43a6-8406-22a166f2f07e","name":"Prepare Post Payload","type":"n8n-nodes-base.code","position":[-832,1488],"parameters":{"jsCode":"const items = $input.all();\nconst sheet = $('Get Rows').first().json;\n\nconst sorted = items.sort((a, b) =>\n  a.json.meta.slideNumber - b.json.meta.slideNumber\n);\n\nconst mediaUrls = sorted.map(item => item.json.mediaUrl);\nconst first = sorted[0].json.meta;\n\nconst postHour = sheet['Post Hour']?.toString().trim().toLowerCase();\nlet scheduledTime = '';\n\nif (postHour && postHour !== 'now') {\n  const today = new Date().toISOString().split('T')[0];\n  let hours = 0;\n  let minutes = 0;\n\n  if (postHour.includes('am') || postHour.includes('pm')) {\n    const isPM = postHour.includes('pm');\n    const cleaned = postHour.replace(/[ap]m/gi, '').trim();\n    const timeParts = cleaned.split(':');\n    hours = parseInt(timeParts[0]);\n    minutes = timeParts[1] ? parseInt(timeParts[1]) : 0;\n    if (isPM && hours !== 12) hours += 12;\n    if (!isPM && hours === 12) hours = 0;\n  } else if (postHour.includes(':')) {\n    const timeParts = postHour.split(':');\n    hours = parseInt(timeParts[0]);\n    minutes = parseInt(timeParts[1]);\n  } else {\n    hours = parseInt(postHour);\n  }\n\n  const hh = String(hours).padStart(2, '0');\n  const mm = String(minutes).padStart(2, '0');\n  scheduledTime = `${today}T${hh}:${mm}:00`;\n}\n\nreturn [{\n  json: {\n    mediaUrls: mediaUrls.join(','),\n    caption: `${first.caption} ${first.hashtags}`,\n    scheduledTime,\n    rowNumber: first.rowNumber,\n    socials: first.socials,\n  }\n}];"},"typeVersion":2},{"id":"6f956016-8ae7-4668-be08-f846612466cb","name":"Switch","type":"n8n-nodes-base.switch","position":[-608,1472],"parameters":{"rules":{"values":[{"outputKey":"instagram","conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"e59147c7-6c37-463d-8aab-7d7babda8831","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.socials.includes('instagram') }}","rightValue":""}]},"renameOutput":true},{"outputKey":"facebook","conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"a9951e3d-be9d-4c95-8829-c2d42238154c","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.socials.includes('facebook') }}","rightValue":""}]},"renameOutput":true},{"outputKey":"X","conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"2cd0c6b6-b1c6-482a-8299-88eaf64511c1","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.socials.includes('x') }}","rightValue":""}]},"renameOutput":true}]},"options":{"allMatchingOutputs":true},"looseTypeValidation":true},"typeVersion":3.4},{"id":"955c7268-fe99-4597-b1ad-37acd1b45843","name":"instagram","type":"@blotato/n8n-nodes-blotato.blotato","position":[-176,1344],"parameters":{"options":{"scheduledTime":"={{ $json.scheduledTime || '' }}"},"accountId":{"__rl":true,"mode":"list","value":"20209","cachedResultUrl":"https://backend.blotato.com/v2/accounts/20209","cachedResultName":"no_code_hack"},"postContentText":"={{ $json.caption }}","postContentMediaUrls":"={{ $json.mediaUrls.split(',') }}"},"credentials":{"blotatoApi":{"id":"D8Y5ELEOvK2IFUmF","name":"Blotato account"}},"typeVersion":2},{"id":"5e6ce38b-e062-4bb5-b0b9-a96e63d39c82","name":"facebook","type":"@blotato/n8n-nodes-blotato.blotato","position":[-176,1504],"parameters":{"options":{"scheduledTime":"={{ $json.scheduledTime || '' }}"},"platform":"facebook","accountId":{"__rl":true,"mode":"list","value":"13039","cachedResultUrl":"https://backend.blotato.com/v2/accounts/13039","cachedResultName":"Nicole Jacobsy"},"facebookPageId":{"__rl":true,"mode":"list","value":"703622779508585","cachedResultUrl":"https://backend.blotato.com/v2/accounts/13039/subaccounts/703622779508585","cachedResultName":"N8n connection"},"postContentText":"={{ $json.caption }}","postContentMediaUrls":"={{ $json.mediaUrls.split(',') }}"},"credentials":{"blotatoApi":{"id":"D8Y5ELEOvK2IFUmF","name":"Blotato account"}},"typeVersion":2},{"id":"d71e1d16-2031-4cc8-9f80-956ff6cc9f55","name":"X","type":"@blotato/n8n-nodes-blotato.blotato","position":[-176,1664],"parameters":{"options":{"scheduledTime":"={{ $json.scheduledTime || '' }}"},"platform":"twitter","accountId":{"__rl":true,"mode":"list","value":"9184","cachedResultUrl":"https://backend.blotato.com/v2/accounts/9184","cachedResultName":"seif_nocodehack"},"postContentText":"={{ $json.caption }}","postContentMediaUrls":"={{ $json.mediaUrls.split(',') }}"},"credentials":{"blotatoApi":{"id":"D8Y5ELEOvK2IFUmF","name":"Blotato account"}},"typeVersion":2},{"id":"3422245f-08a5-4b69-b52b-f5768840fa86","name":"Blotato Upload","type":"@blotato/n8n-nodes-blotato.blotato","position":[-80,848],"parameters":{"resource":"media","useBinaryData":true},"credentials":{"blotatoApi":{"id":"D8Y5ELEOvK2IFUmF","name":"Blotato account"}},"typeVersion":2},{"id":"fa650309-45ce-41b7-9987-67a0cbadd208","name":"Basic LLM Chain","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[-1040,400],"parameters":{"text":"=Create an Instagram carousel with EXACTLY 3 slides for this product.\n\nProduct Description: {{$json.productDescription}}\nSpecification/Theme: {{$json.specification || 'Clean, premium, lifestyle-focused'}}\n\n{{ $json.productImages.length > 1 ? 'This product has multiple images (different sizes/angles). Each slide should showcase different product images or combinations to create visual variety across the carousel. Mention in each imagePrompt which product images to feature.' : '' }}\n\nCREATIVE BRIEF:\n\nYou are designing a micro-campaign for this product. Not a social media post — a visual experience.\n\nStep 1: Study the product. Understand its personality, its audience, its emotional hook. What feeling does this product sell? Design for that feeling.\n\nStep 2: Architect the visual identity. Lock in your palette, typography, lighting, signature element, and texture BEFORE you write a single slide. This is your campaign's DNA — every slide inherits from it.\n\nStep 3: Design slide 1 as if it were a billboard on Times Square. The product must be the unmistakable hero — large, centered, dramatically lit. The headline must be bold enough to read from across a room. The composition must have depth, tension, and a reason to exist. This single frame must make someone stop scrolling and think \"what is this?\"\n\nStep 4: Slide 2 builds the story. Same DNA, completely different composition. Move the product. Move the text. Change everything about the spatial arrangement while keeping the visual identity locked.\n\nStep 5: Slide 3 is the CTA. Close the deal. Make them act. Same visual system, but the energy is now about urgency and action.\n\nMANDATORY CONSTRAINTS:\n- EXACTLY 3 slides — no more, no less\n- Product must be LARGE and HERO-POSITIONED in every slide (minimum 40-50% of frame)\n- Slide 1: product CENTER or CENTER-DOMINANT\n- Every slide must use a DIFFERENT layout and composition from the others\n- Typography must be a design element — not a label floating in space\n- Background must have physical texture and depth — no flat fills, no plain linen, no plain beige\n- No decorative filler whatsoever\n- Product shadows must be SOFT and SUBTLE only — no heavy dark cast shadows\n- Every imagePrompt must end with an AVOID block listing what NOT to generate\n- Every element in the frame must serve the composition\n\nFor slides 2 and 3: the previously generated slides will be attached as reference images. Match the visual identity exactly. Change only the composition and layout.\n\nDesign standard: Would this get featured on Behance? Would a creative director at a top agency sign off on this? If the answer is no, push harder.","batching":{},"messages":{"messageValues":[{"message":"You are the Executive Creative Director of a world-class visual design studio that produces editorial campaigns for brands like Aesop, Byredo, Le Labo, Glossier, and Apple. Your carousels have been featured in Communication Arts, It's Nice That, and Behance's top picks. You do not make social media posts — you make visual experiences that happen to live on Instagram.  YOUR DESIGN PHILOSOPHY: Every carousel is a micro-campaign. Slide 1 is a billboard. Slide 2 is a magazine spread. Slide 3 is the storefront window. Each frame must justify its existence — if a slide doesn't make someone's thumb pause, it doesn't ship.  YOU MUST GENERATE EXACTLY 3 SLIDES. No more. No less.  ═══════════════════════════════════════════ PHASE 1 — VISUAL IDENTITY (before writing ANY slide) ═══════════════════════════════════════════  Before generating a single slide, you must architect a complete visual identity for this product's carousel. Think of this as the brand guidelines for a one-off campaign:  1. COLOR SYSTEM    - Select exactly 2-3 hex colors    - One must be a dominant background tone (covers 60%+ of the canvas)    - One must be a high-contrast accent for typography    - Optional third as a subtle supporting tone    - Colors must feel intentional and premium — no random pastels, no generic gradients  2. TYPOGRAPHIC HIERARCHY    - Define a headline treatment: weight, case, tracking, and visual behavior      Example: \"Ultra-bold condensed sans-serif, all caps, -2% tracking, headlines scale to fill 40% of the frame width\"    - Define a body treatment: weight, case, style      Example: \"Light weight serif, sentence case, generous line height, set at 1/5 the headline size\"    - Typography must have PERSONALITY — it should feel like a deliberate creative choice, not a default font  3. LIGHTING BLUEPRINT    - Define one cinematic lighting setup that applies to the product across ALL slides    - Be specific: direction, quality, color temperature, shadow behavior      Example: \"Hard key light from 45 degrees upper-left, warm 3200K, creating a sharp diagonal shadow that falls to bottom-right. Soft fill from the right at 20% intensity to open up shadow detail. Subtle rim light on the product edge to separate it from the background\"    - CRITICAL: Product shadows must be SOFT and SUBTLE — a gentle contact shadow or soft diffused shadow only. Never a heavy, dark, dramatic cast shadow. The shadow should enhance realism, not dominate the composition    - The product must ALWAYS be the brightest, sharpest element in the frame  4. SIGNATURE DESIGN LANGUAGE    - Define ONE recurring design element that ties all slides together — this is NOT decoration, it is a design system component      Examples: \"A single thin geometric line that frames different parts of the composition in each slide\" / \"A bold diagonal color block that slices through each frame at a different angle\" / \"A halftone dot pattern that appears at different scales and positions\"    - This element must appear in every slide but NEVER in the same way twice  5. TEXTURE AND MATERIALITY    - Define the tactile quality of the backgrounds      Examples: \"Polished concrete with fine aggregate visible\" / \"Deep matte black with micro-noise texture\" / \"Brushed metal with directional grain\" / \"Raw plaster with subtle surface variation\"    - Backgrounds must feel PHYSICAL, not digital    - NEVER use plain linen, plain beige paper, or plain cream textures — these are generic and safe  Output the full visual identity as a \"visualSystem\" object AND paste it at the top of every imagePrompt.  ═══════════════════════════════════════════ PHASE 2 — SLIDE ARCHITECTURE (EXACTLY 3 SLIDES) ═══════════════════════════════════════════  SLIDE 1 — THE SCROLL STOPPER: This is your billboard. This is the frame that earns the swipe. It must be visually AGGRESSIVE.  Mandatory requirements for slide 1: - The product must occupy at least 50% of the frame — it is the undeniable hero - The product must be placed CENTER or CENTER-DOMINANT (not tucked to a side) - The headline must be MASSIVE — think 30-40% of the frame. It can overlap the product, sit behind it, wrap around it, or break across it. Typography is a DESIGN ELEMENT, not a label - The composition must have a clear focal hierarchy: product first, headline second, body text third - The background must have depth and dimension — a dramatic color with texture, not a flat fill - The overall mood must be cinematic — think the opening shot of a film, not a product listing photo  Creative concepts for slide 1 (pick one and commit fully): - CINEMATIC ISOLATION: Product on a deep textured background with dramatic directional light, massive headline text partially behind the product creating depth layers - TYPOGRAPHIC COLLISION: Oversized 3D headline text that physically interacts with the product — wrapping around it, shattered by it, growing out of it - BOLD SPLIT: Frame divided into two stark zones (e.g. dark/light, color/texture) with the product bridging both, creating visual tension - SUSPENDED DRAMA: Product floating with a subtle shadow below, surrounded by negative space, with bold text anchoring one edge — minimal but powerful - DECONSTRUCTED LAYOUT: Product at an unexpected angle with graphic shapes, lines, and text blocks arranged in an asymmetric editorial grid  SLIDE 2 — THE STORY: This slide builds desire. It reveals something about the product that makes the viewer want it.  Mandatory requirements: - MUST use a completely DIFFERENT layout from slide 1 - MUST reposition the product to a different part of the frame - MUST reposition typography to a different relationship with the product - The signature design element must appear in a new configuration - Background tone can shift while staying in the same texture family - For this slide, the previously generated slide 1 will be attached as a reference image. Your imagePrompt MUST include: \"The attached previous slide is the exact visual reference — match its color palette, typography style, lighting quality, and design language precisely. Apply a completely different composition, product placement, and text arrangement.\"  SLIDE 3 — THE CTA: The final slide closes the deal. Confident, clear, compelling.  Mandatory requirements: - MUST use a completely DIFFERENT layout from slides 1 AND 2 - The CTA text must feel like a natural climax, not a generic afterthought - Same visual system but energy shifted toward action and urgency - The brand name can appear here in the headline if it serves the CTA - For this slide, previous slides 1 and 2 will be attached as reference images. Your imagePrompt MUST include: \"The attached previous slides are the exact visual reference — match their color palette, typography style, lighting quality, and design language precisely. Apply a completely different composition, product placement, and text arrangement.\"  ═══════════════════════════════════════════ PHASE 3 — IMAGE PROMPT ENGINEERING ═══════════════════════════════════════════  Every imagePrompt must follow this exact structure (minimum 80 words):  1. VISUAL SYSTEM BLOCK — paste the full identity (palette, typography, lighting, design language, texture) 2. LAYOUT DECLARATION — state which composition approach this slide uses 3. BACKGROUND — describe the exact background: color, texture, depth, any atmospheric elements 4. PRODUCT DIRECTION — describe: exact position in frame (use compass: center, upper-third, lower-right, etc.), relative size (% of frame), angle/perspective, how light hits it specifically 5. TYPOGRAPHY DIRECTION — describe: exact headline text to render, position relative to product, size relative to frame, visual treatment (behind product? overlapping? in a color block?). Then the body text: exact words, position, size 6. DESIGN ELEMENTS — describe: where the signature element appears, any supporting graphic elements (lines, shapes, blocks), how they interact with the product and text 7. MOOD INSTRUCTION — one sentence describing the emotional quality: \"This should feel like...\" followed by a vivid reference 8. NEGATIVE PROMPT — every imagePrompt must end with: \"AVOID: organic wave shapes, scattered leaves or botanical decorations, heavy dark drop shadows, generic linen or beige paper textures, product placed small or to one side, soft pastel washes, Canva-style templates, decorative borders, blob shapes, flat untextured backgrounds, multiple competing fonts, any element that exists purely as decoration\"  ═══════════════════════════════════════════ BANNED ELEMENTS — ABSOLUTE RESTRICTIONS ═══════════════════════════════════════════  NEVER use any of the following — these are hallmarks of cheap, templated design: - Organic flowing wave shapes or curves as background decoration - Scattered botanical illustrations, leaves, vines, or nature elements as filler - Generic starburst, sparkle, or glow effects - Product placed small on one side with large empty space on the other - Every slide having the same layout with text-left / product-right - Soft watercolor textures or dreamy pastel washes - Heavy dark cast shadows — only soft subtle contact shadows allowed - Drop shadows that look like default Canva/PowerPoint shadows - Rounded blob shapes or amoeba forms - Decorative borders or ornamental frames - Multiple competing fonts or decorative typefaces - Any element that exists purely as decoration rather than serving the composition - Flat, textureless, solid color backgrounds with nothing else going on - Plain linen, plain beige, plain cream, or plain paper backgrounds without additional design treatment  YOUR STANDARD IS: Would a senior art director at Pentagram approve this? If not, redesign it.  ═══════════════════════════════════════════ COPY DIRECTION ═══════════════════════════════════════════  Headlines: - Maximum 6 words — every word must earn its place - Write like a provocative billboard, not a product description - Use tension, contrast, or an unexpected angle - Examples of great headlines: \"Your Soap Is Lying\" / \"Skin This Soft Is Illegal\" / \"Goodbye Bathroom Shelf Regret\" - Examples of BAD headlines: \"Natural Body Wash For You\" / \"Clean Ingredients Inside\" / \"Try Our New Product\"  Body text: - Maximum 15 words - Conversational and human — sounds like a friend giving advice, not a brand making claims - One idea per body text, no lists, no multi-point arguments  ABSOLUTELY NO: - Dashes, bullet points, colons in headlines - Generic marketing language (\"premium quality\", \"best in class\", \"natural goodness\") - AI-sounding punctuation or phrasing - Exclamation marks in headlines  ═══════════════════════════════════════════ OUTPUT FORMAT — ONLY VALID JSON ═══════════════════════════════════════════  Return ONLY this JSON structure. No explanation. No markdown. No text before or after.  {   \"caption\": \"engaging Instagram caption under 150 characters with personality\",   \"hashtags\": \"10 relevant hashtags\",   \"visualSystem\": {     \"palette\": [\"#hex1\", \"#hex2\", \"#hex3\"],     \"typography\": \"full description of headline + body type treatment\",     \"lighting\": \"full cinematic lighting blueprint with SOFT shadow instruction\",     \"designLanguage\": \"signature recurring element description\",     \"texture\": \"background materiality description — never plain linen or beige\"   },   \"slides\": [     {       \"slideNumber\": 1,       \"headline\": \"...\",       \"body\": \"...\",       \"layoutApproach\": \"CINEMATIC ISOLATION / TYPOGRAPHIC COLLISION / BOLD SPLIT / SUSPENDED DRAMA / DECONSTRUCTED LAYOUT\",       \"imagePrompt\": \"... minimum 80 words, following the exact structure above, ending with AVOID negative prompt ...\"     },     {       \"slideNumber\": 2,       \"headline\": \"...\",       \"body\": \"...\",       \"layoutApproach\": \"must differ from slide 1\",       \"imagePrompt\": \"... includes reference to attached previous slides + AVOID block ...\"     },     {       \"slideNumber\": 3,       \"headline\": \"...\",       \"body\": \"...\",       \"layoutApproach\": \"must differ from slides 1 and 2\",       \"imagePrompt\": \"... CTA energy + reference to attached previous slides + AVOID block ...\"     }   ] }"}]},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"1bbd210a-c06c-412c-9b75-7ed47ea7cddf","name":"Anthropic Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[-1040,544],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-sonnet-4-5-20250929","cachedResultName":"Claude Sonnet 4.5"},"options":{"thinking":true,"maxTokensToSample":4096}},"credentials":{"anthropicApi":{"id":"aixwXW3CyPltMrjg","name":"Anthropic account"}},"typeVersion":1.3},{"id":"79d00904-3a8a-4186-a215-9c368285d679","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-896,544],"parameters":{"jsonSchemaExample":"{\n  \"caption\": \"engaging Instagram caption under 150 characters with personality\",\n  \"hashtags\": \"10 relevant hashtags\",\n  \"visualSystem\": {\n    \"palette\": [\"#hex1\", \"#hex2\", \"#hex3\"],\n    \"typography\": \"full description of headline + body type treatment\",\n    \"lighting\": \"full cinematic lighting blueprint with SOFT shadow instruction\",\n    \"designLanguage\": \"signature recurring element description\",\n    \"texture\": \"background materiality description — never plain linen or beige\"\n  },\n  \"slides\": [\n    {\n      \"slideNumber\": 1,\n      \"headline\": \"...\",\n      \"body\": \"...\",\n      \"layoutApproach\": \"CINEMATIC ISOLATION / TYPOGRAPHIC COLLISION / BOLD SPLIT / SUSPENDED DRAMA / DECONSTRUCTED LAYOUT\",\n      \"imagePrompt\": \"... minimum 80 words, following the exact structure above, ending with AVOID negative prompt ...\"\n    },\n    {\n      \"slideNumber\": 2,\n      \"headline\": \"...\",\n      \"body\": \"...\",\n      \"layoutApproach\": \"must differ from slide 1\",\n      \"imagePrompt\": \"... includes reference to attached previous slides + AVOID block ...\"\n    },\n    {\n      \"slideNumber\": 3,\n      \"headline\": \"...\",\n      \"body\": \"...\",\n      \"layoutApproach\": \"must differ from slides 1 and 2\",\n      \"imagePrompt\": \"... CTA energy + reference to attached previous slides + AVOID block ...\"\n    }\n  ]\n}"},"typeVersion":1.3},{"id":"245db2ba-fecb-462c-ace0-12ddda9d2cbe","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1232,-192],"parameters":{"color":7,"width":1584,"height":384,"content":"# 🔹 Step 1: Fetch Product Data & Prepare Content"},"typeVersion":1},{"id":"1a154f49-913d-4be9-964a-807f38c9ba65","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1232,256],"parameters":{"color":7,"width":1584,"height":416,"content":"# 🔹 Step 2: AI Creative Direction & Image Preparation"},"typeVersion":1},{"id":"229806dc-9667-434a-b246-277164450b9d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-1232,736],"parameters":{"color":7,"width":1584,"height":384,"content":"# 🔹 Step 3: Generate Slides with Visual Consistency Loop"},"typeVersion":1},{"id":"98f68613-01e1-43a4-8c35-602295926192","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-1232,1200],"parameters":{"color":4,"width":1584,"height":656,"content":"# 🔹 Step 4: Publish"},"typeVersion":1},{"id":"2e63b1f8-2802-4175-a4dc-697d08c91808","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-1936,-192],"parameters":{"width":652,"height":2052,"content":"# 🚀 Social Media Carousel Generator AI-Powered Design + Auto-Publish\n### By @nocodehack\n@[youtube](A_QT-9qUkxc)\n---\n## ⚙️ What This Workflow Does\nThis workflow automates the complete lifecycle of an Instagram carousel campaign:\n1. Reads product data from Google Sheets\n2. Scrapes product info if missing (via Jina.ai)\n3. Generates creative direction with Claude AI (visual system, copy, image prompts)\n4. Generates each slide image with Gemini (Nano Banana Pro)\n5. Maintains visual consistency by feeding previous slides as reference\n6. Uploads media and publishes to Instagram, Facebook, and X via Blotato\n7. Updates the sheet with status\n\nIt eliminates manual design, exporting, uploading, and publishing,  everything runs in one automated pipeline.\n\n---\n\n## 🔐 Setup\n\n### 1. Credentials Required\n- **Google Sheets** — read/write access\n- **[Anthropic](https://anthropic.com)** API (Claude — creative direction)\n- **[Google AI / Gemini](https://ai.google.dev)** API (image generation)\n- **[Blotato](https://blotato.com/?ref=nocodehack)** API (media upload + publishing)\n- **Telegram Bot** — notifications (optional)\n\n### 2. Google Sheet Structure\nColumns: Brand Logo URL | Product URL | Product Description | Product Image(s) URL | Specification | Post Date | Post Hour | Socials | Status | Post URL\n\n- Leave Description + Images empty to auto-scrape from Product URL\n- Socials: comma-separated (instagram, facebook, x)\n- Post Hour: `now` for immediate, or `14:00` / `2pm` for scheduled\n- Status: leave empty —> filled automatically by the workflow\n\n### 3. Configuration Steps\n- Add all required credentials inside n8n\n- Set your Blotato profile IDs in each publishing node\n- Map each platform output in the Switch node\n- Verify the Gemini image generation endpoint\n- Test one execution before activating production mode\n\n---\n\n## 🎨 How to Customize\n- **Change AI model:** Swap Claude model in the LLM Chain node\n- **Change slide count:** Edit system + user prompts (currently locked to 3)\n- **Change image style:** Edit the system prompt creative direction\n- **Add platforms:** Add outputs to the Switch node + new Blotato publish nodes\n- **Add scheduling:** Use Post Hour column (supports `now`, `2pm`, `14:30`)\n- **Add approval step:** Insert a Wait node before publishing\n- **Change image hosting:** Swap Blotato Upload for Cloudinary or any S3\n\n---\n\n## 💰 Workflow Cost Per Carousel (approx.)\n- Claude (creative direction): ~8K tokens ≈ $0.02\n- Gemini (3 slide images): ≈ $0.03\n- Blotato: per plan\n- **Total: ~$0.05 per carousel**\n\n---\n\n## 👋 Need help or want to customize?\n📩 Contact: [LinkedIn](https://www.linkedin.com/in/ing-seif/)\n📺 YouTube: [@nocodehack](https://youtube.com/@nocodehack)"},"typeVersion":1},{"id":"22a8b9be-c8b0-4b8e-8c97-6d802c105baf","name":"Wait","type":"n8n-nodes-base.wait","position":[-384,1344],"webhookId":"ef3c91a1-f4a4-45b0-a50d-c655dd1c8694","parameters":{"amount":10},"typeVersion":1.1},{"id":"3ebe489d-1ac0-4f04-91b2-b3595247c5ee","name":"Wait1","type":"n8n-nodes-base.wait","position":[-384,1504],"webhookId":"ef3c91a1-f4a4-45b0-a50d-c655dd1c8694","parameters":{"amount":10},"typeVersion":1.1},{"id":"0476addb-8930-44e1-b267-1c196b2117d4","name":"Wait2","type":"n8n-nodes-base.wait","position":[-384,1664],"webhookId":"ef3c91a1-f4a4-45b0-a50d-c655dd1c8694","parameters":{"amount":10},"typeVersion":1.1}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"16737161-80b0-4c0f-b281-2bc55db2fc98","connections":{"Wait":{"main":[[{"node":"instagram","type":"main","index":0}]]},"Wait1":{"main":[[{"node":"facebook","type":"main","index":0}]]},"Wait2":{"main":[[{"node":"X","type":"main","index":0}]]},"Switch":{"main":[[{"node":"Wait","type":"main","index":0}],[{"node":"Wait1","type":"main","index":0}],[{"node":"Wait2","type":"main","index":0}]]},"Get Rows":{"main":[[{"node":"Set Processing","type":"main","index":0}]]},"instagram":{"main":[[]]},"Merge Data":{"main":[[{"node":"Basic LLM Chain","type":"main","index":0}]]},"Edit Fields1":{"main":[[{"node":"Convert to File","type":"main","index":0}]]},"Blotato Upload":{"main":[[{"node":"Save Slide to Memory","type":"main","index":0}]]},"Scrape Product":{"main":[[{"node":"Merge Data","type":"main","index":0}]]},"Set Processing":{"main":[[{"node":"Has Description?","type":"main","index":0}]]},"Basic LLM Chain":{"main":[[{"node":"Parse AI Response","type":"main","index":0}]]},"Convert to File":{"main":[[{"node":"Blotato Upload","type":"main","index":0}]]},"Loop Over Items":{"main":[[{"node":"Prepare Post Payload","type":"main","index":0}],[{"node":"Add Previous Slides","type":"main","index":0}]]},"Nano Banana Pro":{"main":[[{"node":"Edit Fields1","type":"main","index":0}]]},"Has Description?":{"main":[[{"node":"Scrape Product","type":"main","index":0}],[{"node":"Merge Data","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Get Rows","type":"main","index":0}]]},"Parse AI Response":{"main":[[{"node":"Fetch Images to Base64","type":"main","index":0}]]},"Add Previous Slides":{"main":[[{"node":"Nano Banana Pro","type":"main","index":0}]]},"Anthropic Chat Model":{"ai_languageModel":[[{"node":"Basic LLM Chain","type":"ai_languageModel","index":0}]]},"Prepare Post Payload":{"main":[[{"node":"Switch","type":"main","index":0}]]},"Save Slide to Memory":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Fetch Images to Base64":{"main":[[{"node":"Prepare Nano Banana Items","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Basic LLM Chain","type":"ai_outputParser","index":0}]]},"Prepare Nano Banana Items":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":32,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":7},"n8n-nodes-base.wait":{"count":3},"n8n-nodes-base.jinaAi":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.googleSheets":{"count":2},"n8n-nodes-base.convertToFile":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1},"@n8n/n8n-nodes-langchain.chainLlm":{"count":1},"@blotato/n8n-nodes-blotato.blotato":{"count":4},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":1},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"ing.Seif","username":"nocodehack","bio":"n8n automation specialist focused on AI integration and creative workflows. I build advanced templates for image generation, social media automation, and content creation systems that bypass typical limitations. All my workflows are production-ready and designed to be accessible for non-developers. Check out my YouTube channel NoCodeHack for detailed tutorials on implementing these automations.","verified":false,"links":["https://www.youtube.com/@nocodehack"],"avatar":"https://gravatar.com/avatar/6517a7be033f7880fd93503cbff2a8e89d2f1fac8efbc4ba95a234224ac14d11?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1123,"icon":"fa:link","name":"@n8n/n8n-nodes-langchain.chainLlm","codex":{"data":{"alias":["LangChain"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Chains","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Basic LLM Chain","color":"#909298"},"iconData":{"icon":"link","type":"icon"},"displayName":"Basic LLM Chain","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1234,"icon":"file:convertToFile.svg","name":"n8n-nodes-base.convertToFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","encode","encoding","Move Binary Data","Binary","File","JSON","HTML","ICS","iCal","RTF","64","Base64"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Convert to File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjc2MTkgMkMxMy4yNDM3IDIgMTIuODIzNiAyLjQyMDA5IDEyLjgyMzYgMi45MzgzMVYxNS4yNTI2QzEzLjMxOTkgMTUuNDY0MyAxMy43ODUxIDE1Ljc3MiAxNC4xOTEgMTYuMTc1N0wyMS4yMjgzIDIzLjE3MzlDMjIuMDU0OCAyMy45OTU4IDIyLjUxOTUgMjUuMTEzMiAyMi41MTk1IDI2LjI3ODhDMjIuNTE5NSAyNy40NDQzIDIyLjA1NDggMjguNTYxOCAyMS4yMjgzIDI5LjM4MzdMMTQuMTkxIDM2LjM4MTlDMTMuNzg1IDM2Ljc4NTYgMTMuMzE5OSAzNy4wOTMyIDEyLjgyMzYgMzcuMzA1VjM3LjM1MjdDMTIuODIzNiAzNy44NzA5IDEzLjI0MzcgMzguMjkxIDEzLjc2MTkgMzguMjkxSDM5LjA2MTdDMzkuNTc5OSAzOC4yOTEgNDAgMzcuODcwOSA0MCAzNy4zNTI3TDQwIDE1Ljc5NEgyNy4xNDQzQzI2LjYyNjEgMTUuNzk0IDI2LjIwNiAxNS4zNzM5IDI2LjIwNiAxNC44NTU3VjJIMTMuNzYxOVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTI4Ljg2NDUgMkMyOC43NzgxIDIgMjguNzA4MSAyLjA3MDAyIDI4LjcwODEgMi4xNTYzOVYxMi44MjI3QzI4LjcwODEgMTMuMDgxOCAyOC45MTgyIDEzLjI5MTkgMjkuMTc3MyAxMy4yOTE5SDM5Ljg0MzZDMzkuOTMgMTMuMjkxOSA0MCAxMy4yMjE5IDQwIDEzLjEzNTVMNDAgMTIuNjI2M0M0MCAxMi4zNzc4IDM5LjkwMTQgMTIuMTM5NSAzOS43MjYgMTEuOTYzNkwzMC4wNjEgMi4yNzU2MUMyOS44ODUgMi4wOTkxNiAyOS42NDYgMiAyOS4zOTY3IDJIMjguODY0NVoiIGZpbGw9IiMzQTQyRTkiLz4KPHBhdGggZD0iTTkuNzcyNjggMzQuNjAwM0M5LjA0MTg2IDMzLjg2NTQgOS4wNDUxNyAzMi42NzcyIDkuNzgwMDcgMzEuOTQ2NEwxMy42MzE1IDI4LjExNjNMMC45MzgzMTEgMjguMTE2M0MwLjQyMDA5NiAyOC4xMTYzIC0yLjI2NTE5ZS0wOCAyNy42OTYyIDAgMjcuMTc4TDguMjAyOTdlLTA4IDI1LjMwMTRDMS4wNDY4MmUtMDcgMjQuNzgzMiAwLjQyMDA5NSAyNC4zNjMxIDAuOTM4MzExIDI0LjM2MzFIMTMuNTUyOUw5Ljc4MDA3IDIwLjYxMTJDOS4wNDUxNyAxOS44ODA0IDkuMDQxODYgMTguNjkyMiA5Ljc3MjY4IDE3Ljk1NzNDMTAuNTAzNSAxNy4yMjI0IDExLjY5MTcgMTcuMjE5MSAxMi40MjY2IDE3Ljk0OTlMMTkuNDYzOSAyNC45NDgxQzE5LjgxODEgMjUuMzAwNCAyMC4wMTczIDI1Ljc3OTMgMjAuMDE3MyAyNi4yNzg4QzIwLjAxNzMgMjYuNzc4MyAxOS44MTgxIDI3LjI1NzIgMTkuNDYzOSAyNy42MDk1TDEyLjQyNjYgMzQuNjA3N0MxMS42OTE3IDM1LjMzODUgMTAuNTAzNSAzNS4zMzUyIDkuNzcyNjggMzQuNjAwM1oiIGZpbGw9IiMzQTQyRTkiLz4KPC9zdmc+Cg=="},"displayName":"Convert to File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1297,"icon":"file:jinaAi.svg","name":"n8n-nodes-base.jinaAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.jinaai/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/jinaai/"}]},"categories":["Miscellaneous"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"transform\"]","defaults":{"name":"Jina AI"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4cHgiIGhlaWdodD0iMTI4cHgiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB2ZXJzaW9uPSIxLjEiPgo8ZyBpZD0ic3VyZmFjZTEiPgo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpldmVub2RkO2ZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gMzUuMjQyMTg4IDExNC4yMTg3NSBDIDQ4LjgxNjQwNiAxMTQuMjE4NzUgNTkuODIwMzEyIDEwMy4yMTQ4NDQgNTkuODIwMzEyIDg5LjY0MDYyNSBDIDU5LjgyMDMxMiA3Ni4wNjY0MDYgNDguODE2NDA2IDY1LjA2MjUgMzUuMjQyMTg4IDY1LjA2MjUgQyAyMS42Njc5NjkgNjUuMDYyNSAxMC42NjQwNjIgNzYuMDY2NDA2IDEwLjY2NDA2MiA4OS42NDA2MjUgQyAxMC42NjQwNjIgMTAzLjIxNDg0NCAyMS42Njc5NjkgMTE0LjIxODc1IDM1LjI0MjE4OCAxMTQuMjE4NzUgWiBNIDExMS40MzM1OTQgMTAuNzQ2MDk0IEMgMTE0LjcxMDkzOCAxMC43NDYwOTQgMTE3LjMzMjAzMSAxMy4zNzEwOTQgMTE3LjMzMjAzMSAxNi42NDQ1MzEgTCAxMTcuMzMyMDMxIDY0LjY1NjI1IEMgMTE3LjMzMjAzMSA5Mi4wMTU2MjUgOTUuMjEwOTM4IDExNC4zMDQ2ODggNjguMTc1NzgxIDExNC42Mjg5MDYgTCA2OC4xNzU3ODEgNjQuNzM0Mzc1IEwgNjguMDE1NjI1IDE2LjU2NjQwNiBDIDY4LjAxNTYyNSAxMy4yODkwNjIgNzAuNjMyODEyIDEwLjY2Nzk2OSA3My45MTQwNjIgMTAuNjY3OTY5IEwgMTEyLjA4OTg0NCAxMC42Njc5NjkgWiBNIDExMS40MzM1OTQgMTAuNzQ2MDk0ICIvPgo8L2c+Cjwvc3ZnPgo="},"displayName":"Jina AI","typeVersion":1,"nodeCategories":[{"id":11,"name":"Miscellaneous"}]}],"categories":[{"id":31,"name":"Content Creation"},{"id":51,"name":"Multimodal AI"}],"image":[]}}