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 →
{
"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
}
]
]
}
}
}
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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
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
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
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
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