This workflow corresponds to n8n.io template #11024 — we link there as the canonical source.
This workflow follows the Agent → Google Drive 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "6d0a6c9e-94ba-409c-8d4a-6307fdd68251",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1760,
-976
],
"parameters": {
"options": {
"reset": false
}
},
"executeOnce": false,
"typeVersion": 3,
"alwaysOutputData": false
},
{
"id": "10f454bf-2785-41e7-bd43-bb445fea3e8a",
"name": "Img 1 - Title",
"type": "n8n-nodes-base.editImage",
"position": [
2128,
-752
],
"parameters": {
"text": "={{ $json.slides.title }}",
"options": {
"font": "/usr/YOUR_AWS_SECRET_KEY_HERE_Bold.ttf"
},
"fontSize": "={{ $json.paramsConfig.title.fontSize }}",
"fontColor": "={{ $json.paramsConfig.title.fontColor }}",
"operation": "text",
"positionX": "={{ $json.paramsConfig.title.positionX }}",
"positionY": "={{ $json.paramsConfig.title.positionY }}",
"lineLength": "={{ $json.paramsConfig.title.maxLineLength }}"
},
"typeVersion": 1
},
{
"id": "377fc257-eea0-4206-b3a8-afa722e729b4",
"name": "Img 1 - Description8",
"type": "n8n-nodes-base.editImage",
"position": [
2672,
-752
],
"parameters": {
"text": "={{ $json.slides.description }}",
"options": {
"fileName": "={{ $runIndex + 1 }}.png"
},
"fontSize": "={{ $json.paramsConfig.description.fontSize }}",
"fontColor": "={{ $json.paramsConfig.description.fontColor }}",
"operation": "text",
"positionX": "={{ $json.paramsConfig.description.positionX }}",
"positionY": "={{ $json.paramsConfig.description.positionY }}",
"lineLength": "={{ $json.paramsConfig.description.maxLineLength }}"
},
"typeVersion": 1
},
{
"id": "8b613925-55af-469a-a748-3df3b897c4ba",
"name": "Get Slides And Set Params1",
"type": "n8n-nodes-base.set",
"position": [
2112,
-1312
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8a3213e3-8569-44a3-a806-59efb09237e5",
"name": "slides",
"type": "array",
"value": "={{ $json.body.slides }}"
},
{
"id": "d57a3225-0430-440d-a61b-2983354145e7",
"name": "paramsConfig",
"type": "object",
"value": "={{ $json.body.paramsConfig }}"
},
{
"id": "f79132af-547b-46d9-9695-6ff472a5b016",
"name": "nickname",
"type": "string",
"value": "={{ $json.body.nickname }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "64886cb5-40aa-44fe-8a48-bd5a609b8ce7",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
1488,
-976
],
"parameters": {
"include": "selectedOtherFields",
"options": {
"includeBinary": true
},
"fieldToSplitOut": "slides",
"fieldsToInclude": "paramsConfig,nickname,carouselFolder,isPremiumUser,bucketName"
},
"typeVersion": 1
},
{
"id": "449ff83a-5703-4fc2-b220-cf09fce194e0",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1152,
-1088
],
"parameters": {
"jsonSchemaExample": "{\n \"slides\": [\n {\n \"title\": \"<slide_title>\",\n \"description\": \"<slide_description>\"\n }\n ]\n \n}"
},
"typeVersion": 1.2
},
{
"id": "cb9d2862-eb6d-4571-a4b5-a0e653eab0a9",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
880,
-1312
],
"parameters": {
"text": "=The carousel theme is about: {{ $json.theme }}\n\nThe Call to action (CTA): {{ $json.cta }}",
"options": {
"systemMessage": "=You are **The Carousel Cynic**, an AI expert in 7-slide Instagram/TikTok carousels. When I give you a **Campaign Title**, respond with **only** this JSON structure:\n\n```json\n{\n \"slides\": [\n { \"title\": \"...\", \"description\": \"...\" },\n { \"title\": \"...\", \"description\": \"...\" },\n { \"title\": \"...\", \"description\": \"...\" },\n { \"title\": \"...\", \"description\": \"...\" },\n { \"title\": \"...\", \"description\": \"...\" },\n { \"title\": \"...\", \"description\": \"...\" },\n { \"title\": \"...\", \"description\": \"...\" }\n ]\n}\n```\n\n**Rules for every slide**\n\n* **title**: 50\u201365 characters, no fluff.\n* **description**: 200\u2013300 characters. Each sentence on its own line (separated by `\\n\\n`).\n\n**Overall style**\n\n* Witty and sarcastic, but deeply substantive\u2014like a human writer who\u2019s fed up with clich\u00e9s.\n* No generic hooks (\u201cThink again,\u201d \u201cThe cost of,\u201d etc.). Be direct, no nonsense.\n* Use curiosity hacks and concrete application data\n* Target entrepreneurs/creators with real pain points.\n\n**Slide structure (Post N3)**\n\n1. **Provocation (Slide 1)**\n \u2013 One shocking, counterintuitive statement that flips a common belief and jolts the reader (e.g., \u201cStarting tomorrow won\u2019t save you; you\u2019re already late\u201d).\n\n2. **High-Impact Reflection (Slide 2)**\n \u2013 A concise question or assertion that forces the audience to face a hidden anxiety they avoid.\n\n3. **Why It Matters (Slide 3)**\n \u2013 Integrate a real statistic or study (naturally embedded) showing the cost of inaction.\n\n4. **Deepened Stakes (Slide 4)**\n \u2013 Quantify what they lose (time, revenue, reputation) if they keep old habits like \u201cFocus on what you can change, not on what\u2019s broken\u201d.\n\n5. **Actionable Insight #1 (Slide 5)**\n \u2013 A non-obvious, step-by-step tactic framed as a mental rigor exercise that directly eases their core pain.\n\n6. **Actionable Insight #2 (Slide 6)**\n \u2013 A second advanced method to maintain momentum and build resilience, using a micro-case or real example but not invent a history or a fake person.\n\n7. **Direct CTA (Slide 7)**\n \u2013 One razor-sharp instruction: the **exact** next move they must take. Make it urgent, credible, and effortless. Include the user\u2019s CTA trigger exactly as requested.\n\n**Language rules**\n\n* Match the user\u2019s language (if they use Portuguese, write in Portuguese with perfect diacritics: \u00e1, \u00e9, \u00e7, \u00f5, etc.).\n* No extra commentary\u2014output valid JSON only.\n\n---\n\n**Example of how you\u2019ll be used**\u2014when I send:\n\n```\nCampaign: \u201cExplosive Sale in 30 Days\u201d\n```\n\nYou reply with:\n\n```json\n{\n \"slides\": [\n {\n \"title\": \"\u2026\u201d,\n \"description\": \u201c\u2026\u201d \n },\n \u2026 (7 slides total) \u2026\n ]\n}\n```\n\n\u2014and nothing else.\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "3df3f8dd-fb39-4c4e-aeeb-899bf88762b7",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
-1472
],
"parameters": {
"color": 4,
"width": 680,
"height": 640,
"content": "## \ud83e\udde0 2. AI Agent: Prompt Refinement and Content Draft\nThe internal AI Agent dynamically refines the user's input prompt and uses the Large Language Model (LLM) to generate the structured content (titles and descriptions) needed for each carousel slide."
},
"typeVersion": 1
},
{
"id": "bf7526ea-d0a0-4837-8e8a-5b1e66b2b883",
"name": "xAI Grok Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatXAiGrok",
"position": [
704,
-1056
],
"parameters": {
"options": {
"topP": 0.9,
"temperature": 0.7
}
},
"credentials": {
"xAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "af1bb811-e70d-42ad-85ad-2ec62fdc1eb5",
"name": "Fields: Get Theme and CTA",
"type": "n8n-nodes-base.set",
"position": [
464,
-1312
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "f31a6d33-8442-411f-92e0-697a51407d70",
"name": "theme",
"type": "string",
"value": "={{ $json.body.theme }}"
},
{
"id": "d173d830-1b6e-49fc-bde7-4de29ad765b2",
"name": "cta",
"type": "string",
"value": "={{ $json.body.cta }}"
},
{
"id": "759d0d75-63f3-45bd-a6cd-ad30fb81d410",
"name": "nickname",
"type": "string",
"value": "={{ $json.body.nickname }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a4dd2325-b93e-4bf5-b768-c0e4738e99ad",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2128,
-992
],
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "07e7b4ba-297c-4a5a-9a60-e998511612b8",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-160,
-1312
],
"parameters": {
"path": "ai-carousel-generator",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "9e7dd7dc-d11a-4311-b072-06b85a147750",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-160,
-1056
],
"parameters": {},
"typeVersion": 1
},
{
"id": "fb1f6e5e-bf07-40bd-8e31-664383b20703",
"name": "Upload file",
"type": "n8n-nodes-base.googleDrive",
"position": [
3120,
-752
],
"parameters": {
"name": "={{ $binary.data.fileName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive",
"cachedResultUrl": "https://drive.google.com/drive/my-drive",
"cachedResultName": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "16uxsnNdNklIxCTf7f85JG6ZQJ2HBXsgd",
"cachedResultUrl": "https://drive.google.com/drive/folders/16uxsnNdNklIxCTf7f85JG6ZQJ2HBXsgd",
"cachedResultName": "Output @myuser"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "50601a4e-606c-444a-883b-1f61a062f87d",
"name": "Download file",
"type": "n8n-nodes-base.googleDrive",
"position": [
1760,
-1312
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $json.body.backgroundImage }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "a27b372a-4b73-4c78-acd6-776e896d7d70",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1376,
-1472
],
"parameters": {
"color": 7,
"width": 1944,
"height": 976,
"content": "## \ud83c\udfa8 3. Image Generation Engine\nThis final section processes the parsed content, downloads the necessary background templates, generates the required images using the external Image API, and uploads the completed carousel slides to your storage service."
},
"typeVersion": 1
},
{
"id": "71192cbe-b1e4-466b-a651-980690eaf593",
"name": "Test Params",
"type": "n8n-nodes-base.code",
"position": [
96,
-1056
],
"parameters": {
"jsCode": "return [\n {\n body: {\n theme: \"Our best AI Casousel generator for n8n creators\",\n nickname: \"@myuser\",\n cta: \"Send a DM message\"\n },\n },\n];\n"
},
"typeVersion": 2
},
{
"id": "0513f1ae-ea5e-40b8-a5d8-64c67a451c12",
"name": "Params Style Config",
"type": "n8n-nodes-base.code",
"position": [
1488,
-1312
],
"parameters": {
"jsCode": "return [\n {\n body: {\n slides: $input.first().json.output.slides,\n paramsConfig: {\n title: {\n text: \"Description\",\n fontSize: 36,\n fontColor: \"#ffffff\",\n positionX: 100,\n positionY: 450,\n maxLineLength: 45,\n options: \"No properties\",\n },\n description: {\n text: \"Description\",\n fontSize: 35,\n fontColor: \"#ffffff\",\n positionX: 100,\n positionY: 514.3,\n maxLineLength: 45,\n options: \"No properties\",\n },\n },\n nickname: \"@myuser\",\n backgroundImage:\n \"https://drive.google.com/file/d/1sSXNltB_uZTo2Or8vmb7uH1UXHYUZC89/view?usp=sharing\",\n },\n },\n];\n"
},
"typeVersion": 2
},
{
"id": "af9e82e1-f364-4a3f-9daf-20033098d310",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
-1472
],
"parameters": {
"color": 6,
"width": 856,
"height": 640,
"content": "## \ud83d\ude80 1. Start Execution\nThis node handles the initial workflow trigger and defines all key parameters, including the content topic, target audience, and desired output style.\n"
},
"typeVersion": 1
},
{
"id": "904c9592-9d25-443b-b647-9f8cfcec37c6",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
-2032
],
"parameters": {
"width": 1944,
"height": 496,
"content": "# Automated \"Viral Style\" Carousel Generator for Instagram, Tiktok, Linkedin or X\nThis workflow automatically generates high-engagement carousels for platforms like Instagram, TikTok, LinkedIn, or X. It utilizes an AI Agent to create punchy, concise content and the **Edit Image** node to render the text directly onto your background templates.\n\n**How It Works (4 Steps):**\n1. **Input:** Receives a theme and a Call-to-Action (CTA) via Webhook or manual trigger.\n2. **AI Agent:** The AI Agent, acting as \"The Carousel Cynic,\" generates 7 slides of structured text in JSON format for maximum impact.\n3. **Processing:** The workflow downloads the base background template (Google Drive) and splits the AI content into individual items.\n4. **Image Generation:** The **Edit Image** node overlays the title and description onto the template using coordinates. The finished images are numbered (1.png, 2.png, etc.) and uploaded back to Google Drive, ready for posting.\n\n**Quick Setup:**\nYou must configure credentials for **xAI (Grok)** or your preferred LLM, and **Google Drive**. Adjust the Drive Download and Upload nodes with your background template's `fileId` and the destination folder.\n\n*You can customize the font, color, and position of the text in the **Params** node and adjust the AI Agent's **System Prompt** to match your specific brand voice.*\n\n### Bonus: Editable Canva Background Image Style\nhttps://www.canva.com/design/DAG5Lh40qks/I-PL6LLfIqZBYXOrZUjYGA/edit?utm_content=DAG5Lh40qks&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton"
},
"typeVersion": 1
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Fields: Get Theme and CTA",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Params Style Config",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Test Params": {
"main": [
[
{
"node": "Fields: Get Theme and CTA",
"type": "main",
"index": 0
}
]
]
},
"Upload file": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Download file": {
"main": [
[
{
"node": "Get Slides And Set Params1",
"type": "main",
"index": 0
}
]
]
},
"Img 1 - Title": {
"main": [
[
{
"node": "Img 1 - Description8",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
],
[
{
"node": "Img 1 - Title",
"type": "main",
"index": 0
}
]
]
},
"Params Style Config": {
"main": [
[
{
"node": "Download file",
"type": "main",
"index": 0
}
]
]
},
"xAI Grok Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Img 1 - Description8": {
"main": [
[
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"Fields: Get Theme and CTA": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Get Slides And Set Params1": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Test Params",
"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.
googleDriveOAuth2ApixAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automate your social media content creation with this powerful n8n workflow! Generate engaging, viral-style carousels for Instagram, TikTok, LinkedIn, or X (Twitter) in minutes. This template leverages AI (xAI Grok) to craft compelling, high-retention text and uses n8n's Edit…
Source: https://n8n.io/workflows/11024/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
The best content automation template in the market is now even better—with “deep research” on time-sensitive topics\! Unlike most n8n content automation templates that are mainly for “demo purposes,”
This workflow is designed for: Content creators and marketers E-commerce and product-based businesses Agencies producing social media visuals and videos Automation builders looking for AI-powered crea
Resume Screening & Behavioral Interviews with Gemini, Elevenlabs, & Notion ATS copy. Uses outputParserStructured, chainLlm, googleDrive, stickyNote. Webhook trigger; 67 nodes.
Candidate Engagement | Resume Screening | AI Voice Interviews | Applicant Insights
🧠 Gwen – The AI Voice Marketing Agent Gwen is your intelligent voice-powered marketing assistant built in n8n. She combines the power of OpenAI, ElevenLabs, and automation workflows to handle content