AutomationFlowsAI & RAG › AI Agents Generate Beauty Salon Social Media Content

AI Agents Generate Beauty Salon Social Media Content

Original n8n title: 💅 AI Agents Generate Content & Automate Posting for Beauty Salon Social Media 📲

ByN8ner @n8ner on n8n.io

This workflow is for beauty salons who want consistent, high‑quality social media content without writing every post manually. It also suits agencies and automation builders who manage multiple beauty brands and want a reusable, AI‑driven posting system they can adapt per client.

Cron / scheduled trigger★★★★★ complexityAI-powered63 nodesTelegramGoogle Sheets TriggerAgentOpenAIOpenAI Chat@Searchapi/N8N Nodes SearchapiMemory Buffer WindowHTTP Request
AI & RAG Trigger: Cron / scheduled Nodes: 63 Complexity: ★★★★★ AI nodes: yes Added:

This workflow corresponds to n8n.io template #12834 — we link there as the canonical source.

This workflow follows the Agent → Facebookgraphapi recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "7d0bfebd-14a8-48e6-93da-b5db75d74df1",
      "name": "Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        4896,
        1920
      ],
      "parameters": {
        "chatId": "123456789",
        "operation": "sendPhoto",
        "binaryData": true,
        "additionalFields": {
          "caption": "={{ $('GENERATE TEXT').item.json.output }}"
        },
        "binaryPropertyName": "={{'data'}}"
      },
      "typeVersion": 1.2,
      "alwaysOutputData": false
    },
    {
      "id": "f31a9e70-3c92-4d09-ba63-e5a68253ceee",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1696,
        1824
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "2c9364d9-3c31-4972-9e7a-67138c32f805",
      "name": "When clicking Execute workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        1696,
        1664
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "56b8e9e6-0b69-4d63-b5f1-85f94829aadd",
      "name": "Google Sheets Trigger",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        1696,
        2288
      ],
      "parameters": {
        "event": "=rowAdded",
        "options": {
          "valueRender": "UNFORMATTED_VALUE",
          "columnsToWatch": [
            "Links for articles to refer"
          ],
          "dataLocationOnSheet": {
            "values": {
              "range": "A2:A10",
              "rangeDefinition": "specifyRangeA1"
            }
          }
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyX",
              "unit": "minutes",
              "value": 1
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_AWS_SECRET_KEY_HERE-y-c/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_AWS_SECRET_KEY_HERE-y-c"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "642ead1d-c6a4-4039-868c-b1f27c4f2c0c",
      "name": "GENERATE TEXT",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2352,
        1776
      ],
      "parameters": {
        "text": "=Use this link as the main reference article {{ $json.name }}. IMPORTANT: update facts to 2025\u0432\u0402\u201c2026 and always cross-check with Tavily internet research!",
        "options": {
          "systemMessage": "(!IMPORTANT!) Write short, engaging posts under 1024 characters for Telegram.\n\nOverview\nYou are a brand agent for a modern beauty salon. You create professional, friendly and educational posts about hair, nails, skincare, make-up and self-care. You write varied daily content: tips, myths vs facts, trends, mini-guides, aftercare and soft promotions.\n\nGoals:\n1. ALWAYS start with real-time research using the Tavily tool to get the most accurate and up-to-date information on the topic.\n2. Adapt the tone to a beauty salon audience: mainly women 20\u0432\u0402\u201c45 who care about appearance, health and relaxation.\n3. Make posts useful and saveable: practical tips, simple routines, what to avoid, how to prepare for procedures, aftercare.\n\nPost requirements:\n- Start with a strong hook (question, bold statement, or relatable situation).\n- Keep a warm, professional, supportive tone.\n- Use short paragraphs and, when helpful, mini-lists for readability.\n- Be educational and evidence-based (no pseudoscience).\n- Use minimal emojis (0\u0432\u0402\u201c2 per post, only if they really add value).\n- Make a soft offer, never aggressive sales.\n- Mention sources if you reference studies or expert opinions (e.g. \u0432\u0402\u045aaccording to dermatologists\u0432\u0402\u00a6\u0432\u0402\u045c).\n- Add 3\u0432\u0402\u201c6 relevant hashtags (services + city, e.g. #haircare #facial #beautysalon).\n- End with a simple call to action: a question, invite to DM, or invite to book.\n\nTopic examples:\n- How to prepare for coloring / complex treatments.\n- Common mistakes in home hair or skin care.\n- Seasonal hairstyle / makeup / nail trends.\n- What to do after a procedure (aftercare).\n- Explaining popular salon procedures in simple language.\n\nOutput format:\n- Your ONLY output is the final Telegram post text.\n- No explanations, no meta comments, no bullet labels.\n\nAt the very end of the post, on a new line, add:\n\u0432\u0402\u045aSalon address: Example Street 10, City. For appointments send us a DM or call +1234567890.\u0432\u0402\u045c"
        },
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "d8437220-fd7d-4d50-b1cd-71aef290158e",
      "name": "GENERATE PROMPT",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2832,
        1776
      ],
      "parameters": {
        "text": "Create a highly detailed, photorealistic visual concept that perfectly matches this Telegram post: {{ $json.output }}.\nFocus on:\n- Main subject (client, hair, nails, skin, makeup, tools, or beauty salon interior).\n- Realistic lighting, colors and materials.\n- Modern, aesthetic beauty-salon vibe (clean, cozy, premium but approachable).\nDo NOT include any text, logos or letters on the image.",
        "options": {
          "systemMessage": "Overview\nYou are an AI agent that converts beauty salon Telegram posts into visual prompts for marketing graphics and photos. These visuals accompany the post and must clearly show the core idea: transformation, care, relaxation, glow, style.\n\nObjective:\n1. Analyze the beauty salon post.\n2. Extract the core message: which service, what result, what feeling for the client.\n3. Write a clear, effective prompt for a text-to-image generator (photorealistic or very realistic render).\n\nPrompt requirements:\n- Describe the model: hair, skin, nails or makeup details, age range, emotion.\n- Describe the environment: salon interior, stylist workspace, details (towels, brushes, lamps, mirrors, bottles, etc.).\n- Set the lighting: soft daylight or warm salon lighting; specify mood.\n- Set the style: \u0432\u0402\u045aphotorealistic, high-resolution, beauty photography, modern aesthetic\u0432\u0402\u045c.\n- You may describe composition: close-up of face, top-down view of manicure, half-body, full-body, etc.\n\nHard constraints:\n- Do NOT include any text, numbers, logos or lettering in the scene.\n- Do NOT use quotation marks around the prompt.\n- Do NOT repeat or paraphrase the post text.\n- Output ONLY one final prompt, as a single coherent instruction in English.\n\nExample style (do not copy verbatim):\n\u0432\u0402\u045aA photorealistic close-up of a woman with freshly styled glossy brunette hair, soft warm salon lighting, modern minimalistic beauty salon interior in the background, neutral beige and gold tones, professional beauty photography, ultra high detail, 4K, no text, no logos.\u0432\u0402\u045c\n\nIMPORTANT: The final prompt must be optimized for AI image generators and must not include any instructions to place text on the image."
        },
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "8a03e180-1563-429f-a2b9-fd029a135759",
      "name": "OPENAI GENERATES IMAGE",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3808,
        1648
      ],
      "parameters": {
        "model": "gpt-image-1",
        "prompt": "=IMPORTANT! DO NOT WRITE TEXT ON THE PICTURE! Create a perfect visual for:\n{{ $json.output }}",
        "options": {},
        "resource": "image"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "0fa3f99a-9481-4fee-a1ce-049169550f66",
      "name": "OPENAI WRITES PROMPTS",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2832,
        1984
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "gpt-4.1"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fa63625c-efb0-421b-91b6-a46dadca4c5a",
      "name": "OPENAI WRITES POSTS",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2272,
        1936
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "gpt-4.1"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "aaaf2131-b93c-4d12-910e-beb6809da5d9",
      "name": "Search google in SearchApi",
      "type": "@searchapi/n8n-nodes-searchapi.searchApiTool",
      "position": [
        2576,
        1936
      ],
      "parameters": {
        "q": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Query', ``, 'string') }}",
        "pagination": {},
        "timeFilters": {},
        "searchOptions": {},
        "requestOptions": {},
        "advancedOptions": {},
        "languageSettings": {},
        "locationSettings": {}
      },
      "typeVersion": 1
    },
    {
      "id": "a041635a-2ace-44e4-8f61-383ce634999c",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        2432,
        1936
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "e964cadb-a020-4cfc-bb25-f4600502384c",
      "name": "Generate Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3696,
        1984
      ],
      "parameters": {
        "url": "https://api.openai.com/v1/images/generations",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "model",
              "value": "gpt-image-1"
            },
            {
              "name": "prompt",
              "value": "={{ $json.output.prompt.replace(/\"/g, '') }}"
            },
            {
              "name": "size",
              "value": "1024x1024"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "dd5a21e4-7b99-46bb-abc9-822a684c740e",
      "name": "Convert to Binary",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        3920,
        1984
      ],
      "parameters": {
        "options": {},
        "operation": "toBinary",
        "sourceProperty": "data[0].b64_json"
      },
      "typeVersion": 1.1
    },
    {
      "id": "f9c16616-7c65-4d7e-9310-81caf291dc78",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4768,
        2560
      ],
      "parameters": {
        "color": 7,
        "width": 364,
        "height": 240,
        "content": "#  Upload to Drive"
      },
      "typeVersion": 1
    },
    {
      "id": "793d597d-afdc-4b71-aa1d-e0337e52eac5",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4768,
        1824
      ],
      "parameters": {
        "color": 7,
        "width": 364,
        "height": 720,
        "content": "# Post to social media"
      },
      "typeVersion": 1
    },
    {
      "id": "e6e8a382-3630-4327-96ec-d4424c4d4046",
      "name": "Upload",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        4896,
        2640
      ],
      "parameters": {
        "name": "={{ $('Image Prompt Agent').item.json.output.title }}.png",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1TgQu-5hlOzO1X28TMMzLxfhunhPSUIqy",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1TgQu-5hlOzO1X28TMMzLxfhunhPSUIqy",
          "cachedResultName": "AI Image Generation"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "9f0a7238-bcad-4426-bc66-43cc39d62e07",
      "name": "Nano Banana",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4048,
        2336
      ],
      "parameters": {
        "url": "https://bananaapi.com/api/n8n/generate/",
        "method": "POST",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "9aa7f37e-d39b-4ab6-bf59-05c1f871346a",
      "name": "Create a post",
      "type": "n8n-nodes-base.wordpress",
      "position": [
        4896,
        1648
      ],
      "parameters": {
        "additionalFields": {}
      },
      "typeVersion": 1
    },
    {
      "id": "d0e6d4ea-baa8-41ef-98a5-6a7a9b0a37c7",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4768,
        1568
      ],
      "parameters": {
        "color": 7,
        "width": 364,
        "height": 240,
        "content": "# Post to Wordpress"
      },
      "typeVersion": 1
    },
    {
      "id": "7ac43870-061f-4eeb-aaf0-d1a228468d18",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        1376
      ],
      "parameters": {
        "color": 4,
        "width": 912,
        "height": 176,
        "content": "# Set Up Steps  \n\n## Setup is intentionally quick and simple \u2728  "
      },
      "typeVersion": 1
    },
    {
      "id": "21c50e95-a9c4-48e1-b570-a65970c7ab9c",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3696,
        1360
      ],
      "parameters": {
        "color": 4,
        "width": 880,
        "height": 192,
        "content": "## 4. Connect Image Generation Model\n\n  - In the **Generate Image** HTTP Request node, add your API key in the header and keep the dynamic `prompt` field.\n  - The **Convert to Binary** node turns `data[0].b64_json` into an image file that downstream nodes (social, Drive, etc.) can use.\n\n  - You can swap or duplicate this node to call Clipdrop, Ideogram/Replicate, Runway, Leonardo, or other image providers, as long as they return an image file that flows into the same outputs."
      },
      "typeVersion": 1
    },
    {
      "id": "62e67244-b457-47d9-a94a-4750fdf60a19",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3280,
        1568
      ],
      "parameters": {
        "color": 7,
        "width": 1196,
        "height": 1236,
        "content": "# Customize generation model and output format\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c1adedba-69d9-4575-8b7e-3c57a519805d",
      "name": "X1",
      "type": "n8n-nodes-base.twitter",
      "position": [
        4896,
        2224
      ],
      "parameters": {
        "additionalFields": {}
      },
      "typeVersion": 2
    },
    {
      "id": "c8d49d1e-eaa0-4b41-a71a-76cf7df37d33",
      "name": "Facebook1",
      "type": "n8n-nodes-base.facebookGraphApi",
      "position": [
        4896,
        2080
      ],
      "parameters": {
        "options": {},
        "httpRequestMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "36ed53c5-4fde-4faf-b221-399e895baca5",
      "name": "LinkedIn1",
      "type": "n8n-nodes-base.linkedIn",
      "position": [
        4896,
        2384
      ],
      "parameters": {
        "text": "={{ $json['choices[0].message.content'] }}",
        "person": "[CONFIGURE_YOUR_LINKEDIN_PERSON_ID]",
        "authentication": "communityManagement",
        "additionalFields": {}
      },
      "typeVersion": 1
    },
    {
      "id": "45c71f56-be4e-4fd1-8d49-e77ef1513d31",
      "name": "Split Out1",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        4576,
        2128
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "choices[0].message.content"
      },
      "typeVersion": 1
    },
    {
      "id": "354f3d02-93b2-43cc-b753-993f6a8ea4f5",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        1376
      ],
      "parameters": {
        "width": 1104,
        "height": 80,
        "content": "# [made with \u2764\ufe0f by N8ner \ud83d\udc48 click! Feel free to message me!](https://community.n8n.io/u/n8ner/badges)  [](https://i.ibb.co/cSGCGn3H/Replace-image-1-2k-202601191958.jpg#full-width)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7533fc82-37a7-47d0-8bb3-2d702a562e8c",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        1376
      ],
      "parameters": {
        "color": 4,
        "width": 832,
        "height": 176,
        "content": "## 2. Connect Chat Models\n\n- Attach your API credentials to the chat nodes to enable text generation with the current configuration.  \n- Swap in alternative LLMs like OpenAI, Claude, Gemini, Mistral, DeepSeek, or local/alternative providers via Anthropic, Google Gemini, Mistral Cloud, DeepSeek, Ollama, or OpenRouter chat nodes for different styles and costs.  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "7d1f38e1-2e58-40c8-91b4-91d8dbbec56a",
      "name": "Sticky Note21",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4640,
        1344
      ],
      "parameters": {
        "color": 4,
        "width": 496,
        "height": 192,
        "content": "## 5.  Link Your Social Media & CMS  \n\n- Connect WordPress, Telegram, X (Twitter), Facebook, and LinkedIn nodes with the accounts you actually use so the workflow can auto\u2011publish directly to those channels. \n- You only need to configure the platforms that matter for your current content strategy; the rest can stay inactive."
      },
      "typeVersion": 1
    },
    {
      "id": "122c72e8-0984-4269-ab8d-477c28a70f1c",
      "name": "Sticky Note22",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2992,
        1376
      ],
      "parameters": {
        "color": 4,
        "width": 688,
        "height": 176,
        "content": "## 3. Customize Prompts  \n\n- Edit the system prompts in the \u201cgenerate text\u201d agent to reflect your brand voice, preferred structure (headings, CTAs, length), and target audience specifics. \n- Adjust the prompts in the \u201cgenerate prompt\u201d agent to define your visual style \u2014 color palette, composition, background, mood \u2014 so images look on\u2011brand across posts."
      },
      "typeVersion": 1
    },
    {
      "id": "e02a11b0-220d-400a-b46d-15aa618f5fb4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2160,
        1568
      ],
      "parameters": {
        "color": 7,
        "width": 1084,
        "height": 1232,
        "content": "# Detail prompts for posts and images up to your beauty salon"
      },
      "typeVersion": 1
    },
    {
      "id": "8e7d29a6-074e-45fd-bfc5-b1012deddf87",
      "name": "AWS Bedrock Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatAwsBedrock",
      "position": [
        2752,
        2544
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "2a3b27bb-09b8-4307-a07b-41fe257c7bf8",
      "name": "Groq Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        2928,
        2544
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "1b99239b-d9f5-453f-97ab-83fb35de63e5",
      "name": "Mistral Cloud Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
      "position": [
        2416,
        2352
      ],
      "parameters": {
        "model": "pixtral-large-latest",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "e21e0fa5-bb3d-4ee7-ba08-487c067484a1",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        2592,
        2352
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "d57e0835-0c7f-4265-931b-81bc6f0ad848",
      "name": "Anthropic Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        3104,
        2544
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-3-7-sonnet-20250219",
          "cachedResultName": "Claude 3.7 Sonnet"
        },
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "c859ac2a-06d4-4aa4-9d0d-dbf1ff7a5f37",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        2240,
        2544
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "e174fffb-4bbd-4b3c-a8db-b9a29554903a",
      "name": "xAI Grok Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatXAiGrok",
      "position": [
        2928,
        2352
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "b14a9f12-de50-46c7-8a23-5e7bcf750fb8",
      "name": "DeepSeek Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
      "position": [
        2416,
        2544
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "e88400fb-41f9-4673-a2d5-cc4ee6aa270b",
      "name": "Hugging Face Inference Model",
      "type": "@n8n/n8n-nodes-langchain.lmOpenHuggingFaceInference",
      "position": [
        3104,
        2352
      ],
      "parameters": {
        "model": "https://huggingface.co/black-forest-labs/FLUX.1-dev",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "c2542ffd-9b67-4dfb-8eb3-efc2cd036e18",
      "name": "Ollama Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOllama",
      "position": [
        2752,
        2352
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "f85ec2dd-f236-4752-8a54-0f669752bdb1",
      "name": "Azure OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        2592,
        2544
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "a4c3471f-7ef5-443d-a655-82d5275f7ae4",
      "name": "Database",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        2976,
        1984
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "d99109a8-d402-4447-a204-0ee38c6065c5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3584,
        1840
      ],
      "parameters": {
        "color": 3,
        "width": 560,
        "height": 304,
        "content": "## \u26a0\ufe0fTo Use Custom Models with HTTP requests - Add Convert to Binary Code Node next Step. For Example:"
      },
      "typeVersion": 1
    },
    {
      "id": "7e44b243-486c-4b51-b741-73883ae7344e",
      "name": "Sticky Note24",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2192,
        2208
      ],
      "parameters": {
        "color": 5,
        "width": 1024,
        "height": 512,
        "content": "# Choose Your Favourite Chat Model"
      },
      "typeVersion": 1
    },
    {
      "id": "ac25e8f8-30b5-4618-ae2f-20b292e37334",
      "name": "Sticky Note25",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3312,
        2208
      ],
      "parameters": {
        "color": 5,
        "width": 1136,
        "height": 512,
        "content": "#  Choose Your Favourite Image Generation Model"
      },
      "typeVersion": 1
    },
    {
      "id": "a15bf6ba-769e-431a-9bae-bce9f3eba48d",
      "name": "Sticky Note26",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        1616,
        1568
      ],
      "parameters": {
        "color": 7,
        "width": 260,
        "height": 1236,
        "content": "# Launcher\n"
      },
      "typeVersion": 1
    },
    {
      "id": "90e53196-8f41-4f66-89ab-06e8057fc9fc",
      "name": "Replicate API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3360,
        2336
      ],
      "parameters": {
        "url": "https://api.replicate.com/v1/models/ideogram-ai/ideogram-v2/predictions",
        "method": "POST",
        "options": {},
        "jsonBody": "{\n  \"input\": {\n    \"prompt\": \"An illustration of a black running shoe with the text \\\"Run AI with an API\\\" written on the shoe. The shoe is placed on a blue background. The text is white and bold. The overall image has a modern and techy vibe.\",\n    \"aspect_ratio\": \"16:9\"\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer $REPLICATE_API_TOKEN"
            },
            {
              "name": "Prefer",
              "value": "wait"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8c83e38a-8204-42b0-ad7d-3dbf12138528",
      "name": "Imagen Google API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3600,
        2336
      ],
      "parameters": {
        "url": "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/YOUR_AWS_SECRET_KEY_HERE@002:predict",
        "body": "0",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "raw",
        "sendHeaders": true,
        "rawContentType": "application/json; charset=utf-8",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer $(gcloud auth print-access-token)"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "bfab7de5-37a1-4a3a-b887-6e054d26011d",
      "name": "HuggingFace API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3824,
        2336
      ],
      "parameters": {
        "url": "https://uu149rez6gw9ehej.eu-west-1.aws.endpoints.huggingface.cloud/distilbert-sentiment",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "{\"inputs\": \"Deploying my first endpoint was an amazing experience.\"}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer <Token>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "581d5c7d-365d-44ea-ad5e-b642ca32bb05",
      "name": "Kling Images",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3360,
        2528
      ],
      "parameters": {
        "url": "https://api-singapore.klingai.com/v1/images/text2image",
        "method": "POST",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "jsonBody": "{\n\t\"code\": 0,\n  \"message\": \"string\",\n  \"request_id\": \"string\",\n  \"data\":[\n    {\n      \"task_id\": \"string\",\n      \"task_status\": \"string\",\n      \"task_status_msg\": \"string\",\n      \"created_at\": 1722769557708,\n      \"updated_at\": 1722769557708,\n      \"task_result\":{\n        \"images\":[\n          {\n            \"index\": 0,\n            \"url\": \"string\"\n          }\n      \t]\n      }\n    }\n  ]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f441e830-c2b4-4348-8230-633af5dd9298",
      "name": "Runway Images",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3600,
        2528
      ],
      "parameters": {
        "url": "https://api.dev.runwayml.com/v1/text_to_image",
        "method": "POST",
        "options": {},
        "jsonBody": "{\n  \"promptText\": \"string\",\n  \"ratio\": \"1920:1080\",\n  \"seed\": 4294967295,\n  \"model\": \"gen4_image\",\n  \"referenceImages\": [\n    {\n      \"uri\": \"http://example.com\",\n      \"tag\": \"string\"\n    }\n  ],\n  \"contentModeration\": {\n    \"publicFigureThreshold\": \"auto\"\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ YOUR API KEY }}"
            },
            {
              "name": "X-Runway-Version",
              "value": "2024-11-06"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "55ba71c1-5b97-454a-8682-cd49c50b1f76",
      "name": "Leonardo Images",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3824,
        2528
      ],
      "parameters": {
        "url": "https://cloud.leonardo.ai/api/rest/v1/generations/id",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b7f8bacb-6de3-4430-8330-06d602687c39",
      "name": "APITemplate.io",
      "type": "n8n-nodes-base.apiTemplateIo",
      "position": [
        4048,
        2528
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f58277db-03ec-4689-8893-c2878eeb9c25",
      "name": "Ideogram API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4272,
        2336
      ],
      "parameters": {
        "url": "https://api.ideogram.ai/v1/ideogram-v3/generate",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "A photo of a cat sleeping on a couch."
            },
            {
              "name": "rendering_speed",
              "value": "TURBO"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Api-Key",
              "value": "<apiKey>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2b0d760c-b5a8-4830-a635-b0d5d2d043bc",
      "name": "Clipdrop API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4272,
        2528
      ],
      "parameters": {
        "url": "https://clipdrop-api.co/text-to-image/v1",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "fb385b3a-1dab-40e3-961e-3a2c43dfb2f8",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2240,
        2352
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "dada01eb-cbcd-40da-85bf-fc1126f69660",
      "name": "Postgres Trigger",
      "type": "n8n-nodes-base.postgresTrigger",
      "position": [
        1696,
        2624
      ],
      "parameters": {
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "options": {},
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "additionalFields": {}
      },
      "typeVersion": 1
    },
    {
      "id": "67605209-24ee-4453-8cd9-1237c509bf75",
      "name": "Airtable Trigger",
      "type": "n8n-nodes-base.airtableTrigger",
      "position": [
        1696,
        2464
      ],
      "parameters": {
        "baseId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "tableId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "pollTimes": {
          "item": [
            {}
          ]
        },
        "additionalFields": {}
      },
      "typeVersion": 1
    },
    {
      "id": "e028976c-c358-4cd1-8cb1-6b7aaae3f5c5",
      "name": "RSS Feed Trigger",
      "type": "n8n-nodes-base.rssFeedReadTrigger",
      "position": [
        1696,
        2144
      ],
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "fbc3d8e0-6448-4012-b143-2bf51bb0065b",
      "name": "Meta Reference",
      "type": "n8n-nodes-base.facebookTrigger",
      "position": [
        1696,
        1984
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "accf4b92-db73-4e33-beee-ae6ddab0e330",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        1568
      ],
      "parameters": {
        "color": 4,
        "width": 368,
        "height": 848,
        "content": "## 1. Choose Your Trigger  \n\n- **Scheduled automatic generation:** Run the parent workflow on a schedule (for example, once per day at 9 AM) to publish new content regularly.\n\n- **Google Sheets trigger:** Generate content when a new row with a reference link or topic is added to your sheet. Use it when you manage ideas or briefs in Google Sheets and want the workflow to react as soon as a new idea appears.\n\n- **RSS Feed trigger:** Start the workflow when new items appear in a selected RSS feed. Ideal for turning fresh blog posts, news, or industry updates into social media content or automated summaries.\n\n- **Meta (Facebook/Instagram) webhook:** Use the Meta Reference trigger to fire the workflow on incoming webhooks from Meta (for example, new comments, messages, or events). Helpful when you want to auto\u2011respond, log activity, or generate follow\u2011up content from Meta activity.\n\n- **Airtable trigger:** Start the workflow when records in a selected Airtable base/table change (for example, a new idea, brief, or status update), so your posts react instantly to updates in your Airtable content board.\n\n- **Postgres trigger:** Fire the workflow when new rows are inserted or existing rows are updated in a connected PostgreSQL table, letting you drive content generation from events in your app database or Supabase\u2011style back end.\n\n- **Manual start:** Hit **Execute workflow** whenever you want to spin up a batch of posts on demand, test new prompt settings, or debug the flow step by step.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4f6c2340-946a-4b53-8308-17d899f3c413",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        1472
      ],
      "parameters": {
        "width": 1104,
        "height": 560,
        "content": "# Daily AI social content for beauty brands\n\n## How it works\n\n### Section 1 \u2014 Content sources & triggers\nControls when a new post is created: schedule\u2011based, manual test runs, or new ideas arriving from a reference link.\n### Section 2 \u2014 AI post generation\nGENERATE TEXT writes the final post using your brand system message, web research and short\u2011term memory. Edit the system message here to match your beauty or wellness brand.\n### Section 3 \u2014 Visual prompt\nThe GENERATE PROMPT agent converts the post into a detailed text\u2011to\u2011image prompt describing subject, environment, lighting and style, without any text or logos.\n### Section 4 \u2014 AI image generation\ngpt\u2011image\u20111 (or other providers) generates the final beauty\u2011salon visual that matches the post. You can swap or disable providers depending on your stack.\n### Section 5 \u2014 Distribution & posting\nSplit Out sends the generated content to Telegram and optional social channels (Facebook, Instagram, LinkedIn, X), CMS and cloud.\n\n\n## Customization\nUpdate the system message in GENERATE TEXT to match your brand, niche and language, and keep only the image providers and channels you actually use."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Upload": {
      "main": [
        []
      ]
    },
    "Database": {
      "ai_memory": [
        [
          {
            "node": "GENERATE PROMPT",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Split Out1": {
      "main": [
        [
          {
            "node": "Create a post",
            "type": "main",
            "index": 0
          },
          {
            "node": "Facebook1",
            "type": "main",
            "index": 0
          },
          {
            "node": "X1",
            "type": "main",
            "index": 0
          },
          {
            "node": "LinkedIn1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Upload",
            "type": "main",
            "index": 0
          },
          {
            "node": "Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GENERATE TEXT": {
      "main": [
        [
          {
            "node": "GENERATE PROMPT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Generate Image": {
      "main": [
        [
          {
            "node": "Convert to Binary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Meta Reference": {
      "main": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GENERATE PROMPT": {
      "main": [
        [
          {
            "node": "OPENAI GENERATES IMAGE",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable Trigger": {
      "main": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Trigger": {
      "main": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Feed Trigger": {
      "main": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to Binary": {
      "main": [
        []
      ]
    },
    "OPENAI WRITES POSTS": {
      "ai_languageModel": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Trigger": {
      "main": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OPENAI WRITES PROMPTS": {
      "ai_languageModel": [
        [
          {
            "node": "GENERATE PROMPT",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OPENAI GENERATES IMAGE": {
      "main": [
        [
          {
            "node": "Split Out1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search google in SearchApi": {
      "ai_tool": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "When clicking Execute workflow": {
      "main": [
        [
          {
            "node": "GENERATE TEXT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow is for beauty salons who want consistent, high‑quality social media content without writing every post manually. It also suits agencies and automation builders who manage multiple beauty brands and want a reusable, AI‑driven posting system they can adapt per client.

Source: https://n8n.io/workflows/12834/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Complete PostgreSQL-backed system: Keyword scoring → AI research → Multi-part content generation → fal.ai Nano Banana image generation → WordPress publishing

WordPress, OpenAI, Perplexity +8
AI & RAG

The Multi-Model Agency Content Engine is a high-performance editorial system designed for agencies. It solves the "blank page" problem by alternating between real-world social proof and strategic expe

Google Sheets, Gmail, Google Drive +6
AI & RAG

This workflow automates the creation, rendering, approval, and posting of TikTok-style POV (Point of View) videos to Instagram, with cross-posting to Facebook and YouTube. It eliminates manual video p

OpenAI Chat, Output Parser Item List, HTTP Request +10
AI & RAG

Online Marketing Weekly Report. Uses scheduleTrigger, lmChatOpenAi, toolWorkflow, executeWorkflowTrigger. Scheduled trigger; 51 nodes.

OpenAI Chat, Tool Workflow, Execute Workflow Trigger +8
AI & RAG

This workflow retrieves Online Marketing data (Google Analytics for several domains, Google Ads, Meta Ads) from the last 7 days and the same period in the previous year. The data is then prepared by A

OpenAI Chat, Tool Workflow, Execute Workflow Trigger +8