Upgrade the immich automation

This commit is contained in:
2026-02-01 01:16:49 +03:00
parent d8086e0d77
commit 2f2c242e08
3 changed files with 62 additions and 57 deletions

View File

@@ -19,3 +19,7 @@ After any change to repository content (blueprints, documentation, or other file
- **Major** (X.0.0) - Breaking changes or major new features - **Major** (X.0.0) - Breaking changes or major new features
- **Minor** (0.X.0) - New features, enhancements, or significant improvements - **Minor** (0.X.0) - New features, enhancements, or significant improvements
- **Patch** (0.0.X) - Bug fixes, typos, small tweaks, or documentation updates - **Patch** (0.0.X) - Bug fixes, typos, small tweaks, or documentation updates
## Repository Structure
When any blueprint file is moved ask if I need to update the link somewhere else.

View File

@@ -45,18 +45,19 @@
# #
# Added Assets Fields (each item in `added_assets`): # Added Assets Fields (each item in `added_assets`):
# - `id`: Unique asset ID # - `id`: Unique asset ID
# - `asset_type`: Type of asset (IMAGE or VIDEO) # - `type`: Type of asset (IMAGE or VIDEO)
# - `asset_filename`: Original filename of the asset # - `filename`: Original filename of the asset
# - `asset_description`: User-provided description of the asset # - `created_at`: Date/time when the asset was originally created
# - `asset_created`: Date/time when the asset was originally created # - `owner`: Display name of the user who owns the asset
# - `asset_owner`: Display name of the user who owns the asset # - `owner_id`: Unique ID of the user who owns the asset
# - `asset_owner_id`: Unique ID of the user who owns the asset # - `description`: Description/caption (user-added in Immich, or EXIF fallback)
# - `asset_url`: Public URL to view the asset (only if album has shared link) # - `is_favorite`: Whether the asset is marked as favorite (true or false)
# - `asset_download_url`: Direct download URL for the asset (preferred for Telegram images) # - `rating`: User rating of the asset (1-5 stars, or null if not rated)
# - `asset_playback_url`: Playback/streaming URL for videos (preferred for Telegram videos) # - `url`: Public URL to view the asset (only if album has shared link)
# - `download_url`: Direct download URL for the original file (if shared link exists)
# - `playback_url`: Video playback URL (for VIDEO assets only, if shared link exists)
# - `photo_url`: Photo preview URL (for IMAGE assets only, if shared link exists)
# - `people`: List of people detected in this specific asset # - `people`: List of people detected in this specific asset
# - `asset_is_favorite`: Whether the asset is marked as favorite (true or false)
# - `asset_rating`: User rating of the asset (1-5 stars, or null if not rated)
# #
# Message Template Variables: # Message Template Variables:
# All message templates support these placeholder variables (use single braces): # All message templates support these placeholder variables (use single braces):
@@ -73,12 +74,15 @@
# 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. # Also used for Telegram media captions.
# - `{filename}` - Original filename of the asset # - `{filename}` - Original filename of the asset
# - `{description}` - User-provided description of the asset # - `{description}` - Description/caption (user-added in Immich, or EXIF fallback)
# - `{type}` - Asset type (IMAGE or VIDEO) # - `{type}` - Asset type (IMAGE or VIDEO)
# - `{created}` - Creation date/time (always shown) # - `{created}` - Creation date/time (always shown)
# - `{created_if_unique}` - Creation date/time formatted with template if dates differ, empty if all same # - `{created_if_unique}` - Creation date/time formatted with template if dates differ, empty if all same
# - `{owner}` - Owner display name # - `{owner}` - Owner display name
# - `{url}` - Public URL to view the asset (empty if no shared link) # - `{url}` - Public URL to view the asset (empty if no shared link)
# - `{download_url}` - Direct download URL for the original file
# - `{photo_url}` - Photo preview URL (for IMAGE assets only)
# - `{playback_url}` - Video playback URL (for VIDEO assets only)
# - `{people}` - People detected in this asset # - `{people}` - People detected in this asset
# - `{album_name}` - Name of the album # - `{album_name}` - Name of the album
# - `{is_favorite}` - Favorite indicator (using template) if asset is favorite, empty otherwise # - `{is_favorite}` - Favorite indicator (using template) if asset is favorite, empty otherwise
@@ -325,7 +329,7 @@ blueprint:
name: "Image Asset Template" name: "Image Asset Template"
description: > description: >
Template for IMAGE assets in the list. Also used for Telegram media captions. Template for IMAGE assets in the list. Also used for Telegram media captions.
Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{owner}`, `{url}`, `{people}`, `{album_name}`, `{is_favorite}`, `{rating}` Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{owner}`, `{url}`, `{download_url}`, `{photo_url}`, `{playback_url}`, `{people}`, `{album_name}`, `{is_favorite}`, `{rating}`
default: "\n • 🖼️ {filename}" default: "\n • 🖼️ {filename}"
selector: selector:
text: text:
@@ -335,7 +339,7 @@ blueprint:
name: "Video Asset Template" name: "Video Asset Template"
description: > description: >
Template for VIDEO assets in the list. Also used for Telegram media captions. Template for VIDEO assets in the list. Also used for Telegram media captions.
Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{owner}`, `{url}`, `{people}`, `{album_name}`, `{is_favorite}`, `{rating}` Variables: `{filename}`, `{description}`, `{type}`, `{created}`, `{created_if_unique}`, `{owner}`, `{url}`, `{download_url}`, `{photo_url}`, `{playback_url}`, `{people}`, `{album_name}`, `{is_favorite}`, `{rating}`
default: "\n • 🎬 {filename}" default: "\n • 🎬 {filename}"
selector: selector:
text: text:
@@ -509,16 +513,6 @@ blueprint:
selector: selector:
boolean: boolean:
telegram_send_large_photos_as_documents:
name: Send Large Photos as Documents
description: >
Send large photos as documents instead of compressed images.
This preserves the original quality but may result in larger file sizes.
Only applies to photos sent as Telegram media attachments.
default: false
selector:
boolean:
# ------------------------------------------------------------------------- # -------------------------------------------------------------------------
# Periodic Summary # Periodic Summary
# ------------------------------------------------------------------------- # -------------------------------------------------------------------------
@@ -684,7 +678,6 @@ variables:
telegram_media_delay: !input telegram_media_delay telegram_media_delay: !input telegram_media_delay
telegram_video_warning_template: !input telegram_video_warning telegram_video_warning_template: !input telegram_video_warning
telegram_disable_url_preview: !input telegram_disable_url_preview telegram_disable_url_preview: !input telegram_disable_url_preview
telegram_send_large_photos_as_documents: !input telegram_send_large_photos_as_documents
# Periodic Summary Settings # Periodic Summary Settings
enable_periodic_summary: !input enable_periodic_summary enable_periodic_summary: !input enable_periodic_summary
@@ -773,7 +766,7 @@ variables:
filtered_assets: > filtered_assets: >
{% set ns = namespace(assets = []) %} {% set ns = namespace(assets = []) %}
{% for asset in event_added_assets %} {% for asset in event_added_assets %}
{% if (asset.asset_type == 'IMAGE' and track_images) or (asset.asset_type == 'VIDEO' and track_videos) %} {% if (asset.type == 'IMAGE' and track_images) or (asset.type == 'VIDEO' and track_videos) %}
{% set ns.assets = ns.assets + [asset] %} {% set ns.assets = ns.assets + [asset] %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
@@ -786,7 +779,7 @@ variables:
unique_dates: > unique_dates: >
{% set ns = namespace(dates = []) %} {% set ns = namespace(dates = []) %}
{% for asset in filtered_assets %} {% for asset in filtered_assets %}
{% set raw_date = asset.asset_created | default('') %} {% set raw_date = asset.created_at | default('') %}
{% set dt = raw_date | as_datetime(none) if raw_date | length > 0 else none %} {% set dt = raw_date | as_datetime(none) if raw_date | length > 0 else none %}
{% set formatted_date = dt.strftime(date_format) if dt else '' %} {% set formatted_date = dt.strftime(date_format) if dt else '' %}
{% if formatted_date | length > 0 and formatted_date not in ns.dates %} {% if formatted_date | length > 0 and formatted_date not in ns.dates %}
@@ -813,21 +806,24 @@ variables:
{% set max_items = max_assets_to_show if max_assets_to_show > 0 else filtered_assets | length %} {% set max_items = max_assets_to_show if max_assets_to_show > 0 else filtered_assets | length %}
{% set assets_to_show = filtered_assets[:max_items] %} {% set assets_to_show = filtered_assets[:max_items] %}
{% for asset in assets_to_show %} {% for asset in assets_to_show %}
{% set asset_template = message_asset_video_template if asset.asset_type == 'VIDEO' else message_asset_image_template %} {% set asset_template = message_asset_video_template if asset.type == 'VIDEO' else message_asset_image_template %}
{% set raw_date = asset.asset_created | default('') %} {% set raw_date = asset.created_at | default('') %}
{% set dt = raw_date | as_datetime(none) if raw_date | length > 0 else none %} {% set dt = raw_date | as_datetime(none) if raw_date | length > 0 else none %}
{% set formatted_date = dt.strftime(date_format) if dt else '' %} {% set formatted_date = dt.strftime(date_format) if dt else '' %}
{% set created_if_unique = '' if unique_dates | length == 1 else (date_if_unique_template | replace('{date}', formatted_date)) %} {% 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.asset_is_favorite | default(false) else '' %} {% set is_favorite = favorite_indicator_template if asset.is_favorite | default(false) else '' %}
{% set rating = asset.asset_rating | default('') | string if asset.asset_rating not in [none, ''] else '' %} {% set rating = asset.rating | default('') | string if asset.rating not in [none, ''] else '' %}
{% set item = asset_template {% set item = asset_template
| replace('{filename}', asset.asset_filename | default('Unknown')) | replace('{filename}', asset.filename | default('Unknown'))
| replace('{description}', asset.asset_description | default('')) | replace('{description}', asset.description | default(''))
| replace('{type}', asset.asset_type | default('Unknown')) | replace('{type}', asset.type | default('Unknown'))
| replace('{created}', formatted_date) | replace('{created}', formatted_date)
| replace('{created_if_unique}', created_if_unique) | replace('{created_if_unique}', created_if_unique)
| replace('{owner}', asset.asset_owner | default('Unknown')) | replace('{owner}', asset.owner | default('Unknown'))
| replace('{url}', asset.asset_url | default('')) | replace('{url}', asset.url | default(''))
| replace('{download_url}', asset.download_url | default(''))
| replace('{photo_url}', asset.photo_url | default(''))
| replace('{playback_url}', asset.playback_url | default(''))
| replace('{people}', (asset.people | default([])) | join(', ')) | replace('{people}', (asset.people | default([])) | join(', '))
| replace('{album_name}', event_album_name) | replace('{album_name}', event_album_name)
| replace('{is_favorite}', is_favorite) | replace('{is_favorite}', is_favorite)
@@ -845,21 +841,22 @@ variables:
# Check if filtered assets contain any videos (for Telegram warning) # Check if filtered assets contain any videos (for Telegram warning)
has_videos_in_assets: > has_videos_in_assets: >
{{ filtered_assets | selectattr('asset_type', 'equalto', 'VIDEO') | list | length > 0 }} {{ filtered_assets | selectattr('type', 'equalto', 'VIDEO') | list | length > 0 }}
# Video warning text (only populated when Telegram media is enabled and videos are present) # Video warning text (only populated when Telegram media is enabled and videos are present)
video_warning_text: >- video_warning_text: >-
{% if send_telegram_media and has_videos_in_assets and telegram_video_warning_template | length > 0 %}{{ telegram_video_warning_template }}{% else %}{{ '' }}{% endif %} {% if send_telegram_media and has_videos_in_assets and telegram_video_warning_template | length > 0 %}{{ telegram_video_warning_template }}{% else %}{{ '' }}{% endif %}
# Filter assets that have valid URLs (for Telegram media) # Filter assets that have valid URLs (for Telegram media)
# URL preference: playback_url (videos) > download_url > asset_url (viewer) # URL preference: playback_url (videos), photo_url (images) > download_url > url (viewer)
assets_with_urls: > assets_with_urls: >
{% set ns = namespace(assets = []) %} {% set ns = namespace(assets = []) %}
{% for asset in filtered_assets %} {% for asset in filtered_assets %}
{% set playback_url = asset.asset_playback_url | default('') %} {% set playback_url = asset.playback_url | default('') %}
{% set download_url = asset.asset_download_url | default('') %} {% set photo_url = asset.photo_url | default('') %}
{% set view_url = asset.asset_url | default('') %} {% set download_url = asset.download_url | default('') %}
{% if playback_url | length > 0 or download_url | length > 0 or view_url | length > 0 %} {% set view_url = asset.url | default('') %}
{% if playback_url | length > 0 or photo_url | length > 0 or download_url | length > 0 or view_url | length > 0 %}
{% set ns.assets = ns.assets + [asset] %} {% set ns.assets = ns.assets + [asset] %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
@@ -1248,17 +1245,19 @@ action:
**Media to Send ({{ media_to_send | length }} items):** **Media to Send ({{ media_to_send | length }} items):**
{% for asset in media_to_send %} {% for asset in media_to_send %}
{% set playback_url = asset.asset_playback_url | default('') %} {% set playback_url = asset.playback_url | default('') %}
{% set download_url = asset.asset_download_url | default('') %} {% set photo_url = asset.photo_url | default('') %}
{% set view_url = asset.asset_url | default('') %} {% set download_url = asset.download_url | default('') %}
{% if asset.asset_type == 'VIDEO' %} {% set view_url = asset.url | default('') %}
{% if asset.type == 'VIDEO' %}
{% set used_url = playback_url if playback_url | length > 0 else (download_url if download_url | length > 0 else view_url) %} {% set used_url = playback_url if playback_url | length > 0 else (download_url if download_url | length > 0 else view_url) %}
{% else %} {% else %}
{% set used_url = download_url if download_url | length > 0 else view_url %} {% set used_url = photo_url if photo_url | length > 0 else (download_url if download_url | length > 0 else view_url) %}
{% endif %} {% endif %}
**{{ loop.index }}. {{ asset.asset_type }}: {{ asset.asset_filename | default('unknown') }}** **{{ loop.index }}. {{ asset.type }}: {{ asset.filename | default('unknown') }}**
- Playback URL: {{ playback_url if playback_url | length > 0 else '(not available)' }} - Playback URL: {{ playback_url if playback_url | length > 0 else '(not available)' }}
- Photo URL: {{ photo_url if photo_url | length > 0 else '(not available)' }}
- Download URL: {{ download_url if download_url | length > 0 else '(not available)' }} - Download URL: {{ download_url if download_url | length > 0 else '(not available)' }}
- View URL: {{ view_url if view_url | length > 0 else '(not available)' }} - View URL: {{ view_url if view_url | length > 0 else '(not available)' }}
- **Using: {{ used_url if used_url | length > 0 else '(no URL!)' }}** - **Using: {{ used_url if used_url | length > 0 else '(no URL!)' }}**
@@ -1282,16 +1281,19 @@ action:
| replace('{common_date}', common_date) }} | replace('{common_date}', common_date) }}
# Build URLs list for media # Build URLs list for media
# URL preference: playback_url (videos) > download_url > asset_url # URL preference: playback_url (videos), photo_url (images) > download_url > url
media_urls: > media_urls: >
{% set ns = namespace(items = []) %} {% set ns = namespace(items = []) %}
{% for asset in media_to_send %} {% for asset in media_to_send %}
{% set asset_type = asset.asset_type | default('IMAGE') %} {% set asset_type = asset.type | default('IMAGE') %}
{% set playback_url = asset.asset_playback_url | default('') %} {% set playback_url = asset.playback_url | default('') %}
{% set download_url = asset.asset_download_url | default('') %} {% set photo_url = asset.photo_url | default('') %}
{% set view_url = asset.asset_url | default('') %} {% set download_url = asset.download_url | default('') %}
{% set view_url = asset.url | default('') %}
{% if asset_type == 'VIDEO' and playback_url | length > 0 %} {% if asset_type == 'VIDEO' and playback_url | length > 0 %}
{% set media_url = playback_url %} {% set media_url = playback_url %}
{% elif asset_type == 'IMAGE' and photo_url | length > 0 %}
{% set media_url = photo_url %}
{% elif download_url | length > 0 %} {% elif download_url | length > 0 %}
{% set media_url = download_url %} {% set media_url = download_url %}
{% else %} {% else %}
@@ -1354,5 +1356,4 @@ action:
reply_to_message_id: "{{ reply_to_message_id }}" reply_to_message_id: "{{ reply_to_message_id }}"
max_group_size: "{{ max_media_per_group }}" max_group_size: "{{ max_media_per_group }}"
chunk_delay: "{{ telegram_media_delay }}" chunk_delay: "{{ telegram_media_delay }}"
send_large_photos_as_documents: "{{ telegram_send_large_photos_as_documents }}"
wait_for_response: false wait_for_response: false

View File

@@ -1,3 +1,3 @@
{ {
"version": "1.17.1" "version": "1.18.4"
} }