{
  "id": "sIc6gsuo1dB3WOkA",
  "meta": {
    "builderVariant": "mcp",
    "aiBuilderAssisted": true
  },
  "name": "Generate AI social posts and publish to multiple networks with Blotato",
  "tags": [],
  "nodes": [
    {
      "id": "07ab9f6d-2ec1-4a8b-80a4-335912784045",
      "name": "Run on schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "7d97340c-6f7e-45e1-9507-c9c85b8db29c",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "c1",
              "name": "content_language",
              "type": "string",
              "value": "English"
            },
            {
              "id": "c2",
              "name": "brand_niche",
              "type": "string",
              "value": "AI automation, n8n workflows and content systems for creators and solopreneurs"
            },
            {
              "id": "c3",
              "name": "target_audience",
              "type": "string",
              "value": "creators, solopreneurs and marketing teams"
            },
            {
              "id": "c4",
              "name": "post_tone",
              "type": "string",
              "value": "expert but accessible, direct, concrete, one strong idea, short paragraphs"
            },
            {
              "id": "c5",
              "name": "image_style",
              "type": "string",
              "value": "clean modern professional editorial illustration, brand-consistent, no text, high quality"
            },
            {
              "id": "c6",
              "name": "hashtag_count",
              "type": "number",
              "value": 5
            },
            {
              "id": "c7",
              "name": "text_model",
              "type": "string",
              "value": "gpt-5-mini"
            },
            {
              "id": "c8",
              "name": "image_model",
              "type": "string",
              "value": "dall-e-3"
            },
            {
              "id": "c9",
              "name": "image_size",
              "type": "string",
              "value": "1024x1024"
            },
            {
              "id": "c10",
              "name": "telegram_chat_id",
              "type": "string",
              "value": ""
            },
            {
              "id": "c11",
              "name": "approval_wait_minutes",
              "type": "number",
              "value": 30
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "be64b7d4-fb51-467b-9642-b98c8c6f630f",
      "name": "Generate content topic",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        400,
        0
      ],
      "parameters": {
        "text": "Generate ONE fresh, specific content idea now. Return only the structured fields.",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are a senior content strategist for a personal brand in {{ $('Configuration').item.json.brand_niche }}. Audience: {{ $('Configuration').item.json.target_audience }}. Propose a single high-value, non-generic topic with a clear angle and a scroll-stopping hook. Favor systemized, practical, slightly contrarian insight. Avoid hype and jargon. Write in {{ $('Configuration').item.json.content_language }}."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "03298104-734a-4c63-bf93-4dee29ab5572",
      "name": "Topic model (OpenAI)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        400,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "={{ $('Configuration').item.json.text_model }}",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "c9ca9886-3f25-4932-a974-b5c14c3d0b59",
      "name": "Topic parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        560,
        208
      ],
      "parameters": {
        "jsonSchemaExample": "{ \"topic_title\": \"A specific content idea in one line\", \"angle\": \"why it matters in 1-2 sentences\", \"hook\": \"a scroll-stopping opening line\" }"
      },
      "typeVersion": 1.3
    },
    {
      "id": "9d887652-1f3f-4f59-a413-6e23b032ec85",
      "name": "Write post",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        672,
        0
      ],
      "parameters": {
        "text": "=Topic: {{ $('Generate content topic').item.json.output.topic_title }}\nAngle: {{ $('Generate content topic').item.json.output.angle }}\nHook: {{ $('Generate content topic').item.json.output.hook }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are an expert social media copywriter. Write ONE post in {{ $('Configuration').item.json.content_language }}. Tone: {{ $('Configuration').item.json.post_tone }}. Rules: one strong idea; short punchy paragraphs; open with a strong hook; be honest and never claim a tool is 100% automatic when a human check is involved; end with a light, clear call to action. Do NOT put hashtags inside post_content. Separately return exactly {{ $('Configuration').item.json.hashtag_count }} relevant hashtags as a single space-separated string. Also return image_prompt: a vivid visual concept in this style: {{ $('Configuration').item.json.image_style }}."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "54869242-efab-47f5-98e5-9e313e5e3d6d",
      "name": "Writer model (OpenAI)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        672,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "={{ $('Configuration').item.json.text_model }}",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "61a34388-d74d-4019-92cd-784725877462",
      "name": "Post parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        800,
        208
      ],
      "parameters": {
        "jsonSchemaExample": "{ \"post_content\": \"the full social media post body, no hashtags inside\", \"hashtags\": \"#tag1 #tag2 #tag3 #tag4 #tag5\", \"image_prompt\": \"a vivid description of a matching visual\" }"
      },
      "typeVersion": 1.3
    },
    {
      "id": "8181791d-a65e-4511-84a4-39375b1775b0",
      "name": "Generate image",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        912,
        0
      ],
      "parameters": {
        "images": {
          "values": [
            {}
          ]
        },
        "prompt": "={{ $('Write post').item.json.output.image_prompt }}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "={{ $('Configuration').item.json.image_model }}",
          "cachedResultName": "dall-e-3"
        },
        "options": {
          "size": "={{ $('Configuration').item.json.image_size }}",
          "returnImageUrls": true
        },
        "resource": "image"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "39deb2df-d1a7-40a9-acfb-87fc4d9c3cab",
      "name": "Get image URL",
      "type": "n8n-nodes-base.set",
      "position": [
        1120,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "i1",
              "name": "image_url",
              "type": "string",
              "value": "={{ $json.url || ($json.data && $json.data[0] ? $json.data[0].url : '') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "373205d5-fe57-471a-b445-90ae7b6cbad9",
      "name": "Approve on Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1344,
        0
      ],
      "parameters": {
        "chatId": "={{ $('Configuration').item.json.telegram_chat_id }}",
        "message": "=New social post ready for review:\n\n{{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}\n\nImage: {{ $('Get image URL').item.json.image_url }}",
        "options": {
          "limitWaitTime": {
            "values": {
              "resumeUnit": "minutes",
              "resumeAmount": "={{ $('Configuration').item.json.approval_wait_minutes }}"
            }
          }
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double",
            "approveLabel": "\u2705 Publish",
            "disapproveLabel": "\u274c Skip"
          }
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cd801259-6040-4322-bda0-5e41590ff1b2",
      "name": "Approved?",
      "type": "n8n-nodes-base.if",
      "position": [
        1568,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a1",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "ef8f9a93-dbfc-4549-971a-f923b988be50",
      "name": "Publish to LinkedIn",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1792,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "linkedin",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1446",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1446",
          "cachedResultName": "Samuel Amalric"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "849c2e02-0ed1-4d76-8947-d0e809e3fa16",
      "name": "Publish to X",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1984,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "twitter",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1289",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1289",
          "cachedResultName": "Docteur_Firas"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f09f89a0-121d-4405-b56f-e9a89a8848d8",
      "name": "Publish to Instagram",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2192,
        -128
      ],
      "parameters": {
        "options": {},
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "11892",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/11892",
          "cachedResultName": "doc.firass"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "2c2fd209-28ea-4a5c-9086-0813f779f99a",
      "name": "Publish to Facebook",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2384,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "facebook",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1759",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759",
          "cachedResultName": "Firass Ben"
        },
        "facebookPageId": {
          "__rl": true,
          "mode": "list",
          "value": "101603614680195",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759/subaccounts/101603614680195",
          "cachedResultName": "Dr. Firas"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "13f2d7f8-f931-4ead-9e0c-47d15d3f19c5",
      "name": "Publish to Threads",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        2592,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "threads",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "2280",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/2280",
          "cachedResultName": "doc.firass"
        },
        "postContentText": "={{ $('Write post').item.json.output.post_content }}\n\n{{ $('Write post').item.json.output.hashtags }}",
        "postContentMediaUrls": "={{ $('Get image URL').item.json.image_url }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f820f373-5002-4ae9-be82-0b16b579c18d",
      "name": "Log published post",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2784,
        -128
      ],
      "parameters": {
        "columns": {
          "value": {
            "date": "={{ $now.toFormat('yyyy-LL-dd HH:mm:ss') }}",
            "topic": "={{ $('Generate content topic').item.json.output.topic_title }}",
            "status": "Published",
            "hashtags": "={{ $('Write post').item.json.output.hashtags }}",
            "image_url": "={{ $('Get image URL').item.json.image_url }}",
            "platforms": "LinkedIn, X, Instagram, Facebook, Threads",
            "post_content": "={{ $('Write post').item.json.output.post_content }}"
          },
          "schema": [
            {
              "id": "date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "topic",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "post_content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "post_content",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "hashtags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "hashtags",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "image_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "image_url",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "platforms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "platforms",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "linkedin"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "linkedin content"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "126ce3c1-02e5-47c5-b591-29d428021565",
      "name": "Log skipped post",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1792,
        192
      ],
      "parameters": {
        "columns": {
          "value": {
            "date": "={{ $now.toFormat('yyyy-LL-dd HH:mm:ss') }}",
            "topic": "={{ $('Generate content topic').item.json.output.topic_title }}",
            "status": "Skipped",
            "hashtags": "={{ $('Write post').item.json.output.hashtags }}",
            "image_url": "={{ $('Get image URL').item.json.image_url }}",
            "platforms": "",
            "post_content": "={{ $('Write post').item.json.output.post_content }}"
          },
          "schema": [
            {
              "id": "date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "topic",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "post_content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "post_content",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "hashtags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "hashtags",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "image_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "image_url",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "platforms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "platforms",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "linkedin"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "linkedin content"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "187365b0-50ec-4e11-a2e0-2c8602f32194",
      "name": "Main sticky",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        -624
      ],
      "parameters": {
        "color": 3,
        "width": 640,
        "height": 1848,
        "content": "# Generate AI social posts and publish to multiple networks with Blotato\n# \ud83d\udce5  [Open full documentation on Notion](https://automatisation.notion.site/Course-Generate-AI-social-posts-and-publish-to-multiple-networks-with-Blotato-39a3d6550fd981e29df3f2a5cd8cc5c6)\n\n# \ud83d\udce5  [Copy my Google Sheets](https://docs.google.com/spreadsheets/d/1UD41eCVTGJYZxqVUElnD8OJZkfB541IQ0LyPUtdqOvQ/copy)\n\n\n## How it works\nOn a schedule, GPT picks a fresh content topic in your niche, writes a ready-to-post caption in your voice, and generates a matching image with DALL\u00b7E. You get a Telegram message with the post + image and two buttons (Publish / Skip). Only after you approve, the post is published to LinkedIn, X, Instagram, Facebook and Threads via [Blotato](https://blotato.com/?ref=firas). Every run is logged to Google Sheets. The AI proposes, you approve before anything goes live.\n\n## Setup\n1. Open the **Configuration** node: set your language, niche, audience, tone, image style and **telegram_chat_id** (ask @get_id_bot on Telegram for your ID).\n2. Select your **OpenAi account** credential on the two model nodes and on **Generate image**.\n3. Select your **Telegram account** credential on **Approve on Telegram**.\n4. On each **Publish to \u2026** node, select your **Blotato account** credential and pick the matching social account in the dropdown.\n5. On both Google Sheets nodes, select your **Google Sheets account**, then pick the log spreadsheet and the `linkedin` tab.\n\n## Requirements\n- n8n **self-hosted** (or Cloud with Verified Community Nodes) \u2014 this template uses the [Blotato](https://blotato.com/?ref=firas) community node.\n- An OpenAI API key, a [Blotato](https://blotato.com/?ref=firas) account with your networks connected, a Telegram bot, and a Google Sheet.\n- DALL\u00b7E 3 image cost \u2248 $0.04 per image; GPT text cost is a few cents per run.\n\n## Customization\n- Change the schedule (default: every 24h) on **Run on schedule**.\n- Add or remove networks by duplicating / deleting a **Publish to \u2026** node (set its `platform`).\n- Tune the topic and writing prompts in **Generate content topic** and **Write post**.\n- Note: X (Twitter) has a 280-character limit \u2014 keep captions short or let Blotato handle threading.\n\n---\nNeed help customizing?\nContact me for consulting and support : [Linkedin](https://www.linkedin.com/in/doctor-firass/)\n\n# MY NEW YOUTUBE CHANNEL\n\ud83d\udc49 [Subscribe to my new YouTube channel](https://www.youtube.com/@DrFiras_AI). Here I'll share videos and Shorts with practical tutorials and FREE templates for n8n.\n\n[![The AI Doctor](https://www.dr-firas.com/the-ai-doctor.png)](https://www.youtube.com/@DrFiras_AI)"
      },
      "typeVersion": 1
    },
    {
      "id": "c3cf9750-dbaf-47af-9981-fe64e363eadb",
      "name": "Sticky 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        368,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 520,
        "height": 520,
        "content": "## 1. Configure & generate\nSet every adjustable variable in **Configuration** (language, niche, audience, models, telegram_chat_id). GPT then picks a topic and writes the post + image prompt + hashtags."
      },
      "typeVersion": 1
    },
    {
      "id": "5ad75215-433e-409e-891c-af49e38c1ef8",
      "name": "Sticky 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 520,
        "content": "## 2. Create the visual\nDALL\u00b7E generates a matching image and returns its URL for the post."
      },
      "typeVersion": 1
    },
    {
      "id": "4fece39c-df80-4d4c-9719-57120647a005",
      "name": "Sticky 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 520,
        "content": "## 3. Review & approve\nA Telegram message shows the post + image with Publish / Skip buttons. Nothing is posted without your approval."
      },
      "typeVersion": 1
    },
    {
      "id": "4381afe1-fe52-4b8f-a27f-c0dab493f69e",
      "name": "Sticky 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        -304
      ],
      "parameters": {
        "color": 7,
        "width": 1240,
        "height": 400,
        "content": "## 4. Publish & log\nOn approval, the post goes to LinkedIn, X, Instagram, Facebook and Threads via Blotato, then the run is logged to Google Sheets (Skipped runs are logged too)."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": true,
    "executionOrder": "v1"
  },
  "versionId": "4c5ac9c4-1c1d-4ab3-9d88-9cd19b93ba4c",
  "nodeGroups": [],
  "connections": {
    "Approved?": {
      "main": [
        [
          {
            "node": "Publish to LinkedIn",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log skipped post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write post": {
      "main": [
        [
          {
            "node": "Generate image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post parser": {
      "ai_outputParser": [
        [
          {
            "node": "Write post",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Publish to X": {
      "main": [
        [
          {
            "node": "Publish to Instagram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Topic parser": {
      "ai_outputParser": [
        [
          {
            "node": "Generate content topic",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Configuration": {
      "main": [
        [
          {
            "node": "Generate content topic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get image URL": {
      "main": [
        [
          {
            "node": "Approve on Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate image": {
      "main": [
        [
          {
            "node": "Get image URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run on schedule": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to Threads": {
      "main": [
        [
          {
            "node": "Log published post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Approve on Telegram": {
      "main": [
        [
          {
            "node": "Approved?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to Facebook": {
      "main": [
        [
          {
            "node": "Publish to Threads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to LinkedIn": {
      "main": [
        [
          {
            "node": "Publish to X",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to Instagram": {
      "main": [
        [
          {
            "node": "Publish to Facebook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Topic model (OpenAI)": {
      "ai_languageModel": [
        [
          {
            "node": "Generate content topic",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Writer model (OpenAI)": {
      "ai_languageModel": [
        [
          {
            "node": "Write post",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Generate content topic": {
      "main": [
        [
          {
            "node": "Write post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}