This workflow corresponds to n8n.io template #14000 — we link there as the canonical source.
This workflow follows the Agent → Form Trigger 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 →
{
"id": "Xaq4lLIaOk0q0mDx",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Generate Research-Backed Infographics with AI and kie.ai",
"tags": [],
"nodes": [
{
"id": "50054b91-f707-4554-a4a5-fe16cc452f33",
"name": "Build Image Prompt",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
288,
-96
],
"parameters": {
"text": "=### ROLE\nYou are a world-class Art Director and Prompt Engineer specializing in generative AI for information design. Your goal is to take user requirements and convert them into a highly optimized image generation prompt for a diffusion model.\n\n### YOUR GOAL\nCreate a prompt that results in a clean, legible, and professional infographic. You must prioritize \"readability\" and \"composition\" over artistic flair.\n\n### INPUT DATA\n- Headline: {{ $json['Main Headline'] }}\n- Data Points: {{ $json['Key Data Points'] }}\n- Layout: {{ $json['Layout Structure'] }}\n- Visualization Types: {{ $json['Visualization Options'] }}\n- Tone of Voice: {{ $json['Tone of Voice'] }}\n- Style: {{ $json['Art Style'] }}\n- Information Density: {{ $json['Information Density'] }}\n- Font Family: {{ $json['Font Family'] }}\n- Colors: {{ $json['Color Palette'] }}\n\n### TOOLS\nUse the \"Researcher\" model, which has access to the Internet, to gather the \"Data Points\" that are needed for the infographic.\n\n### PROMPT STRUCTURE RULES\n1. **Subject & Layout:** Start by defining the image type strictly (e.g., \"A vertical infographic vector illustration...\").\n2. **Text Handling:** Modern AI models (like Flux or SD3) can render text if it is capitalized and wrapped in quotes. You MUST extract the \"Headline\" and place it in the prompt as: text \"HEADLINE HERE\". Do not try to fit all data points as literal text; summarize them as visual icons or short labels.\n3. **Style Descriptors:** Use keywords that enforce cleanliness: \"white space,\" \"margins,\" \"grid layout,\" \"vector graphics,\" \"adobe illustrator style,\" \"high resolution.\"\n4. **Negative Weighting (Implicit):** phrasing matters. Avoid \"cluttered,\" \"messy,\" \"illegible.\"\n\n### OUTPUT FORMAT\nReturn ONLY the raw prompt string to be sent to the image generator. Do not add conversational filler or the URLs of the sources for \"Data Points\".\n\n### DYNAMIC PROMPT TEMPLATE (Use this logic)\n\"[Style] infographic featuring text ' [Headline] ' at the top. The layout is [Layout]. Preferred visualization types: [Visualization Types]. Tone of voice: [Tone of Voice]. Art style: [Style]. Information density: [Information Density]. Preferred font family [Font Family]. The design uses a [Colors] color scheme.\nKey visual elements include: [Convert 'Data Points' into visual metaphors, e.g., if data is 'costs down', describe a downward arrow or coin stack].\nHigh quality, professional graphic design, flat vector art, precise lines, extra white space for readability, typography focused.\"",
"options": {},
"promptType": "define"
},
"typeVersion": 3
},
{
"id": "3ec9937d-8285-40eb-97b4-446bacd33325",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
32,
-96
],
"parameters": {
"options": {
"appendAttribution": false
},
"formTitle": "Infographics Maker",
"formFields": {
"values": [
{
"fieldType": "textarea",
"fieldLabel": "Main Headline",
"placeholder": "The Future of Solar Energy (5-7 words)",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Key Data Points",
"placeholder": "What the infographic is about (Global Market Outlook for Solar Power 2025-2030)",
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Target Audience",
"fieldOptions": {
"values": [
{
"option": "Corporate"
},
{
"option": "Educational"
},
{
"option": "Social Media"
},
{
"option": "Technical"
}
]
},
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Tone of Voice",
"fieldOptions": {
"values": [
{
"option": "Professional"
},
{
"option": "Marketing"
},
{
"option": "Neutral"
},
{
"option": "Urgent"
},
{
"option": "Casual"
}
]
},
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Visualization Options",
"fieldOptions": {
"values": [
{
"option": "Prioritize Charts/Graphs"
},
{
"option": "Use Icons & Illustrations"
},
{
"option": "Incorporate Maps"
},
{
"option": "Use Photo Realistic Elements"
}
]
},
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Art Style",
"fieldOptions": {
"values": [
{
"option": "Flat Vector"
},
{
"option": "Isometric"
},
{
"option": "Corporate Memphis"
},
{
"option": "Neon/Cyberpunk"
},
{
"option": "Hand-Drawn/Sketch"
},
{
"option": "Retro Pop Art"
}
]
},
"requiredField": true
},
{
"fieldLabel": "Color Palette",
"placeholder": "Teal and Orange, Monochrome Blue, Pastel, etc.",
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Layout Structure",
"fieldOptions": {
"values": [
{
"option": "Vertical flow from top to bottom"
},
{
"option": "Horizontal linear flow from left to right"
},
{
"option": "Comparison: Split screen (Left vs Right)"
},
{
"option": "Central Hub / Mindmap"
},
{
"option": "Step-by-Step: Numbered list layout"
},
{
"option": "Modular Grid"
}
]
},
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Font Family",
"fieldOptions": {
"values": [
{
"option": "Modern Sans (Roboto/Helvetica)"
},
{
"option": "Classic Serif (Garamond/Times)"
},
{
"option": "Bold Headline (Oswald/Impact)"
},
{
"option": "Tech/Code (Courier/Monospace)"
},
{
"option": "Handwritten (Marker Style)"
},
{
"option": "Elegant/Script (Cursive)"
}
]
},
"requiredField": true
},
{
"fieldType": "radio",
"fieldLabel": "Information Density",
"fieldOptions": {
"values": [
{
"option": "Minimalist"
},
{
"option": "Balanced"
},
{
"option": "Detailed"
}
]
},
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Aspect Ratio",
"fieldOptions": {
"values": [
{
"option": "9:16"
},
{
"option": "2:3"
},
{
"option": "3:4"
},
{
"option": "4:5"
},
{
"option": "1:1"
},
{
"option": "5:4"
},
{
"option": "4:3"
},
{
"option": "3:2"
},
{
"option": "16:9"
},
{
"option": "21:9"
}
]
},
"requiredField": true
},
{
"fieldType": "radio",
"fieldLabel": "Resolution",
"fieldOptions": {
"values": [
{
"option": "1K"
},
{
"option": "2K"
},
{
"option": "4K"
}
]
},
"requiredField": true
},
{
"fieldType": "radio",
"fieldLabel": "Output Format",
"fieldOptions": {
"values": [
{
"option": "png"
},
{
"option": "jpg"
}
]
},
"requiredField": true
}
]
},
"formDescription": "Use AI to Generate Well-Researched, High-Quality Infographics"
},
"typeVersion": 2.3
},
{
"id": "6225a140-0da7-4c7d-bafb-424f00a82b73",
"name": "Generate Infographic",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
640,
-96
],
"parameters": {
"url": "https://api.kie.ai/api/v1/jobs/createTask",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={\n \"model\": \"nano-banana-pro\",\n \"input\": {\n \"prompt\": {{ JSON.stringify($json.output) }},\n \"aspect_ratio\": \"{{ $('On form submission').item.json['Aspect Ratio'] }}\",\n \"resolution\": \"{{ $('On form submission').item.json.Resolution }}\",\n \"output_format\": \"{{ $('On form submission').item.json['Output Format'] }}\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "38f42d17-7e68-4740-887d-0b073bc65a15",
"name": "Route by Job Status",
"type": "n8n-nodes-base.switch",
"position": [
1248,
-368
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "success",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6d7bc14d-465e-4b88-b48d-0503d907df91",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.state }}",
"rightValue": "success"
}
]
},
"renameOutput": true
},
{
"outputKey": "pending",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "783eaa29-4339-479f-8069-60344d0210fb",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.state }}",
"rightValue": "waiting"
},
{
"id": "pending-generating",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.state }}",
"rightValue": "generating"
}
]
},
"renameOutput": true
},
{
"outputKey": "fail",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1db6f4f3-e726-4874-8b48-403809b1cbb4",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data.state }}",
"rightValue": "fail"
}
]
},
"renameOutput": true
}
]
},
"options": {
"fallbackOutput": 2
}
},
"typeVersion": 3.3
},
{
"id": "3ebb7db3-b3b4-46d6-9c36-f67fea80dc0c",
"name": "Download Generated Image",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
1568,
-720
],
"parameters": {
"url": "={{ JSON.parse($json.data.resultJson).resultUrls[0] }}",
"options": {
"response": {
"response": {
"neverError": true
}
}
}
},
"typeVersion": 4.3
},
{
"id": "bde80cd1-0270-4049-b649-d3aedd645b6b",
"name": "Email Image to User",
"type": "n8n-nodes-base.gmail",
"position": [
1840,
-736
],
"parameters": {
"sendTo": "user@example.com",
"message": "Hi, the new infographic is attached to this email.",
"options": {
"attachmentsUi": {
"attachmentsBinary": [
{}
]
},
"appendAttribution": false
},
"subject": "New infographic generated"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "0fd7d6f2-5eeb-46ee-b5ed-5fad5645e3af",
"name": "Researcher",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
288,
96
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {
"webSearch": {
"searchContextSize": "medium"
}
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "a135b4c8-37c4-4ab4-8b04-2e0d291eab11",
"name": "Polling Delay (15s)",
"type": "n8n-nodes-base.wait",
"position": [
880,
-160
],
"parameters": {
"amount": 15
},
"typeVersion": 1.1
},
{
"id": "903cdf74-b9c7-4643-97db-b3b9ef74e54b",
"name": "Increment Retry",
"type": "n8n-nodes-base.code",
"position": [
1584,
-384
],
"parameters": {
"jsCode": "const staticData = $getWorkflowStaticData('global');\n\n// Auto-reset for each new workflow execution\nif (staticData.lastExecutionId !== $execution.id) {\n staticData.retryCount = 0;\n staticData.lastExecutionId = $execution.id;\n}\n\nconst retryCount = (staticData.retryCount || 0) + 1;\nstaticData.retryCount = retryCount;\n\nconst taskId = $input.first().json.data?.taskId || $input.first().json.taskId;\n\nreturn [{ json: { retryCount, taskId } }];"
},
"typeVersion": 2
},
{
"id": "68103b4d-db4c-47a0-8eed-14c76b24db0f",
"name": "Check Timeout",
"type": "n8n-nodes-base.if",
"position": [
1760,
-384
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "timeout-check",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $json.retryCount }}",
"rightValue": 20
}
]
}
},
"typeVersion": 2.2
},
{
"id": "80fda454-4c5d-410c-a1fd-06201e06ca8c",
"name": "Check Job Status",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
1072,
-160
],
"parameters": {
"url": "https://api.kie.ai/api/v1/jobs/recordInfo",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "taskId",
"value": "={{ $json.data?.taskId ?? $json.taskId }}"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "659856d2-8dbd-46cc-afd6-2670ec0a7b69",
"name": "Prepare Error Email",
"type": "n8n-nodes-base.code",
"position": [
2192,
-80
],
"parameters": {
"jsCode": "const input = $input.first().json;\nconst formData = $('On form submission').item.json;\nlet subject, body;\n\nif (input.data?.state === 'fail') {\n subject = 'Infographic generation failed';\n body = `Hi,\\n\\nThe infographic generation failed.\\n\\n**Error Details:**\\n${input.data.errorMessage || 'Unknown error'}\\n\\n**Task ID:** ${input.data.taskId || input.taskId || 'unknown'}\\n\\n**Original Request:**\\n- Headline: ${formData['Main Headline']}\\n- Data Points: ${formData['Key Data Points']}\\n- Style: ${formData['Art Style']}\\n- Layout: ${formData['Layout Structure']}\\n- Aspect Ratio: ${formData['Aspect Ratio']}\\n- Resolution: ${formData['Resolution']}`;\n} else if (input.retryCount !== undefined) {\n subject = 'Infographic generation timed out';\n body = `Hi,\\n\\nThe infographic generation timed out after 20 polling attempts.\\n\\n**Task ID:** ${input.taskId || 'unknown'}\\n\\n**Original Request:**\\n- Headline: ${formData['Main Headline']}\\n- Data Points: ${formData['Key Data Points']}\\n- Style: ${formData['Art Style']}\\n- Layout: ${formData['Layout Structure']}\\n- Aspect Ratio: ${formData['Aspect Ratio']}\\n- Resolution: ${formData['Resolution']}\\n\\nPlease check the kie.ai dashboard for more details.`;\n} else {\n subject = 'Infographic API Error';\n body = `Hi,\\n\\nAn API error occurred during infographic generation.\\n\\n**Error Details:**\\n${JSON.stringify(input, null, 2)}\\n\\n**Original Request:**\\n- Headline: ${formData['Main Headline']}\\n- Data Points: ${formData['Key Data Points']}\\n- Style: ${formData['Art Style']}\\n- Layout: ${formData['Layout Structure']}`;\n}\n\nreturn [{ json: { subject, body } }];"
},
"typeVersion": 2
},
{
"id": "c7b29f15-8cbf-458d-b67b-21d671f3cabc",
"name": "Send Error Email",
"type": "n8n-nodes-base.gmail",
"position": [
2368,
-80
],
"parameters": {
"sendTo": "user@example.com",
"message": "={{ $json.body }}",
"options": {
"appendAttribution": false
},
"subject": "={{ $json.subject }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "75f9b6a5-a226-4b23-b7fb-fcc84871719c",
"name": "Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
-848
],
"parameters": {
"color": 4,
"width": 380,
"height": 1124,
"content": "## \ud83d\uddbc\ufe0f AI Infographic Generator\n\n**Generate research-backed, professionally designed infographics using GPT-4 web search and kie.ai's image AI - no design skills needed.**\n\n---\n\n### Who is this for\n- Marketers & content creators who need data-driven visuals fast\n- Educators and consultants producing professional infographics\n- Anyone who wants to turn a topic into a polished visual without Canva or Photoshop\n\n---\n\n### How it works\n1. User fills in a form (headline, topic, style, layout, colors, resolution, etc.)\n2. An AI Agent (GPT-4 with web search) researches the topic and writes an optimized image generation prompt\n3. The prompt is sent to **kie.ai** (nano-banana-pro model) to generate the infographic\n4. The workflow polls for completion every 15 seconds (up to 20 retries / ~5 min)\n5. On success: the image is downloaded and emailed as an attachment\n6. On failure or timeout: a detailed error email is sent instead\n\n---\n\n### Setup\n1. **OpenAI** - Add your OpenAI API key to the `Researcher` node credential\n2. **kie.ai** - Add your kie.ai Bearer token to a `Header Auth` credential and connect it to `Generate Infographic` and `Check Job Status`\n3. **Gmail** - Connect your Gmail account to `Email Image to User` and `Send Error Email`\n4. Update the recipient (To) email address in both Gmail nodes\n5. Activate the workflow and open the form URL"
},
"typeVersion": 1
},
{
"id": "b941f1b4-80d2-41d1-87c5-9adfc0e4a086",
"name": "Section: User Input",
"type": "n8n-nodes-base.stickyNote",
"position": [
-32,
-224
],
"parameters": {
"color": 5,
"height": 340,
"content": "## \u2460 User Input"
},
"typeVersion": 1
},
{
"id": "271fed77-dd09-4619-a75f-397241144bbb",
"name": "Section: AI Prompt Engineering",
"type": "n8n-nodes-base.stickyNote",
"position": [
256,
-336
],
"parameters": {
"color": 5,
"width": 280,
"height": 588,
"content": "## \u2461 AI Prompt Engineering\nGPT-4 with web search researches your topic and writes an optimized image generation prompt."
},
"typeVersion": 1
},
{
"id": "4f25c833-247e-4a8e-be96-ec1607e83143",
"name": "Section: Generate and Poll",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-496
],
"parameters": {
"color": 5,
"width": 870,
"height": 586,
"content": "## \u2462 Generate & Poll\nSubmits the job to kie.ai, then polls every 15s until complete, failed, or timed out (20 retries max)."
},
"typeVersion": 1
},
{
"id": "240f1056-2d02-4469-9d38-afb3b2b5d065",
"name": "Section: Success Path",
"type": "n8n-nodes-base.stickyNote",
"position": [
1488,
-848
],
"parameters": {
"color": 2,
"width": 560,
"height": 290,
"content": "## \u2463 Success\nDownloads the generated image and emails it as an attachment."
},
"typeVersion": 1
},
{
"id": "d4e53401-8f75-4203-ae82-9ecaeb32c536",
"name": "Section: Error Handling",
"type": "n8n-nodes-base.stickyNote",
"position": [
1488,
-496
],
"parameters": {
"width": 1080,
"height": 576,
"content": "## \u2464 Error Handling\nHandles 3 failure scenarios: generation failure, polling timeout (>20 retries), and API errors. Sends a descriptive error email for each case."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "Nin8EYMkR9vuyKPp",
"timeSavedMode": "fixed",
"availableInMCP": false,
"executionOrder": "v1",
"timeSavedPerExecution": 300
},
"versionId": "d37a673b-86d1-4548-88e4-82dd45ede353",
"connections": {
"Researcher": {
"ai_languageModel": [
[
{
"node": "Build Image Prompt",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Check Timeout": {
"main": [
[
{
"node": "Prepare Error Email",
"type": "main",
"index": 0
}
],
[
{
"node": "Polling Delay (15s)",
"type": "main",
"index": 0
}
]
]
},
"Increment Retry": {
"main": [
[
{
"node": "Check Timeout",
"type": "main",
"index": 0
}
]
]
},
"Check Job Status": {
"main": [
[
{
"node": "Route by Job Status",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Error Email",
"type": "main",
"index": 0
}
]
]
},
"Build Image Prompt": {
"main": [
[
{
"node": "Generate Infographic",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Build Image Prompt",
"type": "main",
"index": 0
}
]
]
},
"Polling Delay (15s)": {
"main": [
[
{
"node": "Check Job Status",
"type": "main",
"index": 0
}
]
]
},
"Prepare Error Email": {
"main": [
[
{
"node": "Send Error Email",
"type": "main",
"index": 0
}
]
]
},
"Route by Job Status": {
"main": [
[
{
"node": "Download Generated Image",
"type": "main",
"index": 0
}
],
[
{
"node": "Increment Retry",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Error Email",
"type": "main",
"index": 0
}
]
]
},
"Generate Infographic": {
"main": [
[
{
"node": "Polling Delay (15s)",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Error Email",
"type": "main",
"index": 0
}
]
]
},
"Download Generated Image": {
"main": [
[
{
"node": "Email Image to User",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Error Email",
"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.
gmailOAuth2httpHeaderAuthopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
A web form collects your infographic parameters: headline, topic, art style, layout, color palette, aspect ratio, resolution, etc. An AI Agent (GPT-4 with live web search) researches your topic and writes an optimized prompt for the image generator The prompt is submitted to…
Source: https://n8n.io/workflows/14000/ — 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.
This workflow automates end-to-end contract and invoice management using AI intelligence. It processes proposals through intelligent contract generation, approval workflows, and automated invoicing. O
Automates SaaS operations by consolidating user management, AI-driven support triage, analytics, and billing into one unified system. User signups flow through registration, support requests route via
The workflow runs every hour with a randomized delay of 5–20 minutes to help distribute load. It records the exact date and time a lead is emailed so you can track outreach. Follow-ups are automatical
This n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360° videos). A form submission seeds a prompt board → an LL
This workflow automatically analyzes a website for UX and SEO quality. It uses Airtop for realistic web scraping, OpenAI for structured evaluation of metadata (title, description, and overall SEO sign