diff --git a/config/config.yml.template b/config/config.yml.template index 3393fb306..9a4fd6420 100644 --- a/config/config.yml.template +++ b/config/config.yml.template @@ -50,50 +50,50 @@ playlist_files: libraries: Movies, TV Shows # list of libraries that you want the Kometa Defaults playlists to look at # see the wiki for how to use local files, folders, URLs, or files from git settings: + assets_create_folders: false + assets_depth: 0 + assets_dimensional_rename: false + assets_directory: config/assets + assets_display_missing: true + assets_display_missing_for_episodes: false + assets_display_missing_for_seasons: false + assets_download_from_urls: false + assets_folders: true + assets_only_display_changes: true + assets_prioritize: false + cache: true + cache_expiration: 60 + collections_default_order: release + collections_delete_below_minimum: true + collections_delete_not_scheduled: false + collections_filter_only_missing_items: false + collections_ignore_ids: + collections_ignore_imdb_ids: + collections_item_refresh_delay: 0 + collections_minimum_items: 1 + collections_run_again_delay: 2 + collections_sync_mode: append + github_custom_repo: + logs_display_filtered: false + logs_display_missing: true + logs_display_options: true + logs_display_unconfigured: true + logs_display_unfiltered: false + logs_display_unmanaged: true + logs_exclude_unreleased_from_missing: false + logs_save_report: false + overlays_filetype: webp_lossy + overlays_quality: 90 + playlists_exclude_from: + playlists_report: false + playlists_sync_to: run_order: - operations - metadata - collections - overlays - cache: true - cache_expiration: 60 - asset_directory: config/assets - asset_folders: true - asset_depth: 0 - create_asset_folders: false - prioritize_assets: false - dimensional_asset_rename: false - download_url_assets: false - show_missing_season_assets: false - show_missing_episode_assets: false - show_asset_not_needed: true - sync_mode: append - minimum_items: 1 - default_collection_order: release - delete_below_minimum: true - delete_not_scheduled: false - run_again_delay: 2 - missing_only_released: false - only_filter_missing: false - show_unmanaged: true - show_unconfigured: true - show_filtered: false - show_unfiltered: false - show_options: true - show_missing: true - show_missing_assets: true - save_report: false tvdb_language: eng - ignore_ids: - ignore_imdb_ids: - item_refresh_delay: 0 - playlist_sync_to_users: - playlist_exclude_users: - playlist_report: false verify_ssl: true - custom_repo: - overlay_artwork_filetype: webp_lossy - overlay_artwork_quality: 90 webhooks: # Can be individually specified per library as well changes: delete: diff --git a/docs/config/settings.md b/docs/config/settings.md index 6c67633ce..7c80a143c 100644 --- a/docs/config/settings.md +++ b/docs/config/settings.md @@ -26,16 +26,26 @@ Attributes set at the collection level will take priority over any library or gl The available setting attributes which can be set at each level are outlined below: -??? blank "`cache` - Used to control Kometa's cache database." -
Allow Kometa to create and maintain a local cache database for faster subsequent processing. The - cache file is created in the same directory as the configuration file. +??? blank "`assets_create_folders` - Used to automatically create asset folders when none exist." + +
Whilst searching for assets, if an asset folder cannot be found within the + `assets_directory`, one will be created. + + Asset searches can be triggered by: + + * Collections specified under the `collections` header in a Collection File. + * Items specified under the `metadata` header in a Collection File. + * Playlists specified under the `playlists` header in a Playlist File. + * Items in a library running the `assets_for_all` operation. + * Items with an Overlay applied. + * Items found by a Builder when `item_assets: true` is specified.
- **Attribute:** `cache` + **Attribute:** `assets_create_folders` (`create_asset_folders` also accepted) - **Levels with this Attribute:** Global + **Levels with this Attribute:** Global/Library **Accepted Values:** `true` or `false` @@ -45,241 +55,212 @@ The available setting attributes which can be set at each level are outlined bel ```yaml settings: - cache: true + assets_create_folders: true ``` -??? blank "`cache_expiration` - Used to control how long data is cached for." +??? blank "`assets_depth` - Used to control the depth of search in the asset directory." -
Set the number of days before each cache mapping expires and has to be re-cached. +
Specify how many folder levels to scan for an item within the asset directory. + + At each asset level, Kometa will look for either an image file (e.g. `Star Wars.png`) or a dedicated folder + containing an image (e.g. `poster.png`). + + For instance, `/Star Wars/poster.png` and `/Star Wars.png` are both asset depth 0, + while `/Movies/Star Wars/poster.png` is asset depth 1. + + ???+ tip + `assets_folders` must be set to `true` for this to take effect. + + Increasing the number of levels to scan may reduce performance.
- **Attribute:** `cache_expiration` + **Attribute:** `assets_depth` (`asset_depth` also accepted) - **Levels with this Attribute:** Global + **Levels with this Attribute:** Global/Library - **Accepted Values:** Integer greater than 0 + **Accepted Values:** Any Integer 0 or greater - **Default Value:** `60` + **Default Value:** `0` ???+ example "Example" ```yaml settings: - cache_expiration: 30 + assets_depth: 2 ``` -??? blank "`asset_directory` - Used to define where local assets are located." - -
Specify the directories where assets (posters, backgrounds, etc) are located. +??? blank "`assets_dimensional_rename` - Used to automatically rename asset files based on their dimensions." - ???+ tip - - Assets can be stored anywhere on the host system that Kometa has visibility of (i.e. if using docker, the - directory must be mounted/visible to the docker container). +
Whilst scanning for assets, if a folder in the `assets_directory` does not contain + a correctly named poster or background, the first image meeting certain dimension criteria will be renamed accordingly. - ??? warning - - Kometa will not create asset directories. Asset directories you specify here need to exist already. + ???+ tip + Note that `assets_folders` must be set to `true` for this to take effect.
- **Attribute:** `asset_directory` + **Attribute:** `assets_dimensional_rename` (`dimensional_asset_rename` also accepted) **Levels with this Attribute:** Global/Library - **Accepted Values:** Any Directory or List of Directories + **Accepted Values:** `true` or `false` - **Default Value:** `[Directory containing YAML config]/assets` + **Default Value:** `true` ???+ example "Example" ```yaml settings: - asset_directory: config/movies + assets_dimensional_rename: true ``` - ```yaml - settings: - asset_directory: - - config/assets/movies - - config/assets/collections - ``` -??? blank "`asset_folders` - Used to control the asset directory folder structure." +??? blank "`assets_display_missing` - Used to display a message when assets are missing." -
While `true`, Kometa will search the `asset_directory` for a dedicated folder per item vs - while false will look for an image. +
Display warnings for missing assets in items, collections, or playlists. - i.e. When `true` the example path would be `/Star Wars/poster.png` instead of - `/Star Wars.png`. -
- **Attribute:** `asset_folders` - - **Levels with this Attribute:** Global/Library + **Attribute:** `assets_display_missing` (`show_missing_assets` also accepted) + + **Levels with this Attribute:** Global/Library/Collection/Playlist **Accepted Values:** `true` or `false` - + **Default Value:** `true` - + ???+ example "Example" ```yaml settings: - asset_folders: true + assets_display_missing: false ``` -??? blank "`asset_depth` - Used to control the depth of search in the asset directory." +??? blank "`assets_display_missing_for_seasons` - Used to show any missing season assets." -
Specify how many folder levels to scan for an item within the asset directory. +
Whilst scanning for assets for a TV show, notify if season posters + (e.g. `/ASSET_NAME/Season##.ext`) are missing. - At each asset level, Kometa will look for either `medianame.ext` [such as Star Wars.png] or a dedicated folder - containing `poster.ext`. + ???+ tip "Shows/Hides messages for seasons/albums" - i.e. `/Star Wars/poster.png` and `/Star Wars.png` are both asset depth 0, whilst - `/Movies/Star Wars/poster.png` and `/Movies/Star Wars.png` are both asset level 1. - - ???+ tip - - `asset_folders` must be set to `true` for this to take effect. + "Asset Warning: No poster found for '{item_title}' in the assets folder '{directory}'" + "Asset Warning: No poster '{name}' found in the assets folders" + "Missing Season {season_number} Poster" - increasing the amount of levels to scan will reduce performance -
- **Attribute:** `asset_depth` - + **Attribute:** `assets_display_missing_for_seasons` (`show_missing_season_assets` also accepted) + **Levels with this Attribute:** Global/Library - **Accepted Values:** Any Integer 0 or greater - - **Default Value:** `0` - + **Accepted Values:** `true` or `false` + + **Default Value:** `true` + ???+ example "Example" ```yaml settings: - asset_depth: 2 + assets_display_missing_for_seasons: true ``` -??? blank "`create_asset_folders` - Used to automatically create asset folders when none exist." - -
Whilst searching for assets, if an asset folder cannot be found within the - `asset_directory` one will be created. - - Asset Searches can happen in a number of ways. - - * Any Collection specified under the `collections` header in a Collection File. - - * Any Item specified under the `metadata` header in a Collection File. - - * Any Playlist specified under the `playlists` header in a Playlist File. - - * Any Item in a library that is running the `assets_for_all` Library Operation. - - * Any Item that has an Overlay applied to it. - - * Any Item found by a Builder while the definition also has `item_assets: true` specified. +??? blank "`assets_display_missing_for_episodes` - Used to show any missing episode assets." +
Whilst scanning for assets for a TV show, notify if episode title cards + (e.g. `/ASSET_NAME/S##E##.ext`) are missing. + + ???+ tip "Shows/Hides messages for episodes" + + "Asset Warning: No poster found for '{item_title}' in the assets folder '{directory}'" + "Asset Warning: No poster '{name}' found in the assets folders" + "Missing S##E## Title Card" +
- **Attribute:** `create_asset_folders` - + **Attribute:** `assets_display_missing_for_episodes` (`show_missing_episode_assets` also accepted) + **Levels with this Attribute:** Global/Library **Accepted Values:** `true` or `false` - + **Default Value:** `true` - + ???+ example "Example" ```yaml settings: - create_asset_folders: true + assets_display_missing_for_episodes: true ``` -??? blank "`prioritize_assets` - Used to prioritize `asset_directory` images over all other images types." - -
When determining which image to use on an item prioritize the `asset_directory` over - all other image sources. +??? blank "`assets_directory` - Used to define where local assets are located." - Standard priority is as follows: +
Specify the directories where assets (posters, backgrounds, etc) are located. - 1. `url_poster` - - 2. `file_poster` - - 3. `tmdb_poster` - - 4. `tvdb_poster` - - 5. Asset directory - - 6. `tmdb_person` - - 7. `tmdb_collection_details` - - 8+. all other `_details` methods - - So if you have a poster for "Some Collection" specified as a `url_poster` and *also* as an asset, the `url_poster` will win and the asset will be ignored. + ???+ tip + Assets can be stored anywhere on the host system that Kometa has visibility of (i.e. if using docker, the + directory must be mounted/visible to the docker container). - This setting pushes `asset_directory` to the top of the list, so the asset would win over teh `url_poster`. + ??? warning + Kometa will not create asset directories. Asset directories you specify here need to exist already.
- **Attribute:** `prioritize_assets` + **Attribute:** `assets_directory` (`asset_directory` also accepted) **Levels with this Attribute:** Global/Library - **Accepted Values:** `true` or `false` + **Accepted Values:** Any Directory or List of Directories - **Default Value:** `true` + **Default Value:** `[Directory containing YAML config]/assets` ???+ example "Example" ```yaml settings: - prioritize_assets: true + assets_directory: config/movies ``` -??? blank "`dimensional_asset_rename` - Used to automatically rename asset files based on their dimensions." + ```yaml + settings: + assets_directory: + - config/assets/movies + - config/assets/collections + ``` -
Whilst searching for assets, scan the folders within the `asset_directory` and - if an asset poster (i.e. `/ASSET_NAME/poster.ext`) was not found, rename the first image found that has a height - greater than or equal to its width to `poster.ext`. If an asset background (i.e. `/ASSET_NAME/background.ext`), - rename the first image found that has a width greater than its height to `background.ext`. - - ???+ tip - - `asset_folders` must be set to `true` for this to take effect. +??? blank "`assets_download_from_urls` - Used to download URL-based images into the asset directory." + +
Whilst scanning for assets, download images specified by URLs (e.g. `url_poster` or `url_background`) + into the asset folder if they are not already present. +
- **Attribute:** `dimensional_asset_rename` - + **Attribute:** `assets_download_from_urls` (`download_url_assets` also accepted) + **Levels with this Attribute:** Global/Library **Accepted Values:** `true` or `false` - + **Default Value:** `true` - + ???+ example "Example" ```yaml settings: - dimensional_asset_rename: true + assets_download_from_urls: true ``` -??? blank "`download_url_assets` - Used to download url images into the asset directory." +??? blank "`assets_folders` - Used to control the asset directory folder structure." + +
While `true`, Kometa will search the `assets_directory` for a dedicated folder per item versus + looking for an image when `false`. + For example, when `true` the expected path would be `/Star Wars/poster.png` instead of + `/Star Wars.png`. -
Whilst searching for assets, download images set within Collection/Metadata/Playlist - files( i.e. images set by `url_poster` or `url_background`) into the asset folder if none are already present. -
- **Attribute:** `download_url_assets` + **Attribute:** `assets_folders` (`asset_folders` also accepted) **Levels with this Attribute:** Global/Library @@ -291,57 +272,51 @@ The available setting attributes which can be set at each level are outlined bel ```yaml settings: - download_url_assets: true + assets_folders: true ``` -??? blank "`show_missing_season_assets` - Used to show any missing season assets." - -
Whilst searching for assets, when scanning for assets for a TV Show, if - Season posters are found (i.e. `/ASSET_NAME/Season##.ext`), notify the user of any seasons which do not have an - asset image. - - ???+ tip "Shows/Hides messages like these for seasons/albums" - - "Asset Warning: No poster found for '{item_title}' in the assets folder '{directory}'" +??? blank "`assets_only_display_changes` - Used to show/hide the 'update not needed' messages." - "Asset Warning: No poster '{name}' found in the assets folders" - - "Missing Season {season_number} Poster" +
While scanning for assets, determines whether to show messages indicating that updates are not needed.
- **Attribute:** `show_missing_season_assets` - + **Attribute:** `assets_only_display_changes` (`show_asset_not_needed` also accepted) + **Levels with this Attribute:** Global/Library **Accepted Values:** `true` or `false` - + **Default Value:** `true` - + ???+ example "Example" ```yaml settings: - show_missing_season_assets: true + assets_only_display_changes: true ``` -??? blank "`show_missing_episode_assets` - Used to show any missing episode assets." +??? blank "`assets_prioritize` - Used to prioritize images from the assets directory over other image sources." -
Whilst searching for assets, when scanning for assets for a TV Show, if an - Episode Title Card is found (i.e. `/ASSET_NAME/S##E##.ext`), notify the user of any episodes which do not have an - asset image. - - ???+ tip "Shows/Hides messages like these for episodes" - - "Asset Warning: No poster found for '{item_title}' in the assets folder '{directory}'" +
When determining which image to use for an item, prioritizes the image from + `assets_directory` over other image sources. - "Asset Warning: No poster '{name}' found in the assets folders" + Standard priority is: + + 1. `url_poster` + 2. `file_poster` + 3. `tmdb_poster` + 4. `tvdb_poster` + 5. Asset directory + 6. `tmdb_person` + 7. `tmdb_collection_details` + 8+. Other methods - "\nMissing S##E## Title Card" + This setting forces the asset to win over the `url_poster` if both are available.
- **Attribute:** `show_missing_episode_assets` + **Attribute:** `assets_prioritize` (`prioritize_assets` also accepted) **Levels with this Attribute:** Global/Library @@ -353,18 +328,19 @@ The available setting attributes which can be set at each level are outlined bel ```yaml settings: - show_missing_episode_assets: true + assets_prioritize: true ``` -??? blank "`show_asset_not_needed` - Used to show/hide the `update not needed` messages." +??? blank "`cache` - Used to control Kometa's cache database." -
Whilst searching for assets, show or hide the `update not needed` messages. +
Allow Kometa to create and maintain a local cache database for faster subsequent processing. The + cache file is created in the same directory as the configuration file.
- **Attribute:** `show_asset_not_needed` + **Attribute:** `cache` - **Levels with this Attribute:** Global/Library + **Levels with this Attribute:** Global **Accepted Values:** `true` or `false` @@ -374,600 +350,617 @@ The available setting attributes which can be set at each level are outlined bel ```yaml settings: - show_asset_not_needed: true + cache: true ``` -??? blank "`sync_mode` - Used to set the `sync_mode` for collections and playlists." +??? blank "`cache_expiration` - Used to control how long data is cached for." -
Sets the `sync_mode` for collections and playlists. Setting the `sync_mode` directly in a - collection or playlist definition will override the `sync_mode` for that definition. +
Set the number of days before each cache mapping expires and has to be re-cached.
- **Attribute:** `sync_mode` + **Attribute:** `cache_expiration` - **Levels with this Attribute:** Global/Library/Collection/Playlist + **Levels with this Attribute:** Global - **Accepted Values:** - - - - -
`sync`Will add and remove any items that are added/removed from the source builder.
`append`Will only add items that are added from the source builder, but will not remove anything even if it is removed from the source builder.
+ **Accepted Values:** Integer greater than 0 - **Default Value:** `append` + **Default Value:** `60` ???+ example "Example" ```yaml settings: - sync_mode: sync + cache_expiration: 30 ``` - ???+ tip "What does this mean?" - - You have a Trakt list of ten movies. You run Kometa and create a collection from the list. The collection contains those ten movies. - - Tomorrow the list contains a different ten movies. You run Kometa. - - `sync_mode: sync` - Kometa syncs the collection with the list, so the collection still has ten movies, but they are the ones that are in the Trakt list today. The original ten have been removed from the collection. - - `sync_mode: append` - Kometa appends the ten new movies to the collection, which now has twenty movies in it. - - The next day five movies change in the list. You run Kometa. - - `sync_mode: sync` - Kometa syncs the collection with the list, so the collection still has ten movies, the ones that are in the Trakt list today. The five that are no longer in the Trakt list are removed from the collection. - - `sync_mode: append` - Kometa appends the five new movies to the collection, which now has twenty-five movies in it. - - -??? blank "`default_collection_order` - Used to set the `collection_order` for every collection run." +??? blank "`collections_default_order` - Used to set the collection order for every collection run." -
Set the `collection_order` for every collection run by Kometa unless the - collection has a specific `collection_order`. +
Set the default order for collections unless a specific order is defined in a collection. ???+ tip - - `custom` cannot be used if more than one builder is being used for the collection (such as `imdb_list` and - `trakt_list` within the same collection). + Note: `custom` cannot be used if multiple builders are used in the same collection.
- **Attribute:** `default_collection_order` - + **Attribute:** `collections_default_order` (`default_collection_order` also accepted) + **Levels with this Attribute:** Global/Library **Accepted Values:** - + - - - + + +
`release`Order Collection by Release Dates
`alpha`Order Collection Alphabetically
`custom`Order Collection Via the Builder Order
`release`Order by Release Dates
`alpha`Order Alphabetically
`custom`Order via the Builder's order
[Any `plex_search` sort option](../files/builders/plex.md#sort-options)
- + **Default Value:** `None` - + ???+ example "Example" ```yaml settings: - default_collection_order: release + collections_default_order: release ``` -??? blank "`minimum_items` - Used to control minimum items requires to build a collection/playlist." -
Set the minimum number of items that must be found in order to build or update a - collection/playlist. +??? blank "`collections_delete_below_minimum` - Used to delete collections below the minimum items threshold." -
+
If a collection's item count is below the value defined in + `collections_minimum_items`, it will be deleted. - **Attribute:** `minimum_items` + ???+ tip + Depends on `collections_minimum_items` being set appropriately. +
+ + **Attribute:** `collections_delete_below_minimum` (`delete_below_minimum` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist - **Accepted Values:** Integer greater than 0 - - **Default Value:** `1` - + **Accepted Values:** `true` or `false` + + **Default Value:** `false` + ???+ example "Example" ```yaml settings: - minimum_items: 5 + collections_delete_below_minimum: true ``` -??? blank "`delete_below_minimum` - Used to delete collections below `minimum_items`" +??? blank "`collections_delete_not_scheduled` - Used to delete collections that are not scheduled." -
When a collection is run, delete the collection if it is below the minimum number - specified by `minimum_items`. - - ???+ tip - - Relies on `minimum_items` being set to the desired integer. +
Deletes collections that are skipped due to not being scheduled.
- **Attribute:** `delete_below_minimum` - + **Attribute:** `collections_delete_not_scheduled` (`delete_not_scheduled` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist **Accepted Values:** `true` or `false` - + **Default Value:** `false` - + ???+ example "Example" ```yaml settings: - delete_below_minimum: true + collections_delete_not_scheduled: true ``` -??? blank "`delete_not_scheduled` - Used to delete collections not scheduled." +??? blank "`collections_filter_only_missing_items` - Used to apply filters only to missing items." -
If a collection is skipped due to it not being scheduled, delete the collection. +
Only items missing from a collection will be subject to filtering. + See [Filters](../files/filters.md) for more details. + + ???+ note + This setting can control which missing media items are sent to Sonarr/Radarr.
- **Attribute:** `delete_not_scheduled` - + **Attribute:** `collections_filter_only_missing_items` (`only_filter_missing` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist **Accepted Values:** `true` or `false` - + **Default Value:** `false` - + ???+ example "Example" ```yaml settings: - settings: - delete_not_scheduled: true + collections_filter_only_missing_items: true ``` -??? blank "`run_again_delay` - Used to control the number of minutes to delay running `run_again` collections." +??? blank "`collections_ignore_ids` - List of TMDb/TVDb IDs to ignore." -
Set the number of minutes to delay running `run_again` collections after daily run is - finished. +
Set a list or comma-separated string of TMDb/TVDb IDs to ignore in all collections. - For example, if a collection adds items to Sonarr/Radarr, the library can automatically re-run "X" amount of time - later so that any downloaded items are processed. - - ???+ tip - - A collection is a `run_again` collection if it has the `run_again` [Setting](../files/settings.md) attribute set - to true. + ???+ note + This does not apply to `smart_filter` collections.
- **Attribute:** `run_again_delay` - - **Levels with this Attribute:** Global + **Attribute:** `collections_ignore_ids` (`ignore_ids` also accepted) + + **Levels with this Attribute:** Global/Library/Collection/Playlist + + **Accepted Values:** List or comma-separated string of TMDb/TVDb IDs + + **Default Value:** `None` - **Accepted Values:** Any Integer 0 or greater - - **Default Value:** `0` - ???+ example "Example" ```yaml settings: - run_again_delay: 5 + collections_ignore_ids: 572802,695721 ``` -??? blank "`missing_only_released` - Used to filter unreleased items from missing lists." +??? blank "`collections_ignore_imdb_ids` - List of IMDb IDs to ignore." -
Whilst running a collection or playlist, when Kometa handles missing items to - either report it to the user, report it to a file, or send it to Radarr/Sonarr all unreleased items will be - filtered out. +
Set a list or comma-separated string of IMDb IDs to ignore in all collections. + + ???+ note + This does not apply to `smart_filter` collections.
- **Attribute:** `missing_only_released` - + **Attribute:** `collections_ignore_imdb_ids` (`ignore_imdb_ids` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist - **Accepted Values:** `true` or `false` - - **Default Value:** `false` - + **Accepted Values:** List or comma-separated string of IMDb IDs + + **Default Value:** `None` + ???+ example "Example" ```yaml settings: - missing_only_released: true + collections_ignore_imdb_ids: tt6710474,tt1630029 ``` -??? blank "`show_unmanaged` - Used to show collections not managed by Kometa." -
List all collections not managed by Kometa at the end of each run. +??? blank "`collections_item_refresh_delay` - Time to wait between each item refresh." -
+
Specify the number of seconds to wait between each `item_refresh` in collections/playlists. - **Attribute:** `show_unmanaged` + ???+ note + Useful for reducing load on your Plex Media Server. - **Levels with this Attribute:** Global/Library +
- **Accepted Values:** `true` or `false` + **Attribute:** `collections_item_refresh_delay` (`item_refresh_delay` also accepted) + + **Levels with this Attribute:** Global/Library/Collection/Playlist + + **Accepted Values:** Any Integer 0 or greater (seconds) + + **Default Value:** `0` + + ???+ example "Example" + + ```yaml + settings: + collections_item_refresh_delay: 5 + ``` - **Default Value:** `true` +??? blank "`collections_minimum_items` - Used to control the minimum number of items required for a collection/playlist." +
Sets the minimum number of items that must be found to build or update a collection/playlist. + +
+ + **Attribute:** `collections_minimum_items` (`minimum_items` also accepted) + + **Levels with this Attribute:** Global/Library/Collection/Playlist + + **Accepted Values:** Integer greater than 0 + + **Default Value:** `1` + ???+ example "Example" ```yaml settings: - show_unmanaged: false + collections_minimum_items: 5 ``` -??? blank "`show_unconfigured` - Used to show collections not in the current run." +??? blank "`collections_run_again_delay` - Used to control the delay (in minutes) for re-running collections." -
List all collections not configured in the current Kometa run at the end of each run. +
Sets the delay (in minutes) before a `run_again` collection is executed. + + ???+ tip + Useful when waiting for external processes (e.g. downloads) to complete.
- **Attribute:** `show_unconfigured` - - **Levels with this Attribute:** Global/Library + **Attribute:** `collections_run_again_delay` (`run_again_delay` also accepted) + + **Levels with this Attribute:** Global + + **Accepted Values:** Any Integer 0 or greater + + **Default Value:** `0` - **Accepted Values:** `true` or `false` - - **Default Value:** `true` - ???+ example "Example" ```yaml settings: - show_unconfigured: false + collections_run_again_delay: 5 ``` -??? blank "`show_filtered` - Used to show items filtered out." +??? blank "`collections_sync_mode` - Used to set the sync mode for collections and playlists." -
List all items which have been filtered out of a collection or playlist (i.e. if it - doesn't meet the filter criteria) +
Sets the sync mode for collections and playlists. Defining the sync mode within a + collection or playlist overrides this global setting.
- **Attribute:** `show_filtered` - + **Attribute:** `collections_sync_mode` (`sync_mode` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist - **Accepted Values:** `true` or `false` - - **Default Value:** `false` - + **Accepted Values:** + + + + +
`sync`Adds and removes items based on the source builder.
`append`Adds items from the source builder without removing existing items.
+ + **Default Value:** `append` + ???+ example "Example" ```yaml settings: - show_filtered: true + collections_sync_mode: sync ``` + + ???+ tip "What does this mean?" + You have a Trakt list of ten movies. Running Kometa creates a collection from the list. + The next day, if the list changes: + + - With `sync`: the collection is updated to match the list exactly. + - With `append`: new items are added without removing the originals. -??? blank "`show_unfiltered` - Used to show items which make it through filters." +??? blank "`github_custom_repo` - Used to set up the custom repository base for file blocks." -
List all items which have made it through the filters INTO a collection or playlist (i.e. if it - meets the filter criteria) +
Specifies the base URL for `collection_files`, `metadata_files`, `playlist_file` and `overlay_files`. + + ???+ note + Ensure you use the raw GitHub link (e.g., https://github.com/Kometa-Team/Community-Configs/tree/master/meisnate12).
- **Attribute:** `show_unfiltered` - - **Levels with this Attribute:** Global/Library/Collection/Playlist + **Attribute:** `github_custom_repo` (`custom_repo` also accepted) + + **Levels with this Attribute:** Global + + **Accepted Values:** Link to repository base + + **Default Value:** `None` - **Accepted Values:** `true` or `false` - - **Default Value:** `false` - ???+ example "Example" ```yaml settings: - show_unfiltered: true + github_custom_repo: https://github.com/Kometa-Team/Community-Configs/tree/master/meisnate12 ``` -??? blank "`show_options` - Used to show attribute options from plex." +??? blank "`logs_display_filtered` - Used to show items filtered out of collections/playlists." -
While `show_options` is true the available options for an attribute when using - `plex_search`, `smart_filter` or `filters` will be shown. - - i.e. a `smart_filter` on the `genre` attribute will return all of the attributes within the specified library. +
Lists items that have been filtered out based on the applied criteria.
- **Attribute:** `show_options` - + **Attribute:** `logs_display_filtered` (`show_filtered` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist **Accepted Values:** `true` or `false` - + **Default Value:** `false` - + ???+ example "Example" ```yaml settings: - show_options: true + logs_display_filtered: true ``` -??? blank "`show_missing` - Used to show missing items from collections or playlists." +??? blank "`logs_display_missing` - Used to show missing items from collections/playlists." -
While `show_missing` is true items missing from collections or playlists will be displayed. +
When enabled, items missing from collections/playlists will be listed.
- **Attribute:** `show_missing` - + **Attribute:** `logs_display_missing` (`show_missing` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist **Accepted Values:** `true` or `false` - + **Default Value:** `true` - + ???+ example "Example" ```yaml settings: - show_missing: false + logs_display_missing: false ``` -??? blank "`only_filter_missing` - Used to have the `filter` only apply to missing items." +??? blank "`logs_display_options` - Used to show attribute options from Plex." -
Only items missing from a collection will be filtered. **Only specific filters can - filter missing. See [Filters](../files/filters.md) for more information.** - - ???+ note - - This can be used to filter which missing media items get sent to Sonarr/Radarr. +
When enabled, available options for an attribute (e.g. via `plex_search` or `smart_filter`) will be displayed.
- **Attribute:** `only_filter_missing` - + **Attribute:** `logs_display_options` (`show_options` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist **Accepted Values:** `true` or `false` - + **Default Value:** `false` - + ???+ example "Example" ```yaml settings: - only_filter_missing: true + logs_display_options: true ``` -??? blank "`show_missing_assets` - Used to print a message when assets are missing." +??? blank "`logs_display_unfiltered` - Used to show items that pass filtering." -
Display missing asset warnings for items, collections, and playlists. +
Lists items that meet the filter criteria and are included in collections/playlists.
- **Attribute:** `show_missing_assets` - + **Attribute:** `logs_display_unfiltered` (`show_unfiltered` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist **Accepted Values:** `true` or `false` - - **Default Value:** `true` - + + **Default Value:** `false` + ???+ example "Example" ```yaml settings: - show_missing_assets: false + logs_display_unfiltered: true ``` -??? blank "`save_report` - Used to save a report YAML file." -
Save a report of the items added, removed, filtered, or missing from collections to a YAML - file in the same directory as the file run. +??? blank "`logs_display_unconfigured` - Used to show collections not configured in the current run." + +
List all collections not configured in the current Kometa run at the end of each run.
- **Attribute:** `save_report` - - **Levels with this Attribute:** Global/Library/Collection/Playlist + **Attribute:** `logs_display_unconfigured` (`show_unconfigured` also accepted) + + **Levels with this Attribute:** Global/Library **Accepted Values:** `true` or `false` - + **Default Value:** `true` - + ???+ example "Example" ```yaml settings: - save_report: false + logs_display_unconfigured: false ``` -??? blank "`report_path` - Used to specify the location of `save_report`." +??? blank "`logs_display_unmanaged` - Used to show collections not managed by Kometa." -
Specify the location where `save_report` is saved. +
List all collections not managed by Kometa at the end of each run.
- **Attribute:** `report_path` - - **Levels with this Attribute:** Library - - **Accepted Values:** YAML file path location - - **Default Value:** `[Directory containing YAML config]/[Library Mapping Name]_report.yml` - + **Attribute:** `logs_display_unmanaged` (`show_unmanaged` also accepted) + + **Levels with this Attribute:** Global/Library + + **Accepted Values:** `true` or `false` + + **Default Value:** `true` + ???+ example "Example" ```yaml settings: - report_path: config/TV_missing_report.yml + logs_display_unmanaged: false ``` -??? blank "`tvdb_language` - Specify the language to query TVDb in." -
Specify the language to query TVDb in. - - ???+ note - - If no language is specified or the specified language is not found then the original language is used. +??? blank "`logs_exclude_unreleased_from_missing` - Used to filter out unreleased items from missing lists." + +
When processing missing items, unreleased media will be filtered out.
- **Attribute:** `tvdb_language` - - **Levels with this Attribute:** Global + **Attribute:** `logs_exclude_unreleased_from_missing` (`missing_only_released` also accepted) + + **Levels with this Attribute:** Global/Library/Collection/Playlist + + **Accepted Values:** `true` or `false` + + **Default Value:** `false` - **Accepted Values:** [Any ISO 639-2 Language Code](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes) - - **Default Value:** `None` - ???+ example "Example" ```yaml settings: - tvdb_language: eng + logs_exclude_unreleased_from_missing: true ``` -??? blank "`ignore_ids` - List of TMDb/TVDb IDs to ignore." -
Set a list or comma-separated string of TMDb/TVDb IDs to ignore in all collections. - - ???+ note - - This does not apply to `smart_filter` Collections. +??? blank "`logs_save_report` - Used to save a report YAML file." + +
Saves a YAML report detailing items added, removed, filtered, or missing in collections/playlists.
- **Attribute:** `ignore_ids` - + **Attribute:** `logs_save_report` (`save_report` also accepted) + **Levels with this Attribute:** Global/Library/Collection/Playlist - **Accepted Values:** List or comma-separated string of TMDb/TVDb IDs - - **Default Value:** `None` - + **Accepted Values:** `true` or `false` + + **Default Value:** `true` + ???+ example "Example" ```yaml settings: - ignore_ids: 572802,695721 + logs_save_report: false ``` -??? blank "`ignore_imdb_ids` - List of IMDb IDs to ignore." -
Set a list or comma-separated string of IMDb IDs to ignore in all collections. - - ???+ note - - Rhis does not apply to `smart_filter` Collections. +??? blank "`playlists_exclude_from` - Set the default playlist exclusion list." + +
Specifies the default users to exclude from a playlist.
- **Attribute:** `ignore_imdb_ids` - - **Levels with this Attribute:** Global/Library/Collection/Playlist + **Attribute:** `playlists_exclude_from` (`playlist_exclude_users` also accepted) + + **Levels with this Attribute:** Global/Playlist + + **Accepted Values:** A list of users or a comma-separated string - **Accepted Values:** List or comma-separated string of IMDb IDs - **Default Value:** `None` - + ???+ example "Example" ```yaml settings: - ignore_imdb_ids: tt6710474,tt1630029 + playlists_exclude_from: + - user1 + - user2 ``` -??? blank "`item_refresh_delay` - Time to wait between each `item_refresh`." +??? blank "`playlists_report` - Used to print a playlist report." -
Specify the number of seconds to wait between each `item_refresh` of every movie/show in a collection/playlist. - - ???+ note - - Useful if your Plex Media Server is having issues with high request levels. +
When enabled, prints a report of playlist details at the end of the log.
- **Attribute:** `item_refresh_delay` - - **Levels with this Attribute:** Global/Library/Collection/Playlist + **Attribute:** `playlists_report` (`playlist_report` also accepted) + + **Levels with this Attribute:** Global + + **Accepted Values:** `true` or `false` + + **Default Value:** `false` - **Accepted Values:** Any Integer 0 or greater (value is in seconds) - - **Default Value:** `0` - ???+ example "Example" ```yaml settings: - item_refresh_delay: 5 + playlists_report: true ``` -??? blank "`playlist_sync_to_users` - Set the default playlist `sync_to_users`." +??? blank "`playlists_sync_to` - Set the default playlist sync target." -
Set the default playlist `sync_to_users`. To Sync a playlist to only yourself - leave `playlist_sync_to_users` blank. +
Specifies the default users to sync a playlist to. To sync only to yourself, leave this setting blank. ???+ note - - sharing playlists with other users will not share any posters associated with the playlist, this is a Plex - limitation. + Note that sharing playlists does not share associated posters due to Plex limitations.
- **Attribute:** `playlist_sync_to_users` - + **Attribute:** `playlists_sync_to` (`playlist_sync_to_users` also accepted) + **Levels with this Attribute:** Global/Playlist - **Accepted Values:** `all`, list of users, or comma-separated string of users. Leave blank to not sync playlists to other users. - + **Accepted Values:** `all`, a list of users, or a comma-separated string of users + ???+ example "Example" ```yaml settings: - playlist_sync_to_users: + playlists_sync_to: - user1 - user2 ``` -??? blank "`playlist_exclude_users` - Set the default playlist `exclude_users`." +??? blank "`overlays_filetype` - Used to control the file type for overlay images." -
Set the default playlist `exclude_users`. +
Determines the file type for overlay images. This setting only affects images generated after its addition.
- **Attribute:** `playlist_exclude_users` - - **Levels with this Attribute:** Global/Playlist + **Attribute:** `overlays_filetype` (`overlay_artwork_filetype` also accepted) + + **Levels with this Attribute:** Global/Library - **Accepted Values:** list of users or comma-separated string of users + **Accepted Values:** + + + + + + +
`jpg`Use JPG files for overlays
`png`Use PNG files for overlays
`webp_lossy`Use lossy WEBP files for overlays
`webp_lossless`Use lossless WEBP files for overlays
+ + **Default Value:** `webp_lossy` + + ???+ example "Example" + + ```yaml + settings: + overlays_filetype: png + ``` - **Default Value:** `None` +??? blank "`overlays_quality` - Used to control the quality for JPG or lossy WEBP overlays." +
Sets the quality for overlay images. This value only applies to newly generated images. + +
+ + **Attribute:** `overlays_quality` (`overlay_artwork_quality` also accepted) + + **Levels with this Attribute:** Global/Library + + **Accepted Values:** Any Integer between 1 and 100 (values over 95 may result in large file sizes) + + **Default Value:** `None` (defaults to 90 when not provided) + ???+ example "Example" ```yaml settings: - playlist_exclude_users: - - user1 - - user2 + overlays_quality: 90 ``` -??? blank "`playlist_report` - Used to print out a playlist report." +??? blank "`report_path` - Used to specify the location of `save_report`." -
Set `playlist_report` to true to print out a playlist report at the end of the log. +
Specify the location where `save_report` is saved.
- **Attribute:** `playlist_report` + **Attribute:** `report_path` - **Levels with this Attribute:** Global - - **Accepted Values:** `true` or `false` + **Levels with this Attribute:** Library - **Default Value:** `false` + **Accepted Values:** YAML file path location + + **Default Value:** `[Directory containing YAML config]/[Library Mapping Name]_report.yml` ???+ example "Example" ```yaml settings: - playlist_report: true + report_path: config/TV_missing_report.yml ``` ??? blank "`run_order` - Used to specify the run order of the library components." @@ -997,22 +990,21 @@ The available setting attributes which can be set at each level are outlined bel - metadata ``` -??? blank "`custom_repo` - Used to set up the custom `repo` [file block type](files.md#location-types-and-paths)." +??? blank "`tvdb_language` - Specify the language to query TVDb in." -
Specify where the `repo` attribute's base is when defining `collection_files`, `metadata_files`, `playlist_file` and `overlay_files`. +
Specify the language to query TVDb in. ???+ note - Ensure you are using the raw GitHub link (i.e. - https://github.com/Kometa-Team/Community-Configs/tree/master/meisnate12) + If no language is specified or the specified language is not found then the original language is used.
- **Attribute:** `custom_repo` + **Attribute:** `tvdb_language` **Levels with this Attribute:** Global - **Accepted Values:** Link to repository base + **Accepted Values:** [Any ISO 639-2 Language Code](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes) **Default Value:** `None` @@ -1020,58 +1012,7 @@ The available setting attributes which can be set at each level are outlined bel ```yaml settings: - custom_repo: https://github.com/Kometa-Team/Community-Configs/tree/master/meisnate12 - ``` - -??? blank "`overlay_artwork_filetype` - Used to control the filetype used with overlay images." - -
Used to control the filetype used with overlay images. This setting will only be applied to images generated after the value is added to your config. - -
- - **Attribute:** `overlay_artwork_filetype` - - **Levels with this Attribute:** Global/Library - - **Accepted Values:** - - - - - - -
`jpg`Use JPG files for saving Overlays
`png`Use PNG files for saving Overlays
`webp_lossy`Use Lossy WEBP files for saving Overlays
`webp_lossless`Use Lossless WEBP files for saving Overlays
- - **Default Value:** `webp_lossy` - - ???+ example "Example" - - ```yaml - settings: - overlay_artwork_filetype: png - ``` - -??? blank "`overlay_artwork_quality` - Used to control the JPG or Lossy WEBP quality used with overlay images." - -
Used to control the JPG or Lossy WEBP quality used with overlay images. This setting - will only be applied to images generated after the value is added to your config. - -
- - **Attribute:** `overlay_artwork_quality` - - **Levels with this Attribute:** Global/Library - - **Accepted Values:** Any Integer 1-100 [Values over 95 are not recommended and may result in excessive image size, - perhaps too large to be uploaded to Plex. - - **Default Value:** `None` [when no value is provided the standard 90 is used] - - ???+ example "Example" - - ```yaml - settings: - overlay_artwork_quality: 90 + tvdb_language: eng ``` ## Default Values @@ -1114,7 +1055,7 @@ libraries: - metadata - operations - overlays - minimum_items: 3 #(2)! + collections_minimum_items: 3 #(2)! collection_files: # stuff here overlay_files: @@ -1134,12 +1075,12 @@ settings: - overlays - collections - metadata - minimum_items: 1 #(4)! + collections_minimum_items: 1 #(4)! ``` 1. Sets the `run_order` specifically for the Movies library -2. Sets the `minimum_items` attribute specifically for the Movies library +2. Sets the `collections_minimum_items` attribute specifically for the Movies library 3. Sets the global `run_order` which will apply to all libraries unless a library-level `run_order` is found, as showcased in the above example -4. Sets the global `minimum_items` which will apply to all libraries unless a library-level `minimum_items` is found, +4. Sets the global `collections_minimum_items` which will apply to all libraries unless a library-level `collections_minimum_items` is found, as showcased in the above example \ No newline at end of file diff --git a/modules/config.py b/modules/config.py index 23c3e68f3..1889e6dd9 100644 --- a/modules/config.py +++ b/modules/config.py @@ -471,48 +471,205 @@ def check_for_attribute(data, attribute, parent=None, test_list=None, translatio return default self.general = { - "run_order": check_for_attribute(self.data, "run_order", parent="settings", var_type="lower_list", test_list=run_order_options, default=["operations", "metadata", "collections", "overlays"]), - "cache": check_for_attribute(self.data, "cache", parent="settings", var_type="bool", default=True), - "cache_expiration": check_for_attribute(self.data, "cache_expiration", parent="settings", var_type="int", default=60, int_min=1), - "asset_directory": check_for_attribute(self.data, "asset_directory", parent="settings", var_type="list_path", default_is_none=True), - "asset_folders": check_for_attribute(self.data, "asset_folders", parent="settings", var_type="bool", default=True), - "asset_depth": check_for_attribute(self.data, "asset_depth", parent="settings", var_type="int", default=0), - "create_asset_folders": check_for_attribute(self.data, "create_asset_folders", parent="settings", var_type="bool", default=False), - "prioritize_assets": check_for_attribute(self.data, "prioritize_assets", parent="settings", var_type="bool", default=False), - "dimensional_asset_rename": check_for_attribute(self.data, "dimensional_asset_rename", parent="settings", var_type="bool", default=False), - "download_url_assets": check_for_attribute(self.data, "download_url_assets", parent="settings", var_type="bool", default=False), - "show_missing_assets": check_for_attribute(self.data, "show_missing_assets", parent="settings", var_type="bool", default=True), - "show_missing_season_assets": check_for_attribute(self.data, "show_missing_season_assets", parent="settings", var_type="bool", default=False), - "show_missing_episode_assets": check_for_attribute(self.data, "show_missing_episode_assets", parent="settings", var_type="bool", default=False), - "show_asset_not_needed": check_for_attribute(self.data, "show_asset_not_needed", parent="settings", var_type="bool", default=True), - "sync_mode": check_for_attribute(self.data, "sync_mode", parent="settings", default="append", test_list=sync_modes), - "default_collection_order": check_for_attribute(self.data, "default_collection_order", parent="settings", default_is_none=True), - "minimum_items": check_for_attribute(self.data, "minimum_items", parent="settings", var_type="int", default=1), - "item_refresh_delay": check_for_attribute(self.data, "item_refresh_delay", parent="settings", var_type="int", default=0), - "delete_below_minimum": check_for_attribute(self.data, "delete_below_minimum", parent="settings", var_type="bool", default=False), - "delete_not_scheduled": check_for_attribute(self.data, "delete_not_scheduled", parent="settings", var_type="bool", default=False), - "run_again_delay": check_for_attribute(self.data, "run_again_delay", parent="settings", var_type="int", default=0), - "missing_only_released": check_for_attribute(self.data, "missing_only_released", parent="settings", var_type="bool", default=False), - "only_filter_missing": check_for_attribute(self.data, "only_filter_missing", parent="settings", var_type="bool", default=False), - "show_unmanaged": check_for_attribute(self.data, "show_unmanaged", parent="settings", var_type="bool", default=True), - "show_unconfigured": check_for_attribute(self.data, "show_unconfigured", parent="settings", var_type="bool", default=True), - "show_filtered": check_for_attribute(self.data, "show_filtered", parent="settings", var_type="bool", default=False), - "show_unfiltered": check_for_attribute(self.data, "show_unfiltered", parent="settings", var_type="bool", default=False), - "show_options": check_for_attribute(self.data, "show_options", parent="settings", var_type="bool", default=False), - "show_missing": check_for_attribute(self.data, "show_missing", parent="settings", var_type="bool", default=True), - "save_report": check_for_attribute(self.data, "save_report", parent="settings", var_type="bool", default=False), - "tvdb_language": check_for_attribute(self.data, "tvdb_language", parent="settings", default="default"), - "ignore_ids": check_for_attribute(self.data, "ignore_ids", parent="settings", var_type="int_list", default_is_none=True), - "ignore_imdb_ids": check_for_attribute(self.data, "ignore_imdb_ids", parent="settings", var_type="lower_list", default_is_none=True), - "playlist_sync_to_users": check_for_attribute(self.data, "playlist_sync_to_users", parent="settings", default_is_none=True), - "playlist_exclude_users": check_for_attribute(self.data, "playlist_exclude_users", parent="settings", default_is_none=True), - "playlist_report": check_for_attribute(self.data, "playlist_report", parent="settings", var_type="bool", default=True), - "verify_ssl": check_for_attribute(self.data, "verify_ssl", parent="settings", var_type="bool", default=True, save=False), - "custom_repo": check_for_attribute(self.data, "custom_repo", parent="settings", default_is_none=True), - "overlay_artwork_filetype": check_for_attribute(self.data, "overlay_artwork_filetype", parent="settings", test_list=filetype_list, translations={"webp": "webp_lossy"}, default="webp_lossy"), - "overlay_artwork_quality": check_for_attribute(self.data, "overlay_artwork_quality", parent="settings", var_type="int", default=90, int_min=1, int_max=100), - "assets_for_all": check_for_attribute(self.data, "assets_for_all", parent="settings", var_type="bool", default=False, save=False, do_print=False) + "run_order": check_for_attribute( + self.data, "run_order", parent="settings", var_type="lower_list", + test_list=run_order_options, default=["operations", "metadata", "collections", "overlays"] + ), + "cache": check_for_attribute( + self.data, "cache", parent="settings", var_type="bool", default=True + ), + "cache_expiration": check_for_attribute( + self.data, "cache_expiration", parent="settings", var_type="int", default=60, int_min=1 + ), + "asset_directory": check_for_attribute( + self.data, "assets_directory", parent="settings", var_type="list_path", default_is_none=True + ) if "assets_directory" in self.data.get("settings", {}) else check_for_attribute( + self.data, "asset_directory", parent="settings", var_type="list_path", default_is_none=True + ), + "asset_folders": check_for_attribute( + self.data, "assets_folders", parent="settings", var_type="bool", default=True + ) if "assets_folders" in self.data.get("settings", {}) else check_for_attribute( + self.data, "asset_folders", parent="settings", var_type="bool", default=True + ), + "asset_depth": check_for_attribute( + self.data, "assets_depth", parent="settings", var_type="int", default=0 + ) if "assets_depth" in self.data.get("settings", {}) else check_for_attribute( + self.data, "asset_depth", parent="settings", var_type="int", default=0 + ), + "create_asset_folders": check_for_attribute( + self.data, "assets_create_folders", parent="settings", var_type="bool", default=False + ) if "assets_create_folders" in self.data.get("settings", {}) else check_for_attribute( + self.data, "create_asset_folders", parent="settings", var_type="bool", default=False + ), + "prioritize_assets": check_for_attribute( + self.data, "assets_prioritize", parent="settings", var_type="bool", default=False + ) if "assets_prioritize" in self.data.get("settings", {}) else check_for_attribute( + self.data, "prioritize_assets", parent="settings", var_type="bool", default=False + ), + "dimensional_asset_rename": check_for_attribute( + self.data, "assets_dimensional_rename", parent="settings", var_type="bool", default=False + ) if "assets_dimensional_rename" in self.data.get("settings", {}) else check_for_attribute( + self.data, "dimensional_asset_rename", parent="settings", var_type="bool", default=False + ), + "download_url_assets": check_for_attribute( + self.data, "assets_download_from_urls", parent="settings", var_type="bool", default=False + ) if "assets_download_from_urls" in self.data.get("settings", {}) else check_for_attribute( + self.data, "download_url_assets", parent="settings", var_type="bool", default=False + ), + "show_missing_assets": check_for_attribute( + self.data, "assets_display_missing", parent="settings", var_type="bool", default=True + ) if "assets_display_missing" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_missing_assets", parent="settings", var_type="bool", default=True + ), + "show_missing_season_assets": check_for_attribute( + self.data, "assets_display_missing_for_seasons", parent="settings", var_type="bool", default=False + ) if "assets_display_missing_for_seasons" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_missing_season_assets", parent="settings", var_type="bool", default=False + ), + "show_missing_episode_assets": check_for_attribute( + self.data, "assets_display_missing_for_episodes", parent="settings", var_type="bool", default=False + ) if "assets_display_missing_for_episodes" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_missing_episode_assets", parent="settings", var_type="bool", default=False + ), + "show_asset_not_needed": check_for_attribute( + self.data, "assets_only_display_changes", parent="settings", var_type="bool", default=True + ) if "assets_only_display_changes" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_asset_not_needed", parent="settings", var_type="bool", default=True + ), + "sync_mode": check_for_attribute( + self.data, "collections_sync_mode", parent="settings", default="append", test_list=sync_modes + ) if "collections_sync_mode" in self.data.get("settings", {}) else check_for_attribute( + self.data, "sync_mode", parent="settings", default="append", test_list=sync_modes + ), + "default_collection_order": check_for_attribute( + self.data, "collections_default_order", parent="settings", default_is_none=True + ) if "collections_default_order" in self.data.get("settings", {}) else check_for_attribute( + self.data, "default_collection_order", parent="settings", default_is_none=True + ), + "minimum_items": check_for_attribute( + self.data, "collections_minimum_items", parent="settings", var_type="int", default=1 + ) if "collections_minimum_items" in self.data.get("settings", {}) else check_for_attribute( + self.data, "minimum_items", parent="settings", var_type="int", default=1 + ), + "item_refresh_delay": check_for_attribute( + self.data, "collections_item_refresh_delay", parent="settings", var_type="int", default=0 + ) if "collections_item_refresh_delay" in self.data.get("settings", {}) else check_for_attribute( + self.data, "item_refresh_delay", parent="settings", var_type="int", default=0 + ), + "delete_below_minimum": check_for_attribute( + self.data, "collections_delete_below_minimum", parent="settings", var_type="bool", default=False + ) if "collections_delete_below_minimum" in self.data.get("settings", {}) else check_for_attribute( + self.data, "delete_below_minimum", parent="settings", var_type="bool", default=False + ), + "delete_not_scheduled": check_for_attribute( + self.data, "collections_delete_not_scheduled", parent="settings", var_type="bool", default=False + ) if "collections_delete_not_scheduled" in self.data.get("settings", {}) else check_for_attribute( + self.data, "delete_not_scheduled", parent="settings", var_type="bool", default=False + ), + "run_again_delay": check_for_attribute( + self.data, "collections_run_again_delay", parent="settings", var_type="int", default=0 + ) if "collections_run_again_delay" in self.data.get("settings", {}) else check_for_attribute( + self.data, "run_again_delay", parent="settings", var_type="int", default=0 + ), + "missing_only_released": check_for_attribute( + self.data, "logs_exclude_unreleased_from_missing", parent="settings", var_type="bool", default=False + ) if "logs_exclude_unreleased_from_missing" in self.data.get("settings", {}) else check_for_attribute( + self.data, "missing_only_released", parent="settings", var_type="bool", default=False + ), + "only_filter_missing": check_for_attribute( + self.data, "collections_filter_only_missing_items", parent="settings", var_type="bool", default=False + ) if "collections_filter_only_missing_items" in self.data.get("settings", {}) else check_for_attribute( + self.data, "only_filter_missing", parent="settings", var_type="bool", default=False + ), + "show_unmanaged": check_for_attribute( + self.data, "logs_display_unmanaged", parent="settings", var_type="bool", default=True + ) if "logs_display_unmanaged" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_unmanaged", parent="settings", var_type="bool", default=True + ), + "show_unconfigured": check_for_attribute( + self.data, "logs_display_unconfigured", parent="settings", var_type="bool", default=True + ) if "logs_display_unconfigured" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_unconfigured", parent="settings", var_type="bool", default=True + ), + "show_filtered": check_for_attribute( + self.data, "logs_display_filtered", parent="settings", var_type="bool", default=False + ) if "logs_display_filtered" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_filtered", parent="settings", var_type="bool", default=False + ), + "show_unfiltered": check_for_attribute( + self.data, "logs_display_unfiltered", parent="settings", var_type="bool", default=False + ) if "logs_display_unfiltered" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_unfiltered", parent="settings", var_type="bool", default=False + ), + "show_options": check_for_attribute( + self.data, "logs_display_options", parent="settings", var_type="bool", default=False + ) if "logs_display_options" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_options", parent="settings", var_type="bool", default=False + ), + "show_missing": check_for_attribute( + self.data, "logs_display_missing", parent="settings", var_type="bool", default=True + ) if "logs_display_missing" in self.data.get("settings", {}) else check_for_attribute( + self.data, "show_missing", parent="settings", var_type="bool", default=True + ), + "save_report": check_for_attribute( + self.data, "logs_save_report", parent="settings", var_type="bool", default=False + ) if "logs_save_report" in self.data.get("settings", {}) else check_for_attribute( + self.data, "save_report", parent="settings", var_type="bool", default=False + ), + "tvdb_language": check_for_attribute( + self.data, "tvdb_language", parent="settings", default="default" + ), + "ignore_ids": check_for_attribute( + self.data, "collections_ignore_ids", parent="settings", var_type="int_list", default_is_none=True + ) if "collections_ignore_ids" in self.data.get("settings", {}) else check_for_attribute( + self.data, "ignore_ids", parent="settings", var_type="int_list", default_is_none=True + ), + "ignore_imdb_ids": check_for_attribute( + self.data, "collections_ignore_imdb_ids", parent="settings", var_type="lower_list", default_is_none=True + ) if "collections_ignore_imdb_ids" in self.data.get("settings", {}) else check_for_attribute( + self.data, "ignore_imdb_ids", parent="settings", var_type="lower_list", default_is_none=True + ), + "playlist_sync_to_users": check_for_attribute( + self.data, "playlists_sync_to", parent="settings", default_is_none=True + ) if "playlists_sync_to" in self.data.get("settings", {}) else check_for_attribute( + self.data, "playlist_sync_to_users", parent="settings", default_is_none=True + ), + "playlist_exclude_users": check_for_attribute( + self.data, "playlists_exclude_from", parent="settings", default_is_none=True + ) if "playlists_exclude_from" in self.data.get("settings", {}) else check_for_attribute( + self.data, "playlist_exclude_users", parent="settings", default_is_none=True + ), + "playlist_report": check_for_attribute( + self.data, "playlists_report", parent="settings", var_type="bool", default=True + ) if "playlists_report" in self.data.get("settings", {}) else check_for_attribute( + self.data, "playlist_report", parent="settings", var_type="bool", default=True + ), + "verify_ssl": check_for_attribute( + self.data, "verify_ssl", parent="settings", var_type="bool", default=True, save=False + ), + "custom_repo": check_for_attribute( + self.data, "github_custom_repo", parent="settings", default_is_none=True + ) if "github_custom_repo" in self.data.get("settings", {}) else check_for_attribute( + self.data, "custom_repo", parent="settings", default_is_none=True + ), + "overlay_artwork_filetype": check_for_attribute( + self.data, "overlays_filetype", parent="settings", test_list=filetype_list, + translations={"webp": "webp_lossy"}, default="webp_lossy" + ) if "overlays_filetype" in self.data.get("settings", {}) else check_for_attribute( + self.data, "overlay_artwork_filetype", parent="settings", test_list=filetype_list, + translations={"webp": "webp_lossy"}, default="webp_lossy" + ), + "overlay_artwork_quality": check_for_attribute( + self.data, "overlays_quality", parent="settings", var_type="int", default=90, int_min=1, int_max=100 + ) if "overlays_quality" in self.data.get("settings", {}) else check_for_attribute( + self.data, "overlay_artwork_quality", parent="settings", var_type="int", default=90, int_min=1, int_max=100 + ), + "assets_for_all": check_for_attribute( + self.data, "assets_for_all", parent="settings", var_type="bool", default=False, save=False, do_print=False + ) } + + self.custom_repo = None if self.general["custom_repo"]: repo = self.general["custom_repo"]