{
  "id": "dmoXmxoRl7IynHDc",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Instagram Daily Post",
  "tags": [],
  "nodes": [
    {
      "id": "fda4cf10-8bc2-490c-8412-eaef0dd637f4",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2128,
        -288
      ],
      "parameters": {
        "text": "=Hello dear,\n\nDaily tips and guide has attached to this email.\n\n{{ $('Code-Split-LangChain').item.json.quote }}\n\n{{ $('Code-Split-LangChain').item.json.caption }}\n\n{{ $('Code-Split-LangChain').item.json.hashtags }}\n\nBest\nAI",
        "options": {
          "attachments": "=data"
        },
        "subject": "Daily Instagram Post",
        "toEmail": "=",
        "fromEmail": "user@example.com",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c17de175-e95e-4e88-bd42-52851656e3ba",
      "name": "Read Text Files from Disk",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        432,
        -288
      ],
      "parameters": {
        "options": {},
        "fileSelector": "/home/node/instagram_posts.txt"
      },
      "typeVersion": 1
    },
    {
      "id": "f1bf713b-05bb-4a19-a80f-fe201833f4fa",
      "name": "Extract from Text File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        656,
        -288
      ],
      "parameters": {
        "options": {
          "keepSource": "json"
        },
        "operation": "text",
        "destinationKey": "post_history"
      },
      "typeVersion": 1
    },
    {
      "id": "6f59e757-00c4-4605-b54f-cb9808ea7528",
      "name": "Convert Quote to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        1456,
        -288
      ],
      "parameters": {
        "options": {},
        "operation": "toText",
        "sourceProperty": "quote",
        "binaryPropertyName": "quote_for_file"
      },
      "typeVersion": 1.1
    },
    {
      "id": "df525ede-df99-49c2-a5e5-ae67b38ee9ff",
      "name": "Generate an image",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        1904,
        -288
      ],
      "parameters": {
        "prompt": "=Draw a simple image for below quote and put the text in the image with bold and clear front and contrast color like red. This is the quote:{{ $('Code-Split-LangChain').item.json.quote}}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.0-flash-preview-image-generation",
          "cachedResultName": "models/gemini-2.0-flash-preview-image-generation"
        },
        "options": {},
        "resource": "image"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2c3dedaa-9791-44c5-9b20-fcbada1f3658",
      "name": "Write Text Files from Disk",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        1680,
        -288
      ],
      "parameters": {
        "options": {
          "append": true
        },
        "fileName": "/home/node/instagram_posts.txt",
        "operation": "write",
        "dataPropertyName": "quote_for_file"
      },
      "typeVersion": 1
    },
    {
      "id": "9df5aee8-c071-4eea-885d-32efe21e1b67",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        -832
      ],
      "parameters": {
        "width": 624,
        "height": 1120,
        "content": "# \ud83d\udcf8 Instagram Post Automation Workflow\n\n## \u2139\ufe0f What is this workflow\nThis workflow automatically produces daily Instagram posts based on a user-provided prompt and sends them to your email inbox.  \nSocial media creators can use it to generate content periodically and save time.  \n\nThe email includes:  \n- Picture  \n- Title  \n- Caption  \n- Relevant hashtags  \n\nYou can simply copy and paste the content from the email into Instagram, or go further by connecting it to the Facebook API for **full automation**.\n\n## \ud83d\udcbc Business Cases\n- Generating social media posts primarily for Instagram.  \n- Integrating with other workflows (trend research, market studies, news feeds) to produce images, statistics, text, or data comparisons for social media.\n\n## \u2699\ufe0f How Does It Work\n1. The workflow runs periodically according to your schedule settings.  \n2. Generates a new quote, avoiding duplicates of previously created ones.  \n3. Creates an image.  \n4. Sends all content by email.\n\n## \ud83d\udd17 Integrated Services\n- Local file storage on the hosted platform  \n- OpenAI GPT model (customizable to any AI model you prefer)  \n- Gemini model for image generation (replaceable with your preferred tool)  \n- Email sending via SMTP\n\n## \ud83d\udee0 How to Set Up\n1. Install the workflow template.  \n2. Configure AI models and set up SMTP credentials.  \n3. Create a file on your local installation (`/home/node/instagram_posts.txt`).  \n4. Set up the scheduler.  \n5. Test and enjoy."
      },
      "typeVersion": 1
    },
    {
      "id": "704ea445-c717-4adc-8211-3d7914d9d841",
      "name": "Basic LLM Chain",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        880,
        -288
      ],
      "parameters": {
        "text": "=Create an Instagram post about self-growth and partnership, inspired by Rumi, Khayam, or similar poets. Make sure dont generate these again as previsouly generated:\"\" {{ $json.post_history }}\"\"\n\nOUTPUT:\nNo additional text, explanations or title for sections and only provide below information:\n1. One short inspirational sentence between 5 to 25 words about self-growth or partnership, including quoting the poet\u2019s name.\n2. A suggested Instagram caption to accompany the post.\n3. A list of suitable hashtags.\n\n\n\n",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "you are a self growth and partnership mentor and coach and by giving inspirational quotes you will give insight and guidline to people for beeter life."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "eae5a242-b569-4cd4-8b34-4e29efc763dd",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        880,
        -64
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9691f4f7-be6f-421a-adcc-60e2244a673b",
      "name": "Code-Split-LangChain",
      "type": "n8n-nodes-base.code",
      "position": [
        1232,
        -288
      ],
      "parameters": {
        "jsCode": "const input = items[0].json.text.replace(/[\"\u201c]/g, ''); \n// const input = items[0].json.choices[0].message.content.replace(/[\"\u201c]/g, ''); \nconst lines = input.split('\\n').filter(line => line.trim() !== ''); \n\nreturn [\n  {\n    json: {\n      quote: lines[0] || '',\n      caption: lines[1] || '',\n      hashtags: lines[2] || ''\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "65ea98d7-335b-449f-a176-6bb1842fe888",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        208,
        -288
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dc4cc876-bb3a-4615-9e0b-d51cde616046",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        816,
        -512
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 592,
        "content": "# 2. Quote Generation\n\n* Use Model to generate a new quote\n* Split outcome to Quote, Caption and Hashtag for the next step"
      },
      "typeVersion": 1
    },
    {
      "id": "20f471e4-32dd-4d07-bce6-52cef13320c8",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        -512
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 512,
        "content": "# 3. Save new Quote\n\n* save new quote to the file for the next run"
      },
      "typeVersion": 1
    },
    {
      "id": "fac18206-c76e-4045-8ccb-71b1640302cb",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1840,
        -512
      ],
      "parameters": {
        "color": 7,
        "width": 544,
        "height": 512,
        "content": "# 4. Image Generation and Send Email\n\n* Generate Image based on quote\n* Send email by attach the generated image and include Quote, Caption and Hashtag"
      },
      "typeVersion": 1
    },
    {
      "id": "3104990d-c570-47d2-826a-68ec886bac28",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -512
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 512,
        "content": "# 1. Initial Stage\n\n* Schedule node is running the workflow periodically based on user configuration\n* Next node read all previous generated quotes and convert it to JSON format for the next step to avoid duplicate generation"
      },
      "typeVersion": 1
    },
    {
      "id": "e7cc6bba-55d0-4b42-a26f-8a7ff84d6c1a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        -144
      ],
      "parameters": {
        "color": 3,
        "height": 80,
        "content": "Update System and User Prompt Based on your needs"
      },
      "typeVersion": 1
    },
    {
      "id": "9c1bc39c-4dec-413f-a37f-dddb0fb87a08",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1856,
        -112
      ],
      "parameters": {
        "color": 3,
        "width": 256,
        "height": 80,
        "content": "Update User Prompt if you need to change the image generation style"
      },
      "typeVersion": 1
    },
    {
      "id": "781a8396-7098-4724-920c-d3258511862b",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2128,
        -112
      ],
      "parameters": {
        "color": 3,
        "width": 208,
        "height": 80,
        "content": "Update receiver email address field"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "9HH2EGZy0RsECzde",
    "executionOrder": "v1"
  },
  "versionId": "dd9b6456-4d5a-4386-86f4-e8ace8cacd82",
  "connections": {
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Code-Split-LangChain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Read Text Files from Disk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate an image": {
      "main": [
        [
          {
            "node": "Send email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Code-Split-LangChain": {
      "main": [
        [
          {
            "node": "Convert Quote to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Quote to File": {
      "main": [
        [
          {
            "node": "Write Text Files from Disk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from Text File": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Text Files from Disk": {
      "main": [
        [
          {
            "node": "Extract from Text File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write Text Files from Disk": {
      "main": [
        [
          {
            "node": "Generate an image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}