From e98bb8d0f2f4cc18830188b7972ac786bff69bd9 Mon Sep 17 00:00:00 2001
From: Gabriel Volpe
Date: Thu, 13 Aug 2026 10:06:35 +0200
Subject: [PATCH 1/2] feat: add show weather humidity and temperatur range
options
---
ImmichFrame.Core/Helpers/WeatherExtensions.cs | 3 +
.../Interfaces/IClientSettings.cs | 2 +
ImmichFrame.Core/Interfaces/IWeather.cs | 3 +
ImmichFrame.Core/Models/Weather.cs | 3 +
.../Controllers/ConfigControllerTests.cs | 2 +
.../Resources/TestV1.json | 2 +
.../Resources/TestV2.json | 2 +
ImmichFrame.WebApi.Tests/Resources/TestV2.yml | 2 +
.../Helpers/Config/ServerSettingsV1.cs | 4 +
.../Models/ClientSettingsDto.cs | 2 +
ImmichFrame.WebApi/Models/ServerSettings.cs | 2 +
Install_Web.md | 2 +
docker/Settings.example.json | 2 +
docker/Settings.example.yml | 2 +
docker/example.env | 2 +
docs/docs/getting-started/configuration.md | 4 +
docs/docs/getting-started/configurationV1.md | 4 +-
immichFrame.Web/src/app.css | 19 +++-
.../src/lib/components/elements/clock.svelte | 87 +++++++++++++------
immichFrame.Web/src/lib/immichFrameApi.ts | 5 ++
openApi/swagger.json | 20 ++++-
21 files changed, 143 insertions(+), 31 deletions(-)
diff --git a/ImmichFrame.Core/Helpers/WeatherExtensions.cs b/ImmichFrame.Core/Helpers/WeatherExtensions.cs
index beef3029..c5eff7d7 100644
--- a/ImmichFrame.Core/Helpers/WeatherExtensions.cs
+++ b/ImmichFrame.Core/Helpers/WeatherExtensions.cs
@@ -15,6 +15,9 @@ public static Weather ToWeather(this WeatherInfo? weatherInfo)
Location = weatherInfo.CityName,
Description = $"{string.Join(',', weatherInfo.Weather.Select(x => x.Description))}",
Temperature = weatherInfo.Main.Temperature.Value,
+ MinimumTemperature = weatherInfo.Main.MinimumTemperature.Value,
+ MaximumTemperature = weatherInfo.Main.MaximumTemperature.Value,
+ Humidity = weatherInfo.Main.Humidity.Value,
Unit = Temperature.GetAbbreviation(weatherInfo.Main.Temperature.Unit),
TemperatureUnit = weatherInfo.Main.Temperature.ToString(),
IconId = $"{string.Join(',', weatherInfo.Weather.Select(x => x.IconId))}"
diff --git a/ImmichFrame.Core/Interfaces/IClientSettings.cs b/ImmichFrame.Core/Interfaces/IClientSettings.cs
index 576c13eb..a34ef818 100644
--- a/ImmichFrame.Core/Interfaces/IClientSettings.cs
+++ b/ImmichFrame.Core/Interfaces/IClientSettings.cs
@@ -23,6 +23,8 @@ public interface IClientSettings
public string Style { get; }
public string? BaseFontSize { get; }
public bool ShowWeatherDescription { get; }
+ public bool WeatherShowHumidity { get; }
+ public bool WeatherShowTemperatureRange { get; }
public string? WeatherIconUrl { get; }
public bool ImageZoom { get; }
public bool ImagePan { get; }
diff --git a/ImmichFrame.Core/Interfaces/IWeather.cs b/ImmichFrame.Core/Interfaces/IWeather.cs
index cd5c2a4b..acb46290 100644
--- a/ImmichFrame.Core/Interfaces/IWeather.cs
+++ b/ImmichFrame.Core/Interfaces/IWeather.cs
@@ -4,6 +4,9 @@ public interface IWeather
{
public string Location { get; set; }
public double Temperature { get; set; }
+ public double MinimumTemperature { get; set; }
+ public double MaximumTemperature { get; set; }
+ public double Humidity { get; set; }
public string Unit { get; set; }
public string TemperatureUnit { get; set; }
public string Description { get; set; }
diff --git a/ImmichFrame.Core/Models/Weather.cs b/ImmichFrame.Core/Models/Weather.cs
index 73e725f2..81e06ce3 100644
--- a/ImmichFrame.Core/Models/Weather.cs
+++ b/ImmichFrame.Core/Models/Weather.cs
@@ -6,6 +6,9 @@ public class Weather : IWeather
{
public string Location { get; set; } = "";
public double Temperature { get; set; } = 0d;
+ public double MinimumTemperature { get; set; } = 0d;
+ public double MaximumTemperature { get; set; } = 0d;
+ public double Humidity { get; set; } = 0d;
public string Unit { get; set; } = "";
public string TemperatureUnit { get; set; } = "";
public string Description { get; set; } = "";
diff --git a/ImmichFrame.WebApi.Tests/Controllers/ConfigControllerTests.cs b/ImmichFrame.WebApi.Tests/Controllers/ConfigControllerTests.cs
index de31232a..e6e097c8 100644
--- a/ImmichFrame.WebApi.Tests/Controllers/ConfigControllerTests.cs
+++ b/ImmichFrame.WebApi.Tests/Controllers/ConfigControllerTests.cs
@@ -44,6 +44,8 @@ public void Setup()
Style = "blur",
BaseFontSize = "18px",
ShowWeatherDescription = false,
+ WeatherShowHumidity = true,
+ WeatherShowTemperatureRange = true,
WeatherIconUrl = "https://example.com/{IconId}.png",
ImageZoom = false,
ImagePan = true,
diff --git a/ImmichFrame.WebApi.Tests/Resources/TestV1.json b/ImmichFrame.WebApi.Tests/Resources/TestV1.json
index e6c49102..8a3a9b53 100644
--- a/ImmichFrame.WebApi.Tests/Resources/TestV1.json
+++ b/ImmichFrame.WebApi.Tests/Resources/TestV1.json
@@ -51,6 +51,8 @@
"BaseFontSize": "BaseFontSize_TEST",
"WeatherApiKey": "WeatherApiKey_TEST",
"ShowWeatherDescription": true,
+ "WeatherShowHumidity": true,
+ "WeatherShowTemperatureRange": true,
"WeatherIconUrl": "WeatherIconUrl_TEST",
"UnitSystem": "UnitSystem_TEST",
"WeatherLatLong": "WeatherLatLong_TEST",
diff --git a/ImmichFrame.WebApi.Tests/Resources/TestV2.json b/ImmichFrame.WebApi.Tests/Resources/TestV2.json
index 4d603dc9..1bc15d19 100644
--- a/ImmichFrame.WebApi.Tests/Resources/TestV2.json
+++ b/ImmichFrame.WebApi.Tests/Resources/TestV2.json
@@ -30,6 +30,8 @@
"Style": "Style_TEST",
"BaseFontSize": "BaseFontSize_TEST",
"ShowWeatherDescription": true,
+ "WeatherShowHumidity": true,
+ "WeatherShowTemperatureRange": true,
"WeatherIconUrl": "WeatherIconUrl_TEST",
"ImageZoom": true,
"ImagePan": true,
diff --git a/ImmichFrame.WebApi.Tests/Resources/TestV2.yml b/ImmichFrame.WebApi.Tests/Resources/TestV2.yml
index 47f45947..6908c27e 100644
--- a/ImmichFrame.WebApi.Tests/Resources/TestV2.yml
+++ b/ImmichFrame.WebApi.Tests/Resources/TestV2.yml
@@ -29,6 +29,8 @@ General:
Style: Style_TEST
BaseFontSize: BaseFontSize_TEST
ShowWeatherDescription: true
+ WeatherShowHumidity: true
+ WeatherShowTemperatureRange: true
WeatherIconUrl: WeatherIconUrl_TEST
ImageZoom: true
ImagePan: true
diff --git a/ImmichFrame.WebApi/Helpers/Config/ServerSettingsV1.cs b/ImmichFrame.WebApi/Helpers/Config/ServerSettingsV1.cs
index 076f36da..09d2ca40 100644
--- a/ImmichFrame.WebApi/Helpers/Config/ServerSettingsV1.cs
+++ b/ImmichFrame.WebApi/Helpers/Config/ServerSettingsV1.cs
@@ -50,6 +50,8 @@ public class ServerSettingsV1 : IConfigSettable
public string Style { get; set; } = "none";
public string? BaseFontSize { get; set; }
public bool ShowWeatherDescription { get; set; } = true;
+ public bool WeatherShowHumidity { get; set; } = false;
+ public bool WeatherShowTemperatureRange { get; set; } = false;
public string? WeatherIconUrl { get; set; } = "https://openweathermap.org/img/wn/{IconId}.png";
public bool ImageZoom { get; set; } = true;
public bool ImagePan { get; set; } = false;
@@ -128,6 +130,8 @@ class GeneralSettingsV1Adapter(ServerSettingsV1 _delegate) : IGeneralSettings
public string Style => _delegate.Style;
public string? BaseFontSize => _delegate.BaseFontSize;
public bool ShowWeatherDescription => _delegate.ShowWeatherDescription;
+ public bool WeatherShowHumidity => _delegate.WeatherShowHumidity;
+ public bool WeatherShowTemperatureRange => _delegate.WeatherShowTemperatureRange;
public string? WeatherIconUrl => _delegate.WeatherIconUrl;
public bool ImageZoom => _delegate.ImageZoom;
public bool ImagePan => _delegate.ImagePan;
diff --git a/ImmichFrame.WebApi/Models/ClientSettingsDto.cs b/ImmichFrame.WebApi/Models/ClientSettingsDto.cs
index 5e408fe9..26db206d 100644
--- a/ImmichFrame.WebApi/Models/ClientSettingsDto.cs
+++ b/ImmichFrame.WebApi/Models/ClientSettingsDto.cs
@@ -25,6 +25,8 @@ public class ClientSettingsDto(IClientSettings settings) : IClientSettings
public string Style => settings.Style;
public string? BaseFontSize => settings.BaseFontSize;
public bool ShowWeatherDescription => settings.ShowWeatherDescription;
+ public bool WeatherShowHumidity => settings.WeatherShowHumidity;
+ public bool WeatherShowTemperatureRange => settings.WeatherShowTemperatureRange;
public string? WeatherIconUrl => settings.WeatherIconUrl;
public bool ImageZoom => settings.ImageZoom;
public bool ImagePan => settings.ImagePan;
diff --git a/ImmichFrame.WebApi/Models/ServerSettings.cs b/ImmichFrame.WebApi/Models/ServerSettings.cs
index 74d0fb8e..70eea0b5 100644
--- a/ImmichFrame.WebApi/Models/ServerSettings.cs
+++ b/ImmichFrame.WebApi/Models/ServerSettings.cs
@@ -58,6 +58,8 @@ public class GeneralSettings : IGeneralSettings, IConfigSettable
public string Style { get; set; } = "none";
public string? BaseFontSize { get; set; }
public bool ShowWeatherDescription { get; set; } = true;
+ public bool WeatherShowHumidity { get; set; } = false;
+ public bool WeatherShowTemperatureRange { get; set; } = false;
public string? WeatherIconUrl { get; set; } = "https://openweathermap.org/img/wn/{IconId}.png";
public bool ImageZoom { get; set; } = true;
public bool ImagePan { get; set; } = false;
diff --git a/Install_Web.md b/Install_Web.md
index 5cf3f94c..ea2a0556 100644
--- a/Install_Web.md
+++ b/Install_Web.md
@@ -76,6 +76,8 @@ services:
# BaseFontSize: "17px"
# WeatherApiKey: ""
# ShowWeatherDescription: "true"
+ # WeatherShowHumidity: "false"
+ # WeatherShowTemperatureRange: "false"
# WeatherIconUrl: "https://openweathermap.org/img/wn/{IconId}.png"
# UnitSystem: "imperial"
# WeatherLatLong: ""
diff --git a/docker/Settings.example.json b/docker/Settings.example.json
index a86a4d00..c73adda3 100644
--- a/docker/Settings.example.json
+++ b/docker/Settings.example.json
@@ -30,6 +30,8 @@
"Style": "none",
"BaseFontSize": "17px",
"ShowWeatherDescription": true,
+ "WeatherShowHumidity": false,
+ "WeatherShowTemperatureRange": false,
"WeatherIconUrl": "https://openweathermap.org/img/wn/{IconId}.png",
"ImageZoom": true,
"ImagePan": false,
diff --git a/docker/Settings.example.yml b/docker/Settings.example.yml
index 173b31a5..c72b3930 100644
--- a/docker/Settings.example.yml
+++ b/docker/Settings.example.yml
@@ -28,6 +28,8 @@ General:
Style: none
BaseFontSize: 17px
ShowWeatherDescription: true
+ WeatherShowHumidity: false
+ WeatherShowTemperatureRange: false
WeatherIconUrl: 'https://openweathermap.org/img/wn/{IconId}.png'
ImageZoom: true
ImagePan: false
diff --git a/docker/example.env b/docker/example.env
index 51d80ed5..1c1e2398 100644
--- a/docker/example.env
+++ b/docker/example.env
@@ -43,6 +43,8 @@ ApiKey=KEY
# BaseFontSize=17px
# WeatherApiKey=
# ShowWeatherDescription=true
+# WeatherShowHumidity=false
+# WeatherShowTemperatureRange=false
# WeatherIconUrl=https://openweathermap.org/img/wn/{IconId}.png
# UnitSystem=imperial
# WeatherLatLong=
diff --git a/docs/docs/getting-started/configuration.md b/docs/docs/getting-started/configuration.md
index 7378c7d1..b9eee147 100644
--- a/docs/docs/getting-started/configuration.md
+++ b/docs/docs/getting-started/configuration.md
@@ -92,6 +92,10 @@ General:
BaseFontSize: '17px' # string
# Displays the description of the current weather.
ShowWeatherDescription: true # boolean
+ # Displays the current humidity.
+ WeatherShowHumidity: false # boolean
+ # Displays the current minimum and maximum temperature.
+ WeatherShowTemperatureRange: false # boolean
# URL for the icon to load for the current weather condition
WeatherIconUrl: 'https://openweathermap.org/img/wn/{IconId}.png'
# Zooms into or out of an image and gives it a touch of life.
diff --git a/docs/docs/getting-started/configurationV1.md b/docs/docs/getting-started/configurationV1.md
index bf9ca932..b8623ba0 100644
--- a/docs/docs/getting-started/configurationV1.md
+++ b/docs/docs/getting-started/configurationV1.md
@@ -33,6 +33,8 @@ sidebar_position: 4
| [Weather](#weather) | UnitSystem | imperial \| metric | imperial | Imperial or metric system. (Fahrenheit or degrees) |
| [Weather](#weather) | Language | string | en | 2 digit ISO code, sets the language of the weather description. |
| [Weather](#weather) | ShowWeatherDescription | boolean | true | Displays the description of the current weather. |
+| [Weather](#weather) | WeatherShowHumidity | boolean | false | Displays the current humidity. |
+| [Weather](#weather) | WeatherShowTemperatureRange | boolean | false | Displays the current minimum and maximum temperature. |
| [Weather](#weather) | WeatherLatLong | boolean | 40.730610,-73.935242 | Set the weather location with lat/lon. |
| [Weather](#weather) | WeatherIconUrl | string | https://openweathermap.org/img/wn/{IconId}.png | Sets the URL for an icon to display the weather conditions. |
| Clock | ShowClock | boolean | true | Displays the current time. |
@@ -111,4 +113,4 @@ volumes:
```
[openweathermap-url]: https://openweathermap.org/appid
-[immich-api-url]: https://immich.app/docs/features/command-line-interface#obtain-the-api-key
\ No newline at end of file
+[immich-api-url]: https://immich.app/docs/features/command-line-interface#obtain-the-api-key
diff --git a/immichFrame.Web/src/app.css b/immichFrame.Web/src/app.css
index c73c4e49..a81b9911 100644
--- a/immichFrame.Web/src/app.css
+++ b/immichFrame.Web/src/app.css
@@ -84,9 +84,26 @@ div.weather-unit {
order: 4;
}
+div.weather-stats {
+ display: flex;
+ justify-content: center;
+ gap: 0.75rem;
+}
+
+div.weather-stat {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+
+svg.weather-stat-icon {
+ width: 1em;
+ height: 1em;
+}
+
img.icon-weather {
display: inline-block;
vertical-align: middle;
margin-top: -8px; /* adjust icon top to line up with text */
order: 1;
-}
\ No newline at end of file
+}
diff --git a/immichFrame.Web/src/lib/components/elements/clock.svelte b/immichFrame.Web/src/lib/components/elements/clock.svelte
index e4d00ec4..c2888013 100644
--- a/immichFrame.Web/src/lib/components/elements/clock.svelte
+++ b/immichFrame.Web/src/lib/components/elements/clock.svelte
@@ -5,6 +5,8 @@
import * as locale from 'date-fns/locale';
import { configStore } from '$lib/stores/config.store';
import { clientIdentifierStore } from '$lib/stores/persist.store';
+ import Icon from './icon.svelte';
+ import { mdiThermometer, mdiWaterPercent } from '@mdi/js';
api.init();
@@ -25,10 +27,18 @@
const timePortion = $derived(() => format(now, $configStore.clockFormat ?? 'HH:mm:ss'));
const primaryIconId = $derived(() => {
- if (!weather?.iconId) return null;
- const firstId = weather.iconId.split(',')[0].trim();
- return firstId || null;
- });
+ if (!weather?.iconId) return null;
+ const firstId = weather.iconId.split(',')[0].trim();
+ return firstId || null;
+ });
+
+ function formatTemperature(value?: number) {
+ return value?.toFixed(1);
+ }
+
+ function formatHumidity(value?: number) {
+ return value?.toFixed(0);
+ }
onMount(() => {
const interval = setInterval(() => {
@@ -76,28 +86,49 @@
{timePortion()}
{#if weather}
-
-
- {#if $configStore.weatherIconUrl && primaryIconId()}
-
!))})
- {/if}
-
-
{weather.location},
-
{weather.temperature?.toFixed(1)}°
-
-
- {#if $configStore.showWeatherDescription}
-
- {weather.description}
-
- {/if}
-
-{/if}
+
+
+ {#if $configStore.weatherIconUrl && primaryIconId()}
+

+ {/if}
+
+
{weather.location},
+
{weather.temperature?.toFixed(1)}°
+
+
+ {#if $configStore.weatherShowTemperatureRange}
+
+
+ {formatTemperature(weather.maximumTemperature)}° | {formatTemperature(
+ weather.minimumTemperature
+ )}°
+
+ {/if}
+ {#if $configStore.weatherShowHumidity}
+
+
+ {formatHumidity(weather.humidity)}%
+
+ {/if}
+
+
+ {#if $configStore.showWeatherDescription}
+
+ {weather.description}
+
+ {/if}
+
+ {/if}
diff --git a/immichFrame.Web/src/lib/immichFrameApi.ts b/immichFrame.Web/src/lib/immichFrameApi.ts
index 85fa762b..87ea8de9 100644
--- a/immichFrame.Web/src/lib/immichFrameApi.ts
+++ b/immichFrame.Web/src/lib/immichFrameApi.ts
@@ -221,6 +221,8 @@ export type ClientSettingsDto = {
style?: string | null;
baseFontSize?: string | null;
showWeatherDescription?: boolean;
+ weatherShowHumidity?: boolean;
+ weatherShowTemperatureRange?: boolean;
weatherIconUrl?: string | null;
imageZoom?: boolean;
imagePan?: boolean;
@@ -232,6 +234,9 @@ export type ClientSettingsDto = {
export type IWeather = {
location?: string | null;
temperature?: number;
+ minimumTemperature?: number;
+ maximumTemperature?: number;
+ humidity?: number;
unit?: string | null;
temperatureUnit?: string | null;
description?: string | null;
diff --git a/openApi/swagger.json b/openApi/swagger.json
index 9569c297..38be3641 100644
--- a/openApi/swagger.json
+++ b/openApi/swagger.json
@@ -1069,6 +1069,12 @@
"showWeatherDescription": {
"type": "boolean"
},
+ "weatherShowHumidity": {
+ "type": "boolean"
+ },
+ "weatherShowTemperatureRange": {
+ "type": "boolean"
+ },
"weatherIconUrl": {
"type": "string",
"nullable": true
@@ -1286,6 +1292,18 @@
"type": "number",
"format": "double"
},
+ "minimumTemperature": {
+ "type": "number",
+ "format": "double"
+ },
+ "maximumTemperature": {
+ "type": "number",
+ "format": "double"
+ },
+ "humidity": {
+ "type": "number",
+ "format": "double"
+ },
"unit": {
"type": "string",
"nullable": true
@@ -1527,4 +1545,4 @@
}
}
}
-}
\ No newline at end of file
+}
From afa5c573eccb98dacaeb742ac421e23dc5a8c9f3 Mon Sep 17 00:00:00 2001
From: Gabriel Volpe
Date: Thu, 13 Aug 2026 10:38:23 +0200
Subject: [PATCH 2/2] address review comments
---
ImmichFrame.Core/Helpers/WeatherExtensions.cs | 10 ++++++++--
ImmichFrame.Core/Interfaces/IWeather.cs | 4 ++--
ImmichFrame.Core/Models/Weather.cs | 4 ++--
.../src/lib/components/elements/clock.svelte | 12 ++++++++----
immichFrame.Web/src/lib/immichFrameApi.ts | 4 ++--
openApi/swagger.json | 6 ++++--
6 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/ImmichFrame.Core/Helpers/WeatherExtensions.cs b/ImmichFrame.Core/Helpers/WeatherExtensions.cs
index c5eff7d7..11f73d08 100644
--- a/ImmichFrame.Core/Helpers/WeatherExtensions.cs
+++ b/ImmichFrame.Core/Helpers/WeatherExtensions.cs
@@ -1,6 +1,7 @@
using OpenWeatherMap.Models;
using ImmichFrame.Core.Models;
using UnitsNet;
+using UnitsNet.Units;
namespace ImmichFrame.Core.Helpers
{
@@ -15,13 +16,18 @@ public static Weather ToWeather(this WeatherInfo? weatherInfo)
Location = weatherInfo.CityName,
Description = $"{string.Join(',', weatherInfo.Weather.Select(x => x.Description))}",
Temperature = weatherInfo.Main.Temperature.Value,
- MinimumTemperature = weatherInfo.Main.MinimumTemperature.Value,
- MaximumTemperature = weatherInfo.Main.MaximumTemperature.Value,
+ MinimumTemperature = GetOptionalTemperatureValue(weatherInfo.Main.MinimumTemperature),
+ MaximumTemperature = GetOptionalTemperatureValue(weatherInfo.Main.MaximumTemperature),
Humidity = weatherInfo.Main.Humidity.Value,
Unit = Temperature.GetAbbreviation(weatherInfo.Main.Temperature.Unit),
TemperatureUnit = weatherInfo.Main.Temperature.ToString(),
IconId = $"{string.Join(',', weatherInfo.Weather.Select(x => x.IconId))}"
};
}
+
+ private static double? GetOptionalTemperatureValue(Temperature temperature)
+ {
+ return temperature.Value == 0d && temperature.Unit == TemperatureUnit.Kelvin ? null : temperature.Value;
+ }
}
}
diff --git a/ImmichFrame.Core/Interfaces/IWeather.cs b/ImmichFrame.Core/Interfaces/IWeather.cs
index acb46290..18525194 100644
--- a/ImmichFrame.Core/Interfaces/IWeather.cs
+++ b/ImmichFrame.Core/Interfaces/IWeather.cs
@@ -4,8 +4,8 @@ public interface IWeather
{
public string Location { get; set; }
public double Temperature { get; set; }
- public double MinimumTemperature { get; set; }
- public double MaximumTemperature { get; set; }
+ public double? MinimumTemperature { get; set; }
+ public double? MaximumTemperature { get; set; }
public double Humidity { get; set; }
public string Unit { get; set; }
public string TemperatureUnit { get; set; }
diff --git a/ImmichFrame.Core/Models/Weather.cs b/ImmichFrame.Core/Models/Weather.cs
index 81e06ce3..83bf90aa 100644
--- a/ImmichFrame.Core/Models/Weather.cs
+++ b/ImmichFrame.Core/Models/Weather.cs
@@ -6,8 +6,8 @@ public class Weather : IWeather
{
public string Location { get; set; } = "";
public double Temperature { get; set; } = 0d;
- public double MinimumTemperature { get; set; } = 0d;
- public double MaximumTemperature { get; set; } = 0d;
+ public double? MinimumTemperature { get; set; } = null;
+ public double? MaximumTemperature { get; set; } = null;
public double Humidity { get; set; } = 0d;
public string Unit { get; set; } = "";
public string TemperatureUnit { get; set; } = "";
diff --git a/immichFrame.Web/src/lib/components/elements/clock.svelte b/immichFrame.Web/src/lib/components/elements/clock.svelte
index c2888013..92850132 100644
--- a/immichFrame.Web/src/lib/components/elements/clock.svelte
+++ b/immichFrame.Web/src/lib/components/elements/clock.svelte
@@ -32,14 +32,18 @@
return firstId || null;
});
- function formatTemperature(value?: number) {
+ function formatTemperature(value?: number | null) {
return value?.toFixed(1);
}
- function formatHumidity(value?: number) {
+ function formatHumidity(value?: number | null) {
return value?.toFixed(0);
}
+ function isFiniteNumber(value?: number | null) {
+ return Number.isFinite(value);
+ }
+
onMount(() => {
const interval = setInterval(() => {
now = new Date();
@@ -106,7 +110,7 @@
{weather.temperature?.toFixed(1)}°
- {#if $configStore.weatherShowTemperatureRange}
+ {#if $configStore.weatherShowTemperatureRange && isFiniteNumber(weather.maximumTemperature) && isFiniteNumber(weather.minimumTemperature)}
{/if}
- {#if $configStore.weatherShowHumidity}
+ {#if $configStore.weatherShowHumidity && isFiniteNumber(weather.humidity)}
{formatHumidity(weather.humidity)}%
diff --git a/immichFrame.Web/src/lib/immichFrameApi.ts b/immichFrame.Web/src/lib/immichFrameApi.ts
index 87ea8de9..5e44cac1 100644
--- a/immichFrame.Web/src/lib/immichFrameApi.ts
+++ b/immichFrame.Web/src/lib/immichFrameApi.ts
@@ -234,8 +234,8 @@ export type ClientSettingsDto = {
export type IWeather = {
location?: string | null;
temperature?: number;
- minimumTemperature?: number;
- maximumTemperature?: number;
+ minimumTemperature?: number | null;
+ maximumTemperature?: number | null;
humidity?: number;
unit?: string | null;
temperatureUnit?: string | null;
diff --git a/openApi/swagger.json b/openApi/swagger.json
index 38be3641..1220a4b7 100644
--- a/openApi/swagger.json
+++ b/openApi/swagger.json
@@ -1294,11 +1294,13 @@
},
"minimumTemperature": {
"type": "number",
- "format": "double"
+ "format": "double",
+ "nullable": true
},
"maximumTemperature": {
"type": "number",
- "format": "double"
+ "format": "double",
+ "nullable": true
},
"humidity": {
"type": "number",