AutomationFlowsAI & RAG › Generate and Post Viral Memes to Instagram with Magichour AI and Gpt-4

Generate and Post Viral Memes to Instagram with Magichour AI and Gpt-4

ByKatie Allred @katiejallred on n8n.io

Automatically create and post viral memes to Instagram every 12 hours with AI-powered captions and bulletproof reliability

Cron / scheduled trigger★★★★☆ complexityAI-powered11 nodesHTTP RequestOpenAIStop And Error
AI & RAG Trigger: Cron / scheduled Nodes: 11 Complexity: ★★★★☆ AI nodes: yes Added:
Generate and Post Viral Memes to Instagram with Magichour AI and Gpt-4 — n8n workflow card showing HTTP Request, OpenAI, Stop And Error integration

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

This workflow follows the HTTP Request → OpenAI 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
{
  "id": "YOUR_WORKFLOW_ID",
  "meta": {
    "templateId": "ai-instagram-meme-generator",
    "templateCredsSetupCompleted": false
  },
  "name": "\ud83e\udd16 AI Instagram Meme Generator",
  "tags": [
    "social-media",
    "instagram",
    "ai",
    "automation",
    "memes",
    "content-creation",
    "late-api",
    "viral-content"
  ],
  "nodes": [
    {
      "id": "wait-for-generation",
      "name": "\u23f3 Wait for Generation",
      "type": "n8n-nodes-base.wait",
      "notes": "Allows time for AI meme generation to complete",
      "position": [
        680,
        240
      ],
      "parameters": {
        "amount": 20
      },
      "typeVersion": 1.1
    },
    {
      "id": "schedule-trigger",
      "name": "\ud83d\udcc5 Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "notes": "Runs every 12 hours - customize the interval as needed",
      "position": [
        240,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "get-generated-image",
      "name": "\ud83d\uddbc\ufe0f Get Generated Image",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Retrieves the completed meme from MagicHour API",
      "position": [
        920,
        240
      ],
      "parameters": {
        "url": "=https://api.magichour.ai/v1/image-projects/{{ $('\ud83c\udfa8 Generate Meme').item.json.id }}",
        "options": {
          "retry": {
            "enabled": true,
            "maxAttempts": 3,
            "waitBetween": 1000
          },
          "timeout": 30000
        },
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "generate-meme",
      "name": "\ud83c\udfa8 Generate Meme",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Creates AI-generated meme using MagicHour API - customize the topic prompt for your niche",
      "position": [
        460,
        240
      ],
      "parameters": {
        "url": "https://api.magichour.ai/v1/ai-meme-generator",
        "method": "POST",
        "options": {
          "retry": {
            "enabled": true,
            "maxAttempts": 2,
            "waitBetween": 2000
          },
          "timeout": 30000
        },
        "jsonBody": "{\n  \"name\": \"AI Generated Meme - {{ new Date().toISOString() }}\",\n  \"style\": {\n    \"topic\": \"Create a funny, relatable meme that would go viral on Instagram. Focus on everyday situations, trending topics, or universal experiences that people can relate to. Keep it light-hearted and shareable. Avoid controversial topics.\",\n    \"template\": \"Random\",\n    \"searchWeb\": true\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "check-image-ready",
      "name": "\u2705 Check Image Ready",
      "type": "n8n-nodes-base.if",
      "notes": "Validates that the meme was generated successfully before proceeding",
      "position": [
        1160,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "image-check",
              "operator": {
                "type": "boolean",
                "operation": "equal"
              },
              "leftValue": "={{ $json.downloads && $json.downloads.length > 0 }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "generate-caption",
      "name": "\ud83d\udcdd Generate AI Caption",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "notes": "Creates engaging Instagram caption with hashtags using GPT-4",
      "position": [
        1400,
        160
      ],
      "parameters": {
        "text": "Analyze this meme image and write a viral Instagram caption that will maximize engagement. Requirements:\n\n1. Write 1-2 sentences that are funny, relatable, and encourage interaction\n2. Include 5-8 relevant hashtags that match the meme content\n3. Add a call-to-action (like 'Tag someone who...', 'Double tap if...', or 'Comment if...')\n4. Keep the total caption under 150 characters for better mobile viewing\n5. Use emojis strategically but don't overuse them\n6. Make it shareable - something people want to repost\n\nDO NOT include quotation marks, intro text, or explanations. Write ONLY the final caption ready to post.",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "resource": "image",
        "imageUrls": "={{ $json.downloads[0].url }}",
        "operation": "analyze"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "post-to-instagram",
      "name": "\ud83d\udcf1 Post to Instagram",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Schedules the meme post to Instagram via Late API - posts 5 minutes after generation",
      "position": [
        1880,
        160
      ],
      "parameters": {
        "url": "https://getlate.dev/api/v1/posts",
        "method": "POST",
        "options": {
          "retry": {
            "enabled": true,
            "maxAttempts": 3,
            "waitBetween": 2000
          },
          "timeout": 15000
        },
        "jsonBody": "={\n  \"content\": \"{{ $('\ud83d\udcdd Generate AI Caption').item.json.content }}\",\n  \"scheduledFor\": \"{{ new Date(Date.now() + 5*60*1000).toISOString() }}\",\n  \"timezone\": \"America/New_York\",\n  \"platforms\": [\n    {\n      \"platform\": \"instagram\",\n      \"accountId\": \"YOUR_INSTAGRAM_ACCOUNT_ID\"\n    }\n  ],\n  \"mediaItems\": [\n    {\n      \"type\": \"image\",\n      \"url\": \"{{ $('\ud83d\uddbc\ufe0f Get Generated Image').item.json.downloads[0].url }}\",\n      \"altText\": \"AI-generated meme for Instagram engagement\"\n    }\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "get-profiles",
      "name": "\ud83d\udc64 Get Late Profiles",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Retrieves your Late account profiles - used for account validation",
      "position": [
        1400,
        320
      ],
      "parameters": {
        "url": "https://getlate.dev/api/v1/profiles",
        "options": {
          "timeout": 10000
        },
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "get-accounts",
      "name": "\ud83d\udd17 Get Connected Accounts",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Gets your connected social media accounts from Late",
      "position": [
        1640,
        320
      ],
      "parameters": {
        "url": "https://getlate.dev/api/v1/accounts",
        "options": {
          "timeout": 10000
        },
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "profileId",
              "value": "YOUR_LATE_PROFILE_ID"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "handle-generation-error",
      "name": "\u274c Handle Generation Error",
      "type": "n8n-nodes-base.stopAndError",
      "notes": "Gracefully handles cases where meme generation fails",
      "position": [
        1160,
        400
      ],
      "parameters": {
        "content": "\ud83d\udea8 Meme generation failed! \n\nThe AI couldn't create a meme this time. This might be due to:\n- API rate limits\n- Temporary service issues\n- Network connectivity problems\n\nThe workflow will try again in the next scheduled run (12 hours).\n\nNo action needed - this is automatically handled! \u2705",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "log-success",
      "name": "\ud83d\udcca Log Success",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Optional: Logs successful workflow execution - replace URL with your logging service",
      "position": [
        2120,
        160
      ],
      "parameters": {
        "url": "https://httpbin.org/post",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"workflow_run\": {\n    \"timestamp\": \"{{ new Date().toISOString() }}\",\n    \"status\": \"success\",\n    \"meme_generated\": true,\n    \"caption_created\": true,\n    \"instagram_scheduled\": true,\n    \"image_url\": \"{{ $('\ud83d\uddbc\ufe0f Get Generated Image').item.json.downloads[0].url }}\",\n    \"caption_preview\": \"{{ $('\ud83d\udcdd Generate AI Caption').item.json.content.substring(0, 50) }}...\",\n    \"next_run\": \"{{ new Date(Date.now() + 12*60*60*1000).toISOString() }}\"\n  }\n}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": {
      "errorWorkflow": "",
      "continueOnFail": false
    },
    "executionOrder": "v1",
    "saveManualExecutions": true
  },
  "versionId": "YOUR_VERSION_ID",
  "connections": {
    "\ud83c\udfa8 Generate Meme": {
      "main": [
        [
          {
            "node": "\u23f3 Wait for Generation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u2705 Check Image Ready": {
      "main": [
        [
          {
            "node": "\ud83d\udcdd Generate AI Caption",
            "type": "main",
            "index": 0
          },
          {
            "node": "\ud83d\udc64 Get Late Profiles",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u274c Handle Generation Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcc5 Schedule Trigger": {
      "main": [
        [
          {
            "node": "\ud83c\udfa8 Generate Meme",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udc64 Get Late Profiles": {
      "main": [
        [
          {
            "node": "\ud83d\udd17 Get Connected Accounts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcf1 Post to Instagram": {
      "main": [
        [
          {
            "node": "\ud83d\udcca Log Success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u23f3 Wait for Generation": {
      "main": [
        [
          {
            "node": "\ud83d\uddbc\ufe0f Get Generated Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcdd Generate AI Caption": {
      "main": [
        [
          {
            "node": "\ud83d\udcf1 Post to Instagram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udd17 Get Connected Accounts": {
      "main": [
        [
          {
            "node": "\ud83d\udcf1 Post to Instagram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\uddbc\ufe0f Get Generated Image": {
      "main": [
        [
          {
            "node": "\u2705 Check Image Ready",
            "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

Automatically create and post viral memes to Instagram every 12 hours with AI-powered captions and bulletproof reliability

Source: https://n8n.io/workflows/8545/ — 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

This automation is a complete end-to-end system designed to find, qualify, and contact B2B leads — fully automated and powered by AI. Searches for target companies on LinkedIn via Ghost Genius API, us

Google Sheets, HTTP Request, OpenAI +1
AI & RAG

AI Institutional Stock Valuation Engine with Risk Scoring & Scenario Targets

Google Sheets, XML, HTTP Request +3
AI & RAG

Overview This is a production-grade, fully automated stock analysis system built entirely in n8n. It combines institutional-level financial analysis, dual AI model consensus, and a self-improving back

Google Sheets, XML, HTTP Request +3
AI & RAG

This workflow is a complete outbound automation system that discovers local businesses, extracts contact emails, generates personalized cold emails using AI, and runs a multi-step follow-up sequence —

Stop And Error, Google Sheets, HTTP Request +2
AI & RAG

This comprehensive n8n automation template orchestrates a complete end-to-end workflow for generating engaging short-form Point-of-View (POV) style videos using multiple AI services and automatically

HTTP Request, OpenAI, Google Drive +4