{
  "name": "n8n workflow",
  "nodes": [
    {
      "id": "dd335175-435e-4498-8e7b-5183815fe84e",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1792,
        864
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "88960c7f-f600-44ef-ad3a-f6698b0304e7",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -1088,
        640
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "output.image_prompts"
      },
      "typeVersion": 1
    },
    {
      "id": "1e7c2559-32ae-4f8d-8205-11f5ba7baeef",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -880,
        640
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "08788160-c86a-4f60-b5bb-867e66e722f8",
      "name": "Post image Cloudinary2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -432,
        832
      ],
      "parameters": {
        "url": "=https://api.cloudinary.com/v1_1/{{ $('Set input data/credintenials').item.json['cloudinary account name'] }}/image/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "upload_preset",
              "value": "unsigned_upload"
            },
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "=data"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4fc4c555-050c-46c5-b1ac-b0ea7eac25f4",
      "name": "Set Output Image",
      "type": "n8n-nodes-base.set",
      "position": [
        -224,
        832
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0c5e0bb8-b540-4530-99cb-d1b54c2444b9",
              "name": "image_url",
              "type": "string",
              "value": "={{ $json.url }}"
            },
            {
              "id": "87a1b039-6306-4d8c-a20c-a9e7368fb981",
              "name": "descritption_image",
              "type": "string",
              "value": "={{ $('Split Out').item.json['output.image_prompts'] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ee711c54-eb53-4bcd-9fa6-a17dfe75ab6b",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -1536,
        864
      ],
      "parameters": {
        "autoFix": true,
        "jsonSchemaExample": "{\n  \"title\": \"Clear, keyword-rich title (max. 60 chars)\",\n  \"slug\": \"url-friendly-lowercase-hyphenated\",\n  \"meta\": \"Concise meta description (max. 160 chars, includes keywords)\",\n  \"keywords\": [\"keyword1\", \"keyword2\", \"keyword3\", \"keyword4\", \"keyword5\"],\n  \"excerpt\": \"1–2 sentence factual and engaging summary\",\n  \"description \": \"full description about blog, with all necessary information, and link to source\",\n  \"image_prompts\": [\n    \"Prompt for first relevant image (describe scene, style, purpose)\",\n    \"Prompt for second relevant image (describe scene, style, purpose)\"\n  ],\n  \"sources\": [\n    \"https://source-link-1.com\",\n    \"https://source-link-2.com\"\n  ]\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "6825aea6-7b1f-4bbd-99f3-a2c1abbaf92b",
      "name": "OpenAI Chat Model4",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1488,
        992
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "aaeadb07-e6dc-481b-b608-e476ea52f089",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        -48,
        624
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "images"
      },
      "typeVersion": 1
    },
    {
      "id": "dcfcb3d4-7210-420d-851f-053fd798da91",
      "name": "Article wrtiter",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        160,
        624
      ],
      "parameters": {
        "text": "=Create me a full ready conetnt  to article in my blog .\n\nTitle of article: {{ $('Content planer').item.json.output.title }}\nDescription: {{ $('Content planer').item.json.output['description '] }};\nOptional sources: {{ $('Content planer').item.json.output.sources }}.\n\nAvalible images urls to add betwen text:\nImage 1:\n-url: {{ $json.images[0].image_url }}\n-description:{{ $json.images[0].descritption_image }}\nImage 2:\n-url:{{ $json.images[1].image_url }}\n-description: {{ $json.images[1].descritption_image }}\n\nCompany/brand information where and for who you writnig too:\n{{ $('Set input data/credintenials').item.json['b/c_information'] }}\n\nGive me the html as a raw multiline text. Do not format it as JSON, do not escape newlines.\n",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are a Long-Form Blog Writer. Produce a complete, publication-ready HTML article body using the brand brief, the approved content plan (outline), and the provided images.\n\nHard rules (STRICT):\n\nOutput only HTML. No JSON, no Markdown, no comments, no extra prose.\n\nDo not include title, slug, excerpt, meta, or any front matter.\n\nFollow the plan_json.outline for structure and coverage.\n\nRespect the brand tone from brand_brief. Be precise, actionable, and factual.\n\nTarget word count within ±10% of target_word_count.\n\nHTML requirements:\n\nUse semantic HTML5 only: <article>, <section>, <h2>–<h3>, <p>, <ul>, <ol>, <blockquote>, <figure>, <img>, <figcaption>, <nav>, <aside>, <footer>.\n\nNo <h1> (title is handled elsewhere). Start main sections with <h2>.\n\nOptional Table of Contents as <nav> with anchor links to sections in the outline.\n\nInsert images as <figure> elements:\n\nUse loading=\"lazy\" for all images.\n\nProvide descriptive alt text (keyword-aware, no stuffing).\n\nIf an image has place_after_section_id, insert it immediately after that section; otherwise choose the most relevant place.\n\nInclude 1–2 short pull quotes via <blockquote>.\n\nAdd a concise TL;DR in an <aside> near the top (no title/excerpt duplication).\n\nEnd with a short actionable conclusion and, if appropriate, a brand-aligned CTA inside <footer>.\n\nFactuality & SEO/RAO:\n\nUse definitions and scannable sentences that AI systems can extract.\n\nIf the outline references sources, link them with <a href=\"...\"> (no bibliography header).\n\nFailure conditions:\n\nIf required inputs are missing, produce an empty <article></article> (no explanations)."
            }
          ]
        },
        "promptType": "define"
      },
      "retryOnFail": false,
      "typeVersion": 1.7
    },
    {
      "id": "f3a197b2-29d3-4322-8f5a-a0c549f0ca18",
      "name": "Generate an image1",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "disabled": true,
      "position": [
        -672,
        928
      ],
      "parameters": {
        "prompt": "=generate a image {{ $json['output.image_prompts'] }}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/imagen-4.0-ultra-generate-001",
          "cachedResultName": "models/imagen-4.0-ultra-generate-001"
        },
        "options": {
          "sampleCount": 1
        },
        "resource": "image"
      },
      "typeVersion": 1
    },
    {
      "id": "7226e7d9-c945-499f-8b97-1f26ecbe1025",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        240,
        848
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "4869b64e-325c-41e1-92f4-bf0a87fb073f",
      "name": "Set input data/credintenials",
      "type": "n8n-nodes-base.set",
      "position": [
        -2016,
        640
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1bd0fb56-c400-4952-94b9-bbc18f23bfe9",
              "name": "blog_title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "36180a03-a475-4925-b269-883ab9be02c2",
              "name": "blog_s_descritpion",
              "type": "string",
              "value": "={{ $json.short_description }}"
            },
            {
              "id": "083f1b01-71be-45ff-815d-31a92527d758",
              "name": "cloudinary account name",
              "type": "string",
              "value": "[YOUR CLOUDINARY NAME]"
            },
            {
              "id": "df979676-af5c-4d32-a65f-f110c5c40693",
              "name": "pexcelAPI",
              "type": "string",
              "value": "[PEXELS API KEY(OPTIONAL)]"
            },
            {
              "id": "a2cf59c7-6c86-421f-a745-dc7c1e3dde2b",
              "name": "b/c_information",
              "type": "string",
              "value": "[INFORMATION ABOUT YOUR WEBSITE OR COMPANY, DEPENDS FOR WHAT YOU WRITING ]"
            },
            {
              "id": "0fbb9a7a-b741-4b61-8d4c-c79adcf221ae",
              "name": "wordpres website url",
              "type": "string",
              "value": "[YOUR WORDPRESS URL, EXAMPLE: https.example.com]"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4c7d3e6f-f4fd-4d53-9279-6d754d9b9d89",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        -2240,
        640
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "91e1913f-a2f9-4de5-8e64-3e7198b97166",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2688,
        640
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8af1cb8c-8769-4c81-b07f-c3f47b92dd32",
      "name": "Message a model in Perplexity",
      "type": "n8n-nodes-base.perplexityTool",
      "position": [
        -1664,
        864
      ],
      "parameters": {
        "model": "sonar-pro",
        "options": {},
        "messages": {
          "message": [
            {
              "content": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('message0_Text', ``, 'string') }}"
            }
          ]
        },
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "b2730379-076d-4159-88ab-349ab41658c4",
      "name": "Get data databse",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -2464,
        640
      ],
      "parameters": {
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "f3cd4ba9-2b5c-4845-a18e-cb8658fcff16",
      "name": "Set Image on Wordpress Post1",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "disabled": true,
      "position": [
        2256,
        1584
      ],
      "parameters": {
        "url": "={{ $('Set input data/credintenials').item.json['wordpres website url'] }}/wp-json/wp/v2/posts/{{ $('Create a post').item.json.id }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "=featured_media",
              "value": "={{ $json.id }}"
            }
          ]
        },
        "nodeCredentialType": "wordpressApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "fdfb023b-4406-431f-a6b4-bc935a55bd6f",
      "name": "WordPress excerpt add1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        736,
        624
      ],
      "parameters": {
        "url": "={{ $('Set input data/credintenials').item.json['wordpres website url'] }}/wp-json/wp/v2/posts/{{ $json.id }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "excerpt",
              "value": "={{ $('Content planer').item.json.output.excerpt }}"
            }
          ]
        },
        "nodeCredentialType": "wordpressApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "bbdbb0d8-f4b5-4c9d-b899-633d7516aa71",
      "name": "OpenAI 4.1 mini4",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "disabled": true,
      "position": [
        1312,
        1808
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-nano",
          "cachedResultName": "gpt-4.1-nano"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "efce7b6b-8ad0-48f3-bb5b-f4157cdb6549",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "disabled": true,
      "position": [
        2480,
        1584
      ],
      "parameters": {
        "columns": {
          "value": {
            "title": "={{ $('Set input data/credintenials').item.json.blog_title }}",
            "created": "True"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "short_description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "short_description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "created",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "title"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1g-FcTEqsD_F7Sqw2CNbe40kTavFXq_4l4r5AZsvdPiU/edit#gid=0",
          "cachedResultName": "Arkusz1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "0f6717f2-2251-4bff-a6d7-25fce471dfe0",
      "name": "Create a post",
      "type": "n8n-nodes-base.wordpress",
      "position": [
        544,
        624
      ],
      "parameters": {
        "title": "={{ $('Content planer').item.json.output.title }}",
        "additionalFields": {
          "slug": "={{ $('Content planer').item.json.output.slug }}",
          "format": "standard",
          "status": "publish",
          "sticky": false,
          "content": "={{ $json.text }}",
          "authorId": 3,
          "commentStatus": "closed"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "41046d75-8036-499b-b981-ebf0b6689558",
      "name": "upload image to wordpress",
      "type": "n8n-nodes-base.httpRequest",
      "disabled": true,
      "position": [
        2032,
        1584
      ],
      "parameters": {
        "url": "={{ $('Set input data/credintenials').item.json['wordpres website url'] }}/wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename={{ $json.photos[0].src.original }}"
            }
          ]
        },
        "inputDataFieldName": "image",
        "nodeCredentialType": "wordpressApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "4a0fcee6-ab7d-4b7a-b86b-dc9e5bf3de40",
      "name": "Content planer",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1744,
        640
      ],
      "parameters": {
        "text": "=Blog article title: {{ $json.blog_title }}\nShort descritpion: {{ $json.blog_s_descritpion }}\n\nCompany/brand information: {{ $json['b/c_information'] }}\n",
        "options": {
          "systemMessage": "=You are an AI Content Strategist specializing in creating unique, SEO-optimized, and RAO-friendly long-form blog content ideas.\n\nYour workflow is as follows:\n\nRead the brand brief provided in the user prompt and follow it strictly.\n\nCheck history: Use the google_sheet tool to retrieve all previously generated topics and avoid duplication.\n\nResearch: Use the perplexity tool to gather additional supporting information, statistics, and reputable sources. Include 2–3 source links in the final outline where relevant.\n\nCreate a complete content plan for a blog article that is:\n\nUnique, evergreen, and aligned with the brand strategy.\n\nValuable for both SEO and RAO (AI-driven search).\n\nWell-structured and highly detailed, showing what should be written in each section.\n\nOutput format: Return only a single JSON object with the following fields:\n\n{\n  \"title\": \"Clear, keyword-rich title (max. 60 chars)\",\n  \"slug\": \"url-friendly-lowercase-hyphenated\",\n  \"meta\": \"Concise meta description (max. 160 chars, includes keywords)\",\n  \"keywords\": [\"keyword1\", \"keyword2\", \"keyword3\", \"keyword4\", \"keyword5\"],\n  \"excerpt\": \"1–2 sentence factual and engaging summary\",\n  \"description \": \"full description about blog, with all necessary information, and link to source\"\n  ],\n  \"image_prompts\": [\n    \"Prompt for first relevant image (describe scene, style, purpose)\",\n    \"Prompt for second relevant image (describe scene, style, purpose)\"\n  ],\n  \"sources\": [\n    \"https://source-link-1.com\",\n    \"https://source-link-2.com\"\n  ]\n}\n\n\n\nRules:\n\nNever write the full article text. Only provide the plan and structure.\n\nSources must be real, credible, and derived from Perplexity.\n\nImage prompts must describe visuals that add value inside the article (not generic).\n\nAlways ensure topic originality vs. history from Google Sheets.\n\nMaintain factual, professional, and SEO-focused tone."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "125d0d99-28b3-45c8-906a-14770aab1328",
      "name": "Get Image from Pexels",
      "type": "n8n-nodes-base.httpRequest",
      "disabled": true,
      "position": [
        1584,
        1584
      ],
      "parameters": {
        "url": "https://api.pexels.com/v1/search",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "query",
              "value": "={{ $json.text }}"
            },
            {
              "name": "per_page",
              "value": "1"
            },
            {
              "name": "orientation",
              "value": "landscape"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "62078278-c135-4efa-ba95-dff9c7c94b20",
      "name": "Write query too pexels",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "disabled": true,
      "position": [
        1232,
        1584
      ],
      "parameters": {
        "text": "=Title: {{ $('Content planer').item.json.output.title }}\nDescription:{{ $json.excerpt.raw }}\n\nConvert the above title into the single best Pexels keyword phrase following every instruction in the system prompt.  \nReturn ONLY the keyword phrase.",
        "messages": {
          "messageValues": [
            {
              "message": "=You are an expert prompt‑engine and image curator.  \nYour ONLY task is to reduce a single blog‑post titleto the **best possible Pexels keyword phrase**.  \nFollow these rules exactly:\n\n1.Choose 1‑3 concrete visual nouns** that can actually appear in a photo (e.g. [EXAMPLES OF KEYWORDS LIKE \"LONDON\", \"ROBOT\",\"NATURE\"]). Remove abstract terms like ‘outlook’, ‘sentiment’, ‘future’.\n\n2.Keep it SHORT: \n   • Maximum 3 words total.  \n   • Prefer single‑ or double‑word phrases when possible.  \n   • No adjectives such as ‘beautiful’, ‘cool’, ‘nice’.\n\n3. English only\n\n4.Output format \n   • Return **only** the keyword phrase, in plain text, no quotes, no commas, no additional words.  \n   \n5. Fallback\n   • If the title is too abstract, return one of:  \n     [SAFE QUERRY SEARCH]\n\nNever add orientation, size, JSON, markdown, or explanations.  \nReturn exactly one line containing only the keywords.\n"
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "4f125342-aca8-4f9d-90b1-c216670e4e2d",
      "name": "Download Image form Pexels",
      "type": "n8n-nodes-base.httpRequest",
      "disabled": true,
      "position": [
        1808,
        1584
      ],
      "parameters": {
        "url": "={{ $json.photos[0].src.original }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file",
              "outputPropertyName": "image"
            }
          }
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "22934586-b284-408f-a062-170c1efeca2e",
      "name": "OpenAI 4.1 mini5",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1424,
        928
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-nano",
          "cachedResultName": "gpt-4.1-nano"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "5f80a9ac-00c7-4bb5-82d2-22ee50a332d0",
      "name": "Write query too image AI generator",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1344,
        704
      ],
      "parameters": {
        "text": "=Title: {{ $('Content planer').item.json.output.title }}\nDescription:{{ $json.excerpt.raw }}\n\nConvert the above title into the single best promopt to AI image genrator like midjourney or Leonardo AI",
        "messages": {
          "messageValues": [
            {
              "message": "=You are an expert prompt engineer specialized in creating header images for blog articles.\nYour ONLY task is to transform a blog article’s title and excerpt into the best possible image generation prompt.\n\nRules:\n\nThe image must serve as a header illustration for a blog article.\n\nAlways use concrete visual nouns and scenes that can be illustrated.\n\nFocus on places, objects, actions, or people that match the article’s theme.\n\nAdd descriptive context:\n\nMood (professional, minimalist, cinematic, modern, vintage, futuristic, etc.)\n\nStyle (digital art, illustration, flat design, cinematic photo, infographic, etc.)\n\nSetting or environment (city, office, nature, abstract background, etc.)\n\nKeep prompts between 20–40 words.\n\nAlways in English.\n\nOutput format:\n\nReturn only one final image prompt in plain text.\n\nDo not add explanations, quotes, markdown, or JSON.\n\nFallback:\n\nIf the content is abstract, create a conceptual illustration prompt (e.g. \"abstract geometric shapes, futuristic digital art, minimal composition\")."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "c391978e-0293-44c9-9ca3-8e3f0d29f790",
      "name": "Generate an image",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1696,
        704
      ],
      "parameters": {
        "model": "gpt-image-1",
        "prompt": "={{ $json.text }}",
        "options": {
          "size": "1536x1024"
        },
        "resource": "image"
      },
      "typeVersion": 1.8
    },
    {
      "id": "aa07d937-0efc-4b5a-a41a-49c07b1d9613",
      "name": "Set Image on Wordpress Post2",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        2160,
        704
      ],
      "parameters": {
        "url": "={{ $('Set input data/credintenials').item.json['wordpres website url'] }}/wp-json/wp/v2/posts/{{ $('Create a post').item.json.id }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "=featured_media",
              "value": "={{ $json.id }}"
            }
          ]
        },
        "nodeCredentialType": "wordpressApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "a03b946c-e50d-4689-a46e-fd1bcc002e81",
      "name": "upload image to wordpress1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1936,
        704
      ],
      "parameters": {
        "url": "={{ $('Set input data/credintenials').item.json['wordpres website url'] }}/wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename={{$now}}.png"
            }
          ]
        },
        "inputDataFieldName": "data",
        "nodeCredentialType": "wordpressApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "51e51946-f732-4073-8877-3b2e4576c49c",
      "name": "Append or update row in sheet1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2384,
        704
      ],
      "parameters": {
        "columns": {
          "value": {
            "title": "={{ $('Set input data/credintenials').item.json.blog_title }}",
            "created": "True"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "short_description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "short_description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "created",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "title"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1g-FcTEqsD_F7Sqw2CNbe40kTavFXq_4l4r5AZsvdPiU/edit#gid=0",
          "cachedResultName": "Arkusz1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "5df16502-5937-4e30-9f3f-3b9fccd61aeb",
      "name": "Generate an image2",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -672,
        736
      ],
      "parameters": {
        "model": "gpt-image-1",
        "prompt": "=generate a image {{ $json['output.image_prompts'] }}",
        "options": {},
        "resource": "image"
      },
      "typeVersion": 1.8
    },
    {
      "id": "4db7d406-2736-47ba-9bf4-f9914c7df679",
      "name": "Generate an image3",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "disabled": true,
      "position": [
        1696,
        912
      ],
      "parameters": {
        "prompt": "={{ $json.text }}",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/imagen-4.0-ultra-generate-001",
          "cachedResultName": "models/imagen-4.0-ultra-generate-001"
        },
        "options": {
          "sampleCount": 1
        },
        "resource": "image"
      },
      "typeVersion": 1
    },
    {
      "id": "63766081-778c-4f1c-a5d7-6430811d7522",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2800,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 928,
        "height": 1264,
        "content": "# 1) Setup & Inputs\n\n**Purpose:** Initialize run cadence, fetch a new row, and inject all credentials and static config used later.\n\n**Nodes in this section**\n- **Schedule Trigger** — Runs the workflow on a time-based interval.\n- **Get data database (Google Sheets)** — Reads one unpublished row (`created` is empty) from the sheet `Arkusz1`.\n- **Limit** — Ensures only a single row is processed per run.\n- **Set input data/credintenials (Set)** — Stores working variables, e.g.:\n  - `blog_title`, `blog_s_descritpion`\n  - `cloudinary account name`\n  - `dev.to api key`\n  - `pexcelAPI`\n  - `b/c_information` (brand brief)\n  - `wordpres website url`\n\n**Key settings**\n- Google Sheets filter: `created == \"\"`\n- Keep credentials here to avoid hard-coding elsewhere.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "17156bd7-e918-4f2b-9093-bd1a84f9a973",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1856,
        16
      ],
      "parameters": {
        "color": 6,
        "width": 704,
        "height": 1264,
        "content": "# 2) Content Planning (AI Research → Plan JSON)\n\n**Purpose:** Create a complete content plan (title, slug, meta, excerpt, description, image prompts, sources) with research support.\n\n**Nodes in this section**\n- **OpenAI Chat Model** — LLM used by the agent for planning.\n- **OpenAI Chat Model4** — LLM dedicated to the structured parser.\n- **Structured Output Parser1** — Enforces the JSON schema for the plan.\n- **Message a model in Perplexity** — Research tool; returns credible sources to cite.\n- **Content planer (Agent)** — Orchestrates: checks history, researches via Perplexity, outputs strictly structured JSON.\n\n**Outputs (from `Content planer`)**\n- `output.title`, `output.slug`, `output.meta`, `output.excerpt`, `output[\"description \"]`\n- `output.image_prompts` (array)\n- `output.sources` (array)\n\n**Notes**\n- Parser auto-fix is enabled to harden the JSON shape.\n- This section must finish before any image/text generation starts.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "29c1eab0-a65b-44db-82aa-67235d46a3d7",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        16
      ],
      "parameters": {
        "color": 6,
        "width": 1232,
        "height": 1264,
        "content": "# 3) Inline Images For The Article Body\n\n**Purpose:** Generate 1–N inline images based on the plan and prepare them for insertion into the HTML body.\n\n**Flow**\n1. **Split Out** — Iterates over `output.image_prompts`.\n2. **Loop Over Items** — Controls per-prompt processing.\n3. **Generate an image2 (OpenAI Image)** *(active)* or **Generate an image1 (Gemini)** *(disabled)* — Creates the image file from the current prompt.\n4. **Post image Cloudinary2 (HTTP Request)** — Uploads image to Cloudinary using `unsigned_upload` preset.\n5. **Set Output Image (Set)** — Saves:\n   - `image_url` → `{{ $json.url }}`\n   - `descritption_image` → the original prompt\n6. Loop returns to **Loop Over Items** until all prompts are processed.\n7. **Aggregate** — Collects all `{ image_url, descritption_image }` into `images` array for the writer.\n\n**Key settings**\n- Cloudinary upload URL: `https://api.cloudinary.com/v1_1/{{ cloudinary account name }}/image/upload`\n- `upload_preset`: `unsigned_upload`\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5e10f73b-c6bc-43c8-a9f4-6c88255dc063",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        16
      ],
      "parameters": {
        "color": 6,
        "width": 368,
        "height": 1264,
        "content": "# 4) Article Writing (HTML Only)\n\n**Purpose:** Produce a clean, publication-ready HTML body that embeds the inline images where appropriate.\n\n**Nodes**\n- **OpenAI Chat Model1** — LLM for writing.\n- **Article wrtiter (Chain)** — Prompted with:\n  - Plan fields (title, description, sources)\n  - Brand brief (`b/c_information`)\n  - `images` array → `image_url` + `descritption_image`\n- **Output** — Raw HTML in `text` (no JSON/Markdown).\n\n**Rules enforced by prompt**\n- Semantic HTML5 only; no `<h1>`.\n- `<figure><img loading=\"lazy\" ...><figcaption>…</figcaption></figure>` for images.\n- TL;DR in `<aside>`, optional ToC in `<nav>`, pull-quotes in `<blockquote>`.\n- Ends with short CTA in `<footer>`.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "daa3f6e4-369d-4a14-a451-4886a50580a5",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        16
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 1264,
        "content": "# 5) Publish Core Post To WordPress\n\n**Purpose:** Create the WordPress post and add the excerpt.\n\n**Nodes**\n- **Create a post (WordPress)** — Publishes with:\n  - `title` → `Content planer.output.title`\n  - `slug`  → `Content planer.output.slug`\n  - `content` → writer `text` (HTML)\n  - `status` → `publish`\n- **WordPress excerpt add1 (HTTP Request)** — Updates post `excerpt` with `Content planer.output.excerpt`.\n\n**Notes**\n- Authentication uses the predefined WordPress credential.\n- Post ID from **Create a post** is reused later for featured image setting.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a446d3c3-7630-40f8-a5e5-b72a5e2e2648",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        336
      ],
      "parameters": {
        "color": 4,
        "width": 1536,
        "height": 768,
        "content": "# 6) Header Image – AI Generation Path (Active)\n\n**Purpose:** Generate a 1536×1024 header via AI and set it as the post’s featured image.\n\n**Nodes**\n- **Write query too image AI generator (Chain)** — Converts plan title + excerpt into a single high-quality image prompt (20–40 words).\n- **Generate an image (OpenAI Image)** — Creates the header image (`size: 1536x1024`).\n- **upload image to wordpress1 (HTTP Request)** — Uploads the generated image as media (`inputDataFieldName: data`).\n- **Set Image on Wordpress Post2 (HTTP Request)** — Sets `featured_media` on the newly created post.\n- **Append or update row in sheet1 (Google Sheets)** — Marks the sheet row as `created: True`.\n\n**Key settings**\n- Media upload header: `Content-Disposition: attachment; filename={{$now}}.png`\n- Featured image endpoint: `.../wp-json/wp/v2/posts/{postId}`\n"
      },
      "typeVersion": 1
    },
    {
      "id": "fa97b9df-d8a2-411d-b59d-4ff9355086da",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        1136
      ],
      "parameters": {
        "color": 4,
        "width": 1536,
        "height": 848,
        "content": "# 7) Header Image – Stock (Pexels) Path (Optional/Disabled)\n\n**Purpose:** Use a curated Pexels photo as the header image.\n\n**Nodes**\n- **Write query too pexels (Chain)** — Reduces the article title to a minimal Pexels keyword phrase (1–3 visual nouns).\n- **Get Image from Pexels (HTTP Request)** — Calls Pexels Search API with `orientation=landscape, per_page=1`.\n- **Download Image form Pexels (HTTP Request)** — Downloads the `photos[0].src.original` file to binary `image`.\n- **upload image to wordpress (HTTP Request)** — Uploads the image to WordPress Media.  \n  - Header: `Content-Disposition: attachment; filename={{ $json.photos[0].src.original }}`\n  - Body: binary field `image`\n- **Set Image on Wordpress Post1 (HTTP Request)** — Sets `featured_media` on the WordPress post.\n- **Append or update row in sheet (Google Sheets)** — Marks the row as `created: True`.\n\n**Key settings**\n- Requires valid Pexels API key in headers.\n- Enable this path only when you prefer stock over AI.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "005fe413-2519-42f6-873a-633fae01f29b",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        16
      ],
      "parameters": {
        "color": 7,
        "width": 1824,
        "height": 2016,
        "content": "# 8) Header Image Controller (Choose AI vs. Stock)\n\n**Purpose:** Visual grouping / decision area for header strategy. Use **one** of the two paths:\n\n- **AI Path (default/active):**  \n  `Write query too image AI generator` → `Generate an image` → `upload image to wordpress1` → `Set Image on Wordpress Post2` → `Append or update row in sheet1`.\n\n- **Stock Path (optional/disabled):**  \n  `Write query too pexels` → `Get Image from Pexels` → `Download Image form Pexels` → `upload image to wordpress` → `Set Image on Wordpress Post1` → `Append or update row in sheet`.\n\n**Operational tip**\n- Keep one path disabled to avoid double uploads or conflicting `featured_media` updates.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ba1c7661-237f-4e33-b983-23c1b86b6efd",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3696,
        16
      ],
      "parameters": {
        "width": 816,
        "height": 2800,
        "content": "# Overview & Quick Setup (Read Me First)\n\n## What this workflow does\nEnd-to-end blog automation:\n1) Pulls an unpublished row from Google Sheets  \n2) Plans the article (title, slug, excerpt, sources, image prompts) using an AI agent + Perplexity research  \n3) Generates inline images and uploads them to Cloudinary  \n4) Writes a clean HTML article body that embeds those images  \n5) Publishes the post to WordPress (title, slug, HTML, excerpt)  \n6) Creates a **header image** (AI path active by default) and sets it as the featured image  \n7) Marks the row in Google Sheets as created\n\n---\n\n## Prerequisites\n- A WordPress site with REST API + credentials\n- OpenAI API key (text + image)\n- Perplexity API key\n- Google account with access to the target Google Sheet\n- Cloudinary account with an **unsigned upload preset** (name: `unsigned_upload`)\n- (Optional) Pexels API key for stock header images\n\n---\n\n## Google Sheet structure (example)\nUse one sheet (e.g., `Arkusz1`). The workflow reads **rows where `created` is empty**.\n\n| title                         | short_description                           | created |\n|------------------------------|----------------------------------------------|---------|\n| Your blog title here         | One-sentence description of the article      |         |\n\n- Column names must match exactly: `title`, `short_description`, `created`.\n- The workflow will set `created` to `True` after successful publish.\n\n---\n\n## Fill the “Set input data/credintenials” node\nIn the **Set** node, edit the following fields:\n\n- `blog_title` – leave as is (comes from Sheet on first run)\n- `blog_s_descritpion` – leave as is (comes from Sheet on first run)\n- `cloudinary account name` – **your Cloudinary cloud name**,\n- `b/c_information` – brief about your brand/company (tone, CTA hints, audience)\n- `wordpres website url` – full base URL, e.g. `https://example.com`\n- (Optional) `pexcelAPI` – your Pexels API key if you want to enable the stock path\n\n> Tip: keep these here to avoid hard-coding across nodes.\n\n---\n\n## Connect credentials (where to plug API keys)\n\n### WordPress\n- Nodes: **Create a post**, **upload image to wordpress1**, **Set Image on Wordpress Post2**, **WordPress excerpt add1**\n- In each node’s **Authentication**, choose **Predefined Credential** → select your **Wordpress account**.\n- Your WP credential must include Base URL, username/app password (or token), etc.\n\n### OpenAI (text + images)\n- Nodes: **OpenAI Chat Model**, **OpenAI Chat Model1**, **OpenAI Chat Model4**, **OpenAI 4.1 mini5**, **Generate an image**, **Generate an image2**\n- Open each node → **Credentials** → select your **OpenAi account** (API key).\n\n### Perplexity\n- Node: **Message a model in Perplexity**\n- **Credentials** → select your **Perplexity account** (API key).\n\n### Google Sheets\n- Nodes: **Get data databse**, **Append or update row in sheet1**\n- **Credentials** → select **Google Sheets OAuth2** with the Google account that owns/has access.\n- In **Get data databse**: set your **Document** and **Sheet** (use the dropdown or paste file ID).\n\n### Cloudinary (unsigned upload)\n- Node: **Post image Cloudinary2**\n- No credential needed if using unsigned uploads.\n- In **bodyParameters**:\n  - `upload_preset`: `unsigned_upload`\n  - `file`: binary from the image generator\n- Make sure the **cloud name** matches the Set node variable in the **URL**.\n\n### Pexels (optional stock header)\n- Nodes (disabled by default): **Write query too pexels**, **Get Image from Pexels**, **Download Image form Pexels**, **upload image to wordpress**\n- **Get Image from Pexels**: **Authentication → HTTP Header Auth** with header `Authorization: <PEXELS_API_KEY>`.\n- Enable this path **only** if you prefer stock images over AI.\n\n---\n\n## Header image path (choose one)\n- **AI Path (default/active):**  \n  `Write query too image AI generator` → `Generate an image` → `upload image to wordpress1` → `Set Image on Wordpress Post2` → `Append or update row in sheet1`\n- **Stock Path (optional):**  \n  Enable nodes under the “Pexels” section and disable the AI path to avoid double featured images.\n\n---\n\n## First-run checklist\n1) Google Sheet has the three columns and at least one row with `created` empty  \n2) Set node filled (`wordpres website url`, `cloudinary account name`, `b/c_information`)  \n3) All required credentials selected:\n   - WordPress (all WP nodes)\n   - OpenAI (all LLM + image nodes you use)\n   - Perplexity (research node)\n   - Google Sheets (read + append nodes)\n4) Cloudinary upload preset `unsigned_upload` exists  \n5) Only one **header image** path is enabled (AI **or** Pexels)  \n6) Run the workflow once manually to verify post creation\n\n---\n\n## Common pitfalls to avoid\n- Mismatched Sheet column names (`short_description` vs `short-description`)  \n- Wrong WordPress base URL (missing `https://` or trailing slash issues)  \n- Cloudinary cloud name typo or missing unsigned preset  \n- Leaving both header-image paths enabled (causes featured image conflicts)  \n- Missing credentials on one of the HTTP nodes (WP update fails silently)\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Limit": {
      "main": [
        [
          {
            "node": "Set input data/credintenials",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Article wrtiter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a post": {
      "main": [
        [
          {
            "node": "WordPress excerpt add1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Content planer": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Article wrtiter": {
      "main": [
        [
          {
            "node": "Create a post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Generate an image1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Generate an image2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get data databse": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI 4.1 mini4": {
      "ai_languageModel": [
        [
          {
            "node": "Write query too pexels",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI 4.1 mini5": {
      "ai_languageModel": [
        [
          {
            "node": "Write query too image AI generator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get data databse",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Output Image": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate an image": {
      "main": [
        [
          {
            "node": "upload image to wordpress1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Content planer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Generate an image1": {
      "main": [
        [
          {
            "node": "Post image Cloudinary2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate an image2": {
      "main": [
        [
          {
            "node": "Post image Cloudinary2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate an image3": {
      "main": [
        [
          {
            "node": "upload image to wordpress1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Article wrtiter",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model4": {
      "ai_languageModel": [
        [
          {
            "node": "Structured Output Parser1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Get Image from Pexels": {
      "main": [
        [
          {
            "node": "Download Image form Pexels",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post image Cloudinary2": {
      "main": [
        [
          {
            "node": "Set Output Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WordPress excerpt add1": {
      "main": [
        [
          {
            "node": "Write query too image AI generator",
            "type": "main",
            "index": 0
          },
          {
            "node": "Write query too pexels",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write query too pexels": {
      "main": [
        [
          {
            "node": "Get Image from Pexels",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Content planer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "upload image to wordpress": {
      "main": [
        [
          {
            "node": "Set Image on Wordpress Post1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Image form Pexels": {
      "main": [
        [
          {
            "node": "upload image to wordpress",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "upload image to wordpress1": {
      "main": [
        [
          {
            "node": "Set Image on Wordpress Post2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Image on Wordpress Post1": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Image on Wordpress Post2": {
      "main": [
        [
          {
            "node": "Append or update row in sheet1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set input data/credintenials": {
      "main": [
        [
          {
            "node": "Content planer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model in Perplexity": {
      "ai_tool": [
        [
          {
            "node": "Content planer",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Write query too image AI generator": {
      "main": [
        [
          {
            "node": "Generate an image",
            "type": "main",
            "index": 0
          },
          {
            "node": "Generate an image3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {},
  "active": false
}
