From 006f9e532c8d7164a5f31a27683a4ec94db43c17 Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Wed, 18 Feb 2026 21:27:59 +0300 Subject: [PATCH] Add `{year}` variable to asset templates in `Immich Album Watcher` Co-Authored-By: Claude Opus 4.6 --- Common/Immich Album Watcher/README.md | 1 + Common/Immich Album Watcher/blueprint.yaml | 24 +++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Common/Immich Album Watcher/README.md b/Common/Immich Album Watcher/README.md index a755a87..2d9882d 100644 --- a/Common/Immich Album Watcher/README.md +++ b/Common/Immich Album Watcher/README.md @@ -107,6 +107,7 @@ These variables can be used in the image and video asset templates. Also used fo | `{type}` | Asset type (IMAGE or VIDEO) | | `{created}` | Creation date/time (always shown) | | `{created_if_unique}` | Creation date/time formatted with template if dates differ, empty if all same | +| `{year}` | Year the asset was created (4-digit, e.g., 2024) | | `{owner}` | Owner display name | | `{url}` | Public URL to view the asset (empty if no shared link) | | `{download_url}` | Direct download URL for the original file | diff --git a/Common/Immich Album Watcher/blueprint.yaml b/Common/Immich Album Watcher/blueprint.yaml index e232a6e..0969537 100644 --- a/Common/Immich Album Watcher/blueprint.yaml +++ b/Common/Immich Album Watcher/blueprint.yaml @@ -236,7 +236,7 @@ blueprint: name: "Image Asset Template" description: > Template for IMAGE assets in the list. Also used for Telegram media captions. - Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{owner}`, `{url}`, `{download_url}`, `{photo_url}`, `{playback_url}`, `{people}`, `{album_name}`, `{album_created}`, `{album_updated}`, `{is_favorite}`, `{rating}`, `{location}`, `{location_if_unique}`, `{city}`, `{state}`, `{country}` + Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{year}`, `{owner}`, `{url}`, `{download_url}`, `{photo_url}`, `{playback_url}`, `{people}`, `{album_name}`, `{album_created}`, `{album_updated}`, `{is_favorite}`, `{rating}`, `{location}`, `{location_if_unique}`, `{city}`, `{state}`, `{country}` default: "\n • 🖼️ {filename}" selector: text: @@ -246,7 +246,7 @@ blueprint: name: "Video Asset Template" description: > Template for VIDEO assets in the list. Also used for Telegram media captions. - Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{owner}`, `{url}`, `{download_url}`, `{photo_url}`, `{playback_url}`, `{people}`, `{album_name}`, `{album_created}`, `{album_updated}`, `{is_favorite}`, `{rating}`, `{location}`, `{location_if_unique}`, `{city}`, `{state}`, `{country}` + Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{year}`, `{owner}`, `{url}`, `{download_url}`, `{photo_url}`, `{playback_url}`, `{people}`, `{album_name}`, `{album_created}`, `{album_updated}`, `{is_favorite}`, `{rating}`, `{location}`, `{location_if_unique}`, `{city}`, `{state}`, `{country}` default: "\n • 🎬 {filename}" selector: text: @@ -1160,6 +1160,7 @@ variables: {% set raw_date = asset.created_at | default('', true) %} {% set dt = raw_date | as_datetime(none) if raw_date is string and raw_date | length > 0 else none %} {% set formatted_date = dt.strftime(date_format) if dt else '' %} + {% set year = dt.strftime('%Y') if dt else '' %} {% set created_if_unique = '' if unique_dates | length == 1 else (date_if_unique_template | replace('{date}', formatted_date)) %} {% set is_favorite = favorite_indicator_template if asset.is_favorite | default(false) else '' %} {% set rating = asset.rating | default('') | string if asset.rating not in [none, ''] else '' %} @@ -1190,7 +1191,8 @@ variables: | replace('{location_if_unique}', location_if_unique) | replace('{city}', city) | replace('{state}', state) - | replace('{country}', country) %} + | replace('{country}', country) + | replace('{year}', year) %} {% set ns.items = ns.items ~ item %} {% endfor %} {% set more_count = sorted_assets | length - max_items %} @@ -1565,6 +1567,7 @@ action: {% set raw_date = asset.created_at | default('', true) %} {% set dt = raw_date | as_datetime(none) if raw_date is string and raw_date | length > 0 else none %} {% set formatted_date = dt.strftime(date_format) if dt else '' %} + {% set year = dt.strftime('%Y') if dt else '' %} {% set created_if_unique = '' if scheduled_unique_dates | length == 1 else (date_if_unique_template | replace('{date}', formatted_date) if formatted_date | length > 0 else '') %} {% set is_favorite = favorite_indicator_template if asset.is_favorite | default(false) else '' %} {% set rating = asset.rating | default('') | string if asset.rating not in [none, ''] else '' %} @@ -1595,7 +1598,8 @@ action: | replace('{location_if_unique}', location_if_unique) | replace('{city}', city) | replace('{state}', state) - | replace('{country}', country) %} + | replace('{country}', country) + | replace('{year}', year) %} {% set ns.items = ns.items ~ item %} {% endfor %} {{ ns.items }} @@ -1824,6 +1828,7 @@ action: {% set raw_date = asset.created_at | default('', true) %} {% set dt = raw_date | as_datetime(none) if raw_date is string and raw_date | length > 0 else none %} {% set formatted_date = dt.strftime(date_format) if dt else '' %} + {% set year = dt.strftime('%Y') if dt else '' %} {% set created_if_unique = '' if combined_unique_dates | length == 1 else (date_if_unique_template | replace('{date}', formatted_date) if formatted_date | length > 0 else '') %} {% set is_favorite = favorite_indicator_template if asset.is_favorite | default(false) else '' %} {% set rating = asset.rating | default('') | string if asset.rating not in [none, ''] else '' %} @@ -1854,7 +1859,8 @@ action: | replace('{location_if_unique}', location_if_unique) | replace('{city}', city) | replace('{state}', state) - | replace('{country}', country) %} + | replace('{country}', country) + | replace('{year}', year) %} {% set ns.items = ns.items ~ item %} {% endfor %} {{ ns.items }} @@ -2087,6 +2093,7 @@ action: {% set raw_date = asset.created_at | default('', true) %} {% set dt = raw_date | as_datetime(none) if raw_date is string and raw_date | length > 0 else none %} {% set formatted_date = dt.strftime(date_format) if dt else '' %} + {% set year = dt.strftime('%Y') if dt else '' %} {% set created_if_unique = '' if memory_unique_dates | length == 1 else (date_if_unique_template | replace('{date}', formatted_date) if formatted_date | length > 0 else '') %} {% set is_favorite = favorite_indicator_template if asset.is_favorite | default(false) else '' %} {% set rating = asset.rating | default('') | string if asset.rating not in [none, ''] else '' %} @@ -2117,7 +2124,8 @@ action: | replace('{location_if_unique}', location_if_unique) | replace('{city}', city) | replace('{state}', state) - | replace('{country}', country) %} + | replace('{country}', country) + | replace('{year}', year) %} {% set ns.items = ns.items ~ item %} {% endfor %} {{ ns.items }} @@ -2336,6 +2344,7 @@ action: {% set raw_date = asset.created_at | default('', true) %} {% set dt = raw_date | as_datetime(none) if raw_date is string and raw_date | length > 0 else none %} {% set formatted_date = dt.strftime(date_format) if dt else '' %} + {% set year = dt.strftime('%Y') if dt else '' %} {% set created_if_unique = '' if memory_comb_unique_dates | length == 1 else (date_if_unique_template | replace('{date}', formatted_date) if formatted_date | length > 0 else '') %} {% set is_favorite = favorite_indicator_template if asset.is_favorite | default(false) else '' %} {% set rating = asset.rating | default('') | string if asset.rating not in [none, ''] else '' %} @@ -2366,7 +2375,8 @@ action: | replace('{location_if_unique}', location_if_unique) | replace('{city}', city) | replace('{state}', state) - | replace('{country}', country) %} + | replace('{country}', country) + | replace('{year}', year) %} {% set ns.items = ns.items ~ item %} {% endfor %} {{ ns.items }}