AutomationFlowsAI & RAG › Daily AI Outfit Recommendations Based on Weather Forecast to Slack

Daily AI Outfit Recommendations Based on Weather Forecast to Slack

Bykoichi nagino @nagi on n8n.io

Description Start your day with the perfect outfit suggestion tailored to the local weather. This workflow runs automatically every morning, fetches the current weather forecast for your city, and uses an AI stylist to generate a practical, gender-neutral outfit recommendation.…

Cron / scheduled trigger★★★★☆ complexityAI-powered13 nodesEdit ImageAgentOpenWeatherMapOpenRouter ChatSlack
AI & RAG Trigger: Cron / scheduled Nodes: 13 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #11004 — we link there as the canonical source.

This workflow follows the Agent → OpenRouter Chat 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 →

Download .json
{
  "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
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Description Start your day with the perfect outfit suggestion tailored to the local weather. This workflow runs automatically every morning, fetches the current weather forecast for your city, and uses an AI stylist to generate a practical, gender-neutral outfit recommendation.…

Source: https://n8n.io/workflows/11004/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This n8n template transforms your daily meeting preparation by automatically researching attendees and generating comprehensive briefing documents. Every weekday morning, it analyzes your calendar eve

Google Calendar, Slack, Agent +7
AI & RAG

Scheduled runs collect data from oil markets, global shipping movements, news sources, and official reports. The system performs statistical checks to detect anomalies and volatility shifts. An AI-dri

HTTP Request, Agent, Gmail +3
AI & RAG

This workflow automates the discovery of new B2B service providers entering the market. It scrapes a specific category on Clutch.co weekly, standardizes the data using AI, and compares it against a hi

Output Parser Structured, OpenRouter Chat, Google Sheets +3
AI & RAG

This workflow automatically researches your meeting attendees every morning and sends you a comprehensive brief in Slack with context about who you're meeting, their company, and key talking points. S

Slack, Agent, OpenRouter Chat +6
AI & RAG

Daily triggers automatically fetch fleet data and simulate key performance metrics for each vehicle. An AI agent analyzes maintenance requirements, detects potential issues, and routes alerts accordin

Slack, Postgres, Agent +1