{
  "id": "hlyS9lqAyQrx5WD1",
  "name": "Today's Outfit Forecast",
  "tags": [],
  "nodes": [
    {
      "id": "d10a528c-58d5-44e3-922c-5a2e73990344",
      "name": "Create Image Card",
      "type": "n8n-nodes-base.editImage",
      "position": [
        1024,
        160
      ],
      "parameters": {
        "options": {},
        "operation": "multiStep",
        "operations": {
          "operations": [
            {
              "width": 1080,
              "height": 1920,
              "operation": "create",
              "backgroundColor": "#E8F4F8"
            },
            {
              "text": "={{ $now.toFormat('yyyy-MM-dd') }} Tokyo",
              "fontSize": 48,
              "fontColor": "#333333",
              "operation": "text",
              "positionX": 90,
              "positionY": 150,
              "lineLength": {}
            },
            {
              "text": "=Weather: {{ $('Format Weather Data').item.json.weatherDescription }}\nCurrent: {{ $('Format Weather Data').item.json.tempCurrent }}\u00b0C   Max: {{ $('Format Weather Data').item.json.tempMax }}\u00b0C   Min: {{ $('Format Weather Data').item.json.tempMin }}\u00b0C",
              "fontSize": 42,
              "fontColor": "#55555",
              "operation": "text",
              "positionX": 90,
              "positionY": 350,
              "lineLength": {}
            },
            {
              "text": "={{ $('Store Advice Text').item.json.outfitText }}",
              "fontSize": 48,
              "operation": "text",
              "positionX": 90,
              "positionY": 600,
              "lineLength": 35
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "fd6b6a4e-2fd8-4521-aba6-98aad7ee7809",
      "name": "Store Advice Text",
      "type": "n8n-nodes-base.set",
      "position": [
        800,
        160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "outfitText",
              "type": "string",
              "value": "={{ $json.output }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d58451e3-8c67-4d3a-abca-913505c8504a",
      "name": "Generate Outfit Advice",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        448,
        160
      ],
      "parameters": {
        "text": "=Today's Weather: {{ $('Format Weather Data').item.json.weatherDescription }}\nCurrent Temp: {{ $('Format Weather Data').item.json.tempCurrent }}\u00b0C\nMax Temp: {{ $('Format Weather Data').item.json.tempMax }}\u00b0C\nMin Temp: {{ $('Format Weather Data').item.json.tempMin }}\u00b0C",
        "options": {
          "systemMessage": "You are a stylist. Based on the provided weather and temperatures, suggest a casual outfit for the day in English.\nRequirements:\n- Use gender-neutral expressions.\n- Specifically mention tops, bottoms, shoes, and outerwear if necessary.\n- The entire text should be about 4-6 lines.\n- The last line should be a short piece of advice for the day."
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "93d35871-0064-4604-8f26-7ad395d9f538",
      "name": "Format Weather Data",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "weatherDescription",
              "type": "string",
              "value": "={{ $json.weather[0].description }}"
            },
            {
              "id": "id-2",
              "name": "tempCurrent",
              "type": "number",
              "value": "={{ $json.main.temp }}"
            },
            {
              "id": "id-3",
              "name": "tempMax",
              "type": "number",
              "value": "={{ $json.main.temp_max }}"
            },
            {
              "id": "id-4",
              "name": "tempMin",
              "type": "number",
              "value": "={{ $json.main.temp_min }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a7cfaaf1-848b-4f6f-91dc-99ab18ab081a",
      "name": "Get Weather Data",
      "type": "n8n-nodes-base.openWeatherMap",
      "position": [
        0,
        160
      ],
      "parameters": {
        "cityName": "Tokyo"
      },
      "typeVersion": 1
    },
    {
      "id": "ffa0bf11-899b-4ee9-bc6c-d5e8e08aafd1",
      "name": "Daily 6AM Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -224,
        160
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 6
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "bad08972-c078-4ed8-9a95-b8cd3cab9ad4",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        416,
        336
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "7ff0b2e7-723f-4ad2-90f5-1f9b011459cb",
      "name": "Upload a file",
      "type": "n8n-nodes-base.slack",
      "position": [
        1232,
        160
      ],
      "parameters": {
        "options": {
          "fileName": "outfit-forecast.png",
          "channelId": "",
          "initialComment": "Good morning! Here is today's outfit forecast."
        },
        "resource": "file"
      },
      "typeVersion": 2.3
    },
    {
      "id": "27dcb529-ccdc-4a95-9886-d878a8f1c596",
      "name": "Main Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        -192
      ],
      "parameters": {
        "width": 416,
        "height": 384,
        "content": "## How it works\nThis workflow runs daily at 6 AM. It fetches the weather for area where you live, sends the data to an AI stylist to get an outfit recommendation, creates a stylish image card with all the info, and posts it to Slack to help you get your day started.\n\n## Setup steps\n1.  **OpenWeatherMap Node:** Add your API Key to the `Get Weather Data` node. You can also change the city here.\n2.  **OpenRouter Node:** Add your API Key to the `OpenRouter Chat Model` node.\n3.  **Slack Node:** Add your Slack credentials and select your desired channel in the `Upload a file` node."
      },
      "typeVersion": 1
    },
    {
      "id": "0a9184a7-5acc-48c1-ad0b-601ecd81509a",
      "name": "Group 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -96
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 192,
        "content": "## 1. Get & Format Weather\nTriggers daily, fetches the weather for a specified city via OpenWeatherMap, and extracts key data points (temperature, description)."
      },
      "typeVersion": 1
    },
    {
      "id": "d3745e7a-5edb-4873-a113-478edddb83ea",
      "name": "Group 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 224,
        "content": "## 2. Generate AI Outfit Advice\nSends the weather data to an AI model, which acts as a stylist to generate a gender-neutral outfit recommendation for the day."
      },
      "typeVersion": 1
    },
    {
      "id": "0f6ef471-c0ce-4748-9af8-6727793ae559",
      "name": "Group 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 208,
        "content": "## 3. Create Forecast Image\nTakes the AI's outfit advice and the weather data, then dynamically creates a vertical image card, writing the info onto it."
      },
      "typeVersion": 1
    },
    {
      "id": "3f604f12-ae58-4d7f-ba03-ea9df88be6ba",
      "name": "Group 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        -96
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 192,
        "content": "## 4. Send to Slack\nUploads the final image card to your specified Slack channel. **IMPORTANT:** Configure your channel in this node."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "85e213f2-7ffd-44c6-a415-b9c1219595de",
  "connections": {
    "Get Weather Data": {
      "main": [
        [
          {
            "node": "Format Weather Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Image Card": {
      "main": [
        [
          {
            "node": "Upload a file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily 6AM Trigger": {
      "main": [
        [
          {
            "node": "Get Weather Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store Advice Text": {
      "main": [
        [
          {
            "node": "Create Image Card",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Weather Data": {
      "main": [
        [
          {
            "node": "Generate Outfit Advice",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Outfit Advice",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Generate Outfit Advice": {
      "main": [
        [
          {
            "node": "Store Advice Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}