{
  "id": "DE9G0H2GoX4JpP2C",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Cake Image Generator",
  "tags": [],
  "nodes": [
    {
      "id": "3bbf3ae1-a1d3-4d8e-8f1a-d620a8cc68fa",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        16,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "65ad017a-d18c-48f9-b315-42d8495204d9",
      "name": "Generate Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        320,
        -16
      ],
      "parameters": {
        "url": "https://api.replicate.com/v1/models/black-forest-labs/flux-schnell/predictions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"version\": \"latest\",\n  \"input\": {\n    \"prompt\": \"{{$json['prompt']}}\"\n  }\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "440001e5-7036-41d9-8a7e-ce14f67a49c1",
      "name": "Prompt Generator",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -80,
        -16
      ],
      "parameters": {
        "text": "=You are an expert in creating ai cake images.\nI want you to randomise the cake And put a very specific  {{ $json.body.name }} On the cake.\n\nBut remember one thing I don't want you to add anything else other than the prompt In the output. I dont want you to add any quotes Or any other information other than the plain text of the prompt.\n\nAlso wherever you mention to write the name\nInstead of \"{{ $json.body.name }}\" write it \\\"{{ $json.body.name }}\\\"\"\nthe name \\nabin\\ is {{ $json.body.name }}\n\neg : black forest gateau cake spelling out the words \\\"FLUX SCHNELL\\\"\", tasty, food photography, dynamic shot\n\ngive a very detailed prompt so that it can perfectly create the images of the cake",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "23fbd09d-63a5-449a-88f7-fae556de6097",
      "name": "User Sends Request",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -320,
        -16
      ],
      "parameters": {
        "path": "5cfa7429-5637-4c1a-a81c-a53dfb154a5d",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "e174bbd7-5eeb-41ba-9183-06bd84c42dbc",
      "name": "Download Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        544,
        -16
      ],
      "parameters": {
        "url": "={{ $json.output[0] }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "0eff512d-4cfd-492d-b63e-4ab52a49fdb6",
      "name": "Respond to Requests",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        768,
        -16
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.4
    },
    {
      "id": "3c788a4d-1e7c-4b49-b9d2-660f93a85826",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        -80
      ],
      "parameters": {
        "color": 4,
        "width": 272,
        "height": 224,
        "content": "Receives user input (e.g., name/occasion) from the Bolt frontend."
      },
      "typeVersion": 1
    },
    {
      "id": "ca05fccf-4021-4914-b976-1f17dc34346c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        -80
      ],
      "parameters": {
        "color": 5,
        "width": 304,
        "height": 416,
        "content": "Uses OpenAI GPT to generate a creative cake prompt."
      },
      "typeVersion": 1
    },
    {
      "id": "44009c51-447b-40dc-a563-bdfa411e93ba",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        -96
      ],
      "parameters": {
        "color": 6,
        "height": 240,
        "content": "Sends the generated prompt to Replicate Flux Schnell to create the cake image."
      },
      "typeVersion": 1
    },
    {
      "id": "0826cf08-d5fd-4f74-b3a2-06c9cf1f37f5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        -80
      ],
      "parameters": {
        "width": 224,
        "height": 224,
        "content": "Fetches the generated cake image from Replicate."
      },
      "typeVersion": 1
    },
    {
      "id": "1f9c45e0-8b04-4db7-9a96-5d84b8bd54a7",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -80
      ],
      "parameters": {
        "color": 3,
        "height": 224,
        "content": "Returns the final cake image URL to the frontend."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8ec6e9ea-0764-4692-8dfc-e72156240101",
  "connections": {
    "Download Image": {
      "main": [
        [
          {
            "node": "Respond to Requests",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Image": {
      "main": [
        [
          {
            "node": "Download Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prompt Generator": {
      "main": [
        [
          {
            "node": "Generate Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Prompt Generator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "User Sends Request": {
      "main": [
        [
          {
            "node": "Prompt Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}