198 lines
6.8 KiB
Python
198 lines
6.8 KiB
Python
DOMAIN = "album_slideshow"
|
||
|
||
CONF_PROVIDER = "provider"
|
||
CONF_ALBUM_URL = "album_url"
|
||
CONF_ALBUM_NAME = "album_name"
|
||
CONF_LOCAL_PATH = "local_path"
|
||
CONF_RECURSIVE = "recursive"
|
||
CONF_IMAGE_CACHE_MB = "image_cache_mb"
|
||
# Media Source provider: a ``media-source://...`` content id pointing at a
|
||
# folder-like node (e.g. an Immich people/album view, or local media). The
|
||
# coordinator browses it, collects the image children, and resolves each to
|
||
# a playable URL.
|
||
CONF_MEDIA_CONTENT_ID = "media_content_id"
|
||
# Immich (direct API) provider.
|
||
CONF_IMMICH_URL = "immich_url"
|
||
CONF_IMMICH_API_KEY = "immich_api_key"
|
||
CONF_IMMICH_SELECTION_TYPE = "immich_selection_type"
|
||
CONF_IMMICH_SELECTION_ID = "immich_selection_id"
|
||
CONF_IMMICH_IMAGE_SIZE = "immich_image_size"
|
||
CONF_IMMICH_FILTER = "immich_filter"
|
||
|
||
IMMICH_SELECTION_ALBUM = "album"
|
||
IMMICH_SELECTION_ALBUMS = "albums"
|
||
IMMICH_SELECTION_PERSON = "person"
|
||
IMMICH_SELECTION_PEOPLE = "people"
|
||
IMMICH_SELECTION_FAVORITES = "favorites"
|
||
IMMICH_SELECTION_ALL = "all"
|
||
IMMICH_SELECTION_RANDOM = "random"
|
||
IMMICH_SELECTION_SEARCH = "search"
|
||
# Composite: a client-side union of any mix of albums, people, favorites and a
|
||
# custom filter. Immich has no OR operator, so each member is queried on its
|
||
# own and the results are merged (see #19). The selection id is a JSON object
|
||
# ``{"albums": [...], "people": [...], "favorites": bool}``; an empty composite
|
||
# means "all photos".
|
||
IMMICH_SELECTION_COMPOSITE = "composite"
|
||
|
||
IMMICH_IMAGE_PREVIEW = "preview"
|
||
IMMICH_IMAGE_FULLSIZE = "fullsize"
|
||
IMMICH_IMAGE_ORIGINAL = "original"
|
||
IMMICH_IMAGE_SIZE_OPTIONS = [
|
||
IMMICH_IMAGE_PREVIEW,
|
||
IMMICH_IMAGE_FULLSIZE,
|
||
IMMICH_IMAGE_ORIGINAL,
|
||
]
|
||
DEFAULT_IMMICH_IMAGE_SIZE = IMMICH_IMAGE_PREVIEW
|
||
# Local-folder option: when True (default) the coordinator does best-effort
|
||
# reverse geocoding of EXIF GPS coordinates via the public Nominatim
|
||
# (OpenStreetMap) endpoint and exposes a human-readable ``location``
|
||
# attribute. Users with privacy concerns can disable this from the
|
||
# integration's options dialog.
|
||
CONF_REVERSE_GEOCODE = "reverse_geocode"
|
||
DEFAULT_REVERSE_GEOCODE = True
|
||
|
||
PROVIDER_GOOGLE_SHARED = "google_shared"
|
||
PROVIDER_LOCAL_FOLDER = "local_folder"
|
||
PROVIDER_MEDIA_SOURCE = "media_source"
|
||
PROVIDER_IMMICH = "immich"
|
||
PROVIDER_PHOTOPRISM = "photoprism"
|
||
PROVIDER_ICLOUD = "icloud"
|
||
|
||
# iCloud Shared Album provider. The share token in the pasted link is the only
|
||
# credential; no account or password is involved.
|
||
CONF_ICLOUD_URL = "icloud_url"
|
||
CONF_ICLOUD_TOKEN = "icloud_token"
|
||
CONF_ICLOUD_IMAGE_SIZE = "icloud_image_size"
|
||
|
||
# ``full`` picks the largest derivative Apple generated (best for a slideshow,
|
||
# usually ~2048px); ``preview`` picks the smallest (a thumbnail; fastest).
|
||
ICLOUD_IMAGE_FULL = "full"
|
||
ICLOUD_IMAGE_PREVIEW = "preview"
|
||
ICLOUD_IMAGE_SIZE_OPTIONS = [ICLOUD_IMAGE_FULL, ICLOUD_IMAGE_PREVIEW]
|
||
DEFAULT_ICLOUD_IMAGE_SIZE = ICLOUD_IMAGE_FULL
|
||
|
||
|
||
# PhotoPrism (direct API) provider.
|
||
CONF_PHOTOPRISM_URL = "photoprism_url"
|
||
CONF_PHOTOPRISM_AUTH_METHOD = "photoprism_auth_method"
|
||
CONF_PHOTOPRISM_TOKEN = "photoprism_token"
|
||
CONF_PHOTOPRISM_USERNAME = "photoprism_username"
|
||
CONF_PHOTOPRISM_PASSWORD = "photoprism_password"
|
||
CONF_PHOTOPRISM_SELECTION_TYPE = "photoprism_selection_type"
|
||
CONF_PHOTOPRISM_SELECTION_ID = "photoprism_selection_id"
|
||
CONF_PHOTOPRISM_IMAGE_SIZE = "photoprism_image_size"
|
||
CONF_PHOTOPRISM_FILTER = "photoprism_filter"
|
||
|
||
PHOTOPRISM_AUTH_APP_PASSWORD = "app_password"
|
||
PHOTOPRISM_AUTH_USER_PASSWORD = "user_password"
|
||
|
||
# PhotoPrism thumbnail sizes (from its Thumbnail Image API). ``preview`` is a
|
||
# good slideshow default; the larger sizes trade bandwidth for detail.
|
||
PHOTOPRISM_IMAGE_PREVIEW = "fit_1280"
|
||
PHOTOPRISM_IMAGE_FULLSIZE = "fit_1920"
|
||
PHOTOPRISM_IMAGE_ORIGINAL = "fit_2560"
|
||
PHOTOPRISM_IMAGE_SIZE_OPTIONS = [
|
||
PHOTOPRISM_IMAGE_PREVIEW,
|
||
PHOTOPRISM_IMAGE_FULLSIZE,
|
||
PHOTOPRISM_IMAGE_ORIGINAL,
|
||
]
|
||
DEFAULT_PHOTOPRISM_IMAGE_SIZE = PHOTOPRISM_IMAGE_PREVIEW
|
||
|
||
# Composite: client-side union of albums + people + favorites (+ optional
|
||
# search query). PhotoPrism has no OR across filters, so each member is
|
||
# queried separately and merged. Selection id is a JSON object
|
||
# ``{"albums": [...], "people": [...], "favorites": bool}``; empty means all.
|
||
PHOTOPRISM_SELECTION_COMPOSITE = "composite"
|
||
|
||
|
||
FILL_COVER = "cover"
|
||
FILL_CONTAIN = "contain"
|
||
FILL_BLUR = "blur"
|
||
|
||
ORIENTATION_MISMATCH_PAIR = "pair"
|
||
ORIENTATION_MISMATCH_SINGLE = "single"
|
||
ORIENTATION_MISMATCH_AVOID = "avoid"
|
||
|
||
ORDER_RANDOM = "random"
|
||
ORDER_ALBUM = "album_order"
|
||
ORDER_NEWEST_TAKEN = "newest_taken"
|
||
ORDER_OLDEST_TAKEN = "oldest_taken"
|
||
ORDER_NEWEST_ADDED = "newest_added"
|
||
ORDER_OLDEST_ADDED = "oldest_added"
|
||
|
||
ORDER_OPTIONS = [
|
||
ORDER_RANDOM,
|
||
ORDER_ALBUM,
|
||
ORDER_NEWEST_TAKEN,
|
||
ORDER_OLDEST_TAKEN,
|
||
ORDER_NEWEST_ADDED,
|
||
ORDER_OLDEST_ADDED,
|
||
]
|
||
|
||
DATE_FILTER_OFF = "off"
|
||
DATE_FILTER_LAST_7 = "last_7_days"
|
||
DATE_FILTER_LAST_30 = "last_30_days"
|
||
DATE_FILTER_LAST_365 = "last_365_days"
|
||
DATE_FILTER_THIS_MONTH = "this_month"
|
||
DATE_FILTER_THIS_YEAR = "this_year"
|
||
DATE_FILTER_ON_THIS_DAY = "on_this_day"
|
||
|
||
DATE_FILTER_OPTIONS = [
|
||
DATE_FILTER_OFF,
|
||
DATE_FILTER_LAST_7,
|
||
DATE_FILTER_LAST_30,
|
||
DATE_FILTER_LAST_365,
|
||
DATE_FILTER_THIS_MONTH,
|
||
DATE_FILTER_THIS_YEAR,
|
||
DATE_FILTER_ON_THIS_DAY,
|
||
]
|
||
DEFAULT_DATE_FILTER = DATE_FILTER_OFF
|
||
|
||
# How the date filter treats photos that have no EXIF capture date.
|
||
# use_uploaded_at - fall back to the upload date (keeps filters meaningful)
|
||
# include - keep undated photos (legacy behaviour for windows)
|
||
# exclude - drop undated photos entirely
|
||
MISSING_DATE_USE_UPLOADED = "use_uploaded_at"
|
||
MISSING_DATE_INCLUDE = "include"
|
||
MISSING_DATE_EXCLUDE = "exclude"
|
||
|
||
MISSING_DATE_OPTIONS = [
|
||
MISSING_DATE_USE_UPLOADED,
|
||
MISSING_DATE_INCLUDE,
|
||
MISSING_DATE_EXCLUDE,
|
||
]
|
||
DEFAULT_MISSING_DATE_MODE = MISSING_DATE_USE_UPLOADED
|
||
|
||
DEFAULT_SLIDE_INTERVAL = 60
|
||
DEFAULT_REFRESH_HOURS = 24
|
||
DEFAULT_FILL_MODE = FILL_BLUR
|
||
DEFAULT_ORIENTATION_MISMATCH_MODE = ORIENTATION_MISMATCH_PAIR
|
||
DEFAULT_ORDER_MODE = ORDER_RANDOM
|
||
DEFAULT_ASPECT_RATIO = "16:9"
|
||
DEFAULT_PAIR_DIVIDER_PX = 8
|
||
DEFAULT_PAIR_DIVIDER_COLOR = "#FFFFFF"
|
||
DEFAULT_RECURSIVE = True
|
||
# Per-album download cache. Multiple albums add up: 4 × 150 MB = 600 MB
|
||
# of just-in-case downloaded JPEGs. 75 MB caches roughly 10-20 photos
|
||
# at typical Google Photos resolutions, which is enough for the preload
|
||
# path. Users with one album and lots of RAM can bump this via the
|
||
# Image cache size number entity.
|
||
DEFAULT_IMAGE_CACHE_MB = 75
|
||
|
||
MAX_RESOLUTION_OPTIONS = ["480p", "720p", "1080p", "1440p", "4K (2160p)", "original"]
|
||
DEFAULT_MAX_RESOLUTION = "1080p"
|
||
MAX_RESOLUTION_SHORT_EDGE: dict[str, int | None] = {
|
||
"480p": 480,
|
||
"720p": 720,
|
||
"1080p": 1080,
|
||
"1440p": 1440,
|
||
"4K (2160p)": 2160,
|
||
"original": None,
|
||
}
|
||
|
||
PUBLICALBUM_ENDPOINT = "https://www.publicalbum.org/api/v2/webapp/embed-player/jsonrpc"
|
||
|
||
SERVICE_NEXT_SLIDE = "next_slide"
|
||
SERVICE_REFRESH_ALBUM = "refresh_album"
|
||
ATTR_ENTRY_ID = "entry_id"
|