diff --git a/json-schema/README.md b/json-schema/README.md new file mode 100644 index 00000000..241f69f4 --- /dev/null +++ b/json-schema/README.md @@ -0,0 +1,17 @@ +JSON schemas for PMM YAML files + +limitations: + +- template variables not cased for specific default file +- template variables with keys are wildcarded +- "position" attribute has no validation +- "streaming" default has no validation +- search has no validation; just accepts string +- schedule has no validation; just accepts string + +TODO: + +- schema for collection yaml +- schema for metadata yaml +- schema for overlay yaml +- schema for template yaml diff --git a/json-schema/config-schema.json b/json-schema/config-schema.json new file mode 100644 index 00000000..1d7e9b4d --- /dev/null +++ b/json-schema/config-schema.json @@ -0,0 +1,1350 @@ +{ + "$schema": "http://json-schema.org/draft-06/schema#", + "properties": { + "libraries": { + "$ref": "#/definitions/library-section" + }, + "plex": { + "$ref": "#/definitions/plex-server" + }, + "tmdb": { + "$ref": "#/definitions/tmdb-api" + }, + "tautulli": { + "$ref": "#/definitions/tautulli-api" + }, + "webhooks": { + "$ref": "#/definitions/webhooks" + }, + "omdb": { + "$ref": "#/definitions/omdb-api" + }, + "mdblist": { + "$ref": "#/definitions/mdblist-api" + }, + "notifiarr": { + "$ref": "#/definitions/notifiarr-api" + }, + "anidb": { + "$ref": "#/definitions/anidb-api" + }, + "sonarr": { + "$ref": "#/definitions/sonarr-api" + }, + "radarr": { + "$ref": "#/definitions/radarr-api" + }, + "settings": { + "$ref": "#/definitions/settings" + }, + "mal": { + "$ref": "#/definitions/mal-api" + }, + "trakt": { + "$ref": "#/definitions/trakt-api" + } + }, + "required": [ + "plex", + "tmdb" + ], + "definitions": { + "plex-server": { + "description": "Describes the primary Plex server to which PMM can connect. This attribute is REQUIRED. It can be overridden at the library level.", + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "description": "URL at which PMM can connect to your plex server. NOT app.plex.tv", + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + }, + "token": { + "description": "Admin token for this Plex server", + "type": "string" + }, + "timeout": { + "description": "Connection timeout for this Plex server", + "type": "integer" + }, + "db_cache": { + "description": "Sets DB Cache value for this Plex server", + "oneOf": [ + { "type": "integer" }, + { "type": "string", "pattern": "^$" } + ] + }, + "clean_bundles": { + "description": "true/false - If 'true', cleans metadata bundles on this Plex server", + "type": "boolean" + }, + "empty_trash": { + "description": "true/false - If 'true', empties trash on this Plex server", + "type": "boolean" + }, + "optimize": { + "description": "true/false - If 'true', optimizes database on this Plex server", + "type": "boolean" + } + }, + "required": [ + "token", + "url" + ], + "title": "plex" + }, + "plex-server-lib": { + "description": "Describes the Plex server where this library is found.", + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "description": "URL at which PMM can connect to this plex server. NOT app.plex.tv", + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + }, + "token": { + "description": "Admin token for this Plex server", + "type": "string" + }, + "timeout": { + "description": "Connection timeout in seconds for this Plex server", + "type": "integer" + }, + "db_cache": { + "description": "Sets DB Cache value for this Plex server", + "oneOf": [ + { "type": "integer" }, + { "type": "string", "pattern": "^$" } + ] + }, + "clean_bundles": { + "description": "true/false - If 'true', cleans metadata bundles on this Plex server", + "type": "boolean" + }, + "empty_trash": { + "description": "true/false - If 'true', empties trash on this Plex server", + "type": "boolean" + }, + "optimize": { + "description": "true/false - If 'true', optimizes database on this Plex server", + "type": "boolean" + } + }, + "required": [], + "title": "plex" + }, + "tmdb-api": { + "description": "API Key to connect to TMDB; REQUIRED for the script to run", + "type": "object", + "additionalProperties": false, + "properties": { + "apikey": { + "type": "string" + }, + "language": { + "type": "string" + }, + "region": { + "type": "string", + "enum": ["","AD","AE","AF","AG","AI","AL","AM","AN","AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO","BR","BS","BT","BU","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CS","CU","CV","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IN","IO","IQ","IR","IS","IT","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SU","SV","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TP","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XC","XG","XI","XK","YE","YT","YU","ZA","ZM","ZR","ZW"] + }, + "cache_expiration": { + "type": "integer" + } + }, + "required": [ + "apikey" + ], + "title": "tmdb" + }, + "tautulli-api": { + "type": "object", + "additionalProperties": false, + "properties": { + "apikey": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + } + }, + "required": [ + "apikey", + "url" + ], + "title": "tautulli" + }, + "webhooks": { + "type": "object", + "additionalProperties": false, + "properties": { + "error": { + "type": ["string", "null"] + }, + "version": { + "type": ["string", "null"] + }, + "run_start": { + "type": ["string", "null"] + }, + "run_end": { + "type": ["string", "null"] + }, + "changes": { + "type": ["string", "null"] + }, + "delete": { + "type": ["string", "null"] + } + }, + "required": [ + ], + "title": "webhooks" + }, + "omdb-api": { + "type": "object", + "additionalProperties": false, + "properties": { + "apikey": { + "type": "string" + }, + "cache_expiration": { + "type": "integer" + } + }, + "required": [ + "apikey", + "cache_expiration" + ], + "title": "omdb" + }, + "mdblist-api": { + "type": "object", + "additionalProperties": false, + "properties": { + "apikey": { + "type": "string" + }, + "cache_expiration": { + "type": "integer" + } + }, + "required": [ + "apikey", + "cache_expiration" + ], + "title": "mdblist" + }, + "notifiarr-api": { + "type": "object", + "additionalProperties": false, + "properties": { + "apikey": { + "type": "string" + } + }, + "required": [ + "apikey" + ], + "title": "notifiarr" + }, + "anidb-api": { + "type": "object", + "additionalProperties": false, + "properties": { + "client": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "cache_expiration": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "required": [ + "username", + "password" + ], + "title": "anidb" + }, + "sonarr-api": { + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + }, + "token": { + "type": "string" + }, + "add_missing": { + "type": "boolean" + }, + "add_existing": { + "type": "boolean" + }, + "ignore_cache": { + "type": "boolean" + }, + "upgrade_existing": { + "type": "boolean" + }, + "season_folder": { + "type": "boolean" + }, + "search": { + "type": "boolean" + }, + "cutoff_search": { + "type": "boolean" + }, + "root_folder_path": { + "type": "string" + }, + "monitor": { + "type": "string", + "enum": ["all","future","missing","existing","pilot","first","latest","none"] + }, + "quality_profile": { + "type": "string" + }, + "language_profile": { + "type": "string" + }, + "series_type": { + "type": "string", + "enum": ["standard","daily","anime"] + }, + "tag": { + "type": [ "string", "null" ] + }, + "sonarr_path": { + "type": [ "string", "null" ] + }, + "plex_path": { + "type": [ "string", "null" ] + } + }, + "required": [ + "url", + "token", + "quality_profile", + "root_folder_path" + ], + "dependentRequired": { + "add_existing": ["sonarr_path", "plex_path"] + }, + "title": "sonarr" + }, + "sonarr-api-lib": { + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + }, + "token": { + "type": "string" + }, + "add_missing": { + "type": "boolean" + }, + "add_existing": { + "type": "boolean" + }, + "ignore_cache": { + "type": "boolean" + }, + "upgrade_existing": { + "type": "boolean" + }, + "season_folder": { + "type": "boolean" + }, + "search": { + "type": "boolean" + }, + "cutoff_search": { + "type": "boolean" + }, + "root_folder_path": { + "type": "string" + }, + "monitor": { + "type": "string", + "enum": ["all","future","missing","existing","pilot","first","latest","none"] + }, + "quality_profile": { + "type": "string" + }, + "language_profile": { + "type": "string" + }, + "series_type": { + "type": "string", + "enum": ["standard","daily","anime"] + }, + "tag": { + "type": [ "string", "null" ] + }, + "sonarr_path": { + "type": [ "string", "null" ] + }, + "plex_path": { + "type": [ "string", "null" ] + } + }, + "required": [], + "dependentRequired": { + "add_existing": ["sonarr_path", "plex_path"] + }, + "title": "sonarr" + }, + "radarr-api": { + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + }, + "token": { + "type": "string" + }, + "add_missing": { + "type": "boolean" + }, + "add_existing": { + "type": "boolean" + }, + "ignore_cache": { + "type": "boolean" + }, + "upgrade_existing": { + "type": "boolean" + }, + "search": { + "type": "boolean" + }, + "root_folder_path": { + "type": "string" + }, + "monitor": { + "type": "boolean" + }, + "quality_profile": { + "type": "string" + }, + "availability": { + "type": "string", + "enum": ["announced","cinemas","released","db"] + }, + "tag": { + "type": [ "string", "null" ] + }, + "radarr_path": { + "type": [ "string", "null" ] + }, + "plex_path": { + "type": [ "string", "null" ] + } + }, + "required": [ + "url", + "token", + "availability", + "root_folder_path" + ], + "dependentRequired": { + "add_existing": ["radarr_path", "plex_path"] + }, + "title": "radarr" + }, + "radarr-api-lib": { + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + }, + "token": { + "type": "string" + }, + "add_missing": { + "type": "boolean" + }, + "add_existing": { + "type": "boolean" + }, + "ignore_cache": { + "type": "boolean" + }, + "upgrade_existing": { + "type": "boolean" + }, + "search": { + "type": "boolean" + }, + "root_folder_path": { + "type": "string" + }, + "monitor": { + "type": "boolean" + }, + "quality_profile": { + "type": "string" + }, + "availability": { + "type": "string", + "enum": ["announced","cinemas","released","db"] + }, + "tag": { + "type": [ "string", "null" ] + }, + "radarr_path": { + "type": [ "string", "null" ] + }, + "plex_path": { + "type": [ "string", "null" ] + } + }, + "required": [], + "dependentRequired": { + "add_existing": ["radarr_path", "plex_path"] + }, + "title": "radarr" + }, + "settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "cache": { + "type": "boolean" + }, + "cache_expiration": { + "type": "integer" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + }, + "asset_folders": { + "type": "boolean" + }, + "asset_depth": { + "type": "integer" + }, + "create_asset_folders": { + "type": "boolean" + }, + "prioritize_assets": { + "type": "boolean" + }, + "dimensional_asset_rename": { + "type": "boolean" + }, + "download_url_assets": { + "type": "boolean" + }, + "show_missing_season_assets": { + "type": "boolean" + }, + "show_missing_episode_assets": { + "type": "boolean" + }, + "show_asset_not_needed": { + "type": "boolean" + }, + "sync_mode": { + "type": "string" + }, + "minimum_items": { + "type": "integer" + }, + "default_collection_order": { + "type": "string" + }, + "delete_below_minimum": { + "type": "boolean" + }, + "delete_not_scheduled": { + "type": "boolean" + }, + "run_again_delay": { + "type": "integer" + }, + "missing_only_released": { + "type": "boolean" + }, + "only_filter_missing": { + "type": "boolean" + }, + "show_unmanaged": { + "type": "boolean" + }, + "show_unconfigured": { + "type": "boolean" + }, + "show_filtered": { + "type": "boolean" + }, + "show_options": { + "type": "boolean" + }, + "show_missing": { + "type": "boolean" + }, + "show_missing_assets": { + "type": "boolean" + }, + "save_report": { + "type": "boolean" + }, + "tvdb_language": { + "type": "string" + }, + "ignore_ids": { + "type": "null" + }, + "ignore_imdb_ids": { + "type": "null" + }, + "item_refresh_delay": { + "type": "integer" + }, + "playlist_sync_to_users": { + "type": "string" + }, + "playlist_exclude_users": { + "type": "null" + }, + "playlist_report": { + "type": "boolean" + }, + "verify_ssl": { + "type": "boolean" + }, + "custom_repo": { + "type": "null" + }, + "check_nightly": { + "type": "boolean" + } + }, + "required": [ + ], + "title": "settings" + }, + "mal-api": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "title": "mal" + }, + "trakt-api": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + }, + "pin": { + "type": [ "string", "null" ] + } + }, + "required": [ + "client_id", + "client_secret" + ], + "title": "trakt" + }, + "pmm-collection-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "pmm": { + "type": "string", + "enum": ["actor", "anilist","aspect","audio_language","bafta","based","basic","cannes","choice","collectionless","content_rating_cs","content_rating_mal","content_rating_uk","content_rating_us","continent","country","decade","director","emmy","flixpatrol","franchise","genre","golden","imdb","myanimelist","network","oscars","other_award","other_chart","producer","region","resolution","seasonal","separator_award","separator_chart","spirit","streaming","studio","subtitle_language","sundance","tautulli","tmdb","trakt","universe","writer","year"] + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + }, + "template_variables": { + "$ref": "#/definitions/template-variables-collections" + } + }, + "required": [ + "pmm" + ] + }, + "pmm-overlay-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "pmm": { + "type": "string", + "enum": ["aspect","audio_codec","commonsense","content_rating_uk","content_rating_us_movie","content_rating_us_show","direct_play","episode_info","language_count","flixpatrol","languages","mediastinger","network","ratings","resolution","ribbon","runtimes","status","streaming","studio","versions","video_format"] + }, + "remove_overlays": { + "type": "boolean" + }, + "reapply_overlays": { + "type": "boolean" + }, + "reapply_overlay": { + "type": "boolean" + }, + "reset_overlays": { + "type": "string", + "enum": ["tmdb","plex"] + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + }, + "template_variables": { + "$ref": "#/definitions/template-variables-overlays" + } + }, + "required": [ + ] + }, + "pmm-playlist-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "pmm": { + "type": "string", + "enum": ["playlist"] + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + }, + "template_variables": { + "$ref": "#/definitions/template-variables-playlists" + } + }, + "required": [ + "pmm" + ] + }, + "file-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "file": { + "type": "string" + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + } + }, + "required": [ + "file" + ] + }, + "folder-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "folder": { + "type": "string" + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + } + }, + "required": [ + "folder" + ] + }, + "url-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "format": "uri", + "pattern": "^(https?)://" + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + } + }, + "required": [ + "url" + ] + }, + "git-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "git": { + "type": "string" + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + } + }, + "required": [ + "git" + ] + }, + "repo-path": { + "type": "object", + "additionalProperties": false, + "properties": { + "repo": { + "type": "string" + }, + "schedule": { + "type": "string" + }, + "asset_directory": { + "oneOf": [ + { "type": "string"}, + { "type": "array", "uniqueItems": true, "items": {"type": "string" }} + ] + } + }, + "required": [ + "repo" + ] + }, + "library-section": { + "title": "libraries", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^(?!plex|tmdb|tautulli|webhooks|omdb|mdblist|notifiarr|anidb|radarr|sonarr|trakt|mal).+$": { + "additionalProperties": false, + "properties": { + "metadata_files": { + "$ref": "#/definitions/metadata-files" + }, + "collection_files": { + "$ref": "#/definitions/collection-files" + }, + "overlay_files": { + "$ref": "#/definitions/overlay-files" + }, + "metadata_path": { + "$ref": "#/definitions/metadata-path" + }, + "overlay_path": { + "$ref": "#/definitions/overlay-path" + }, + "operations": { + "$ref": "#/definitions/operations" + }, + "library_name": { + "type": "string" + }, + "report_path": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/settings" + }, + "plex": { + "$ref": "#/definitions/plex-server-lib" + }, + "radarr": { + "$ref": "#/definitions/radarr-api-lib" + }, + "sonarr": { + "$ref": "#/definitions/sonarr-api-lib" + }, + "tautulli": { + "$ref": "#/definitions/tautulli-api" + }, + "template_variables": { + "$ref": "#/definitions/template-variables-library" + }, + "schedule": { + "type": "string" + }, + "remove_overlays": { + "type": "boolean" + }, + "reapply_overlays": { + "type": "boolean" + }, + "reset_overlays": { + "type": "string", + "enum": ["tmdb","plex"] + } + } + }, + "^schedule_.*$": { "type": "string" } + } + }, + "metadata-files": { + "title": "metadata_files", + "additionalProperties": false, + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/file-path" + }, { + "$ref": "#/definitions/folder-path" + }, { + "$ref": "#/definitions/url-path" + }, { + "$ref": "#/definitions/git-path" + }, { + "$ref": "#/definitions/repo-path" + } + ] + } + }, + "collection-files": { + "title": "collection_files", + "additionalProperties": false, + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/pmm-collection-path" + }, { + "$ref": "#/definitions/file-path" + }, { + "$ref": "#/definitions/folder-path" + }, { + "$ref": "#/definitions/url-path" + }, { + "$ref": "#/definitions/git-path" + }, { + "$ref": "#/definitions/repo-path" + } + ] + } + }, + "overlay-files": { + "title": "overlay_files", + "additionalProperties": false, + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/pmm-overlay-path" + }, { + "$ref": "#/definitions/file-path" + }, { + "$ref": "#/definitions/folder-path" + }, { + "$ref": "#/definitions/url-path" + }, { + "$ref": "#/definitions/git-path" + }, { + "$ref": "#/definitions/repo-path" + } + ] + } + }, + "metadata-path": { + "title": "metadata_path", + "additionalProperties": false, + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/pmm-collection-path" + }, { + "$ref": "#/definitions/file-path" + }, { + "$ref": "#/definitions/folder-path" + }, { + "$ref": "#/definitions/url-path" + }, { + "$ref": "#/definitions/git-path" + }, { + "$ref": "#/definitions/repo-path" + } + ] + } + }, + "overlay-path": { + "deprecated": true, + "title": "overlay_path", + "additionalProperties": false, + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/pmm-overlay-path" + }, { + "$ref": "#/definitions/file-path" + }, { + "$ref": "#/definitions/folder-path" + }, { + "$ref": "#/definitions/url-path" + }, { + "$ref": "#/definitions/git-path" + }, { + "$ref": "#/definitions/repo-path" + } + ] + } + }, + "playlist-path": { + "title": "playlist_files", + "additionalProperties": false, + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/pmm-playlist-path" + }, { + "$ref": "#/definitions/file-path" + }, { + "$ref": "#/definitions/folder-path" + }, { + "$ref": "#/definitions/url-path" + }, { + "$ref": "#/definitions/git-path" + }, { + "$ref": "#/definitions/repo-path" + } + ] + } + }, + "operations": { + "type": "object", + "additionalProperties": false, + "properties": { + "assets_for_all": { + "type": "boolean" + }, + "update_blank_track_titles": { + "type": "boolean" + }, + "remove_title_parentheses": { + "type": "boolean" + }, + "split_duplicates": { + "type": "boolean" + }, + "radarr_add_all": { + "type": "boolean" + }, + "sonarr_add_all": { + "type": "boolean" + }, + "mass_genre_update": { + "type": "string", + "enum": ["tmdb","tvdb","imdb","omdb","anidb","anidb_3_0","anidb_2_5","anidb_2_0","anidb_1_5","anidb_1_0","anidb_0_5","mal","lock","unlock","remove","reset"] + }, + "mass_content_rating_update": { + "type": "string", + "enum": ["mdb","mdb_commonsense","mdb_commonsense0","omdb","mal","lock","unlock","remove","reset"] + }, + "mass_original_title_update": { + "type": "string", + "enum": ["anidb","anidb_official","mal","mal_english","mal_japanese","lock","unlock","remove","reset"] + }, + "mass_studio_update": { + "type": "string", + "enum": ["anidb","mal","tmdb","lock","unlock","remove","reset"] + }, + "mass_originally_available_update": { + "type": "string", + "enum": ["tmdb","tvdb","omdb","mdb","anidb","mal","lock","unlock","remove","reset"] + }, + "mass_audience_rating_update": { + "type": "string", + "enum": ["tmdb","imdb","trakt_user","omdb","mdb","mdb_average","mdb_imdb","mdb_metacritic","mdb_metacriticuser","mdb_trakt","mdb_tomatoes","mdb_tomatoesaudience","mdb_tmdb","mdb_letterboxd","mdb_myanimelist","anidb_rating","anidb_average","anidb_score","mal","lock","unlock","remove","reset"] + }, + "mass_critic_rating_update": { + "type": "string", + "enum": ["tmdb","imdb","trakt_user","omdb","mdb","mdb_average","mdb_imdb","mdb_metacritic","mdb_metacriticuser","mdb_trakt","mdb_tomatoes","mdb_tomatoesaudience","mdb_tmdb","mdb_letterboxd","mdb_myanimelist","anidb_rating","anidb_average","anidb_score","mal","lock","unlock","remove","reset"] + }, + "mass_user_rating_update": { + "type": "string", + "enum": ["tmdb","imdb","trakt_user","omdb","mdb","mdb_average","mdb_imdb","mdb_metacritic","mdb_metacriticuser","mdb_trakt","mdb_tomatoes","mdb_tomatoesaudience","mdb_tmdb","mdb_letterboxd","mdb_myanimelist","anidb_rating","anidb_average","anidb_score","mal","lock","unlock","remove","reset"] + }, + "mass_episode_audience_rating_update": { + "type": "string", + "enum": ["tmdb","imdb","lock","remove","reset","unlock"] + }, + "mass_episode_critic_rating_update": { + "type": "string", + "enum": ["tmdb","imdb","lock","remove","reset","unlock"] + }, + "mass_episode_user_rating_update": { + "type": "string", + "enum": ["tmdb","imdb","lock","remove","reset","unlock"] + }, + "mass_poster_update": { + "type": "string", + "enum": ["tmdb","plex","lock","unlock"] + }, + "mass_background_update": { + "type": "string", + "enum": ["tmdb","plex","lock","unlock"] + }, + "mass_imdb_parental_labels": { + "type": "string", + "enum": ["none","mild","moderate","severe"] + }, + "mass_collection_mode": { + "type": "string", + "enum": ["default","hide","hide_items","show_items"] + }, + "radarr_remove_by_tag": { "type": "string" }, + "sonarr_remove_by_tag": { "type": "string" }, + "delete_collections": { + "type": "object", + "properties": { + "configured": { "type": "boolean" }, + "managed": { "type": "boolean" }, + "less": { "type": "integer" } + }, + "required": [] + } + }, + "required": [], + "dependentRequired": {}, + "title": "operations" + }, + "template-variables-library": { + "type": "object", + "properties": { + "sep_style": { + "type": "string", + "enum": ["amethyst", "aqua", "blue", "forest", "fuchsia", "gold", "gray", "green", "navy", "ocean", "olive", "orchid", "orig", "pink", "plum", "purple", "red", "rust", "salmon", "sand", "stb", "tan"] + }, + "collection_mode": { + "type": "string", + "enum": ["default", "hide", "hide_items", "show_items"] + }, + "language": { + "type": "string", + "enum": ["en", "fr", "ar", "da", "nl", "de", "it", "pt-br", "nb-no", "es", "sv"] + }, + "placeholder_imdb_id": { + "type": "string", + "pattern": "^tt\\d{7}$" + } + }, + "required": [], + "title": "template_variables" + }, + "template-variables-collections": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "starting": { + "oneOf": [ + { "type": "integer", "minimum": 0 }, + { "type": "string", "pattern": "^current_year(-\\d+)?$" } + ] + }, + "ending": { + "oneOf": [ + { "type": "integer", "minimum": 1 }, + { "type": "string", "pattern": "^current_year(-\\d+)?$" } + ] + }, + "increment": { "type": "integer", "minimum": 0 }, + "depth": { "type": "integer", "minimum": 1 }, + "limit": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": false + }, + "style": { + "type": "string", + "enum": ["color", "white", "bw", "diiivoy", "diiivoycolor", "rainier", "signature", "orig", "transparent", "default", "standards"] + } + }, + "required": [], + "dependentRequired": {}, + "title": "template_variables" + }, + "template-variables-overlays": { + "type": "object", + "additionalProperties": false, + "properties": { + "addon_offset": { "type": "integer", "exclusiveMinimum": 0 }, + "addon_position": { "type": "string", "enum": ["left","top","bottom","right"] }, + "back_align": { "type": "string", "enum": ["left","right","center","top","bottom"] }, + "back_color": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" }, + "back_height": { "type": "integer", "exclusiveMinimum": 0 }, + "back_line_color": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" }, + "back_line_width": { "type": "integer", "exclusiveMinimum": 0 }, + "back_padding": { "type": "integer", "exclusiveMinimum": 0 }, + "back_radius": { "type": "integer", "exclusiveMinimum": 0 }, + "back_width": { "type": "integer", "exclusiveMinimum": 0 }, + "builder_level": { "type": "string", "enum": ["show","season","episode"] }, + "file": { "type": "string" }, + "flag_alignment": { "type": "string", "enum": ["left","right"] }, + "font_color": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" }, + "font_size": { "type": "integer", "exclusiveMinimum": 0 }, + "font_style": { "type": "string", "enum": ["Any","Italic","Normal","Oblique"] }, + "font": { "type": "string" }, + "git": { "type": "string" }, + "group_alignment": { "type": "string", "enum": ["horizontal","vertical"] }, + "horizontal_align": { "type": "string", "enum": ["left","center","right"] }, + "horizontal_offset": { "type": "integer", "minimum": 0 }, + "horizontal_position": { "type": "string", "enum": ["left","left2","center","center_left","center_right","right","right2"] }, + "languages": { "type": "string", "pattern": "^[a-z]{2}$" }, + "last": { "type": "integer", "exclusiveMinimum": 0 }, + "limit": { "type": "integer", "exclusiveMinimum": 0 }, + "location": { "type": "string", "enum": ["world","albania","argentina","armenia","australia","austria","azerbaijan","bahamas","bahrain","bangladesh","belarus","belgium","belize","benin","bolivia","bosnia_and_herzegovina","botswana","brazil","bulgaria","burkina_faso","cambodia","canada","chile","colombia","costa_rica","croatia","cyprus","czech_republic","denmark","dominican_republic","ecuador","egypt","estonia","finland","france","gabon","germany","ghana","greece","guatemala","guinea_bissau","haiti","honduras","hong_kong","hungary","iceland","india","indonesia","ireland","israel","italy","ivory_coast","jamaica","japan","jordan","kazakhstan","kenya","kuwait","kyrgyzstan","laos","latvia","lebanon","lithuania","luxembourg","malaysia","maldives","mali","malta","mexico","moldova","mongolia","montenegro","morocco","mozambique","namibia","netherlands","new_zealand","nicaragua","niger","nigeria","north_macedonia","norway","oman","pakistan","panama","papua_new_guinea","paraguay","peru","philippines","poland","portugal","qatar","romania","russia","rwanda","salvador","saudi_arabia","senegal","serbia","singapore","slovakia","slovenia","south_africa","south_korea","spain","sri_lanka","sweden","switzerland","taiwan","tajikistan","tanzania","thailand","togo","trinidad_and_tobago","turkey","turkmenistan","uganda","ukraine","united_arab_emirates","united_kingdom","united_states","uruguay","uzbekistan","venezuela","vietnam","zambia","zimbabwe"] }, + "minimum": { "type": "integer"}, + "offset": { "type": "integer", "minimum": 0 }, + "overlay_limit": { "type": "integer", "minimum": 1, "maximum": 5 }, + "position": { "type": "string", "enum": ["left","right"] }, + "post_nr_text": { "type": "string" }, + "post_text": { "type": "string" }, + "pre_nr_text": { "type": "string" }, + "pre_text": { "type": "string" }, + "rating_alignment": { "type": "string", "enum": ["vertical", "horizontal"] }, + "rating1": { "type": "string", "enum": ["critic", "audience", "user"] }, + "rating1_image": { "type": "string", "enum": ["anidb", "imdb", "letterboxd", "tmdb", "metacritic", "rt_popcorn", "rt_tomato", "trakt", "mal", "mdb", "star"] }, + "rating1_font": { "type": "string" }, + "rating1_font_size": { "type": "integer", "minimum": 1 }, + "rating2": { "type": "string", "enum": ["critic", "audience", "user"] }, + "rating2_image": { "type": "string", "enum": ["anidb", "imdb", "letterboxd", "tmdb", "metacritic", "rt_popcorn", "rt_tomato", "trakt", "mal", "mdb", "star"] }, + "rating2_font": { "type": "string" }, + "rating2_font_size": { "type": "integer", "minimum": 1 }, + "rating3": { "type": "string", "enum": ["critic", "audience", "user"] }, + "rating3_image": { "type": "string", "enum": ["anidb", "imdb", "letterboxd", "tmdb", "metacritic", "rt_popcorn", "rt_tomato", "trakt", "mal", "mdb", "star"] }, + "rating3_font": { "type": "string" }, + "rating3_font_size": { "type": "integer", "minimum": 1 }, + "region": { "type": "string", "enum": ["us", "uk", "ca", "da", "de", "es", "fr", "it", "pt-br"] }, + "remove_overlays": { "type": "boolean" }, + "reapply_overlays": { "type": "boolean" }, + "reset_overlays": { "type": "string", "enum": ["tmdb", "plex"] }, + "repo": { "type": "string" }, + "stroke_color": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" }, + "stroke_width": { "type": "integer", "exclusiveMinimum": 0 }, + "style": { "type": "string", "enum": ["compact","standard","bigger","round","square","half", "red", "black", "yellow", "gray"] }, + "text": { "type": "string" }, + "time_window": { "type": "string", "enum": ["today","yesterday","this_week","last_week","this_month","last_month","this_year","last_year"] }, + "url": { "type": "string", "format": "uri", "pattern": "^(https?)://" }, + "use_edition": { "type": "boolean" }, + "use_lowercase": { "type": "boolean" }, + "use_resolution": { "type": "boolean" }, + "use_subtitles": { "type": "boolean" }, + "vertical_align": { "type": "string", "enum": ["top","center","bottom"] }, + "vertical_offset": { "type": "integer", "minimum": 0 }, + "vertical_position": { "type": "string", "enum": ["top","top2","top3","center","center_top","center_bottom","bottom","bottom2","bottom3"] } + }, + "patternProperties": { + "^back_color_.*$": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" }, + "^country_.*$": { "type": "string", "pattern": "^[A-Z]{2}$" }, + "^file_.*$": { "type": "string" }, + "^git_.*$": { "type": "string" }, + "^limit_.*$": { "type": "integer", "exclusiveMinimum": 0 }, + "^location_.*$": { "type": "string", "enum": ["world","albania","argentina","armenia","australia","austria","azerbaijan","bahamas","bahrain","bangladesh","belarus","belgium","belize","benin","bolivia","bosnia_and_herzegovina","botswana","brazil","bulgaria","burkina_faso","cambodia","canada","chile","colombia","costa_rica","croatia","cyprus","czech_republic","denmark","dominican_republic","ecuador","egypt","estonia","finland","france","gabon","germany","ghana","greece","guatemala","guinea_bissau","haiti","honduras","hong_kong","hungary","iceland","india","indonesia","ireland","israel","italy","ivory_coast","jamaica","japan","jordan","kazakhstan","kenya","kuwait","kyrgyzstan","laos","latvia","lebanon","lithuania","luxembourg","malaysia","maldives","mali","malta","mexico","moldova","mongolia","montenegro","morocco","mozambique","namibia","netherlands","new_zealand","nicaragua","niger","nigeria","north_macedonia","norway","oman","pakistan","panama","papua_new_guinea","paraguay","peru","philippines","poland","portugal","qatar","romania","russia","rwanda","salvador","saudi_arabia","senegal","serbia","singapore","slovakia","slovenia","south_africa","south_korea","spain","sri_lanka","sweden","switzerland","taiwan","tajikistan","tanzania","thailand","togo","trinidad_and_tobago","turkey","turkmenistan","uganda","ukraine","united_arab_emirates","united_kingdom","united_states","uruguay","uzbekistan","venezuela","vietnam","zambia","zimbabwe"] }, + "^rating\\d+_.*$": { "type": "string" }, + "^regex_.*$": { "type": "string" }, + "^repo_.*$": { "type": "string" }, + "^text_.*$": { "type": "string" }, + "^time_window_.*$": { "type": "string", "enum": ["today","yesterday","this_week","last_week","this_month","last_month","this_year","last_year"] }, + "^url_.*$": { "type": "string", "format": "uri", "pattern": "^(https?)://" }, + "^use_.*$": { "type": "boolean" }, + "^weight_.*$": { "type": "integer" } + }, + "required": [ + ], + "dependentRequired": { + }, + "title": "template_variables" + }, + "template-variables-playlists": { + "type": "array", + "additionalProperties": true, + "properties": { + }, + "required": [ + ], + "dependentRequired": { + }, + "title": "template_variables" + } + } +} diff --git a/json-schema/prototype_config.yml b/json-schema/prototype_config.yml new file mode 100644 index 00000000..a9a2e40b --- /dev/null +++ b/json-schema/prototype_config.yml @@ -0,0 +1,479 @@ + +# yaml-language-server: $schema=./config-schema.json + +libraries: + Movies: # Must match a library name in your Plex + report_path: config/missing/Movies_missing.yml + remove_overlays: false # Set to true if you want to remove overlays + reapply_overlays: false + reset_overlays: false + template_variables: + sep_style: purple # use the purple separators globally for this library + collection_mode: hide # hide the collections within the "library" tab in Plex. + placeholder_imdb_id: tt8579674 # 1917 (2019) placeholder id for the separators, avoids a plex bug. + ignore_ids: + - 1230 + - 3450 + - 6780 + ignore_imdb_ids: tt1234, tt5678, tt7890 + + metadata_path: + - pmm: cannes + - pmm: choice + - pmm: emmy + - pmm: spirit + - pmm: sundance + - pmm: other_award + - pmm: tautulli + - pmm: imdb + - pmm: trakt + - pmm: flixpatrol + - pmm: anilist + - pmm: myanimelist + - pmm: other_chart + - pmm: genre + - pmm: franchise + - pmm: based + - pmm: content_rating_us + - pmm: content_rating_uk + - pmm: content_rating_mal + - pmm: content_rating_cs + - pmm: country + - pmm: region + - pmm: continent + - pmm: aspect + - pmm: subtitle_language + - pmm: actor + - pmm: director + - pmm: producer + - pmm: writer + - pmm: year + - pmm: decade + - pmm: collectionless + - pmm: separator_award # An "index card" + - pmm: bafta # BAFTA Awards + template_variables: # Show collections from current_year-10 onwards. + horizontal_offset: 99 + data: + starting: current_year-10 + ending: current_year + - pmm: golden # Golden Globes Awards + # template_variables: # Show collections from current_year-10 onwards. + # data: + # starting: current_year-10 + # ending: current_year + - pmm: oscars # The Oscars + # template_variables: # Show collections from current_year-10 onwards. + # data: + # starting: current_year-10 + # ending: current_year + - pmm: separator_chart # An "index card" + - pmm: basic # Some basic chart collections + - pmm: tmdb # TMDb Charts (Popular, Trending, etc.) + - pmm: audio_language # English, French, Arabic, German, etc. audio language + - pmm: resolution # 4K HDR, 1080P FHD, etc. with the standards style + # template_variables: + # style: standards + - pmm: studio # DreamWorks Studios, Lucasfilm Ltd, etc. + - pmm: seasonal # Christmas, Halloween, etc. + template_variables: # Disable any US-specific seasonal collections + schedule_independence: never + schedule_thanksgiving: never + schedule_memorial: never + schedule_labor: never + - pmm: streaming # Streaming on Disney+, Netflix, etc. + # template_variables: + # originals_only: true # Only create collections for Original Content (i.e. Netflix Originals) + - pmm: universe # Marvel Cinematic Universe, Wizarding World, etc. + overlay_path: + - remove_overlays: false # Set to true if you want to remove overlays + - reapply_overlays: false # If you are doing a lot of testing and changes like me, keep this to true to always reapply overlays - can cause image bloat + - reset_overlays: tmdb # if you want to reset the poster to default poster from tmdb - can cause image bloat + - pmm: flixpatrol + - pmm: episode_info + - pmm: mediastinger + - pmm: ratings + - pmm: status + - pmm: aspect + - pmm: language_count + - pmm: languages + - pmm: runtimes + - pmm: versions + - pmm: network + - pmm: studio + - pmm: direct_play + - pmm: audio_codec # FLAC, DTS-X, TrueHD, etc. style: standard/compact. compact is default + - pmm: resolution # 4K HDR, 1080P FHD, etc. + - pmm: ribbon # Used for ribbon in bottom right + - pmm: streaming # Streaming on Disney+, Netflix, etc. + - pmm: video_format # Remux, DVD, Blu-Ray, etc. in bottom left + settings: + asset_directory: config/assets + + operations: + split_duplicates: false + assets_for_all: false + + New-Style Movies: # Must match a library name in your Plex + library_name: Movies + report_path: config/missing/Movies_missing.yml + remove_overlays: false # Set to true if you want to remove overlays + reapply_overlays: false + reset_overlays: tmdb + template_variables: + sep_style: purple # use the purple separators globally for this library + collection_mode: hide # hide the collections within the "library" tab in Plex. + placeholder_imdb_id: tt8579674 # 1917 (2019) placeholder id for the separators, avoids a plex bug. + ignore_ids: + - 1230 + - 3450 + - 6780 + ignore_imdb_ids: tt1234, tt5678, tt7890 + + collection_files: + - pmm: cannes + - pmm: choice + - pmm: emmy + - pmm: spirit + - pmm: sundance + - pmm: other_award + - pmm: tautulli + - pmm: imdb + - pmm: trakt + - pmm: flixpatrol + - pmm: anilist + - pmm: myanimelist + - pmm: other_chart + - pmm: genre + - pmm: franchise + - pmm: based + - pmm: content_rating_us + - pmm: content_rating_uk + - pmm: content_rating_mal + - pmm: content_rating_cs + - pmm: country + - pmm: region + - pmm: continent + - pmm: aspect + - pmm: subtitle_language + - pmm: actor + - pmm: director + - pmm: producer + - pmm: writer + - pmm: year + - pmm: decade + - pmm: collectionless + - pmm: separator_award # An "index card" + - pmm: bafta # BAFTA Awards + template_variables: # Show collections from current_year-10 onwards. + horizontal_offset: 99 + data: + starting: current_year-10 + ending: current_year + - pmm: golden # Golden Globes Awards + # template_variables: # Show collections from current_year-10 onwards. + # data: + # starting: current_year-10 + # ending: current_year + - pmm: oscars # The Oscars + # template_variables: # Show collections from current_year-10 onwards. + # data: + # starting: current_year-10 + # ending: current_year + - pmm: separator_chart # An "index card" + - pmm: basic # Some basic chart collections + - pmm: tmdb # TMDb Charts (Popular, Trending, etc.) + - pmm: audio_language # English, French, Arabic, German, etc. audio language + - pmm: resolution # 4K HDR, 1080P FHD, etc. with the standards style + # template_variables: + # style: standards + - pmm: studio # DreamWorks Studios, Lucasfilm Ltd, etc. + - pmm: seasonal # Christmas, Halloween, etc. + template_variables: # Disable any US-specific seasonal collections + schedule_independence: never + schedule_thanksgiving: never + schedule_memorial: never + schedule_labor: never + - pmm: streaming # Streaming on Disney+, Netflix, etc. + # template_variables: + # originals_only: true # Only create collections for Original Content (i.e. Netflix Originals) + - pmm: universe # Marvel Cinematic Universe, Wizarding World, etc. + + overlay_files: + - pmm: flixpatrol + - pmm: episode_info + - pmm: mediastinger + - pmm: ratings + - pmm: status + - pmm: aspect + - pmm: language_count + - pmm: languages + - pmm: runtimes + - pmm: versions + - pmm: network + - pmm: studio + - pmm: direct_play + - pmm: audio_codec # FLAC, DTS-X, TrueHD, etc. style: standard/compact. compact is default + - pmm: resolution # 4K HDR, 1080P FHD, etc. + - pmm: ribbon # Used for ribbon in bottom right + - pmm: streaming # Streaming on Disney+, Netflix, etc. + - pmm: video_format # Remux, DVD, Blu-Ray, etc. in bottom left + settings: + asset_directory: config/assets + + operations: + split_duplicates: false + assets_for_all: false + + TV Shows: # Must match a library name in your Plex + report_path: config/missing/TV_missing.yml + # template_variables: + # sep_style: plum # use the plum separators globally for this library + # collection_mode: hide # hide the collections within the "library" tab in Plex. + # placeholder_imdb_id: tt1190634 # The Boys (2019) placeholder id for the separators, avoids a plex bug. + metadata_path: + - pmm: cannes + - pmm: choice + - pmm: emmy + - pmm: spirit + - pmm: sundance + - pmm: other_award + - pmm: tautulli + - pmm: imdb + - pmm: trakt + - pmm: flixpatrol + - pmm: anilist + - pmm: myanimelist + - pmm: other_chart + - pmm: genre + - pmm: franchise + - pmm: based + - pmm: content_rating_us + - pmm: content_rating_uk + - pmm: content_rating_mal + - pmm: content_rating_cs + - pmm: country + - pmm: region + - pmm: continent + - pmm: aspect + - pmm: subtitle_language + - pmm: actor + - pmm: director + - pmm: producer + - pmm: writer + - pmm: year + - pmm: decade + - pmm: collectionless + - pmm: separator_award # An "index card" + - pmm: bafta # BAFTA Awards + # template_variables: # Show collections from current_year-10 onwards. + # data: + # starting: current_year-10 + # ending: current_year + - pmm: golden # Golden Globes Awards + # template_variables: # Show collections from current_year-10 onwards. + # data: + # starting: current_year-10 + # ending: current_year + - pmm: oscars # The Oscars + # template_variables: # Show collections from current_year-10 onwards. + # data: + # starting: current_year-10 + # ending: current_year + - pmm: separator_chart # An "index card" + - pmm: basic # Some basic chart collections + - pmm: tmdb # TMDb Charts (Popular, Trending, etc.) + - pmm: audio_language # English, French, Arabic, German, etc. audio language + - pmm: resolution # 4K HDR, 1080P FHD, etc. with the standards style + # template_variables: + # style: standards + - pmm: network # ABC, CBC, NBC, FOX, etc. + - pmm: streaming # Streaming on Disney+, Netflix, etc. + # template_variables: + # originals_only: true # Only create collections for Original Content (i.e. Netflix Originals) + overlay_path: + - remove_overlays: false # Set to true if you want to remove overlays + # - reapply_overlay: false # If you are doing a lot of testing and changes like me, keep this to true to always reapply overlays - can cause image bloat + # - reset_overlays: tmdb # if you want to reset the poster to default poster from tmdb - can cause image bloat + - pmm: flixpatrol + - pmm: mediastinger + - pmm: ratings + - pmm: status + - pmm: aspect + - pmm: language_count + - pmm: languages + - pmm: runtimes + - pmm: network + - pmm: studio + - pmm: direct_play + - pmm: audio_codec # FLAC, DTS-X, TrueHD, etc. on show and episode + - pmm: audio_codec + # template_variables: + # overlay_level: episode + - pmm: episode_info # S##E## information in bottom right on episode + # template_variables: + # overlay_level: episode + - pmm: resolution # 4K HDR, 1080P FHD, etc. on show, episode, and season + - pmm: resolution + # template_variables: + # overlay_level: episode + - pmm: resolution + # template_variables: + # overlay_level: season + - pmm: ribbon # Used for ribbon in bottom right on show + - pmm: status # Airing, Returning, Ended, Canceled on show + - pmm: versions # Will show duplicates for that media item on show and episode + - pmm: versions + # template_variables: + # overlay_level: episode + - pmm: video_format # Remux, DVD, Blu-Ray, etc. in bottom left on show, episode, and season + - pmm: video_format + # template_variables: + # overlay_level: episode + settings: + asset_directory: + - config/assets + + operations: + split_duplicates: false + assets_for_all: false + delete_collections: + managed: false + configured: true + less: 123 + + Anime: + metadata_path: + - pmm: basic # This is a file within PMM's defaults folder + - pmm: anilist # This is a file within PMM's defaults folder + # see the wiki for how to use local files, folders, URLs, or files from git + Music: + metadata_path: + - file: config/Music.yml # This is a local file THAT YOU MIGHT CREATE +playlist_files: + - pmm: playlist # This is a file within PMM's defaults folder + template_variables: + libraries: Movies, TV Shows # list of libraries that you want the PMM Defaults playlists to look at + # see the wiki for how to use local files, folders, URLs, or files from git +settings: + 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: asdf + 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_options: false + 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: all + playlist_exclude_users: + playlist_report: false + verify_ssl: true + custom_repo: + check_nightly: false +webhooks: # Can be individually specified per library as well + error: + version: + run_start: + run_end: + changes: +plex: # Can be individually specified per library as well; REQUIRED for the script to run + url: http://192.168.1.12:32400 + token: this-is-a-placeholder-string + timeout: 60 + db_cache: 999 + clean_bundles: false + empty_trash: false + optimize: false +tmdb: # REQUIRED for the script to run + apikey: this-is-a-placeholder-string + language: en +tautulli: # Can be individually specified per library as well + url: http://192.168.1.12:8181 + apikey: this-is-a-placeholder-string +github: + token: this-is-a-placeholder-string +omdb: + apikey: this-is-a-placeholder-string + cache_expiration: 60 +mdblist: + apikey: this-is-a-placeholder-string + cache_expiration: 60 +notifiarr: + apikey: this-is-a-placeholder-string +anidb: # Not required for AniDB builders unless you want mature content + username: this-is-a-placeholder-string + password: this-is-a-placeholder-string +radarr: # Can be individually specified per library as well + url: http://192.168.1.12:7878 + token: this-is-a-placeholder-string + add_missing: false + add_existing: false + root_folder_path: S:/Movies + monitor: true + availability: announced + quality_profile: HD-1080p + tag: + search: false + radarr_path: + plex_path: +sonarr: # Can be individually specified per library as well + url: http://192.168.1.12:8989 + token: this-is-a-placeholder-string + add_missing: false + add_existing: false + root_folder_path: "S:/TV Shows" + monitor: all + quality_profile: HD-1080p + language_profile: English + series_type: standard + season_folder: true + tag: + search: false + cutoff_search: false + sonarr_path: + plex_path: +trakt: + client_id: this-is-a-placeholder-string + client_secret: this-is-a-placeholder-string + pin: + authorization: + # everything below is autofilled by the script + access_token: + token_type: + expires_in: + refresh_token: + scope: public + created_at: +mal: + client_id: this-is-a-placeholder-string + client_secret: this-is-a-placeholder-string + authorization: + # everything below is autofilled by the script + access_token: + token_type: + expires_in: + refresh_token: