· 4 years ago · Jul 04, 2021, 01:10 PM
1{'description': 'JSON-RPC API of XBMC', 'id': 'http://xbmc.org/jsonrpc/ServiceDescription.json', 'methods': {'Addons.GetAddonDetails': {'description': 'Gets the details of a specific addon', 'params': [{'name': 'addonid', 'required': True, 'type': 'string'}, {'$ref': 'Addon.Fields', 'name': 'properties'}], 'returns': {'properties': {'addon': {'$ref': 'Addon.Details', 'required': True}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Addons.GetAddons': {'description': 'Gets all available addons', 'params': [{'$ref': 'Addon.Types', 'default': 'unknown', 'name': 'type'}, {'$ref': 'Addon.Content', 'default': 'unknown', 'description': 'Content provided by the addon. Only considered for plugins and scripts.', 'name': 'content'}, {'default': 'all', 'name': 'enabled', 'type': [{'type': 'boolean'}, {'enums': ['all'], 'type': 'string'}]}, {'$ref': 'Addon.Fields', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'default': True, 'name': 'installed', 'type': [{'type': 'boolean'}, {'enums': ['all'], 'type': 'string'}]}], 'returns': {'properties': {'addons': {'items': {'$ref': 'Addon.Details'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Application.GetProperties': {'description': 'Retrieves the values of the given properties', 'params': [{'items': {'$ref': 'Application.Property.Name'}, 'name': 'properties', 'required': True, 'type': 'array', 'uniqueItems': True}], 'returns': {'$ref': 'Application.Property.Value'}, 'type': 'method'}, 'AudioLibrary.GetAlbumDetails': {'description': 'Retrieve details about a specific album', 'params': [{'$ref': 'Library.Id', 'name': 'albumid', 'required': True}, {'$ref': 'Audio.Fields.Album', 'name': 'properties'}], 'returns': {'properties': {'albumdetails': {'$ref': 'Audio.Details.Album'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetAlbums': {'description': 'Retrieve all albums from specified artist (and role) or that has songs of the specified genre', 'params': [{'$ref': 'Audio.Fields.Album', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'description': 'Song genre. Filter for existence of songs with this genre', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genre': {'description': 'Song genre. Filter for existence of songs with this genre', 'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}, 'roleid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}, 'role': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artist': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artist': {'minLength': 1, 'required': True, 'type': 'string'}, 'roleid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artist': {'minLength': 1, 'required': True, 'type': 'string'}, 'role': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'$ref': 'List.Filter.Albums'}]}, {'default': False, 'name': 'includesingles', 'type': 'boolean'}, {'default': False, 'description': 'Whether or not to include all roles when filtering by artist, rather than the default of excluding other contributions. When true it overrides any role filter value.', 'name': 'allroles', 'type': 'boolean'}], 'returns': {'properties': {'albums': {'items': {'$ref': 'Audio.Details.Album'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetArtistDetails': {'description': 'Retrieve details about a specific artist', 'params': [{'$ref': 'Library.Id', 'name': 'artistid', 'required': True}, {'$ref': 'Audio.Fields.Artist', 'name': 'properties'}], 'returns': {'properties': {'artistdetails': {'$ref': 'Audio.Details.Artist'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetArtists': {'description': 'Retrieve all artists. For backward compatibility by default this implicitly does not include those that only contribute other roles, however absolutely all artists can be returned using allroles=true', 'params': [{'$ref': 'Optional.Boolean', 'default': None, 'description': 'Whether or not to only include album artists rather than the artists of only individual songs as well. If the parameter is not passed or is passed as null the GUI setting will be used', 'name': 'albumartistsonly'}, {'$ref': 'Audio.Fields.Artist', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'description': 'Deprecated, use songgenreid. Filter for existence of songs with this genre', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'songgenreid': {'$ref': 'Library.Id', 'description': 'Song genreid. Filter for existence of songs with this genre', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'roleid': {'$ref': 'Library.Id', 'required': True}, 'songgenreid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'role': {'minLength': 1, 'required': True, 'type': 'string'}, 'songgenreid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genre': {'description': 'Deprecated, use songgenre. Filter for existence of songs with this genre', 'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'songgenre': {'description': 'Song genre. Filter for existence of songs with this genre', 'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'roleid': {'$ref': 'Library.Id', 'required': True}, 'songgenre': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'role': {'minLength': 1, 'required': True, 'type': 'string'}, 'songgenre': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'albumid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'album': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'songid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'roleid': {'$ref': 'Library.Id', 'required': True}, 'songid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'role': {'minLength': 1, 'required': True, 'type': 'string'}, 'songid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'roleid': {'$ref': 'Library.Id', 'description': 'Role contributed by artist. Overridden by allroles parameter', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'role': {'description': 'Role contributed by artist. Overridden by allroles parameter', 'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'$ref': 'List.Filter.Artists'}]}, {'default': False, 'description': 'Whether or not to include all artists irrespective of the role they contributed. When true it overrides any role filter value.', 'name': 'allroles', 'type': 'boolean'}], 'returns': {'properties': {'artists': {'items': {'$ref': 'Audio.Details.Artist'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetAvailableArt': {'description': 'Retrieve all potential art URLs for a media item by art type', 'params': [{'name': 'item', 'required': True, 'type': [{'additionalProperties': False, 'properties': {'albumid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}]}, {'default': '', 'name': 'arttype', 'type': 'string'}], 'returns': {'properties': {'availableart': {'items': {'properties': {'arttype': {'required': True, 'type': 'string'}, 'previewurl': {'default': '', 'description': 'URL to a preview thumbnail of the image', 'type': 'string'}, 'url': {'description': 'URL to the original image', 'required': True, 'type': 'string'}}, 'type': 'object'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetAvailableArtTypes': {'description': 'Retrieve a list of potential art types for a media item', 'params': [{'name': 'item', 'required': True, 'type': [{'additionalProperties': False, 'properties': {'albumid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}]}], 'returns': {'properties': {'availablearttypes': {'items': {'type': 'string'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetGenres': {'description': 'Retrieve all genres', 'params': [{'$ref': 'Library.Fields.Genre', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'genres': {'items': {'$ref': 'Library.Details.Genre'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetProperties': {'description': 'Retrieves the values of the music library properties', 'params': [{'items': {'$ref': 'Audio.Property.Name'}, 'name': 'properties', 'required': True, 'type': 'array', 'uniqueItems': True}], 'returns': {'$ref': 'Audio.Property.Value'}, 'type': 'method'}, 'AudioLibrary.GetRecentlyAddedAlbums': {'description': 'Retrieve recently added albums', 'params': [{'$ref': 'Audio.Fields.Album', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'albums': {'items': {'$ref': 'Audio.Details.Album'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetRecentlyAddedSongs': {'description': 'Retrieve recently added songs', 'params': [{'$ref': 'List.Amount', 'default': -1, 'description': 'The amount of recently added albums from which to return the songs', 'name': 'albumlimit'}, {'$ref': 'Audio.Fields.Song', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'songs': {'items': {'$ref': 'Audio.Details.Song'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetRecentlyPlayedAlbums': {'description': 'Retrieve recently played albums', 'params': [{'$ref': 'Audio.Fields.Album', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'albums': {'items': {'$ref': 'Audio.Details.Album'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetRecentlyPlayedSongs': {'description': 'Retrieve recently played songs', 'params': [{'$ref': 'Audio.Fields.Song', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'songs': {'items': {'$ref': 'Audio.Details.Song'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetRoles': {'description': 'Retrieve all contributor roles', 'params': [{'$ref': 'Audio.Fields.Role', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'roles': {'items': {'$ref': 'Audio.Details.Role'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetSongDetails': {'description': 'Retrieve details about a specific song', 'params': [{'$ref': 'Library.Id', 'name': 'songid', 'required': True}, {'$ref': 'Audio.Fields.Song', 'name': 'properties'}], 'returns': {'properties': {'songdetails': {'$ref': 'Audio.Details.Song'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetSongs': {'description': 'Retrieve all songs from specified album, artist or genre', 'params': [{'$ref': 'Audio.Fields.Song', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'description': 'Song genre. Filter for existence of songs with this genre', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genre': {'description': 'Song genre. Filter for existence of songs with this genre', 'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}, 'roleid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}, 'role': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artist': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artist': {'minLength': 1, 'required': True, 'type': 'string'}, 'roleid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artist': {'minLength': 1, 'required': True, 'type': 'string'}, 'role': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'albumid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'album': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'$ref': 'List.Filter.Songs'}]}, {'default': True, 'description': 'Only songs from albums are returned when false, but overridden when singlesonly parameter is true', 'name': 'includesingles', 'type': 'boolean'}, {'default': False, 'description': 'Whether or not to include all roles when filtering by artist, rather than default of excluding other contributors. When true it overrides any role filter value.', 'name': 'allroles', 'type': 'boolean'}, {'default': False, 'description': 'Only singles are returned when true, and overrides includesingles parameter', 'name': 'singlesonly', 'type': 'boolean'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'songs': {'items': {'$ref': 'Audio.Details.Song'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'AudioLibrary.GetSources': {'description': 'Get all music sources, including unique ID', 'params': [{'$ref': 'Library.Fields.Source', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'sources': {'items': {'$ref': 'Library.Details.Source'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'Favourites.GetFavourites': {'description': 'Retrieve all favourites', 'params': [{'default': None, 'name': 'type', 'type': [{'type': 'null'}, {'$ref': 'Favourite.Type'}]}, {'$ref': 'Favourite.Fields.Favourite', 'name': 'properties'}], 'returns': {'properties': {'favourites': {'items': {'$ref': 'Favourite.Details.Favourite'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Files.GetDirectory': {'description': 'Get the directories and files in the given directory', 'params': [{'name': 'directory', 'required': True, 'type': 'string'}, {'$ref': 'Files.Media', 'default': 'files', 'name': 'media'}, {'$ref': 'List.Fields.Files', 'name': 'properties'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'$ref': 'List.Limits', 'description': 'Limits are applied after getting the directory content thus retrieval is not faster when they are applied.', 'name': 'limits'}], 'returns': {'properties': {'files': {'items': {'$ref': 'List.Item.File'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Files.GetFileDetails': {'description': 'Get details for a specific file', 'params': [{'description': 'Full path to the file', 'name': 'file', 'required': True, 'type': 'string'}, {'$ref': 'Files.Media', 'default': 'files', 'name': 'media'}, {'$ref': 'List.Fields.Files', 'name': 'properties'}], 'returns': {'properties': {'filedetails': {'$ref': 'List.Item.File', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Files.GetSources': {'description': 'Get the sources of the media windows', 'params': [{'$ref': 'Files.Media', 'name': 'media', 'required': True}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'sources': {'$ref': 'List.Items.Sources', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Files.PrepareDownload': {'description': 'Provides a way to download a given file (e.g. providing an URL to the real file location)', 'params': [{'name': 'path', 'required': True, 'type': 'string'}], 'returns': {'properties': {'details': {'description': 'Transport specific details on how/from where to download the given file', 'required': True, 'type': 'any'}, 'mode': {'description': 'Direct mode allows using Files.Download whereas redirect mode requires the usage of a different protocol', 'enums': ['redirect', 'direct'], 'required': True, 'type': 'string'}, 'protocol': {'enums': ['http'], 'required': True, 'type': 'string'}}, 'type': 'object'}, 'type': 'method'}, 'GUI.GetProperties': {'description': 'Retrieves the values of the given properties', 'params': [{'items': {'$ref': 'GUI.Property.Name'}, 'name': 'properties', 'required': True, 'type': 'array', 'uniqueItems': True}], 'returns': {'$ref': 'GUI.Property.Value'}, 'type': 'method'}, 'GUI.GetStereoscopicModes': {'description': 'Returns the supported stereoscopic modes of the GUI', 'params': [], 'returns': {'properties': {'stereoscopicmodes': {'items': {'$ref': 'GUI.Stereoscopy.Mode'}, 'type': 'array', 'uniqueItems': True}}, 'type': 'object'}, 'type': 'method'}, 'JSONRPC.Introspect': {'description': 'Enumerates all actions and descriptions', 'params': [{'default': True, 'name': 'getdescriptions', 'type': 'boolean'}, {'default': False, 'name': 'getmetadata', 'type': 'boolean'}, {'default': True, 'name': 'filterbytransport', 'type': 'boolean'}, {'name': 'filter', 'properties': {'getreferences': {'default': True, 'description': 'Whether or not to print the schema for referenced types', 'type': 'boolean'}, 'id': {'description': 'Name of a namespace, method or type', 'required': True, 'type': 'string'}, 'type': {'description': 'Type of the given name', 'enums': ['method', 'namespace', 'type', 'notification'], 'required': True, 'type': 'string'}}, 'type': 'object'}], 'returns': {'additionalProperties': False, 'type': 'object'}, 'type': 'method'}, 'JSONRPC.NotifyAll': {'description': 'Notify all other connected clients', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'message', 'required': True, 'type': 'string'}, {'default': None, 'name': 'data', 'type': 'any'}], 'returns': {'type': 'any'}, 'type': 'method'}, 'JSONRPC.Permission': {'description': 'Retrieve the clients permissions', 'params': [], 'returns': {'properties': {'controlgui': {'required': True, 'type': 'boolean'}, 'controlnotify': {'required': True, 'type': 'boolean'}, 'controlplayback': {'required': True, 'type': 'boolean'}, 'controlpower': {'required': True, 'type': 'boolean'}, 'controlpvr': {'required': True, 'type': 'boolean'}, 'controlsystem': {'required': True, 'type': 'boolean'}, 'executeaddon': {'required': True, 'type': 'boolean'}, 'manageaddon': {'required': True, 'type': 'boolean'}, 'navigate': {'required': True, 'type': 'boolean'}, 'readdata': {'required': True, 'type': 'boolean'}, 'removedata': {'required': True, 'type': 'boolean'}, 'updatedata': {'required': True, 'type': 'boolean'}, 'writefile': {'required': True, 'type': 'boolean'}}, 'type': 'object'}, 'type': 'method'}, 'JSONRPC.Ping': {'description': 'Ping responder', 'params': [], 'returns': {'type': 'string'}, 'type': 'method'}, 'JSONRPC.Version': {'description': 'Retrieve the JSON-RPC protocol version.', 'params': [], 'returns': {'properties': {'version': {'properties': {'major': {'description': 'Bumped on backwards incompatible changes to the API definition', 'minimum': 0, 'required': True, 'type': 'integer'}, 'minor': {'description': 'Bumped on backwards compatible additions/changes to the API definition', 'minimum': 0, 'required': True, 'type': 'integer'}, 'patch': {'description': 'Bumped on any changes to the internal implementation but not to the API definition', 'minimum': 0, 'required': True, 'type': 'integer'}}, 'required': True, 'type': 'object'}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetBroadcastDetails': {'description': 'Retrieves the details of a specific broadcast', 'params': [{'$ref': 'Library.Id', 'name': 'broadcastid', 'required': True}, {'$ref': 'PVR.Fields.Broadcast', 'name': 'properties'}], 'returns': {'properties': {'broadcastdetails': {'$ref': 'PVR.Details.Broadcast'}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetBroadcastIsPlayable': {'description': 'Retrieves whether or not a broadcast is playable', 'params': [{'$ref': 'Library.Id', 'description': 'the id of the broadcast to to check for playability', 'name': 'broadcastid', 'required': True}], 'returns': {'type': 'boolean'}, 'type': 'method'}, 'PVR.GetBroadcasts': {'description': 'Retrieves the program of a specific channel', 'params': [{'$ref': 'Library.Id', 'name': 'channelid', 'required': True}, {'$ref': 'PVR.Fields.Broadcast', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}], 'returns': {'properties': {'broadcasts': {'items': {'$ref': 'PVR.Details.Broadcast'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetChannelDetails': {'description': 'Retrieves the details of a specific channel', 'params': [{'$ref': 'Library.Id', 'name': 'channelid', 'required': True}, {'$ref': 'PVR.Fields.Channel', 'name': 'properties'}], 'returns': {'properties': {'channeldetails': {'$ref': 'PVR.Details.Channel'}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetChannelGroupDetails': {'description': 'Retrieves the details of a specific channel group', 'params': [{'$ref': 'PVR.ChannelGroup.Id', 'name': 'channelgroupid', 'required': True}, {'name': 'channels', 'properties': {'limits': {'$ref': 'List.Limits'}, 'properties': {'$ref': 'PVR.Fields.Channel'}}, 'type': 'object'}], 'returns': {'properties': {'channelgroupdetails': {'$ref': 'PVR.Details.ChannelGroup.Extended'}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetChannelGroups': {'description': 'Retrieves the channel groups for the specified type', 'params': [{'$ref': 'PVR.Channel.Type', 'name': 'channeltype', 'required': True}, {'$ref': 'List.Limits', 'name': 'limits'}], 'returns': {'properties': {'channelgroups': {'items': {'$ref': 'PVR.Details.ChannelGroup'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetChannels': {'description': 'Retrieves the channel list', 'params': [{'$ref': 'PVR.ChannelGroup.Id', 'name': 'channelgroupid', 'required': True}, {'$ref': 'PVR.Fields.Channel', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'channels': {'items': {'$ref': 'PVR.Details.Channel'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetClients': {'description': 'Retrieves the enabled PVR clients and their capabilities', 'params': [{'$ref': 'List.Limits', 'name': 'limits'}], 'returns': {'properties': {'clients': {'items': {'$ref': 'PVR.Details.Client'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetProperties': {'description': 'Retrieves the values of the given properties', 'params': [{'items': {'$ref': 'PVR.Property.Name'}, 'name': 'properties', 'required': True, 'type': 'array', 'uniqueItems': True}], 'returns': {'$ref': 'PVR.Property.Value'}, 'type': 'method'}, 'PVR.GetRecordingDetails': {'description': 'Retrieves the details of a specific recording', 'params': [{'$ref': 'Library.Id', 'name': 'recordingid', 'required': True}, {'$ref': 'PVR.Fields.Recording', 'name': 'properties'}], 'returns': {'properties': {'recordingdetails': {'$ref': 'PVR.Details.Recording'}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetRecordings': {'description': 'Retrieves the recordings', 'params': [{'$ref': 'PVR.Fields.Recording', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'recordings': {'items': {'$ref': 'PVR.Details.Recording'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetTimerDetails': {'description': 'Retrieves the details of a specific timer', 'params': [{'$ref': 'Library.Id', 'name': 'timerid', 'required': True}, {'$ref': 'PVR.Fields.Timer', 'name': 'properties'}], 'returns': {'properties': {'timerdetails': {'$ref': 'PVR.Details.Timer'}}, 'type': 'object'}, 'type': 'method'}, 'PVR.GetTimers': {'description': 'Retrieves the timers', 'params': [{'$ref': 'PVR.Fields.Timer', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'timers': {'items': {'$ref': 'PVR.Details.Timer'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'Player.GetActivePlayers': {'description': 'Returns all active players', 'params': [], 'returns': {'items': {'properties': {'playerid': {'$ref': 'Player.Id', 'required': True}, 'playertype': {'enums': ['internal', 'external', 'remote'], 'required': True, 'type': 'string'}, 'type': {'$ref': 'Player.Type', 'required': True}}, 'type': 'object'}, 'type': 'array', 'uniqueItems': True}, 'type': 'method'}, 'Player.GetItem': {'description': 'Retrieves the currently played item', 'params': [{'$ref': 'Player.Id', 'name': 'playerid', 'required': True}, {'$ref': 'List.Fields.All', 'name': 'properties'}], 'returns': {'properties': {'item': {'$ref': 'List.Item.All', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Player.GetPlayers': {'description': 'Get a list of available players', 'params': [{'default': 'all', 'enums': ['all', 'video', 'audio'], 'name': 'media', 'type': 'string'}], 'returns': {'items': {'properties': {'name': {'$ref': 'Global.String.NotEmpty', 'required': True}, 'playsaudio': {'required': True, 'type': 'boolean'}, 'playsvideo': {'required': True, 'type': 'boolean'}, 'type': {'enums': ['internal', 'external', 'remote'], 'required': True, 'type': 'string'}}, 'type': 'object'}, 'type': 'array', 'uniqueItems': True}, 'type': 'method'}, 'Player.GetProperties': {'description': 'Retrieves the values of the given properties', 'params': [{'$ref': 'Player.Id', 'name': 'playerid', 'required': True}, {'items': {'$ref': 'Player.Property.Name'}, 'name': 'properties', 'required': True, 'type': 'array', 'uniqueItems': True}], 'returns': {'$ref': 'Player.Property.Value'}, 'type': 'method'}, 'Player.GetViewMode': {'description': 'Get view mode of video player', 'params': [], 'returns': {'properties': {'nonlinearstretch': {'required': True, 'type': 'boolean'}, 'pixelratio': {'required': True, 'type': 'number'}, 'verticalshift': {'required': True, 'type': 'number'}, 'viewmode': {'$ref': 'Player.ViewMode', 'required': True}, 'zoom': {'required': True, 'type': 'number'}}, 'type': 'object'}, 'type': 'method'}, 'Playlist.GetItems': {'description': 'Get all items from playlist', 'params': [{'$ref': 'Playlist.Id', 'name': 'playlistid', 'required': True}, {'$ref': 'List.Fields.All', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'items': {'items': {'$ref': 'List.Item.All'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Playlist.GetPlaylists': {'description': 'Returns all existing playlists', 'params': [], 'returns': {'items': {'properties': {'playlistid': {'$ref': 'Playlist.Id', 'required': True}, 'type': {'$ref': 'Playlist.Type', 'required': True}}, 'type': 'object'}, 'type': 'array', 'uniqueItems': True}, 'type': 'method'}, 'Playlist.GetProperties': {'description': 'Retrieves the values of the given properties', 'params': [{'$ref': 'Playlist.Id', 'name': 'playlistid', 'required': True}, {'items': {'$ref': 'Playlist.Property.Name'}, 'name': 'properties', 'required': True, 'type': 'array', 'uniqueItems': True}], 'returns': {'$ref': 'Playlist.Property.Value'}, 'type': 'method'}, 'Profiles.GetCurrentProfile': {'description': 'Retrieve the current profile', 'params': [{'$ref': 'Profiles.Fields.Profile', 'name': 'properties'}], 'returns': {'$ref': 'Profiles.Details.Profile'}, 'type': 'method'}, 'Profiles.GetProfiles': {'description': 'Retrieve all profiles', 'params': [{'$ref': 'Profiles.Fields.Profile', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'profiles': {'items': {'$ref': 'Profiles.Details.Profile'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'Settings.GetCategories': {'description': 'Retrieves all setting categories', 'params': [{'$ref': 'Setting.Level', 'default': 'standard', 'name': 'level'}, {'default': '', 'name': 'section', 'type': 'string'}, {'extends': 'Item.Fields.Base', 'items': {'enums': ['settings'], 'type': 'string'}, 'name': 'properties'}], 'returns': {'properties': {'categories': {'items': {'$ref': 'Setting.Details.Category'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'Settings.GetSections': {'description': 'Retrieves all setting sections', 'params': [{'$ref': 'Setting.Level', 'default': 'standard', 'name': 'level'}, {'extends': 'Item.Fields.Base', 'items': {'enums': ['categories'], 'type': 'string'}, 'name': 'properties'}], 'returns': {'properties': {'sections': {'items': {'$ref': 'Setting.Details.Section'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'Settings.GetSettingValue': {'description': 'Retrieves the value of a setting', 'params': [{'minLength': 1, 'name': 'setting', 'required': True, 'type': 'string'}], 'returns': {'properties': {'value': {'$ref': 'Setting.Value.Extended', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'Settings.GetSettings': {'description': 'Retrieves all settings', 'params': [{'$ref': 'Setting.Level', 'default': 'standard', 'name': 'level'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'category': {'minLength': 1, 'required': True, 'type': 'string'}, 'section': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}]}], 'returns': {'properties': {'settings': {'items': {'$ref': 'Setting.Details.Setting'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'Settings.ResetSettingValue': {'description': 'Resets the value of a setting', 'params': [{'minLength': 1, 'name': 'setting', 'required': True, 'type': 'string'}], 'returns': {'type': 'string'}, 'type': 'method'}, 'Settings.SetSettingValue': {'description': 'Changes the value of a setting', 'params': [{'minLength': 1, 'name': 'setting', 'required': True, 'type': 'string'}, {'$ref': 'Setting.Value.Extended', 'name': 'value', 'required': True}], 'returns': {'type': 'boolean'}, 'type': 'method'}, 'System.GetProperties': {'description': 'Retrieves the values of the given properties', 'params': [{'items': {'$ref': 'System.Property.Name'}, 'name': 'properties', 'required': True, 'type': 'array', 'uniqueItems': True}], 'returns': {'$ref': 'System.Property.Value'}, 'type': 'method'}, 'Textures.GetTextures': {'description': 'Retrieve all textures', 'params': [{'$ref': 'Textures.Fields.Texture', 'name': 'properties'}, {'$ref': 'List.Filter.Textures', 'name': 'filter'}], 'returns': {'properties': {'textures': {'items': {'$ref': 'Textures.Details.Texture'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetAvailableArt': {'description': 'Retrieve all potential art URLs for a media item by art type', 'params': [{'name': 'item', 'required': True, 'type': [{'additionalProperties': False, 'properties': {'episodeid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'tvshowid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'seasonid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'movieid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'setid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'musicvideoid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}]}, {'default': '', 'name': 'arttype', 'type': 'string'}], 'returns': {'properties': {'availableart': {'items': {'properties': {'arttype': {'required': True, 'type': 'string'}, 'previewurl': {'default': '', 'description': 'URL to a preview thumbnail of the image', 'type': 'string'}, 'url': {'description': 'URL to the original image', 'required': True, 'type': 'string'}}, 'type': 'object'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetAvailableArtTypes': {'description': 'Retrieve a list of potential art types for a media item', 'params': [{'name': 'item', 'required': True, 'type': [{'additionalProperties': False, 'properties': {'episodeid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'tvshowid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'seasonid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'movieid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'setid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'musicvideoid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}]}], 'returns': {'properties': {'availablearttypes': {'items': {'type': 'string'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetEpisodeDetails': {'description': 'Retrieve details about a specific tv show episode', 'params': [{'$ref': 'Library.Id', 'name': 'episodeid', 'required': True}, {'$ref': 'Video.Fields.Episode', 'name': 'properties'}], 'returns': {'properties': {'episodedetails': {'$ref': 'Video.Details.Episode'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetEpisodes': {'description': 'Retrieve all tv show episodes', 'params': [{'$ref': 'Library.Id', 'default': -1, 'name': 'tvshowid'}, {'default': -1, 'minimum': 0, 'name': 'season', 'type': 'integer'}, {'$ref': 'Video.Fields.Episode', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'description': 'Requires tvshowid to be set', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genre': {'description': 'Requires tvshowid to be set', 'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'year': {'minimum': 0, 'required': True, 'type': 'integer'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'actor': {'description': 'Requires tvshowid to be set', 'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'director': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'$ref': 'List.Filter.Episodes'}]}], 'returns': {'properties': {'episodes': {'items': {'$ref': 'Video.Details.Episode'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetGenres': {'description': 'Retrieve all genres', 'params': [{'enums': ['movie', 'tvshow', 'musicvideo'], 'name': 'type', 'required': True, 'type': 'string'}, {'$ref': 'Library.Fields.Genre', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'genres': {'items': {'$ref': 'Library.Details.Genre'}, 'required': True, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetInProgressTVShows': {'description': 'Retrieve all in progress tvshows', 'params': [{'$ref': 'Video.Fields.TVShow', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'tvshows': {'items': {'$ref': 'Video.Details.TVShow'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetMovieDetails': {'description': 'Retrieve details about a specific movie', 'params': [{'$ref': 'Library.Id', 'name': 'movieid', 'required': True}, {'$ref': 'Video.Fields.Movie', 'name': 'properties'}], 'returns': {'properties': {'moviedetails': {'$ref': 'Video.Details.Movie'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetMovieSetDetails': {'description': 'Retrieve details about a specific movie set', 'params': [{'$ref': 'Library.Id', 'name': 'setid', 'required': True}, {'$ref': 'Video.Fields.MovieSet', 'name': 'properties'}, {'name': 'movies', 'properties': {'limits': {'$ref': 'List.Limits'}, 'properties': {'$ref': 'Video.Fields.Movie'}, 'sort': {'$ref': 'List.Sort'}}, 'type': 'object'}], 'returns': {'properties': {'setdetails': {'$ref': 'Video.Details.MovieSet.Extended'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetMovieSets': {'description': 'Retrieve all movie sets', 'params': [{'$ref': 'Video.Fields.MovieSet', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'sets': {'items': {'$ref': 'Video.Details.MovieSet'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetMovies': {'description': 'Retrieve all movies', 'params': [{'$ref': 'Video.Fields.Movie', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genre': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'year': {'minimum': 0, 'required': True, 'type': 'integer'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'actor': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'director': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'studio': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'country': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'setid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'set': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'tag': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'$ref': 'List.Filter.Movies'}]}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'movies': {'items': {'$ref': 'Video.Details.Movie'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetMusicVideoDetails': {'description': 'Retrieve details about a specific music video', 'params': [{'$ref': 'Library.Id', 'name': 'musicvideoid', 'required': True}, {'$ref': 'Video.Fields.MusicVideo', 'name': 'properties'}], 'returns': {'properties': {'musicvideodetails': {'$ref': 'Video.Details.MusicVideo'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetMusicVideos': {'description': 'Retrieve all music videos', 'params': [{'$ref': 'Video.Fields.MusicVideo', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'artist': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genre': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'year': {'minimum': 0, 'required': True, 'type': 'integer'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'director': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'studio': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'tag': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'$ref': 'List.Filter.MusicVideos'}]}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'musicvideos': {'items': {'$ref': 'Video.Details.MusicVideo'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetRecentlyAddedEpisodes': {'description': 'Retrieve all recently added tv episodes', 'params': [{'$ref': 'Video.Fields.Episode', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'episodes': {'items': {'$ref': 'Video.Details.Episode'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetRecentlyAddedMovies': {'description': 'Retrieve all recently added movies', 'params': [{'$ref': 'Video.Fields.Movie', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'movies': {'items': {'$ref': 'Video.Details.Movie'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetRecentlyAddedMusicVideos': {'description': 'Retrieve all recently added music videos', 'params': [{'$ref': 'Video.Fields.MusicVideo', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'musicvideos': {'items': {'$ref': 'Video.Details.MusicVideo'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetSeasonDetails': {'description': 'Retrieve details about a specific tv show season', 'params': [{'$ref': 'Library.Id', 'name': 'seasonid', 'required': True}, {'$ref': 'Video.Fields.Season', 'name': 'properties'}], 'returns': {'properties': {'seasondetails': {'$ref': 'Video.Details.Season'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetSeasons': {'description': 'Retrieve all tv seasons', 'params': [{'$ref': 'Library.Id', 'default': -1, 'name': 'tvshowid'}, {'$ref': 'Video.Fields.Season', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'seasons': {'items': {'$ref': 'Video.Details.Season'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetTVShowDetails': {'description': 'Retrieve details about a specific tv show', 'params': [{'$ref': 'Library.Id', 'name': 'tvshowid', 'required': True}, {'$ref': 'Video.Fields.TVShow', 'name': 'properties'}], 'returns': {'properties': {'tvshowdetails': {'$ref': 'Video.Details.TVShow'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetTVShows': {'description': 'Retrieve all tv shows', 'params': [{'$ref': 'Video.Fields.TVShow', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}, {'name': 'filter', 'type': [{'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genre': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'year': {'minimum': 0, 'required': True, 'type': 'integer'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'actor': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'studio': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'tag': {'minLength': 1, 'required': True, 'type': 'string'}}, 'type': 'object'}, {'$ref': 'List.Filter.TVShows'}]}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'tvshows': {'items': {'$ref': 'Video.Details.TVShow'}, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'VideoLibrary.GetTags': {'description': 'Retrieve all tags', 'params': [{'enums': ['movie', 'tvshow', 'musicvideo'], 'name': 'type', 'required': True, 'type': 'string'}, {'$ref': 'Library.Fields.Tag', 'name': 'properties'}, {'$ref': 'List.Limits', 'name': 'limits'}, {'$ref': 'List.Sort', 'name': 'sort'}], 'returns': {'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'tags': {'items': {'$ref': 'Library.Details.Tag'}, 'required': True, 'type': 'array'}}, 'type': 'object'}, 'type': 'method'}, 'XBMC.GetInfoBooleans': {'description': 'Retrieve info booleans about Kodi and the system', 'params': [{'items': {'type': 'string'}, 'minItems': 1, 'name': 'booleans', 'required': True, 'type': 'array'}], 'returns': {'additionalProperties': {'default': '', 'type': 'string'}, 'description': 'Object containing key-value pairs of the retrieved info booleans', 'type': 'object'}, 'type': 'method'}, 'XBMC.GetInfoLabels': {'description': 'Retrieve info labels about Kodi and the system', 'params': [{'description': 'See http://kodi.wiki/view/InfoLabels for a list of possible info labels', 'items': {'type': 'string'}, 'minItems': 1, 'name': 'labels', 'required': True, 'type': 'array'}], 'returns': {'additionalProperties': {'default': '', 'type': 'string'}, 'description': 'Object containing key-value pairs of the retrieved info labels', 'type': 'object'}, 'type': 'method'}}, 'notifications': {'Application.OnVolumeChanged': {'description': 'The volume of the application has changed.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'muted': {'required': True, 'type': 'boolean'}, 'volume': {'maximum': 100, 'minimum': 0, 'required': True, 'type': 'integer'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'AudioLibrary.OnCleanFinished': {'description': 'The audio library has been cleaned.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'AudioLibrary.OnCleanStarted': {'description': 'An audio library clean operation has started.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'AudioLibrary.OnExport': {'description': 'An audio library export has finished.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'failcount': {'default': 0, 'minimum': 0, 'required': False, 'type': 'integer'}, 'file': {'default': '', 'required': False, 'type': 'string'}}, 'required': False, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'AudioLibrary.OnRemove': {'description': 'An audio item has been removed.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'id': {'$ref': 'Library.Id', 'required': True}, 'transaction': {'$ref': 'Optional.Boolean', 'description': 'True if the removal is being performed within a transaction.'}, 'type': {'$ref': 'Notifications.Library.Audio.Type', 'required': True}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'AudioLibrary.OnScanFinished': {'description': 'Scanning the audio library has been finished.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'AudioLibrary.OnScanStarted': {'description': 'An audio library scan has started.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'AudioLibrary.OnUpdate': {'description': 'An audio item has been updated.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'added': {'$ref': 'Optional.Boolean', 'description': 'True if the update is for a newly added item.'}, 'id': {'$ref': 'Library.Id', 'required': True}, 'transaction': {'$ref': 'Optional.Boolean', 'description': 'True if the update is being performed within a transaction.'}, 'type': {'enum': ['song'], 'id': 'Notifications.Library.Audio.Type', 'required': True, 'type': 'string'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'GUI.OnDPMSActivated': {'description': 'Energy saving/DPMS has been activated.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'GUI.OnDPMSDeactivated': {'description': 'Energy saving/DPMS has been deactivated.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'GUI.OnScreensaverActivated': {'description': 'The screensaver has been activated.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'GUI.OnScreensaverDeactivated': {'description': 'The screensaver has been deactivated.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'shuttingdown': {'required': True, 'type': 'boolean'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'Input.OnInputFinished': {'description': 'The user has provided the requested input.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'Input.OnInputRequested': {'description': 'The user is requested to provide some information.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'title': {'type': 'string'}, 'type': {'enum': ['keyboard', 'time', 'date', 'ip', 'password', 'numericpassword', 'number', 'seconds'], 'required': True, 'type': 'string'}, 'value': {'required': True, 'type': 'string'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'Player.OnAVChange': {'description': 'Audio- or videostream has changed. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'$ref': 'Player.Notifications.Data', 'name': 'data', 'required': True}], 'returns': None, 'type': 'notification'}, 'Player.OnAVStart': {'description': 'Playback of a media item has been started and first frame is available. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'$ref': 'Player.Notifications.Data', 'name': 'data', 'required': True}], 'returns': None, 'type': 'notification'}, 'Player.OnPause': {'description': 'Playback of a media item has been paused. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'$ref': 'Player.Notifications.Data', 'name': 'data', 'required': True}], 'returns': None, 'type': 'notification'}, 'Player.OnPlay': {'description': 'Playback of a media item has been started or the playback speed has changed. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'$ref': 'Player.Notifications.Data', 'name': 'data', 'required': True}], 'returns': None, 'type': 'notification'}, 'Player.OnPropertyChanged': {'description': 'A property of the playing items has changed.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'player': {'$ref': 'Player.Notifications.Player', 'required': True}, 'property': {'$ref': 'Player.Property.Value'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'Player.OnResume': {'description': 'Playback of a media item has been resumed. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'$ref': 'Player.Notifications.Data', 'name': 'data', 'required': True}], 'returns': None, 'type': 'notification'}, 'Player.OnSeek': {'description': 'The playback position has been changed. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'item': {'$ref': 'Notifications.Item'}, 'player': {'$ref': 'Player.Notifications.Player.Seek', 'required': True}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'Player.OnSpeedChanged': {'description': 'Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'$ref': 'Player.Notifications.Data', 'name': 'data', 'required': True}], 'returns': None, 'type': 'notification'}, 'Player.OnStop': {'description': 'Playback of a media item has been stopped. If there is no ID available extra information will be provided.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'end': {'description': 'Whether the player has reached the end of the playable item(s) or not', 'required': True, 'type': 'boolean'}, 'item': {'$ref': 'Notifications.Item'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'Playlist.OnAdd': {'description': 'A playlist item has been added.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'item': {'$ref': 'Notifications.Item'}, 'playlistid': {'$ref': 'Playlist.Id', 'required': True}, 'position': {'$ref': 'Playlist.Position'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'Playlist.OnClear': {'description': 'A playlist item has been cleared.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'playlistid': {'$ref': 'Playlist.Id', 'required': True}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'Playlist.OnRemove': {'description': 'A playlist item has been removed.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'playlistid': {'$ref': 'Playlist.Id', 'required': True}, 'position': {'$ref': 'Playlist.Position'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'System.OnLowBattery': {'description': 'The system is on low battery.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'System.OnQuit': {'description': 'Kodi will be closed.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'exitcode': {'minimum': 0, 'required': True, 'type': 'integer'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'System.OnRestart': {'description': 'The system will be restarted.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'System.OnSleep': {'description': 'The system will be suspended.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'System.OnWake': {'description': 'The system woke up from suspension.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnCleanFinished': {'description': 'The video library has been cleaned.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnCleanStarted': {'description': 'A video library clean operation has started.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnExport': {'description': 'A video library export has finished.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'failcount': {'default': 0, 'minimum': 0, 'required': False, 'type': 'integer'}, 'file': {'default': '', 'required': False, 'type': 'string'}, 'root': {'default': '', 'required': False, 'type': 'string'}}, 'required': False, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnRefresh': {'description': 'The video library has been refreshed and a home screen reload might be necessary.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnRemove': {'description': 'A video item has been removed.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'id': {'$ref': 'Library.Id', 'required': True}, 'transaction': {'$ref': 'Optional.Boolean', 'description': 'True if the removal is being performed within a transaction.'}, 'type': {'$ref': 'Notifications.Library.Video.Type', 'required': True}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnScanFinished': {'description': 'Scanning the video library has been finished.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnScanStarted': {'description': 'A video library scan has started.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'required': True, 'type': 'null'}], 'returns': None, 'type': 'notification'}, 'VideoLibrary.OnUpdate': {'description': 'A video item has been updated.', 'params': [{'name': 'sender', 'required': True, 'type': 'string'}, {'name': 'data', 'properties': {'added': {'$ref': 'Optional.Boolean', 'description': 'True if the update is for a newly added item.'}, 'id': {'$ref': 'Library.Id', 'required': True}, 'playcount': {'default': -1, 'minimum': 0, 'type': 'integer'}, 'transaction': {'$ref': 'Optional.Boolean', 'description': 'True if the update is being performed within a transaction.'}, 'type': {'enum': ['movie', 'tvshow', 'episode', 'musicvideo'], 'id': 'Notifications.Library.Video.Type', 'required': True, 'type': 'string'}}, 'required': True, 'type': 'object'}], 'returns': None, 'type': 'notification'}}, 'types': {'Addon.Content': {'default': 'unknown', 'enums': ['unknown', 'video', 'audio', 'image', 'executable'], 'id': 'Addon.Content', 'type': 'string'}, 'Addon.Details': {'extends': 'Item.Details.Base', 'id': 'Addon.Details', 'properties': {'addonid': {'required': True, 'type': 'string'}, 'author': {'default': '', 'type': 'string'}, 'broken': {'default': None, 'type': [{'type': 'boolean'}, {'type': 'string'}]}, 'dependencies': {'items': {'properties': {'addonid': {'required': True, 'type': 'string'}, 'optional': {'required': True, 'type': 'boolean'}, 'version': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'type': 'array'}, 'deprecated': {'default': None, 'type': [{'type': 'boolean'}, {'type': 'string'}]}, 'description': {'default': '', 'type': 'string'}, 'disclaimer': {'default': '', 'type': 'string'}, 'enabled': {'default': False, 'type': 'boolean'}, 'extrainfo': {'items': {'properties': {'key': {'required': True, 'type': 'string'}, 'value': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'type': 'array'}, 'fanart': {'default': '', 'type': 'string'}, 'installed': {'default': False, 'type': 'boolean'}, 'name': {'default': '', 'type': 'string'}, 'path': {'default': '', 'type': 'string'}, 'rating': {'default': 0, 'type': 'integer'}, 'summary': {'default': '', 'type': 'string'}, 'thumbnail': {'default': '', 'type': 'string'}, 'type': {'$ref': 'Addon.Types', 'required': True}, 'version': {'default': '', 'type': 'string'}}}, 'Addon.Fields': {'extends': 'Item.Fields.Base', 'id': 'Addon.Fields', 'items': {'enums': ['name', 'version', 'summary', 'description', 'path', 'author', 'thumbnail', 'disclaimer', 'fanart', 'dependencies', 'broken', 'extrainfo', 'rating', 'enabled', 'installed', 'deprecated'], 'type': 'string'}}, 'Addon.Types': {'default': 'unknown', 'enums': ['unknown', 'xbmc.player.musicviz', 'xbmc.gui.skin', 'kodi.pvrclient', 'kodi.inputstream', 'kodi.gameclient', 'kodi.peripheral', 'xbmc.python.script', 'xbmc.python.weather', 'xbmc.subtitle.module', 'xbmc.python.lyrics', 'xbmc.metadata.scraper.albums', 'xbmc.metadata.scraper.artists', 'xbmc.metadata.scraper.movies', 'xbmc.metadata.scraper.musicvideos', 'xbmc.metadata.scraper.tvshows', 'xbmc.ui.screensaver', 'xbmc.python.pluginsource', 'xbmc.addon.repository', 'xbmc.webinterface', 'xbmc.service', 'kodi.audioencoder', 'kodi.context.item', 'kodi.audiodecoder', 'kodi.resource.images', 'kodi.resource.language', 'kodi.resource.uisounds', 'kodi.resource.games', 'kodi.resource.font', 'kodi.vfs', 'kodi.imagedecoder', 'xbmc.metadata.scraper.library', 'xbmc.python.library', 'xbmc.python.module', 'kodi.game.controller', '', 'xbmc.addon.video', 'xbmc.addon.audio', 'xbmc.addon.image', 'xbmc.addon.executable', 'kodi.addon.game'], 'id': 'Addon.Types', 'type': 'string'}, 'Application.Property.Name': {'default': 'volume', 'enums': ['volume', 'muted', 'name', 'version', 'sorttokens', 'language'], 'id': 'Application.Property.Name', 'type': 'string'}, 'Application.Property.Value': {'id': 'Application.Property.Value', 'properties': {'language': {'default': '', 'description': 'Current language code and region e.g. en_GB', 'minLength': 1, 'type': 'string'}, 'muted': {'default': False, 'type': 'boolean'}, 'name': {'default': '', 'minLength': 1, 'type': 'string'}, 'sorttokens': {'$ref': 'Array.String', 'description': 'Articles ignored during sorting when ignorearticle is enabled.'}, 'version': {'properties': {'major': {'minimum': 0, 'required': True, 'type': 'integer'}, 'minor': {'minimum': 0, 'required': True, 'type': 'integer'}, 'revision': {'default': None, 'type': [{'type': 'string'}, {'type': 'integer'}]}, 'tag': {'enums': ['prealpha', 'alpha', 'beta', 'releasecandidate', 'stable'], 'required': True, 'type': 'string'}, 'tagversion': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'volume': {'default': 0, 'maximum': 100, 'minimum': 0, 'type': 'integer'}}, 'type': 'object'}, 'Array.Integer': {'id': 'Array.Integer', 'items': {'type': 'integer'}, 'type': 'array'}, 'Array.String': {'id': 'Array.String', 'items': {'minLength': 1, 'type': 'string'}, 'type': 'array'}, 'Audio.Album.ReleaseType': {'default': 'album', 'enums': ['album', 'single'], 'id': 'Audio.Album.ReleaseType', 'type': 'string'}, 'Audio.Artist.Roles': {'id': 'Audio.Artist.Roles', 'items': {'additionalProperties': False, 'description': 'The various roles contributed by an artist to one or more songs', 'properties': {'role': {'required': True, 'type': 'string'}, 'roleid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, 'type': 'array'}, 'Audio.Contributors': {'id': 'Audio.Contributors', 'items': {'additionalProperties': False, 'description': 'The artist and the role they contribute to a song', 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}, 'name': {'required': True, 'type': 'string'}, 'role': {'required': True, 'type': 'string'}, 'roleid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, 'type': 'array'}, 'Audio.Details.Album': {'extends': 'Audio.Details.Media', 'id': 'Audio.Details.Album', 'properties': {'albumduration': {'default': 0, 'type': 'integer'}, 'albumid': {'$ref': 'Library.Id', 'required': True}, 'albumlabel': {'default': '', 'type': 'string'}, 'albumstatus': {'default': '', 'type': 'string'}, 'compilation': {'default': False, 'type': 'boolean'}, 'description': {'default': '', 'type': 'string'}, 'isboxset': {'default': False, 'type': 'boolean'}, 'lastplayed': {'default': '', 'type': 'string'}, 'mood': {'$ref': 'Array.String'}, 'musicbrainzalbumid': {'default': '', 'type': 'string'}, 'musicbrainzreleasegroupid': {'default': '', 'type': 'string'}, 'playcount': {'default': 0, 'type': 'integer'}, 'releasetype': {'$ref': 'Audio.Album.ReleaseType', 'default': 'album'}, 'songgenres': {'$ref': 'Audio.Details.Genres'}, 'sourceid': {'$ref': 'Array.Integer'}, 'style': {'$ref': 'Array.String'}, 'theme': {'$ref': 'Array.String'}, 'totaldiscs': {'default': 0, 'type': 'integer'}, 'type': {'default': '', 'type': 'string'}}}, 'Audio.Details.Artist': {'extends': 'Audio.Details.Base', 'id': 'Audio.Details.Artist', 'properties': {'artist': {'required': True, 'type': 'string'}, 'artistid': {'$ref': 'Library.Id', 'required': True}, 'born': {'default': '', 'type': 'string'}, 'compilationartist': {'default': False, 'type': 'boolean'}, 'description': {'default': '', 'type': 'string'}, 'died': {'default': '', 'type': 'string'}, 'disambiguation': {'default': '', 'type': 'string'}, 'disbanded': {'default': '', 'type': 'string'}, 'formed': {'default': '', 'type': 'string'}, 'gender': {'default': '', 'type': 'string'}, 'instrument': {'$ref': 'Array.String'}, 'isalbumartist': {'default': False, 'type': 'boolean'}, 'mood': {'$ref': 'Array.String'}, 'musicbrainzartistid': {'$ref': 'Array.String'}, 'roles': {'$ref': 'Audio.Artist.Roles'}, 'songgenres': {'$ref': 'Audio.Details.Genres'}, 'sortname': {'default': '', 'type': 'string'}, 'sourceid': {'$ref': 'Array.Integer'}, 'style': {'$ref': 'Array.String'}, 'type': {'default': '', 'type': 'string'}, 'yearsactive': {'$ref': 'Array.String'}}}, 'Audio.Details.Base': {'extends': 'Media.Details.Base', 'id': 'Audio.Details.Base', 'properties': {'art': {'$ref': 'Media.Artwork'}, 'dateadded': {'default': '', 'type': 'string'}, 'genre': {'$ref': 'Array.String'}}}, 'Audio.Details.Genres': {'id': 'Audio.Details.Genres', 'items': {'properties': {'genreid': {'$ref': 'Library.Id', 'required': True}, 'title': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'type': 'array'}, 'Audio.Details.Media': {'extends': 'Audio.Details.Base', 'id': 'Audio.Details.Media', 'properties': {'artist': {'$ref': 'Array.String'}, 'artistid': {'$ref': 'Array.Integer'}, 'displayartist': {'default': '', 'type': 'string'}, 'musicbrainzalbumartistid': {'$ref': 'Array.String'}, 'originaldate': {'default': '', 'type': 'string'}, 'rating': {'default': 0.0, 'type': 'number'}, 'releasedate': {'default': '', 'type': 'string'}, 'sortartist': {'default': '', 'type': 'string'}, 'title': {'default': '', 'type': 'string'}, 'userrating': {'default': 0, 'type': 'integer'}, 'votes': {'default': 0, 'type': 'integer'}, 'year': {'default': 0, 'type': 'integer'}}}, 'Audio.Details.Role': {'extends': 'Item.Details.Base', 'id': 'Audio.Details.Role', 'properties': {'roleid': {'$ref': 'Library.Id', 'required': True}, 'title': {'default': '', 'type': 'string'}}}, 'Audio.Details.Song': {'extends': 'Audio.Details.Media', 'id': 'Audio.Details.Song', 'properties': {'album': {'default': '', 'type': 'string'}, 'albumartist': {'$ref': 'Array.String'}, 'albumartistid': {'$ref': 'Array.Integer'}, 'albumid': {'$ref': 'Library.Id', 'default': -1}, 'albumreleasetype': {'$ref': 'Audio.Album.ReleaseType', 'default': 'album'}, 'bitrate': {'default': None, 'type': 'any'}, 'bpm': {'default': None, 'type': 'any'}, 'channels': {'default': None, 'type': 'any'}, 'comment': {'default': '', 'type': 'string'}, 'contributors': {'$ref': 'Audio.Contributors'}, 'disc': {'default': 0, 'type': 'integer'}, 'disctitle': {'default': '', 'type': 'string'}, 'displaycomposer': {'default': '', 'type': 'string'}, 'displayconductor': {'default': '', 'type': 'string'}, 'displaylyricist': {'default': '', 'type': 'string'}, 'displayorchestra': {'default': '', 'type': 'string'}, 'duration': {'default': 0, 'type': 'integer'}, 'file': {'default': '', 'type': 'string'}, 'genreid': {'$ref': 'Array.Integer'}, 'lastplayed': {'default': '', 'type': 'string'}, 'lyrics': {'default': '', 'type': 'string'}, 'mood': {'default': '', 'type': 'string'}, 'musicbrainzartistid': {'$ref': 'Array.String'}, 'musicbrainztrackid': {'default': '', 'type': 'string'}, 'playcount': {'default': 0, 'type': 'integer'}, 'samplerate': {'default': None, 'type': 'any'}, 'songid': {'$ref': 'Library.Id', 'required': True}, 'sourceid': {'$ref': 'Array.Integer'}, 'track': {'default': 0, 'type': 'integer'}}}, 'Audio.Fields.Album': {'extends': 'Item.Fields.Base', 'id': 'Audio.Fields.Album', 'items': {'description': 'Requesting the songgenres, artistid and/or sourceid fields will result in increased response times', 'enums': ['title', 'description', 'artist', 'genre', 'theme', 'mood', 'style', 'type', 'albumlabel', 'rating', 'votes', 'userrating', 'year', 'musicbrainzalbumid', 'musicbrainzalbumartistid', 'fanart', 'thumbnail', 'playcount', 'artistid', 'displayartist', 'compilation', 'releasetype', 'dateadded', 'sortartist', 'musicbrainzreleasegroupid', 'songgenres', 'art', 'lastplayed', 'sourceid', 'isboxset', 'totaldiscs', 'releasedate', 'originaldate', 'albumstatus', 'datemodified', 'datenew', 'albumduration'], 'type': 'string'}}, 'Audio.Fields.Artist': {'extends': 'Item.Fields.Base', 'id': 'Audio.Fields.Artist', 'items': {'description': 'Requesting the (song)genreid/genre, roleid/role or sourceid fields will result in increased response times', 'enums': ['instrument', 'style', 'mood', 'born', 'formed', 'description', 'genre', 'died', 'disbanded', 'yearsactive', 'musicbrainzartistid', 'fanart', 'thumbnail', 'compilationartist', 'dateadded', 'roles', 'songgenres', 'isalbumartist', 'sortname', 'type', 'gender', 'disambiguation', 'art', 'sourceid', 'datemodified', 'datenew'], 'type': 'string'}}, 'Audio.Fields.Role': {'extends': 'Item.Fields.Base', 'id': 'Audio.Fields.Role', 'items': {'enums': ['title'], 'type': 'string'}}, 'Audio.Fields.Song': {'extends': 'Item.Fields.Base', 'id': 'Audio.Fields.Song', 'items': {'description': 'Requesting the genreid, artistid, albumartistid and/or sourceid fields will result in increased response times', 'enums': ['title', 'artist', 'albumartist', 'genre', 'year', 'rating', 'album', 'track', 'duration', 'comment', 'lyrics', 'musicbrainztrackid', 'musicbrainzartistid', 'musicbrainzalbumid', 'musicbrainzalbumartistid', 'playcount', 'fanart', 'thumbnail', 'file', 'albumid', 'lastplayed', 'disc', 'genreid', 'artistid', 'displayartist', 'albumartistid', 'albumreleasetype', 'dateadded', 'votes', 'userrating', 'mood', 'contributors', 'displaycomposer', 'displayconductor', 'displayorchestra', 'displaylyricist', 'sortartist', 'art', 'sourceid', 'disctitle', 'releasedate', 'originaldate', 'bpm', 'samplerate', 'bitrate', 'channels', 'datemodified', 'datenew'], 'type': 'string'}}, 'Audio.Property.Name': {'default': 'missingartistid', 'enums': ['missingartistid', 'librarylastupdated', 'librarylastcleaned', 'artistlinksupdated', 'songslastadded', 'albumslastadded', 'artistslastadded', 'genreslastadded', 'songsmodified', 'albumsmodified', 'artistsmodified'], 'id': 'Audio.Property.Name', 'type': 'string'}, 'Audio.Property.Value': {'id': 'Audio.Property.Value', 'properties': {'albumslastadded': {'default': '', 'type': 'string'}, 'albumsmodified': {'default': '', 'type': 'string'}, 'artistlinksupdated': {'default': '', 'type': 'string'}, 'artistslastadded': {'default': '', 'type': 'string'}, 'artistsmodified': {'default': '', 'type': 'string'}, 'genreslastadded': {'default': '', 'type': 'string'}, 'librarylastcleaned': {'default': '', 'type': 'string'}, 'librarylastupdated': {'default': '', 'type': 'string'}, 'missingartistid': {'$ref': 'Library.Id', 'default': -1}, 'songslastadded': {'default': '', 'type': 'string'}, 'songsmodified': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'Configuration': {'id': 'Configuration', 'properties': {'notifications': {'$ref': 'Configuration.Notifications', 'required': True}}, 'required': True, 'type': 'object'}, 'Configuration.Notifications': {'additionalProperties': False, 'id': 'Configuration.Notifications', 'properties': {'application': {'required': True, 'type': 'boolean'}, 'audiolibrary': {'required': True, 'type': 'boolean'}, 'gui': {'required': True, 'type': 'boolean'}, 'input': {'required': True, 'type': 'boolean'}, 'other': {'required': True, 'type': 'boolean'}, 'player': {'required': True, 'type': 'boolean'}, 'playlist': {'required': True, 'type': 'boolean'}, 'pvr': {'required': True, 'type': 'boolean'}, 'system': {'required': True, 'type': 'boolean'}, 'videolibrary': {'required': True, 'type': 'boolean'}}, 'type': 'object'}, 'Favourite.Details.Favourite': {'additionalProperties': False, 'id': 'Favourite.Details.Favourite', 'properties': {'path': {'default': '', 'type': 'string'}, 'thumbnail': {'default': '', 'type': 'string'}, 'title': {'required': True, 'type': 'string'}, 'type': {'$ref': 'Favourite.Type', 'required': True}, 'window': {'default': '', 'type': 'string'}, 'windowparameter': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'Favourite.Fields.Favourite': {'extends': 'Item.Fields.Base', 'id': 'Favourite.Fields.Favourite', 'items': {'enums': ['window', 'windowparameter', 'thumbnail', 'path'], 'type': 'string'}}, 'Favourite.Type': {'default': 'media', 'enums': ['media', 'window', 'script', 'androidapp', 'unknown'], 'id': 'Favourite.Type', 'type': 'string'}, 'Files.Media': {'default': 'video', 'enums': ['video', 'music', 'pictures', 'files', 'programs'], 'id': 'Files.Media', 'type': 'string'}, 'GUI.Property.Name': {'default': 'currentwindow', 'enums': ['currentwindow', 'currentcontrol', 'skin', 'fullscreen', 'stereoscopicmode'], 'id': 'GUI.Property.Name', 'type': 'string'}, 'GUI.Property.Value': {'id': 'GUI.Property.Value', 'properties': {'currentcontrol': {'properties': {'label': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'currentwindow': {'properties': {'id': {'required': True, 'type': 'integer'}, 'label': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'fullscreen': {'default': False, 'type': 'boolean'}, 'skin': {'properties': {'id': {'minLength': 1, 'required': True, 'type': 'string'}, 'name': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'stereoscopicmode': {'$ref': 'GUI.Stereoscopy.Mode'}}, 'type': 'object'}, 'GUI.Stereoscopy.Mode': {'id': 'GUI.Stereoscopy.Mode', 'properties': {'label': {'required': True, 'type': 'string'}, 'mode': {'enums': ['off', 'split_vertical', 'split_horizontal', 'row_interleaved', 'hardware_based', 'anaglyph_cyan_red', 'anaglyph_green_magenta', 'anaglyph_yellow_blue', 'monoscopic'], 'required': True, 'type': 'string'}}, 'type': 'object'}, 'GUI.Window': {'default': 'addon', 'enums': ['addon', 'addonbrowser', 'addoninformation', 'addonsettings', 'appearancesettings', 'busydialog', 'busydialognocancel', 'contentsettings', 'contextmenu', 'eventlog', 'extendedprogressdialog', 'favourites', 'filebrowser', 'filemanager', 'fullscreengame', 'fullscreeninfo', 'fullscreenlivetv', 'fullscreenlivetvinput', 'fullscreenlivetvpreview', 'fullscreenradio', 'fullscreenradioinput', 'fullscreenradiopreview', 'fullscreenvideo', 'gameadvancedsettings', 'gamecontrollers', 'gameosd', 'gamepadinput', 'games', 'gamesettings', 'gamestretchmode', 'gamevideofilter', 'gamevideorotation', 'gamevolume', 'home', 'infoprovidersettings', 'interfacesettings', 'libexportsettings', 'locksettings', 'loginscreen', 'mediafilter', 'mediasettings', 'mediasource', 'movieinformation', 'music', 'musicinformation', 'musicosd', 'musicplaylist', 'musicplaylisteditor', 'networksetup', 'notification', 'numericinput', 'okdialog', 'osdaudiosettings', 'osdcmssettings', 'osdsubtitlesettings', 'osdvideosettings', 'peripheralsettings', 'pictureinfo', 'pictures', 'playercontrols', 'playerprocessinfo', 'playersettings', 'profiles', 'profilesettings', 'programs', 'progressdialog', 'pvrchannelguide', 'pvrchannelmanager', 'pvrchannelscan', 'pvrgroupmanager', 'pvrguidecontrols', 'pvrguideinfo', 'pvrguidesearch', 'pvrosdchannels', 'pvrosdguide', 'pvrosdteletext', 'pvrradiordsinfo', 'pvrrecordinginfo', 'pvrsettings', 'pvrtimersetting', 'pvrupdateprogress', 'radiochannels', 'radioguide', 'radiorecordings', 'radiosearch', 'radiotimerrules', 'radiotimers', 'screencalibration', 'screensaver', 'seekbar', 'selectdialog', 'servicesettings', 'settings', 'shutdownmenu', 'skinsettings', 'sliderdialog', 'slideshow', 'smartplaylisteditor', 'smartplaylistrule', 'songinformation', 'splash', 'startup', 'startwindow', 'submenu', 'subtitlesearch', 'systeminfo', 'systemsettings', 'teletext', 'textviewer', 'tvchannels', 'tvguide', 'tvrecordings', 'tvsearch', 'tvtimerrules', 'tvtimers', 'videobookmarks', 'videomenu', 'videoosd', 'videoplaylist', 'videos', 'videotimeseek', 'virtualkeyboard', 'visualisation', 'visualisationpresetlist', 'volumebar', 'weather', 'yesnodialog'], 'id': 'GUI.Window', 'type': 'string'}, 'Global.IncrementDecrement': {'default': 'increment', 'enums': ['increment', 'decrement'], 'id': 'Global.IncrementDecrement', 'type': 'string'}, 'Global.String.NotEmpty': {'default': '', 'id': 'Global.String.NotEmpty', 'minLength': 1, 'type': 'string'}, 'Global.Time': {'additionalProperties': False, 'description': 'A duration.', 'id': 'Global.Time', 'properties': {'hours': {'minimum': 0, 'required': True, 'type': 'integer'}, 'milliseconds': {'maximum': 999, 'minimum': 0, 'required': True, 'type': 'integer'}, 'minutes': {'maximum': 59, 'minimum': 0, 'required': True, 'type': 'integer'}, 'seconds': {'maximum': 59, 'minimum': 0, 'required': True, 'type': 'integer'}}, 'type': 'object'}, 'Global.Toggle': {'default': None, 'id': 'Global.Toggle', 'type': [{'type': 'boolean'}, {'enums': ['toggle'], 'type': 'string'}]}, 'Global.Weekday': {'default': 'monday', 'enums': ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'], 'id': 'Global.Weekday', 'type': 'string'}, 'Input.Action': {'default': 'analogfastforward', 'enums': ['analogfastforward', 'analogmove', 'analogmovexleft', 'analogmovexright', 'analogmoveydown', 'analogmoveyup', 'analogrewind', 'analogseekback', 'analogseekforward', 'aspectratio', 'audiodelay', 'audiodelayminus', 'audiodelayplus', 'audionextlanguage', 'audiotoggledigital', 'back', 'backspace', 'bigstepback', 'bigstepforward', 'blue', 'browsesubtitle', 'channeldown', 'channelnumberseparator', 'channelup', 'chapterorbigstepback', 'chapterorbigstepforward', 'close', 'codecinfo', 'contextmenu', 'copy', 'createbookmark', 'createepisodebookmark', 'cursorleft', 'cursorright', 'cyclesubtitle', 'cycletonemapmethod', 'decreasepar', 'decreaserating', 'decreasevisrating', 'delete', 'doubleclick', 'down', 'enter', 'error', 'fastforward', 'filter', 'filterclear', 'filtersms2', 'filtersms3', 'filtersms4', 'filtersms5', 'filtersms6', 'filtersms7', 'filtersms8', 'filtersms9', 'firstpage', 'fullscreen', 'green', 'guiprofile', 'hdrtoggle', 'highlight', 'increasepar', 'increaserating', 'increasevisrating', 'info', 'jumpsms2', 'jumpsms3', 'jumpsms4', 'jumpsms5', 'jumpsms6', 'jumpsms7', 'jumpsms8', 'jumpsms9', 'lastpage', 'left', 'leftclick', 'lockpreset', 'longclick', 'longpress', 'menu', 'middleclick', 'mousedrag', 'mousedragend', 'mousemove', 'move', 'moveitemdown', 'moveitemup', 'mute', 'nextcalibration', 'nextchannelgroup', 'nextletter', 'nextpicture', 'nextpreset', 'nextresolution', 'nextscene', 'nextstereomode', 'nextsubtitle', 'noop', 'number0', 'number1', 'number2', 'number3', 'number4', 'number5', 'number6', 'number7', 'number8', 'number9', 'osd', 'pagedown', 'pageup', 'pangesture', 'parentdir', 'parentfolder', 'pause', 'play', 'playerdebug', 'playerdebugvideo', 'playerprocessinfo', 'playerprogramselect', 'playerresolutionselect', 'playlist', 'playnext', 'playpause', 'playpvr', 'playpvrradio', 'playpvrtv', 'previouschannelgroup', 'previousmenu', 'previouspicture', 'previouspreset', 'previousscene', 'previousstereomode', 'prevletter', 'queue', 'randompreset', 'record', 'red', 'reloadkeymaps', 'rename', 'resetcalibration', 'rewind', 'right', 'rightclick', 'rotate', 'rotateccw', 'rotategesture', 'scanitem', 'screenshot', 'scrolldown', 'scrollup', 'select', 'setrating', 'settingslevelchange', 'settingsreset', 'shift', 'showpreset', 'showsubtitles', 'showtime', 'showtimerrule', 'showvideomenu', 'skipnext', 'skipprevious', 'smallstepback', 'stepback', 'stepforward', 'stereomode', 'stereomodetomono', 'stop', 'subtitlealign', 'subtitledelay', 'subtitledelayminus', 'subtitledelayplus', 'subtitleshiftdown', 'subtitleshiftup', 'swipedown', 'swipeleft', 'swiperight', 'swipeup', 'switchplayer', 'symbols', 'tap', 'togglecommskip', 'togglefont', 'togglefullscreen', 'togglestereomode', 'togglewatched', 'up', 'verticalshiftdown', 'verticalshiftup', 'videonextstream', 'voicerecognizer', 'volampdown', 'volampup', 'volumeamplification', 'volumedown', 'volumeup', 'wheeldown', 'wheelup', 'yellow', 'zoomgesture', 'zoomin', 'zoomlevel1', 'zoomlevel2', 'zoomlevel3', 'zoomlevel4', 'zoomlevel5', 'zoomlevel6', 'zoomlevel7', 'zoomlevel8', 'zoomlevel9', 'zoomnormal', 'zoomout'], 'id': 'Input.Action', 'type': 'string'}, 'Item.CustomProperties': {'additionalProperties': {'$ref': 'Global.String.NotEmpty', 'default': ''}, 'id': 'Item.CustomProperties', 'type': 'object'}, 'Item.Details.Base': {'id': 'Item.Details.Base', 'properties': {'label': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'Item.Fields.Base': {'id': 'Item.Fields.Base', 'items': {'type': 'string'}, 'type': 'array', 'uniqueItems': True}, 'Library.Details.Genre': {'extends': 'Item.Details.Base', 'id': 'Library.Details.Genre', 'properties': {'genreid': {'$ref': 'Library.Id', 'required': True}, 'sourceid': {'$ref': 'Array.Integer', 'description': 'The ids of sources with songs of the genre'}, 'thumbnail': {'default': '', 'type': 'string'}, 'title': {'default': '', 'type': 'string'}}}, 'Library.Details.Source': {'extends': 'Item.Details.Base', 'id': 'Library.Details.Source', 'properties': {'file': {'description': 'The url encoded multipath string combining all paths of the source ', 'required': True, 'type': 'string'}, 'paths': {'$ref': 'Array.String', 'description': 'The individual paths of the media source'}, 'sourceid': {'$ref': 'Library.Id', 'required': True}}}, 'Library.Details.Tag': {'extends': 'Item.Details.Base', 'id': 'Library.Details.Tag', 'properties': {'tagid': {'$ref': 'Library.Id', 'required': True}, 'title': {'default': '', 'type': 'string'}}}, 'Library.Fields.Genre': {'extends': 'Item.Fields.Base', 'id': 'Library.Fields.Genre', 'items': {'enums': ['title', 'thumbnail', 'sourceid'], 'type': 'string'}}, 'Library.Fields.Source': {'extends': 'Item.Fields.Base', 'id': 'Library.Fields.Source', 'items': {'enums': ['file', 'paths'], 'type': 'string'}}, 'Library.Fields.Tag': {'extends': 'Item.Fields.Base', 'id': 'Library.Fields.Tag', 'items': {'enums': ['title'], 'type': 'string'}}, 'Library.Id': {'default': -1, 'id': 'Library.Id', 'minimum': 1, 'type': 'integer'}, 'List.Amount': {'default': -1, 'id': 'List.Amount', 'minimum': 0, 'type': 'integer'}, 'List.Fields.All': {'extends': 'Item.Fields.Base', 'id': 'List.Fields.All', 'items': {'enums': ['title', 'artist', 'albumartist', 'genre', 'year', 'rating', 'album', 'track', 'duration', 'comment', 'lyrics', 'musicbrainztrackid', 'musicbrainzartistid', 'musicbrainzalbumid', 'musicbrainzalbumartistid', 'playcount', 'fanart', 'director', 'trailer', 'tagline', 'plot', 'plotoutline', 'originaltitle', 'lastplayed', 'writer', 'studio', 'mpaa', 'cast', 'country', 'imdbnumber', 'premiered', 'productioncode', 'runtime', 'set', 'showlink', 'streamdetails', 'top250', 'votes', 'firstaired', 'season', 'episode', 'showtitle', 'thumbnail', 'file', 'resume', 'artistid', 'albumid', 'tvshowid', 'setid', 'watchedepisodes', 'disc', 'tag', 'art', 'genreid', 'displayartist', 'albumartistid', 'description', 'theme', 'mood', 'style', 'albumlabel', 'sorttitle', 'episodeguide', 'uniqueid', 'dateadded', 'channel', 'channeltype', 'hidden', 'locked', 'channelnumber', 'subchannelnumber', 'starttime', 'endtime', 'specialsortseason', 'specialsortepisode', 'compilation', 'releasetype', 'albumreleasetype', 'contributors', 'displaycomposer', 'displayconductor', 'displayorchestra', 'displaylyricist', 'userrating', 'sortartist', 'musicbrainzreleasegroupid', 'mediapath', 'dynpath', 'isboxset', 'totaldiscs', 'disctitle', 'releasedate', 'originaldate', 'bpm', 'bitrate', 'samplerate', 'channels', 'albumstatus', 'datemodified', 'datenew', 'customproperties', 'albumduration'], 'type': 'string'}}, 'List.Fields.Files': {'extends': 'Item.Fields.Base', 'id': 'List.Fields.Files', 'items': {'enums': ['title', 'artist', 'albumartist', 'genre', 'year', 'rating', 'album', 'track', 'duration', 'comment', 'lyrics', 'musicbrainztrackid', 'musicbrainzartistid', 'musicbrainzalbumid', 'musicbrainzalbumartistid', 'playcount', 'fanart', 'director', 'trailer', 'tagline', 'plot', 'plotoutline', 'originaltitle', 'lastplayed', 'writer', 'studio', 'mpaa', 'cast', 'country', 'imdbnumber', 'premiered', 'productioncode', 'runtime', 'set', 'showlink', 'streamdetails', 'top250', 'votes', 'firstaired', 'season', 'episode', 'showtitle', 'thumbnail', 'file', 'resume', 'artistid', 'albumid', 'tvshowid', 'setid', 'watchedepisodes', 'disc', 'tag', 'art', 'genreid', 'displayartist', 'albumartistid', 'description', 'theme', 'mood', 'style', 'albumlabel', 'sorttitle', 'episodeguide', 'uniqueid', 'dateadded', 'size', 'lastmodified', 'mimetype', 'specialsortseason', 'specialsortepisode', 'sortartist', 'musicbrainzreleasegroupid', 'isboxset', 'totaldiscs', 'disctitle', 'releasedate', 'originaldate', 'bpm', 'bitrate', 'samplerate', 'channels', 'datemodified', 'datenew', 'customproperties', 'albumduration'], 'type': 'string'}}, 'List.Filter.Albums': {'id': 'List.Filter.Albums', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.Albums'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.Albums'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.Albums'}]}, 'List.Filter.Artists': {'id': 'List.Filter.Artists', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.Artists'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.Artists'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.Artists'}]}, 'List.Filter.Episodes': {'id': 'List.Filter.Episodes', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.Episodes'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.Episodes'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.Episodes'}]}, 'List.Filter.Fields.Albums': {'default': 'genre', 'enums': ['genre', 'source', 'album', 'disctitle', 'totaldiscs', 'isboxset', 'artist', 'albumartist', 'year', 'originalyear', 'albumduration', 'review', 'themes', 'moods', 'styles', 'compilation', 'type', 'label', 'rating', 'userrating', 'playcount', 'lastplayed', 'path', 'albumstatus', 'dateadded', 'datemodified', 'datenew', 'playlist', 'virtualfolder'], 'id': 'List.Filter.Fields.Albums', 'type': 'string'}, 'List.Filter.Fields.Artists': {'default': 'artist', 'enums': ['artist', 'source', 'genre', 'moods', 'styles', 'instruments', 'biography', 'artisttype', 'gender', 'disambiguation', 'born', 'bandformed', 'disbanded', 'died', 'role', 'path', 'dateadded', 'datemodified', 'datenew', 'playlist', 'virtualfolder'], 'id': 'List.Filter.Fields.Artists', 'type': 'string'}, 'List.Filter.Fields.Episodes': {'default': 'title', 'enums': ['title', 'tvshow', 'originaltitle', 'plot', 'votes', 'rating', 'userrating', 'time', 'writers', 'airdate', 'playcount', 'lastplayed', 'inprogress', 'genre', 'year', 'director', 'actor', 'episode', 'season', 'filename', 'path', 'studio', 'mpaarating', 'dateadded', 'tag', 'videoresolution', 'audiochannels', 'audiocount', 'subtitlecount', 'videocodec', 'audiocodec', 'audiolanguage', 'subtitlelanguage', 'videoaspect', 'playlist', 'virtualfolder'], 'id': 'List.Filter.Fields.Episodes', 'type': 'string'}, 'List.Filter.Fields.Movies': {'default': 'title', 'enums': ['title', 'originaltitle', 'plot', 'plotoutline', 'tagline', 'votes', 'rating', 'userrating', 'time', 'writers', 'playcount', 'lastplayed', 'inprogress', 'genre', 'country', 'year', 'director', 'actor', 'mpaarating', 'top250', 'studio', 'hastrailer', 'filename', 'path', 'set', 'tag', 'dateadded', 'videoresolution', 'audiochannels', 'audiocount', 'subtitlecount', 'videocodec', 'audiocodec', 'audiolanguage', 'subtitlelanguage', 'videoaspect', 'playlist', 'virtualfolder'], 'id': 'List.Filter.Fields.Movies', 'type': 'string'}, 'List.Filter.Fields.MusicVideos': {'default': 'title', 'enums': ['title', 'genre', 'album', 'year', 'artist', 'filename', 'path', 'playcount', 'lastplayed', 'rating', 'userrating', 'time', 'director', 'studio', 'plot', 'tag', 'dateadded', 'videoresolution', 'audiochannels', 'audiocount', 'subtitlecount', 'videocodec', 'audiocodec', 'audiolanguage', 'subtitlelanguage', 'videoaspect', 'playlist', 'virtualfolder'], 'id': 'List.Filter.Fields.MusicVideos', 'type': 'string'}, 'List.Filter.Fields.Songs': {'default': 'genre', 'enums': ['genre', 'source', 'album', 'disctitle', 'artist', 'albumartist', 'title', 'year', 'originalyear', 'time', 'tracknumber', 'filename', 'path', 'playcount', 'lastplayed', 'rating', 'userrating', 'comment', 'moods', 'bpm', 'samplerate', 'bitrate', 'channels', 'dateadded', 'datemodified', 'datenew', 'playlist', 'virtualfolder'], 'id': 'List.Filter.Fields.Songs', 'type': 'string'}, 'List.Filter.Fields.TVShows': {'default': 'title', 'enums': ['title', 'originaltitle', 'plot', 'status', 'votes', 'rating', 'userrating', 'year', 'genre', 'director', 'actor', 'numepisodes', 'numwatched', 'playcount', 'path', 'studio', 'mpaarating', 'dateadded', 'lastplayed', 'inprogress', 'tag', 'playlist', 'virtualfolder'], 'id': 'List.Filter.Fields.TVShows', 'type': 'string'}, 'List.Filter.Fields.Textures': {'default': 'textureid', 'enums': ['textureid', 'url', 'cachedurl', 'lasthashcheck', 'imagehash', 'width', 'height', 'usecount', 'lastused'], 'id': 'List.Filter.Fields.Textures', 'type': 'string'}, 'List.Filter.Movies': {'id': 'List.Filter.Movies', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.Movies'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.Movies'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.Movies'}]}, 'List.Filter.MusicVideos': {'id': 'List.Filter.MusicVideos', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.MusicVideos'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.MusicVideos'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.MusicVideos'}]}, 'List.Filter.Operators': {'default': 'contains', 'enums': ['contains', 'doesnotcontain', 'is', 'isnot', 'startswith', 'endswith', 'greaterthan', 'lessthan', 'after', 'before', 'inthelast', 'notinthelast', 'true', 'false', 'between'], 'id': 'List.Filter.Operators', 'type': 'string'}, 'List.Filter.Rule': {'id': 'List.Filter.Rule', 'properties': {'operator': {'$ref': 'List.Filter.Operators', 'required': True}, 'value': {'required': True, 'type': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}}, 'type': 'object'}, 'List.Filter.Rule.Albums': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.Albums', 'properties': {'field': {'$ref': 'List.Filter.Fields.Albums', 'required': True}}}, 'List.Filter.Rule.Artists': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.Artists', 'properties': {'field': {'$ref': 'List.Filter.Fields.Artists', 'required': True}}}, 'List.Filter.Rule.Episodes': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.Episodes', 'properties': {'field': {'$ref': 'List.Filter.Fields.Episodes', 'required': True}}}, 'List.Filter.Rule.Movies': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.Movies', 'properties': {'field': {'$ref': 'List.Filter.Fields.Movies', 'required': True}}}, 'List.Filter.Rule.MusicVideos': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.MusicVideos', 'properties': {'field': {'$ref': 'List.Filter.Fields.MusicVideos', 'required': True}}}, 'List.Filter.Rule.Songs': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.Songs', 'properties': {'field': {'$ref': 'List.Filter.Fields.Songs', 'required': True}}}, 'List.Filter.Rule.TVShows': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.TVShows', 'properties': {'field': {'$ref': 'List.Filter.Fields.TVShows', 'required': True}}}, 'List.Filter.Rule.Textures': {'extends': 'List.Filter.Rule', 'id': 'List.Filter.Rule.Textures', 'properties': {'field': {'$ref': 'List.Filter.Fields.Textures', 'required': True}}}, 'List.Filter.Songs': {'id': 'List.Filter.Songs', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.Songs'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.Songs'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.Songs'}]}, 'List.Filter.TVShows': {'id': 'List.Filter.TVShows', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.TVShows'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.TVShows'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.TVShows'}]}, 'List.Filter.Textures': {'id': 'List.Filter.Textures', 'type': [{'properties': {'and': {'items': {'$ref': 'List.Filter.Textures'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'properties': {'or': {'items': {'$ref': 'List.Filter.Textures'}, 'minItems': 1, 'required': True, 'type': 'array'}}, 'type': 'object'}, {'$ref': 'List.Filter.Rule.Textures'}]}, 'List.Item.All': {'extends': 'List.Item.Base', 'id': 'List.Item.All', 'properties': {'channel': {'default': '', 'type': 'string'}, 'channelnumber': {'default': 0, 'type': 'integer'}, 'channeltype': {'$ref': 'PVR.Channel.Type', 'default': 'tv'}, 'endtime': {'default': '', 'type': 'string'}, 'hidden': {'default': False, 'type': 'boolean'}, 'locked': {'default': False, 'type': 'boolean'}, 'starttime': {'default': '', 'type': 'string'}, 'subchannelnumber': {'default': 0, 'type': 'integer'}}}, 'List.Item.Base': {'extends': ['Video.Details.File', 'Audio.Details.Media'], 'id': 'List.Item.Base', 'properties': {'album': {'default': '', 'type': 'string'}, 'albumartist': {'$ref': 'Array.String'}, 'albumartistid': {'$ref': 'Array.Integer'}, 'albumid': {'$ref': 'Library.Id', 'default': -1}, 'albumlabel': {'default': '', 'type': 'string'}, 'albumreleasetype': {'$ref': 'Audio.Album.ReleaseType', 'default': 'album'}, 'albumstatus': {'default': '', 'type': 'string'}, 'bitrate': {'default': 0, 'type': 'integer'}, 'bpm': {'default': 0, 'type': 'integer'}, 'cast': {'$ref': 'Video.Cast'}, 'channels': {'default': 0, 'type': 'integer'}, 'comment': {'default': '', 'type': 'string'}, 'compilation': {'default': False, 'type': 'boolean'}, 'contributors': {'$ref': 'Audio.Contributors'}, 'country': {'$ref': 'Array.String'}, 'customproperties': {'$ref': 'Item.CustomProperties'}, 'description': {'default': '', 'type': 'string'}, 'disc': {'default': 0, 'type': 'integer'}, 'disctitle': {'default': '', 'type': 'string'}, 'displaycomposer': {'default': '', 'type': 'string'}, 'displayconductor': {'default': '', 'type': 'string'}, 'displaylyricist': {'default': '', 'type': 'string'}, 'displayorchestra': {'default': '', 'type': 'string'}, 'duration': {'default': 0, 'type': 'integer'}, 'dynpath': {'default': '', 'description': 'An experimental property for debug purposes, often same as mediapath but when different gives the actual file playing that should also be in file property', 'type': 'string'}, 'episode': {'default': 0, 'type': 'integer'}, 'episodeguide': {'default': '', 'type': 'string'}, 'firstaired': {'default': '', 'type': 'string'}, 'id': {'$ref': 'Library.Id', 'default': -1}, 'imdbnumber': {'default': '', 'type': 'string'}, 'isboxset': {'default': False, 'type': 'boolean'}, 'lyrics': {'default': '', 'type': 'string'}, 'mediapath': {'default': '', 'description': 'Media source path that identifies the item', 'type': 'string'}, 'mood': {'$ref': 'Array.String'}, 'mpaa': {'default': '', 'type': 'string'}, 'musicbrainzartistid': {'$ref': 'Array.String'}, 'musicbrainztrackid': {'default': '', 'type': 'string'}, 'originaldate': {'default': '', 'type': 'string'}, 'originaltitle': {'default': '', 'type': 'string'}, 'plotoutline': {'default': '', 'type': 'string'}, 'premiered': {'default': '', 'type': 'string'}, 'productioncode': {'default': '', 'type': 'string'}, 'releasedate': {'default': '', 'type': 'string'}, 'releasetype': {'$ref': 'Audio.Album.ReleaseType', 'default': 'album'}, 'samplerate': {'default': 0, 'type': 'integer'}, 'season': {'default': 0, 'type': 'integer'}, 'set': {'default': '', 'type': 'string'}, 'setid': {'$ref': 'Library.Id', 'default': -1}, 'showlink': {'$ref': 'Array.String'}, 'showtitle': {'default': '', 'type': 'string'}, 'sorttitle': {'default': '', 'type': 'string'}, 'specialsortepisode': {'default': 0, 'type': 'integer'}, 'specialsortseason': {'default': 0, 'type': 'integer'}, 'studio': {'$ref': 'Array.String'}, 'style': {'$ref': 'Array.String'}, 'tag': {'$ref': 'Array.String'}, 'tagline': {'default': '', 'type': 'string'}, 'theme': {'$ref': 'Array.String'}, 'top250': {'default': 0, 'type': 'integer'}, 'totaldiscs': {'default': 0, 'type': 'integer'}, 'track': {'default': 0, 'type': 'integer'}, 'trailer': {'default': '', 'type': 'string'}, 'tvshowid': {'$ref': 'Library.Id', 'default': -1}, 'type': {'default': 'unknown', 'enums': ['unknown', 'movie', 'episode', 'musicvideo', 'song', 'picture', 'channel'], 'type': 'string'}, 'uniqueid': {'$ref': 'Media.UniqueID'}, 'votes': {'default': '', 'type': 'string'}, 'watchedepisodes': {'default': 0, 'type': 'integer'}, 'writer': {'$ref': 'Array.String'}}}, 'List.Item.File': {'extends': 'List.Item.Base', 'id': 'List.Item.File', 'properties': {'file': {'required': True, 'type': 'string'}, 'filetype': {'enums': ['file', 'directory'], 'required': True, 'type': 'string'}, 'lastmodified': {'default': '', 'type': 'string'}, 'mimetype': {'default': '', 'type': 'string'}, 'size': {'default': 0, 'description': 'Size of the file in bytes', 'type': 'integer'}}}, 'List.Items.Sources': {'id': 'List.Items.Sources', 'items': {'extends': 'Item.Details.Base', 'properties': {'file': {'required': True, 'type': 'string'}}}, 'type': 'array'}, 'List.Limits': {'additionalProperties': False, 'id': 'List.Limits', 'properties': {'end': {'$ref': 'List.Amount', 'default': -1, 'description': 'Index of the last item to return'}, 'start': {'default': 0, 'description': 'Index of the first item to return', 'minimum': 0, 'type': 'integer'}}, 'type': 'object'}, 'List.LimitsReturned': {'additionalProperties': False, 'id': 'List.LimitsReturned', 'properties': {'end': {'$ref': 'List.Amount', 'default': -1}, 'start': {'default': 0, 'minimum': 0, 'type': 'integer'}, 'total': {'minimum': 0, 'required': True, 'type': 'integer'}}, 'type': 'object'}, 'List.Sort': {'id': 'List.Sort', 'properties': {'ignorearticle': {'default': False, 'type': 'boolean'}, 'method': {'default': 'none', 'enums': ['none', 'label', 'date', 'size', 'file', 'path', 'drivetype', 'title', 'track', 'time', 'artist', 'album', 'albumtype', 'genre', 'country', 'year', 'rating', 'userrating', 'votes', 'top250', 'programcount', 'playlist', 'episode', 'season', 'totalepisodes', 'watchedepisodes', 'tvshowstatus', 'tvshowtitle', 'sorttitle', 'productioncode', 'mpaa', 'studio', 'dateadded', 'lastplayed', 'playcount', 'listeners', 'bitrate', 'random', 'totaldiscs', 'originaldate', 'bpm'], 'type': 'string'}, 'order': {'default': 'ascending', 'enums': ['ascending', 'descending'], 'type': 'string'}, 'useartistsortname': {'default': False, 'type': 'boolean'}}, 'type': 'object'}, 'Media.Artwork': {'additionalProperties': {'$ref': 'Global.String.NotEmpty', 'default': ''}, 'id': 'Media.Artwork', 'properties': {'banner': {'$ref': 'Global.String.NotEmpty', 'default': ''}, 'fanart': {'$ref': 'Global.String.NotEmpty', 'default': ''}, 'poster': {'$ref': 'Global.String.NotEmpty', 'default': ''}, 'thumb': {'$ref': 'Global.String.NotEmpty', 'default': ''}}, 'type': 'object'}, 'Media.Artwork.Set': {'additionalProperties': {'default': None, 'type': [{'type': 'null'}, {'$ref': 'Global.String.NotEmpty'}]}, 'id': 'Media.Artwork.Set', 'properties': {'banner': {'default': '', 'type': [{'type': 'null'}, {'$ref': 'Global.String.NotEmpty'}]}, 'fanart': {'default': '', 'type': [{'type': 'null'}, {'$ref': 'Global.String.NotEmpty'}]}, 'poster': {'default': '', 'type': [{'type': 'null'}, {'$ref': 'Global.String.NotEmpty'}]}, 'thumb': {'default': '', 'type': [{'type': 'null'}, {'$ref': 'Global.String.NotEmpty'}]}}, 'type': 'object'}, 'Media.Details.Base': {'extends': 'Item.Details.Base', 'id': 'Media.Details.Base', 'properties': {'fanart': {'default': '', 'type': 'string'}, 'thumbnail': {'default': '', 'type': 'string'}}}, 'Media.UniqueID': {'additionalProperties': {'$ref': 'Global.String.NotEmpty', 'default': ''}, 'id': 'Media.UniqueID', 'type': 'object'}, 'Media.UniqueID.Set': {'additionalProperties': {'default': None, 'type': [{'type': 'null'}, {'$ref': 'Global.String.NotEmpty'}]}, 'id': 'Media.UniqueID.Set', 'type': 'object'}, 'Notifications.Item': {'id': 'Notifications.Item', 'type': [{'description': 'An unknown item does not have any additional information.', 'properties': {'type': {'$ref': 'Notifications.Item.Type', 'required': True}}, 'type': 'object'}, {'description': 'An item known to the database has an identification.', 'properties': {'id': {'$ref': 'Library.Id', 'required': True}, 'type': {'$ref': 'Notifications.Item.Type', 'required': True}}, 'type': 'object'}, {'description': 'A movie item has a title and may have a release year.', 'properties': {'title': {'required': True, 'type': 'string'}, 'type': {'$ref': 'Notifications.Item.Type', 'required': True}, 'year': {'default': 0, 'type': 'integer'}}, 'type': 'object'}, {'description': 'A tv episode has a title and may have an episode number, season number and the title of the show it belongs to.', 'properties': {'episode': {'default': 0, 'type': 'integer'}, 'season': {'default': 0, 'type': 'integer'}, 'showtitle': {'default': '', 'type': 'string'}, 'title': {'required': True, 'type': 'string'}, 'type': {'$ref': 'Notifications.Item.Type', 'required': True}}, 'type': 'object'}, {'description': 'A music video has a title and may have an album and an artist.', 'properties': {'album': {'default': '', 'type': 'string'}, 'artist': {'default': '', 'type': 'string'}, 'title': {'required': True, 'type': 'string'}, 'type': {'$ref': 'Notifications.Item.Type', 'required': True}}, 'type': 'object'}, {'description': 'A song has a title and may have an album, an artist and a track number.', 'properties': {'album': {'default': '', 'type': 'string'}, 'artist': {'default': '', 'type': 'string'}, 'title': {'required': True, 'type': 'string'}, 'track': {'default': 0, 'type': 'integer'}, 'type': {'$ref': 'Notifications.Item.Type', 'required': True}}, 'type': 'object'}, {'description': 'A picture has a file path.', 'properties': {'file': {'required': True, 'type': 'string'}, 'type': {'$ref': 'Notifications.Item.Type', 'required': True}}, 'type': 'object'}, {'description': 'A PVR channel is either a radio or tv channel and has a title.', 'properties': {'channeltype': {'$ref': 'PVR.Channel.Type', 'required': True}, 'id': {'$ref': 'Library.Id', 'required': True}, 'title': {'required': True, 'type': 'string'}, 'type': {'$ref': 'Notifications.Item.Type', 'required': True}}, 'type': 'object'}]}, 'Notifications.Item.Type': {'default': 'unknown', 'enums': ['unknown', 'movie', 'episode', 'musicvideo', 'song', 'picture', 'channel'], 'id': 'Notifications.Item.Type', 'type': 'string'}, 'Optional.Boolean': {'default': None, 'id': 'Optional.Boolean', 'type': [{'type': 'null'}, {'type': 'boolean'}]}, 'Optional.Integer': {'default': None, 'id': 'Optional.Integer', 'type': [{'type': 'null'}, {'type': 'integer'}]}, 'Optional.Number': {'default': None, 'id': 'Optional.Number', 'type': [{'type': 'null'}, {'type': 'number'}]}, 'Optional.String': {'default': None, 'id': 'Optional.String', 'type': [{'type': 'null'}, {'type': 'string'}]}, 'PVR.Channel.Type': {'default': 'tv', 'enums': ['tv', 'radio'], 'id': 'PVR.Channel.Type', 'type': 'string'}, 'PVR.ChannelGroup.Id': {'default': None, 'id': 'PVR.ChannelGroup.Id', 'type': [{'$ref': 'Library.Id'}, {'enums': ['alltv', 'allradio'], 'type': 'string'}]}, 'PVR.Details.Broadcast': {'extends': 'Item.Details.Base', 'id': 'PVR.Details.Broadcast', 'properties': {'broadcastid': {'$ref': 'Library.Id', 'required': True}, 'cast': {'default': '', 'type': 'string'}, 'clientid': {'$ref': 'Library.Id', 'default': -1}, 'director': {'default': '', 'type': 'string'}, 'endtime': {'default': '', 'type': 'string'}, 'episodename': {'default': '', 'type': 'string'}, 'episodenum': {'default': 0, 'type': 'integer'}, 'episodepart': {'default': 0, 'type': 'integer'}, 'firstaired': {'default': '', 'type': 'string'}, 'genre': {'default': '', 'type': 'string'}, 'hasrecording': {'default': False, 'type': 'boolean'}, 'hasreminder': {'default': False, 'type': 'boolean'}, 'hastimer': {'default': False, 'type': 'boolean'}, 'hastimerrule': {'default': False, 'type': 'boolean'}, 'imdbnumber': {'default': 0, 'type': 'integer'}, 'isactive': {'default': False, 'type': 'boolean'}, 'isplayable': {'default': False, 'description': 'Deprecated - Use GetBroadcastIsPlayable instead', 'type': 'boolean'}, 'isseries': {'default': False, 'type': 'boolean'}, 'originaltitle': {'default': '', 'type': 'string'}, 'parentalrating': {'default': 0, 'type': 'integer'}, 'plot': {'default': '', 'type': 'string'}, 'plotoutline': {'default': '', 'type': 'string'}, 'progress': {'default': 0, 'type': 'integer'}, 'progresspercentage': {'default': 0.0, 'type': 'number'}, 'rating': {'default': 0, 'type': 'integer'}, 'recording': {'default': '', 'type': 'string'}, 'runtime': {'default': 0, 'type': 'integer'}, 'starttime': {'default': '', 'type': 'string'}, 'thumbnail': {'default': '', 'type': 'string'}, 'title': {'default': '', 'type': 'string'}, 'wasactive': {'default': False, 'type': 'boolean'}, 'writer': {'default': '', 'type': 'string'}, 'year': {'default': 0, 'type': 'integer'}}}, 'PVR.Details.Channel': {'extends': 'Item.Details.Base', 'id': 'PVR.Details.Channel', 'properties': {'broadcastnext': {'$ref': 'PVR.Details.Broadcast'}, 'broadcastnow': {'$ref': 'PVR.Details.Broadcast'}, 'channel': {'default': '', 'type': 'string'}, 'channelid': {'$ref': 'Library.Id', 'required': True}, 'channelnumber': {'default': 0, 'type': 'integer'}, 'channeltype': {'$ref': 'PVR.Channel.Type', 'default': 'tv'}, 'clientid': {'$ref': 'Library.Id', 'default': -1}, 'hasarchive': {'default': False, 'type': 'boolean'}, 'hidden': {'default': False, 'type': 'boolean'}, 'icon': {'default': '', 'type': 'string'}, 'isrecording': {'default': False, 'type': 'boolean'}, 'lastplayed': {'default': '', 'type': 'string'}, 'locked': {'default': False, 'type': 'boolean'}, 'subchannelnumber': {'default': 0, 'type': 'integer'}, 'thumbnail': {'default': '', 'type': 'string'}, 'uniqueid': {'required': True, 'type': 'integer'}}}, 'PVR.Details.ChannelGroup': {'extends': 'Item.Details.Base', 'id': 'PVR.Details.ChannelGroup', 'properties': {'channelgroupid': {'$ref': 'Library.Id', 'required': True}, 'channeltype': {'$ref': 'PVR.Channel.Type', 'required': True}}}, 'PVR.Details.ChannelGroup.Extended': {'extends': 'PVR.Details.ChannelGroup', 'id': 'PVR.Details.ChannelGroup.Extended', 'properties': {'channels': {'items': {'$ref': 'PVR.Details.Channel'}, 'type': 'array'}, 'limits': {'$ref': 'List.LimitsReturned', 'required': True}}}, 'PVR.Details.Client': {'extends': 'Item.Details.Base', 'id': 'PVR.Details.Client', 'properties': {'addonid': {'default': '', 'type': 'string'}, 'clientid': {'$ref': 'Library.Id', 'required': True}, 'supportschannelgroups': {'default': False, 'type': 'boolean'}, 'supportschannelscan': {'default': False, 'type': 'boolean'}, 'supportsepg': {'default': False, 'type': 'boolean'}, 'supportsradio': {'default': False, 'type': 'boolean'}, 'supportsrecordings': {'default': False, 'type': 'boolean'}, 'supportstimers': {'default': False, 'type': 'boolean'}, 'supportstv': {'default': False, 'type': 'boolean'}}}, 'PVR.Details.Recording': {'extends': 'Item.Details.Base', 'id': 'PVR.Details.Recording', 'properties': {'art': {'$ref': 'Media.Artwork'}, 'channel': {'default': '', 'type': 'string'}, 'channeluid': {'default': 0, 'type': 'integer'}, 'clientid': {'$ref': 'Library.Id', 'default': -1}, 'directory': {'default': '', 'type': 'string'}, 'endtime': {'default': '', 'type': 'string'}, 'epgeventid': {'default': 0, 'type': 'integer'}, 'episode': {'default': 0, 'type': 'integer'}, 'file': {'default': '', 'type': 'string'}, 'genre': {'default': '', 'type': 'string'}, 'icon': {'default': '', 'type': 'string'}, 'isdeleted': {'default': False, 'type': 'boolean'}, 'lifetime': {'default': 0, 'type': 'integer'}, 'playcount': {'default': 0, 'type': 'integer'}, 'plot': {'default': '', 'type': 'string'}, 'plotoutline': {'default': '', 'type': 'string'}, 'radio': {'default': False, 'type': 'boolean'}, 'recordingid': {'$ref': 'Library.Id', 'required': True}, 'resume': {'$ref': 'Video.Resume'}, 'runtime': {'default': 0, 'type': 'integer'}, 'season': {'default': 0, 'type': 'integer'}, 'showtitle': {'default': '', 'type': 'string'}, 'starttime': {'default': '', 'type': 'string'}, 'streamurl': {'default': '', 'type': 'string'}, 'title': {'default': '', 'type': 'string'}}}, 'PVR.Details.Timer': {'extends': 'Item.Details.Base', 'id': 'PVR.Details.Timer', 'properties': {'broadcastid': {'$ref': 'Library.Id', 'default': -1}, 'channelid': {'$ref': 'Library.Id', 'default': -1}, 'clientid': {'$ref': 'Library.Id', 'default': -1}, 'directory': {'default': '', 'type': 'string'}, 'endanytime': {'default': False, 'type': 'boolean'}, 'endmargin': {'default': 0, 'type': 'integer'}, 'endtime': {'default': '', 'type': 'string'}, 'epgsearchstring': {'default': '', 'type': 'string'}, 'epguid': {'default': 0, 'type': 'integer'}, 'file': {'default': '', 'type': 'string'}, 'firstday': {'default': '', 'type': 'string'}, 'fulltextepgsearch': {'default': False, 'type': 'boolean'}, 'ismanual': {'default': False, 'type': 'boolean'}, 'isradio': {'default': False, 'type': 'boolean'}, 'isreadonly': {'default': False, 'type': 'boolean'}, 'isreminder': {'default': False, 'type': 'boolean'}, 'istimerrule': {'default': False, 'type': 'boolean'}, 'lifetime': {'default': 0, 'type': 'integer'}, 'maxrecordings': {'default': 0, 'type': 'integer'}, 'preventduplicateepisodes': {'default': 0, 'type': 'integer'}, 'priority': {'default': 0, 'type': 'integer'}, 'recordinggroup': {'default': 0, 'type': 'integer'}, 'runtime': {'default': 0, 'type': 'integer'}, 'startanytime': {'default': False, 'type': 'boolean'}, 'startmargin': {'default': 0, 'type': 'integer'}, 'starttime': {'default': '', 'type': 'string'}, 'state': {'$ref': 'PVR.TimerState', 'default': 'unknown'}, 'summary': {'default': '', 'type': 'string'}, 'timerid': {'$ref': 'Library.Id', 'required': True}, 'title': {'default': '', 'type': 'string'}, 'weekdays': {'items': {'$ref': 'Global.Weekday'}, 'type': 'array', 'uniqueItems': True}}}, 'PVR.Fields.Broadcast': {'extends': 'Item.Fields.Base', 'id': 'PVR.Fields.Broadcast', 'items': {'enums': ['title', 'plot', 'plotoutline', 'starttime', 'endtime', 'runtime', 'progress', 'progresspercentage', 'genre', 'episodename', 'episodenum', 'episodepart', 'firstaired', 'hastimer', 'isactive', 'parentalrating', 'wasactive', 'thumbnail', 'rating', 'originaltitle', 'cast', 'director', 'writer', 'year', 'imdbnumber', 'hastimerrule', 'hasrecording', 'recording', 'isseries', 'isplayable', 'clientid', 'hasreminder'], 'type': 'string'}}, 'PVR.Fields.Channel': {'extends': 'Item.Fields.Base', 'id': 'PVR.Fields.Channel', 'items': {'enums': ['thumbnail', 'channeltype', 'hidden', 'locked', 'channel', 'lastplayed', 'broadcastnow', 'broadcastnext', 'uniqueid', 'icon', 'channelnumber', 'subchannelnumber', 'isrecording', 'hasarchive', 'clientid'], 'type': 'string'}}, 'PVR.Fields.Client': {'extends': 'Item.Fields.Base', 'id': 'PVR.Fields.Client', 'items': {'enums': ['addonid', 'supportstv', 'supportsradio', 'supportsepg', 'supportsrecordings', 'supportstimers', 'supportschannelgroups', 'supportschannelscan'], 'type': 'string'}}, 'PVR.Fields.Recording': {'extends': 'Item.Fields.Base', 'id': 'PVR.Fields.Recording', 'items': {'enums': ['title', 'plot', 'plotoutline', 'genre', 'playcount', 'resume', 'channel', 'starttime', 'endtime', 'runtime', 'lifetime', 'icon', 'art', 'streamurl', 'file', 'directory', 'radio', 'isdeleted', 'epgeventid', 'channeluid', 'season', 'episode', 'showtitle', 'clientid'], 'type': 'string'}}, 'PVR.Fields.Timer': {'extends': 'Item.Fields.Base', 'id': 'PVR.Fields.Timer', 'items': {'enums': ['title', 'summary', 'channelid', 'isradio', 'istimerrule', 'ismanual', 'starttime', 'endtime', 'runtime', 'lifetime', 'firstday', 'weekdays', 'priority', 'startmargin', 'endmargin', 'state', 'file', 'directory', 'preventduplicateepisodes', 'startanytime', 'endanytime', 'epgsearchstring', 'fulltextepgsearch', 'recordinggroup', 'maxrecordings', 'epguid', 'isreadonly', 'isreminder', 'clientid', 'broadcastid'], 'type': 'string'}}, 'PVR.Property.Name': {'default': 'available', 'enums': ['available', 'recording', 'scanning'], 'id': 'PVR.Property.Name', 'type': 'string'}, 'PVR.Property.Value': {'id': 'PVR.Property.Value', 'properties': {'available': {'default': False, 'type': 'boolean'}, 'recording': {'default': False, 'type': 'boolean'}, 'scanning': {'default': False, 'type': 'boolean'}}, 'type': 'object'}, 'PVR.TimerState': {'default': 'unknown', 'enums': ['unknown', 'new', 'scheduled', 'recording', 'completed', 'aborted', 'cancelled', 'conflict_ok', 'conflict_notok', 'error', 'disabled'], 'id': 'PVR.TimerState', 'type': 'string'}, 'Player.Audio.Stream': {'id': 'Player.Audio.Stream', 'properties': {'bitrate': {'required': True, 'type': 'integer'}, 'channels': {'required': True, 'type': 'integer'}, 'codec': {'required': True, 'type': 'string'}, 'index': {'minimum': 0, 'required': True, 'type': 'integer'}, 'isdefault': {'required': True, 'type': 'boolean'}, 'isimpaired': {'required': True, 'type': 'boolean'}, 'isoriginal': {'required': True, 'type': 'boolean'}, 'language': {'required': True, 'type': 'string'}, 'name': {'required': True, 'type': 'string'}, 'samplerate': {'required': True, 'type': 'integer'}}, 'type': 'object'}, 'Player.CustomViewMode': {'id': 'Player.CustomViewMode', 'properties': {'nonlinearstretch': {'default': None, 'type': [{'enums': ['increase', 'decrease'], 'type': 'string'}, {'$ref': 'Optional.Boolean', 'description': 'Flag to enable nonlinear stretch'}]}, 'pixelratio': {'default': None, 'type': [{'enums': ['increase', 'decrease'], 'type': 'string'}, {'$ref': 'Optional.Number', 'description': 'Pixel aspect ratio where 1.0 means square pixel'}]}, 'verticalshift': {'default': None, 'type': [{'enums': ['increase', 'decrease'], 'type': 'string'}, {'$ref': 'Optional.Number', 'description': 'Vertical shift 1.0 means shift to bottom'}]}, 'zoom': {'default': None, 'type': [{'enums': ['increase', 'decrease'], 'type': 'string'}, {'$ref': 'Optional.Number', 'description': 'Zoom where 1.0 means 100%'}]}}, 'required': True, 'type': 'object'}, 'Player.Id': {'default': -1, 'id': 'Player.Id', 'maximum': 2, 'minimum': 0, 'type': 'integer'}, 'Player.Notifications.Data': {'id': 'Player.Notifications.Data', 'properties': {'item': {'$ref': 'Notifications.Item', 'required': True}, 'player': {'$ref': 'Player.Notifications.Player', 'required': True}}, 'type': 'object'}, 'Player.Notifications.Player': {'id': 'Player.Notifications.Player', 'properties': {'playerid': {'$ref': 'Player.Id', 'required': True}, 'speed': {'default': 0, 'type': 'integer'}}, 'type': 'object'}, 'Player.Notifications.Player.Seek': {'extends': 'Player.Notifications.Player', 'id': 'Player.Notifications.Player.Seek', 'properties': {'seekoffset': {'$ref': 'Global.Time', 'description': 'A duration.'}, 'time': {'$ref': 'Global.Time', 'description': 'A duration.'}}}, 'Player.Position.Percentage': {'default': 0.0, 'id': 'Player.Position.Percentage', 'maximum': 100.0, 'minimum': 0.0, 'type': 'number'}, 'Player.Position.Time': {'additionalProperties': False, 'description': 'A position in duration.', 'id': 'Player.Position.Time', 'properties': {'hours': {'default': 0, 'minimum': 0, 'type': 'integer'}, 'milliseconds': {'default': 0, 'maximum': 999, 'minimum': 0, 'type': 'integer'}, 'minutes': {'default': 0, 'maximum': 59, 'minimum': 0, 'type': 'integer'}, 'seconds': {'default': 0, 'maximum': 59, 'minimum': 0, 'type': 'integer'}}, 'type': 'object'}, 'Player.Property.Name': {'default': 'type', 'enums': ['type', 'partymode', 'speed', 'time', 'percentage', 'totaltime', 'playlistid', 'position', 'repeat', 'shuffled', 'canseek', 'canchangespeed', 'canmove', 'canzoom', 'canrotate', 'canshuffle', 'canrepeat', 'currentaudiostream', 'audiostreams', 'subtitleenabled', 'currentsubtitle', 'subtitles', 'live', 'currentvideostream', 'videostreams', 'cachepercentage'], 'id': 'Player.Property.Name', 'type': 'string'}, 'Player.Property.Value': {'id': 'Player.Property.Value', 'properties': {'audiostreams': {'items': {'$ref': 'Player.Audio.Stream'}, 'type': 'array'}, 'cachepercentage': {'$ref': 'Player.Position.Percentage', 'default': 0.0}, 'canchangespeed': {'default': False, 'type': 'boolean'}, 'canmove': {'default': False, 'type': 'boolean'}, 'canrepeat': {'default': False, 'type': 'boolean'}, 'canrotate': {'default': False, 'type': 'boolean'}, 'canseek': {'default': False, 'type': 'boolean'}, 'canshuffle': {'default': False, 'type': 'boolean'}, 'canzoom': {'default': False, 'type': 'boolean'}, 'currentaudiostream': {'$ref': 'Player.Audio.Stream'}, 'currentsubtitle': {'$ref': 'Player.Subtitle'}, 'currentvideostream': {'$ref': 'Player.Video.Stream'}, 'live': {'default': False, 'type': 'boolean'}, 'partymode': {'default': False, 'type': 'boolean'}, 'percentage': {'$ref': 'Player.Position.Percentage', 'default': 0.0}, 'playlistid': {'$ref': 'Playlist.Id', 'default': -1}, 'position': {'$ref': 'Playlist.Position', 'default': -1}, 'repeat': {'$ref': 'Player.Repeat', 'default': 'off'}, 'shuffled': {'default': False, 'type': 'boolean'}, 'speed': {'default': 0, 'type': 'integer'}, 'subtitleenabled': {'default': False, 'type': 'boolean'}, 'subtitles': {'items': {'$ref': 'Player.Subtitle'}, 'type': 'array'}, 'time': {'$ref': 'Global.Time', 'description': 'A duration.'}, 'totaltime': {'$ref': 'Global.Time', 'description': 'A duration.'}, 'type': {'$ref': 'Player.Type', 'default': 'video'}, 'videostreams': {'items': {'$ref': 'Player.Video.Stream'}, 'type': 'array'}}, 'type': 'object'}, 'Player.Repeat': {'default': 'off', 'enums': ['off', 'one', 'all'], 'id': 'Player.Repeat', 'type': 'string'}, 'Player.Speed': {'id': 'Player.Speed', 'properties': {'speed': {'default': 0, 'type': 'integer'}}, 'required': True, 'type': 'object'}, 'Player.Subtitle': {'id': 'Player.Subtitle', 'properties': {'index': {'minimum': 0, 'required': True, 'type': 'integer'}, 'isdefault': {'required': True, 'type': 'boolean'}, 'isforced': {'required': True, 'type': 'boolean'}, 'isimpaired': {'required': True, 'type': 'boolean'}, 'language': {'required': True, 'type': 'string'}, 'name': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'Player.Type': {'default': 'video', 'enums': ['video', 'audio', 'picture'], 'id': 'Player.Type', 'type': 'string'}, 'Player.Video.Stream': {'id': 'Player.Video.Stream', 'properties': {'codec': {'required': True, 'type': 'string'}, 'height': {'required': True, 'type': 'integer'}, 'index': {'minimum': 0, 'required': True, 'type': 'integer'}, 'language': {'required': True, 'type': 'string'}, 'name': {'required': True, 'type': 'string'}, 'width': {'required': True, 'type': 'integer'}}, 'type': 'object'}, 'Player.ViewMode': {'default': 'normal', 'enums': ['normal', 'zoom', 'stretch4x3', 'widezoom', 'stretch16x9', 'original', 'stretch16x9nonlin', 'zoom120width', 'zoom110width'], 'id': 'Player.ViewMode', 'type': 'string'}, 'Playlist.Id': {'default': -1, 'id': 'Playlist.Id', 'maximum': 2, 'minimum': 0, 'type': 'integer'}, 'Playlist.Item': {'id': 'Playlist.Item', 'type': [{'additionalProperties': False, 'properties': {'file': {'description': 'Path to a file (not a directory) to be added to the playlist', 'required': True, 'type': 'string'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'directory': {'required': True, 'type': 'string'}, 'media': {'$ref': 'Files.Media', 'default': 'files'}, 'recursive': {'default': False, 'type': 'boolean'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'movieid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'episodeid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'musicvideoid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'artistid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'albumid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'songid': {'$ref': 'Library.Id', 'required': True}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'genreid': {'$ref': 'Library.Id', 'description': 'Identification of a genre from the AudioLibrary', 'required': True}}, 'type': 'object'}]}, 'Playlist.Position': {'default': -1, 'id': 'Playlist.Position', 'minimum': 0, 'type': 'integer'}, 'Playlist.Property.Name': {'default': 'type', 'enums': ['type', 'size'], 'id': 'Playlist.Property.Name', 'type': 'string'}, 'Playlist.Property.Value': {'id': 'Playlist.Property.Value', 'properties': {'size': {'default': 0, 'minimum': 0, 'type': 'integer'}, 'type': {'$ref': 'Playlist.Type', 'default': 'unknown'}}, 'type': 'object'}, 'Playlist.Type': {'default': 'unknown', 'enums': ['unknown', 'video', 'audio', 'picture', 'mixed'], 'id': 'Playlist.Type', 'type': 'string'}, 'Profiles.Details.Profile': {'extends': 'Item.Details.Base', 'id': 'Profiles.Details.Profile', 'properties': {'lockmode': {'default': 0, 'type': 'integer'}, 'thumbnail': {'default': '', 'type': 'string'}}}, 'Profiles.Fields.Profile': {'extends': 'Item.Fields.Base', 'id': 'Profiles.Fields.Profile', 'items': {'enums': ['thumbnail', 'lockmode'], 'type': 'string'}}, 'Profiles.Password': {'id': 'Profiles.Password', 'properties': {'encryption': {'default': 'md5', 'description': 'Password Encryption', 'enums': ['none', 'md5'], 'type': 'string'}, 'value': {'description': 'Password', 'required': True, 'type': 'string'}}, 'type': 'object'}, 'Setting.Details.Base': {'id': 'Setting.Details.Base', 'properties': {'help': {'default': '', 'type': 'string'}, 'id': {'minLength': 1, 'required': True, 'type': 'string'}, 'label': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'Setting.Details.Category': {'additionalProperties': False, 'extends': 'Setting.Details.Base', 'id': 'Setting.Details.Category', 'properties': {'groups': {'items': {'$ref': 'Setting.Details.Group'}, 'minItems': 1, 'type': 'array', 'uniqueItems': True}}}, 'Setting.Details.Control': {'id': 'Setting.Details.Control', 'type': [{'$ref': 'Setting.Details.ControlCheckmark'}, {'$ref': 'Setting.Details.ControlSpinner'}, {'$ref': 'Setting.Details.ControlEdit'}, {'$ref': 'Setting.Details.ControlButton'}, {'$ref': 'Setting.Details.ControlList'}, {'$ref': 'Setting.Details.ControlSlider'}, {'$ref': 'Setting.Details.ControlRange'}, {'$ref': 'Setting.Details.ControlLabel'}]}, 'Setting.Details.ControlBase': {'id': 'Setting.Details.ControlBase', 'properties': {'delayed': {'required': True, 'type': 'boolean'}, 'format': {'required': True, 'type': 'string'}, 'type': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'Setting.Details.ControlButton': {'extends': 'Setting.Details.ControlHeading', 'id': 'Setting.Details.ControlButton', 'properties': {'type': {'enums': ['button'], 'required': True, 'type': 'string'}}}, 'Setting.Details.ControlCheckmark': {'extends': 'Setting.Details.ControlBase', 'id': 'Setting.Details.ControlCheckmark', 'properties': {'format': {'enums': ['boolean'], 'required': True, 'type': 'string'}, 'type': {'enums': ['toggle'], 'required': True, 'type': 'string'}}}, 'Setting.Details.ControlEdit': {'extends': 'Setting.Details.ControlHeading', 'id': 'Setting.Details.ControlEdit', 'properties': {'hidden': {'required': True, 'type': 'boolean'}, 'type': {'enums': ['edit'], 'required': True, 'type': 'string'}, 'verifynewvalue': {'required': True, 'type': 'boolean'}}}, 'Setting.Details.ControlHeading': {'extends': 'Setting.Details.ControlBase', 'id': 'Setting.Details.ControlHeading', 'properties': {'heading': {'default': '', 'type': 'string'}}}, 'Setting.Details.ControlLabel': {'extends': 'Setting.Details.ControlBase', 'id': 'Setting.Details.ControlLabel', 'properties': {'format': {'enums': ['string'], 'required': True, 'type': 'string'}, 'type': {'enums': ['label'], 'required': True, 'type': 'string'}}}, 'Setting.Details.ControlList': {'extends': 'Setting.Details.ControlHeading', 'id': 'Setting.Details.ControlList', 'properties': {'multiselect': {'required': True, 'type': 'boolean'}, 'type': {'enums': ['list'], 'required': True, 'type': 'string'}}}, 'Setting.Details.ControlRange': {'extends': 'Setting.Details.ControlBase', 'id': 'Setting.Details.ControlRange', 'properties': {'formatlabel': {'required': True, 'type': 'string'}, 'formatvalue': {'required': True, 'type': 'string'}, 'type': {'enums': ['range'], 'required': True, 'type': 'string'}}}, 'Setting.Details.ControlSlider': {'extends': 'Setting.Details.ControlHeading', 'id': 'Setting.Details.ControlSlider', 'properties': {'formatlabel': {'required': True, 'type': 'string'}, 'popup': {'required': True, 'type': 'boolean'}, 'type': {'enums': ['slider'], 'required': True, 'type': 'string'}}}, 'Setting.Details.ControlSpinner': {'extends': 'Setting.Details.ControlBase', 'id': 'Setting.Details.ControlSpinner', 'properties': {'formatlabel': {'default': '', 'type': 'string'}, 'minimumlabel': {'default': '', 'type': 'string'}, 'type': {'enums': ['spinner'], 'required': True, 'type': 'string'}}}, 'Setting.Details.Group': {'additionalProperties': False, 'id': 'Setting.Details.Group', 'properties': {'id': {'minLength': 1, 'required': True, 'type': 'string'}, 'settings': {'items': {'$ref': 'Setting.Details.Setting'}, 'minItems': 1, 'type': 'array', 'uniqueItems': True}}, 'type': 'object'}, 'Setting.Details.Section': {'additionalProperties': False, 'extends': 'Setting.Details.Base', 'id': 'Setting.Details.Section', 'properties': {'categories': {'items': {'$ref': 'Setting.Details.Category'}, 'minItems': 1, 'type': 'array', 'uniqueItems': True}}}, 'Setting.Details.Setting': {'id': 'Setting.Details.Setting', 'type': [{'$ref': 'Setting.Details.SettingBool'}, {'$ref': 'Setting.Details.SettingInt'}, {'$ref': 'Setting.Details.SettingNumber'}, {'$ref': 'Setting.Details.SettingString'}, {'$ref': 'Setting.Details.SettingAction'}, {'$ref': 'Setting.Details.SettingList'}, {'$ref': 'Setting.Details.SettingPath'}, {'$ref': 'Setting.Details.SettingAddon'}, {'$ref': 'Setting.Details.SettingDate'}, {'$ref': 'Setting.Details.SettingTime'}]}, 'Setting.Details.SettingAction': {'additionalProperties': False, 'extends': 'Setting.Details.SettingBase', 'id': 'Setting.Details.SettingAction', 'properties': {'data': {'required': True, 'type': 'string'}}}, 'Setting.Details.SettingAddon': {'additionalProperties': False, 'extends': 'Setting.Details.SettingString', 'id': 'Setting.Details.SettingAddon', 'properties': {'addontype': {'$ref': 'Addon.Types', 'required': True}}}, 'Setting.Details.SettingBase': {'additionalProperties': False, 'extends': 'Setting.Details.Base', 'id': 'Setting.Details.SettingBase', 'properties': {'control': {'$ref': 'Setting.Details.Control'}, 'enabled': {'required': True, 'type': 'boolean'}, 'level': {'$ref': 'Setting.Level', 'required': True}, 'parent': {'default': '', 'type': 'string'}, 'type': {'$ref': 'Setting.Type', 'required': True}}}, 'Setting.Details.SettingBool': {'additionalProperties': False, 'extends': 'Setting.Details.SettingBase', 'id': 'Setting.Details.SettingBool', 'properties': {'default': {'required': True, 'type': 'boolean'}, 'value': {'required': True, 'type': 'boolean'}}}, 'Setting.Details.SettingDate': {'additionalProperties': False, 'extends': 'Setting.Details.SettingString', 'id': 'Setting.Details.SettingDate'}, 'Setting.Details.SettingInt': {'additionalProperties': False, 'extends': 'Setting.Details.SettingBase', 'id': 'Setting.Details.SettingInt', 'properties': {'default': {'required': True, 'type': 'integer'}, 'maximum': {'default': 0, 'type': 'integer'}, 'minimum': {'default': 0, 'type': 'integer'}, 'options': {'items': {'properties': {'label': {'required': True, 'type': 'string'}, 'value': {'required': True, 'type': 'integer'}}, 'type': 'object'}, 'type': 'array'}, 'step': {'default': 0, 'type': 'integer'}, 'value': {'required': True, 'type': 'integer'}}}, 'Setting.Details.SettingList': {'additionalProperties': False, 'extends': 'Setting.Details.SettingBase', 'id': 'Setting.Details.SettingList', 'properties': {'default': {'$ref': 'Setting.Value.List', 'required': True}, 'definition': {'$ref': 'Setting.Details.Setting', 'required': True}, 'delimiter': {'required': True, 'type': 'string'}, 'elementtype': {'$ref': 'Setting.Type', 'required': True}, 'maximumitems': {'default': 0, 'type': 'integer'}, 'minimumitems': {'default': 0, 'type': 'integer'}, 'value': {'$ref': 'Setting.Value.List', 'required': True}}}, 'Setting.Details.SettingNumber': {'additionalProperties': False, 'extends': 'Setting.Details.SettingBase', 'id': 'Setting.Details.SettingNumber', 'properties': {'default': {'required': True, 'type': 'number'}, 'maximum': {'required': True, 'type': 'number'}, 'minimum': {'required': True, 'type': 'number'}, 'step': {'required': True, 'type': 'number'}, 'value': {'required': True, 'type': 'number'}}}, 'Setting.Details.SettingPath': {'additionalProperties': False, 'extends': 'Setting.Details.SettingString', 'id': 'Setting.Details.SettingPath', 'properties': {'sources': {'items': {'type': 'string'}, 'type': 'array'}, 'writable': {'required': True, 'type': 'boolean'}}}, 'Setting.Details.SettingString': {'extends': 'Setting.Details.SettingBase', 'id': 'Setting.Details.SettingString', 'properties': {'allowempty': {'required': True, 'type': 'boolean'}, 'default': {'required': True, 'type': 'string'}, 'options': {'items': {'properties': {'label': {'required': True, 'type': 'string'}, 'value': {'required': True, 'type': 'string'}}, 'type': 'object'}, 'type': 'array'}, 'value': {'required': True, 'type': 'string'}}}, 'Setting.Details.SettingTime': {'additionalProperties': False, 'extends': 'Setting.Details.SettingString', 'id': 'Setting.Details.SettingTime'}, 'Setting.Level': {'default': 'basic', 'enums': ['basic', 'standard', 'advanced', 'expert'], 'id': 'Setting.Level', 'type': 'string'}, 'Setting.Type': {'default': 'boolean', 'enums': ['boolean', 'integer', 'number', 'string', 'action', 'list', 'path', 'addon', 'date', 'time'], 'id': 'Setting.Type', 'type': 'string'}, 'Setting.Value': {'default': None, 'id': 'Setting.Value', 'type': [{'type': 'boolean'}, {'type': 'integer'}, {'type': 'number'}, {'type': 'string'}]}, 'Setting.Value.Extended': {'default': None, 'id': 'Setting.Value.Extended', 'type': [{'type': 'boolean'}, {'type': 'integer'}, {'type': 'number'}, {'type': 'string'}, {'$ref': 'Setting.Value.List'}]}, 'Setting.Value.List': {'id': 'Setting.Value.List', 'items': {'$ref': 'Setting.Value'}, 'type': 'array'}, 'System.Property.Name': {'default': 'canshutdown', 'enums': ['canshutdown', 'cansuspend', 'canhibernate', 'canreboot'], 'id': 'System.Property.Name', 'type': 'string'}, 'System.Property.Value': {'id': 'System.Property.Value', 'properties': {'canhibernate': {'default': False, 'type': 'boolean'}, 'canreboot': {'default': False, 'type': 'boolean'}, 'canshutdown': {'default': False, 'type': 'boolean'}, 'cansuspend': {'default': False, 'type': 'boolean'}}, 'type': 'object'}, 'Textures.Details.Size': {'id': 'Textures.Details.Size', 'properties': {'height': {'default': 0, 'description': 'Height of texture', 'type': 'integer'}, 'lastused': {'default': '', 'description': 'Date of last use', 'type': 'string'}, 'size': {'default': 0, 'description': 'Size of the texture (1 == largest)', 'type': 'integer'}, 'usecount': {'default': 0, 'description': 'Number of uses', 'type': 'integer'}, 'width': {'default': 0, 'description': 'Width of texture', 'type': 'integer'}}, 'type': 'object'}, 'Textures.Details.Texture': {'id': 'Textures.Details.Texture', 'properties': {'cachedurl': {'default': '', 'description': 'Cached URL on disk', 'type': 'string'}, 'imagehash': {'default': '', 'description': 'Hash of image', 'type': 'string'}, 'lasthashcheck': {'default': '', 'description': 'Last time source was checked for changes', 'type': 'string'}, 'sizes': {'items': {'$ref': 'Textures.Details.Size'}, 'type': 'array'}, 'textureid': {'$ref': 'Library.Id', 'default': -1}, 'url': {'default': '', 'description': 'Original source URL', 'type': 'string'}}, 'type': 'object'}, 'Textures.Fields.Texture': {'extends': 'Item.Fields.Base', 'id': 'Textures.Fields.Texture', 'items': {'enums': ['url', 'cachedurl', 'lasthashcheck', 'imagehash', 'sizes'], 'type': 'string'}}, 'Video.Cast': {'id': 'Video.Cast', 'items': {'additionalProperties': False, 'properties': {'name': {'required': True, 'type': 'string'}, 'order': {'required': True, 'type': 'integer'}, 'role': {'required': True, 'type': 'string'}, 'thumbnail': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'type': 'array'}, 'Video.Details.Base': {'extends': 'Media.Details.Base', 'id': 'Video.Details.Base', 'properties': {'art': {'$ref': 'Media.Artwork'}, 'playcount': {'default': 0, 'type': 'integer'}}}, 'Video.Details.Episode': {'extends': 'Video.Details.File', 'id': 'Video.Details.Episode', 'properties': {'cast': {'$ref': 'Video.Cast'}, 'episode': {'default': 0, 'type': 'integer'}, 'episodeid': {'$ref': 'Library.Id', 'required': True}, 'firstaired': {'default': '', 'type': 'string'}, 'originaltitle': {'default': '', 'type': 'string'}, 'productioncode': {'default': '', 'type': 'string'}, 'rating': {'default': 0.0, 'type': 'number'}, 'ratings': {'default': None, 'type': 'any'}, 'season': {'default': 0, 'type': 'integer'}, 'seasonid': {'$ref': 'Library.Id', 'default': -1}, 'showtitle': {'default': '', 'type': 'string'}, 'specialsortepisode': {'default': 0, 'type': 'integer'}, 'specialsortseason': {'default': 0, 'type': 'integer'}, 'tvshowid': {'$ref': 'Library.Id', 'default': -1}, 'uniqueid': {'$ref': 'Media.UniqueID'}, 'userrating': {'default': 0, 'type': 'integer'}, 'votes': {'default': '', 'type': 'string'}, 'writer': {'$ref': 'Array.String'}}}, 'Video.Details.File': {'extends': 'Video.Details.Item', 'id': 'Video.Details.File', 'properties': {'director': {'$ref': 'Array.String'}, 'resume': {'$ref': 'Video.Resume'}, 'runtime': {'default': 0, 'description': 'Runtime in seconds', 'type': 'integer'}, 'streamdetails': {'$ref': 'Video.Streams'}}}, 'Video.Details.Item': {'extends': 'Video.Details.Media', 'id': 'Video.Details.Item', 'properties': {'dateadded': {'default': '', 'type': 'string'}, 'file': {'default': '', 'type': 'string'}, 'lastplayed': {'default': '', 'type': 'string'}, 'plot': {'default': '', 'type': 'string'}}}, 'Video.Details.Media': {'extends': 'Video.Details.Base', 'id': 'Video.Details.Media', 'properties': {'title': {'default': '', 'type': 'string'}}}, 'Video.Details.Movie': {'extends': 'Video.Details.File', 'id': 'Video.Details.Movie', 'properties': {'cast': {'$ref': 'Video.Cast'}, 'country': {'$ref': 'Array.String'}, 'genre': {'$ref': 'Array.String'}, 'imdbnumber': {'default': '', 'type': 'string'}, 'movieid': {'$ref': 'Library.Id', 'required': True}, 'mpaa': {'default': '', 'type': 'string'}, 'originaltitle': {'default': '', 'type': 'string'}, 'plotoutline': {'default': '', 'type': 'string'}, 'premiered': {'default': '', 'type': 'string'}, 'rating': {'default': 0.0, 'type': 'number'}, 'ratings': {'default': None, 'type': 'any'}, 'set': {'default': '', 'type': 'string'}, 'setid': {'$ref': 'Library.Id', 'default': -1}, 'showlink': {'$ref': 'Array.String'}, 'sorttitle': {'default': '', 'type': 'string'}, 'studio': {'$ref': 'Array.String'}, 'tag': {'$ref': 'Array.String'}, 'tagline': {'default': '', 'type': 'string'}, 'top250': {'default': 0, 'type': 'integer'}, 'trailer': {'default': '', 'type': 'string'}, 'uniqueid': {'$ref': 'Media.UniqueID'}, 'userrating': {'default': 0, 'type': 'integer'}, 'votes': {'default': '', 'type': 'string'}, 'writer': {'$ref': 'Array.String'}, 'year': {'default': 0, 'type': 'integer'}}}, 'Video.Details.MovieSet': {'extends': 'Video.Details.Media', 'id': 'Video.Details.MovieSet', 'properties': {'plot': {'default': '', 'type': 'string'}, 'setid': {'$ref': 'Library.Id', 'required': True}}}, 'Video.Details.MovieSet.Extended': {'extends': 'Video.Details.MovieSet', 'id': 'Video.Details.MovieSet.Extended', 'properties': {'limits': {'$ref': 'List.LimitsReturned', 'required': True}, 'movies': {'items': {'$ref': 'Video.Details.Movie'}, 'type': 'array'}}}, 'Video.Details.MusicVideo': {'extends': 'Video.Details.File', 'id': 'Video.Details.MusicVideo', 'properties': {'album': {'default': '', 'type': 'string'}, 'artist': {'$ref': 'Array.String'}, 'genre': {'$ref': 'Array.String'}, 'musicvideoid': {'$ref': 'Library.Id', 'required': True}, 'premiered': {'default': '', 'type': 'string'}, 'rating': {'default': 0.0, 'type': 'number'}, 'studio': {'$ref': 'Array.String'}, 'tag': {'$ref': 'Array.String'}, 'track': {'default': 0, 'type': 'integer'}, 'userrating': {'default': 0, 'type': 'integer'}, 'year': {'default': 0, 'type': 'integer'}}}, 'Video.Details.Season': {'extends': 'Video.Details.Base', 'id': 'Video.Details.Season', 'properties': {'episode': {'default': 0, 'type': 'integer'}, 'season': {'required': True, 'type': 'integer'}, 'seasonid': {'$ref': 'Library.Id', 'required': True}, 'showtitle': {'default': '', 'type': 'string'}, 'title': {'default': '', 'type': 'string'}, 'tvshowid': {'$ref': 'Library.Id', 'default': -1}, 'userrating': {'default': 0, 'type': 'integer'}, 'watchedepisodes': {'default': 0, 'type': 'integer'}}}, 'Video.Details.TVShow': {'extends': 'Video.Details.Item', 'id': 'Video.Details.TVShow', 'properties': {'cast': {'$ref': 'Video.Cast'}, 'episode': {'default': 0, 'type': 'integer'}, 'episodeguide': {'default': '', 'type': 'string'}, 'genre': {'$ref': 'Array.String'}, 'imdbnumber': {'default': '', 'type': 'string'}, 'mpaa': {'default': '', 'type': 'string'}, 'originaltitle': {'default': '', 'type': 'string'}, 'premiered': {'default': '', 'type': 'string'}, 'rating': {'default': 0.0, 'type': 'number'}, 'ratings': {'default': None, 'type': 'any'}, 'runtime': {'default': 0, 'description': 'Runtime in seconds', 'type': 'integer'}, 'season': {'default': 0, 'type': 'integer'}, 'sorttitle': {'default': '', 'type': 'string'}, 'status': {'default': '', 'description': "Returns 'returning series', 'in production', 'planned', 'cancelled' or 'ended'", 'type': 'string'}, 'studio': {'$ref': 'Array.String'}, 'tag': {'$ref': 'Array.String'}, 'tvshowid': {'$ref': 'Library.Id', 'required': True}, 'uniqueid': {'$ref': 'Media.UniqueID'}, 'userrating': {'default': 0, 'type': 'integer'}, 'votes': {'default': '', 'type': 'string'}, 'watchedepisodes': {'default': 0, 'type': 'integer'}, 'year': {'default': 0, 'type': 'integer'}}}, 'Video.Fields.Episode': {'extends': 'Item.Fields.Base', 'id': 'Video.Fields.Episode', 'items': {'description': 'Requesting the cast, ratings, streamdetails, uniqueid and/or tag field will result in increased response times', 'enums': ['title', 'plot', 'votes', 'rating', 'writer', 'firstaired', 'playcount', 'runtime', 'director', 'productioncode', 'season', 'episode', 'originaltitle', 'showtitle', 'cast', 'streamdetails', 'lastplayed', 'fanart', 'thumbnail', 'file', 'resume', 'tvshowid', 'dateadded', 'uniqueid', 'art', 'specialsortseason', 'specialsortepisode', 'userrating', 'seasonid', 'ratings'], 'type': 'string'}}, 'Video.Fields.Movie': {'extends': 'Item.Fields.Base', 'id': 'Video.Fields.Movie', 'items': {'description': 'Requesting the cast, ratings, showlink, streamdetails, uniqueid and/or tag field will result in increased response times', 'enums': ['title', 'genre', 'year', 'rating', 'director', 'trailer', 'tagline', 'plot', 'plotoutline', 'originaltitle', 'lastplayed', 'playcount', 'writer', 'studio', 'mpaa', 'cast', 'country', 'imdbnumber', 'runtime', 'set', 'showlink', 'streamdetails', 'top250', 'votes', 'fanart', 'thumbnail', 'file', 'sorttitle', 'resume', 'setid', 'dateadded', 'tag', 'art', 'userrating', 'ratings', 'premiered', 'uniqueid'], 'type': 'string'}}, 'Video.Fields.MovieSet': {'extends': 'Item.Fields.Base', 'id': 'Video.Fields.MovieSet', 'items': {'enums': ['title', 'playcount', 'fanart', 'thumbnail', 'art', 'plot'], 'type': 'string'}}, 'Video.Fields.MusicVideo': {'extends': 'Item.Fields.Base', 'id': 'Video.Fields.MusicVideo', 'items': {'description': 'Requesting the streamdetails and/or tag field will result in increased response times', 'enums': ['title', 'playcount', 'runtime', 'director', 'studio', 'year', 'plot', 'album', 'artist', 'genre', 'track', 'streamdetails', 'lastplayed', 'fanart', 'thumbnail', 'file', 'resume', 'dateadded', 'tag', 'art', 'rating', 'userrating', 'premiered'], 'type': 'string'}}, 'Video.Fields.Season': {'extends': 'Item.Fields.Base', 'id': 'Video.Fields.Season', 'items': {'enums': ['season', 'showtitle', 'playcount', 'episode', 'fanart', 'thumbnail', 'tvshowid', 'watchedepisodes', 'art', 'userrating', 'title'], 'type': 'string'}}, 'Video.Fields.TVShow': {'extends': 'Item.Fields.Base', 'id': 'Video.Fields.TVShow', 'items': {'description': 'Requesting the cast, ratings, uniqueid and/or tag field will result in increased response times', 'enums': ['title', 'genre', 'year', 'rating', 'plot', 'studio', 'mpaa', 'cast', 'playcount', 'episode', 'imdbnumber', 'premiered', 'votes', 'lastplayed', 'fanart', 'thumbnail', 'file', 'originaltitle', 'sorttitle', 'episodeguide', 'season', 'watchedepisodes', 'dateadded', 'tag', 'art', 'userrating', 'ratings', 'runtime', 'uniqueid'], 'type': 'string'}}, 'Video.Rating': {'id': 'Video.Rating', 'properties': {'default': {'default': False, 'type': 'boolean'}, 'rating': {'required': True, 'type': 'number'}, 'votes': {'default': 0, 'type': 'integer'}}, 'type': 'object'}, 'Video.Ratings': {'additionalProperties': {'$ref': 'Video.Rating'}, 'id': 'Video.Ratings', 'type': 'object'}, 'Video.Ratings.Set': {'additionalProperties': {'default': None, 'type': [{'type': 'null'}, {'$ref': 'Video.Rating'}]}, 'id': 'Video.Ratings.Set', 'type': 'object'}, 'Video.Resume': {'additionalProperties': False, 'id': 'Video.Resume', 'properties': {'position': {'default': 0.0, 'minimum': 0.0, 'type': 'number'}, 'total': {'default': 0.0, 'minimum': 0.0, 'type': 'number'}}, 'type': 'object'}, 'Video.Streams': {'additionalProperties': False, 'id': 'Video.Streams', 'properties': {'audio': {'items': {'additionalProperties': False, 'properties': {'channels': {'default': 0, 'type': 'integer'}, 'codec': {'default': '', 'type': 'string'}, 'language': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'minItems': 1, 'type': 'array'}, 'subtitle': {'items': {'additionalProperties': False, 'properties': {'language': {'default': '', 'type': 'string'}}, 'type': 'object'}, 'minItems': 1, 'type': 'array'}, 'video': {'items': {'additionalProperties': False, 'properties': {'aspect': {'default': 0.0, 'type': 'number'}, 'codec': {'default': '', 'type': 'string'}, 'duration': {'default': 0, 'type': 'integer'}, 'height': {'default': 0, 'type': 'integer'}, 'width': {'default': 0, 'type': 'integer'}}, 'type': 'object'}, 'minItems': 1, 'type': 'array'}}, 'type': 'object'}}, 'version': '12.3.0'}