{ "entity": { "sensor": { "album_id": { "name": "Album ID" }, "album_asset_count": { "name": "Asset Count" }, "album_photo_count": { "name": "Photo Count" }, "album_video_count": { "name": "Video Count" }, "album_last_updated": { "name": "Last Updated" }, "album_created": { "name": "Created" }, "album_public_url": { "name": "Public URL" }, "album_protected_url": { "name": "Protected URL" }, "album_protected_password": { "name": "Protected Password" } }, "binary_sensor": { "album_new_assets": { "name": "New Assets" } }, "camera": { "album_thumbnail": { "name": "Thumbnail" } }, "text": { "album_protected_password_edit": { "name": "Share Password" } }, "button": { "create_share_link": { "name": "Create Share Link" }, "delete_share_link": { "name": "Delete Share Link" }, "create_protected_link": { "name": "Create Protected Link" }, "delete_protected_link": { "name": "Delete Protected Link" } } }, "config": { "step": { "user": { "title": "Connect to Immich", "description": "Enter your Immich server details. You can get an API key from Immich → User Settings → API Keys.", "data": { "hub_name": "Hub Name", "immich_url": "Immich URL", "api_key": "API Key" }, "data_description": { "hub_name": "A name for this Immich server (used in entity IDs)", "immich_url": "The URL of your Immich server (e.g., http://192.168.1.100:2283)", "api_key": "Your Immich API key" } } }, "error": { "cannot_connect": "Failed to connect to Immich server", "invalid_auth": "Invalid API key", "no_albums": "No albums found on the server", "unknown": "Unexpected error occurred", "server_connect_failed": "Failed to connect to Immich Watcher server" }, "abort": { "already_configured": "This Immich server is already configured" } }, "config_subentries": { "album": { "initiate_flow": { "user": "Add Album" }, "entry_type": "Album", "step": { "user": { "title": "Add Album to Watch", "description": "Select an album from your Immich server to monitor for changes.", "data": { "album_id": "Album" } } }, "error": { "cannot_connect": "Failed to connect to Immich server" }, "abort": { "parent_not_found": "Hub configuration not found", "no_albums": "No albums found on the server", "all_albums_configured": "All albums are already configured", "album_already_configured": "This album is already being watched" } } }, "options": { "step": { "init": { "title": "Immich Album Watcher Options", "description": "Configure the polling interval and Telegram settings for all albums.", "data": { "scan_interval": "Scan interval (seconds)", "telegram_bot_token": "Telegram Bot Token", "telegram_cache_ttl": "Telegram Cache TTL (hours)", "server_url": "Watcher Server URL (optional)", "server_api_key": "Watcher Server API Key (optional)" }, "data_description": { "scan_interval": "How often to check for album changes (10-3600 seconds)", "telegram_bot_token": "Bot token for sending notifications to Telegram", "telegram_cache_ttl": "How long to cache uploaded file IDs to avoid re-uploading (1-168 hours, default: 48)", "server_url": "URL of the standalone Immich Watcher server for config sync and event reporting (leave empty to disable)", "server_api_key": "API key (JWT access token) for authenticating with the Watcher server" } } } }, "services": { "refresh": { "name": "Refresh", "description": "Force an immediate refresh of album data from Immich." }, "get_assets": { "name": "Get Assets", "description": "Get assets from the targeted album with optional filtering and ordering.", "fields": { "limit": { "name": "Limit", "description": "Maximum number of assets to return (1-100)." }, "offset": { "name": "Offset", "description": "Number of assets to skip (for pagination)." }, "favorite_only": { "name": "Favorite Only", "description": "Filter to show only favorite assets." }, "filter_min_rating": { "name": "Minimum Rating", "description": "Minimum rating for assets (1-5)." }, "order_by": { "name": "Order By", "description": "Field to sort assets by (date, rating, name, or random)." }, "order": { "name": "Order", "description": "Sort direction (ascending or descending)." }, "asset_type": { "name": "Asset Type", "description": "Filter assets by type (all, photo, or video)." }, "min_date": { "name": "Minimum Date", "description": "Filter assets created on or after this date (ISO 8601 format)." }, "max_date": { "name": "Maximum Date", "description": "Filter assets created on or before this date (ISO 8601 format)." }, "memory_date": { "name": "Memory Date", "description": "Filter assets by matching month and day, excluding the same year (memories filter)." }, "city": { "name": "City", "description": "Filter assets by city name (case-insensitive)." }, "state": { "name": "State", "description": "Filter assets by state/region name (case-insensitive)." }, "country": { "name": "Country", "description": "Filter assets by country name (case-insensitive)." } } }, "send_telegram_notification": { "name": "Send Telegram Notification", "description": "Send a notification to Telegram (text, photo, video, document, or media group).", "fields": { "bot_token": { "name": "Bot Token", "description": "Telegram bot token (optional if configured in integration options)." }, "chat_id": { "name": "Chat ID", "description": "Telegram chat ID to send to." }, "assets": { "name": "Assets", "description": "List of media assets with 'url', optional 'type' (document/photo/video, default: document), optional 'content_type' (MIME type), and optional 'cache_key' (custom key for caching instead of URL). If empty, sends a text message. Photos and videos can be grouped; documents are sent separately." }, "caption": { "name": "Caption", "description": "Caption text. For media, applied to first item. For empty URLs, this is the message text." }, "reply_to_message_id": { "name": "Reply To", "description": "Optional message ID to reply to." }, "disable_web_page_preview": { "name": "Disable Web Page Preview", "description": "Disable link previews in text messages." }, "parse_mode": { "name": "Parse Mode", "description": "How to parse the caption/text. Options are HTML, Markdown, MarkdownV2, or empty string for plain text." }, "max_group_size": { "name": "Max Group Size", "description": "Maximum number of media items per media group (2-10). Large lists will be split into multiple groups." }, "chunk_delay": { "name": "Chunk Delay", "description": "Delay in milliseconds between sending multiple media groups (0-60000). Useful for rate limiting." }, "wait_for_response": { "name": "Wait For Response", "description": "Wait for Telegram to finish processing before returning. Set to false for fire-and-forget (automation continues immediately)." }, "max_asset_data_size": { "name": "Max Asset Data Size", "description": "Maximum asset size in bytes. Assets exceeding this limit will be skipped. Leave empty for no limit." }, "send_large_photos_as_documents": { "name": "Send Large Photos As Documents", "description": "How to handle photos exceeding Telegram's limits (10MB or 10000px dimension sum). If true, send as documents. If false, skip oversized photos." }, "chat_action": { "name": "Chat Action", "description": "Chat action to display while processing (typing, upload_photo, upload_video, upload_document). Set to empty to disable." }, "quiet_hours_start": { "name": "Quiet Hours Start", "description": "Start time for quiet hours (HH:MM format, e.g. 22:00). Notifications during this period are queued and sent when quiet hours end. Omit to send immediately." }, "quiet_hours_end": { "name": "Quiet Hours End", "description": "End time for quiet hours (HH:MM format, e.g. 08:00). Queued notifications will be sent at this time." } } } } }