Improve Immich Album Watcher blueprint
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s

This commit is contained in:
2026-01-30 14:09:45 +03:00
parent 570b0ece76
commit 9ddfc00b03

View File

@@ -54,7 +54,8 @@
# - `{video_warning}` - Warning about video size limits (Telegram only, empty otherwise)
#
# Asset Item Template Variables (for image/video templates):
# These variables can be used in the image and video asset templates:
# These variables can be used in the image and video asset templates.
# Also used for Telegram media captions.
# - `{filename}` - Original filename of the asset
# - `{description}` - User-provided description of the asset
# - `{type}` - Asset type (IMAGE or VIDEO)
@@ -62,6 +63,7 @@
# - `{owner}` - Owner display name
# - `{url}` - Public URL to view the asset (empty if no shared link)
# - `{people}` - People detected in this asset
# - `{album_name}` - Name of the album
#
# Telegram Media Attachments:
# When enabled, photos/videos are sent as media attachments to Telegram
@@ -89,17 +91,13 @@
# - Telegram has a 50 MB file size limit for media sent via URL
# (large videos will fail with "Request Entity Too Large" error)
# - Optional video warning can be shown when videos are present
#
# Caption Template Variables:
# - `{filename}` - Original filename of the asset
# - `{description}` - User-provided description of the asset
# - `{album_name}` - Name of the album
# - `{owner}` - Owner display name
# - Media captions use the Image/Video Asset Templates
#
# Periodic Summary:
# Sends a summary notification of tracked albums at regular intervals.
# Configure Album Names and Album Share URLs (in matching order) to include
# album links in the summary.
# Configure Album Names and Album Share URL Entities (in matching order) to
# include album links in the summary. URL entities can be sensors or input_text
# helpers containing the share URL for each album.
#
# Summary Message Template Variables:
# - `{albums}` - Formatted list of albums (using album item template)
@@ -153,15 +151,18 @@ blueprint:
text:
multiple: true
album_urls:
name: Album Share URLs
album_url_entities:
name: Album Share URL Entities
description: >
List of share URLs for each album (in the same order as Album Names).
Used for periodic summary notifications. Each URL corresponds to the
album name at the same position in the Album Names list.
List of sensor or input_text entities containing share URLs for each album
(in the same order as Album Names). Used for periodic summary notifications.
Each entity's state should contain the album's share URL.
default: []
selector:
text:
entity:
domain:
- sensor
- input_text
multiple: true
track_assets_added:
@@ -274,8 +275,8 @@ blueprint:
message_asset_image:
name: "Image Asset Template"
description: >
Template for IMAGE assets in the list.
Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{owner}`, `{url}`, `{people}`
Template for IMAGE assets in the list. Also used for Telegram media captions.
Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{owner}`, `{url}`, `{people}`, `{album_name}`
default: "\n • 🖼️ {filename}"
selector:
text:
@@ -284,8 +285,8 @@ blueprint:
message_asset_video:
name: "Video Asset Template"
description: >
Template for VIDEO assets in the list.
Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{owner}`, `{url}`, `{people}`
Template for VIDEO assets in the list. Also used for Telegram media captions.
Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{owner}`, `{url}`, `{people}`, `{album_name}`
default: "\n • 🎬 {filename}"
selector:
text:
@@ -380,14 +381,20 @@ blueprint:
max: 10
mode: slider
telegram_caption_template:
name: Media Caption Template
telegram_media_delay:
name: Delay Between Media (ms)
description: >
Caption for each media attachment.
Variables: `{filename}`, `{description}`, `{album_name}`, `{owner}`
default: "{filename}"
Delay in milliseconds between sending each media item.
Helps avoid rate limiting and spaces out media messages.
Set to 0 for no delay.
default: 500
selector:
text:
number:
min: 0
max: 5000
step: 100
unit_of_measurement: ms
mode: slider
telegram_video_warning:
name: Video Warning Message
@@ -503,7 +510,7 @@ variables:
# ---------------------------------------------------------------------------
hub_names: !input hub_names
album_names: !input album_names
album_urls: !input album_urls
album_url_entities: !input album_url_entities
notify_targets: !input notify_targets
include_people: !input include_people
include_asset_details: !input include_asset_details
@@ -520,7 +527,7 @@ variables:
telegram_notify_targets: !input telegram_notify_targets
telegram_chat_ids_raw: !input telegram_chat_ids
max_media_to_send: !input max_media_to_send
telegram_caption_template: !input telegram_caption_template
telegram_media_delay: !input telegram_media_delay
telegram_video_warning_template: !input telegram_video_warning
# Periodic Summary Settings
@@ -623,7 +630,8 @@ variables:
| replace('{created}', asset.asset_created | default('Unknown'))
| replace('{owner}', asset.asset_owner | default('Unknown'))
| replace('{url}', asset.asset_url | default(''))
| replace('{people}', (asset.people | default([])) | join(', ')) %}
| replace('{people}', (asset.people | default([])) | join(', '))
| replace('{album_name}', event_album_name) %}
{% set ns.items = ns.items ~ item %}
{% endfor %}
{% set more_count = filtered_assets | length - max_items %}
@@ -694,11 +702,13 @@ variables:
{% endif %}
# Format the albums list for periodic summary
# Reads URLs from entity states (sensor or input_text)
periodic_albums_list: >
{% set ns = namespace(items = '') %}
{% for i in range(album_names | length) %}
{% set name = album_names[i] %}
{% set url = album_urls[i] | default('') if i < (album_urls | length) else '' %}
{% set url_entity = album_url_entities[i] | default('') if i < (album_url_entities | length) else '' %}
{% set url = states(url_entity) | default('') if url_entity | length > 0 else '' %}
{% set item = periodic_album_template
| replace('{album_name}', name)
| replace('{album_url}', url) %}
@@ -982,14 +992,19 @@ action:
- variables:
reply_to_message_id: "{{ telegram_response.chats[0].message_id | default(0) | int }}"
# Small delay to ensure message is processed before sending replies
- delay:
milliseconds: 500
# Send each media item to this chat as reply to the notification
- repeat:
count: "{{ media_to_send | length }}"
sequence:
# Delay before each media item (acts as delay after notification for first item)
- choose:
- conditions:
- condition: template
value_template: "{{ telegram_media_delay > 0 }}"
sequence:
- delay:
milliseconds: "{{ telegram_media_delay }}"
- variables:
current_asset: "{{ media_to_send[repeat.index - 1] }}"
asset_type: "{{ current_asset.asset_type | default('IMAGE') }}"
@@ -1005,12 +1020,17 @@ action:
{% else %}
{{ view_url }}
{% endif %}
# Use image/video asset templates for captions
caption: >
{{ telegram_caption_template
| replace('{filename}', current_asset.asset_filename | default(''))
| replace('{description}', current_asset.asset_description | default(''))
| replace('{album_name}', event_album_name)
| replace('{owner}', current_asset.asset_owner | default('')) }}
{% set tpl = message_asset_video_template if asset_type == 'VIDEO' else message_asset_image_template %}
{{ tpl | replace('{filename}', current_asset.asset_filename | default(''))
| replace('{description}', current_asset.asset_description | default(''))
| replace('{type}', current_asset.asset_type | default(''))
| replace('{created}', current_asset.asset_created | default(''))
| replace('{owner}', current_asset.asset_owner | default(''))
| replace('{url}', current_asset.asset_url | default(''))
| replace('{people}', (current_asset.people | default([])) | join(', '))
| replace('{album_name}', event_album_name) }}
# Send photo or video based on asset type
- choose: