Package: kodi-cli
kodi-cliCommand Line Interface for KodiThis tool can be used from the command line to execute commands against a target Kodi host via the RPC interface defined athttps://kodi.wiki/view/JSON-RPC_API/v12.The available commands are defined via jsons files (methods.json and types.json) which describes all the namespaces, methods, parameters (methods.json) and reference types (types.json) for managing the kodi device remotely. These files are copied from the kodi source repository for kodi v19 (matrix).NoteNamespace Methods and Types are case-sensitive.  Use help parameter or refer to theKodi RPC pagefor proper capitalization.Anentrypointis created on install that allows the script to be run without specifyingpython kodi_cli.py, simply typekodi-clito execute the script.The documentation will reflect calls using the entrypoint (kodi-cli) as described above.Overall DescriptionCommandsare based on Kodinamespaces, methods and parameters.  Each namespace (i.e. Application, System,...) has a set of pre-defned methods.  When executing a command you supply theNamespace.Method parameter(s)(case-sensitive).For example, to display the mute and volume level settings on host kodi001, the command is constructed as follows:kodi-cli -H kodi001 -f Application.GetProperties properties=[muted,volume]-H kodi001identifies the target host-findicates the output should be formattedApplication.GetPropertiesis the parameterApplicationis the namespaceGetPropertiesis the methodproperties=[muted,volume]are the parametersThe output of the tool is the json response from the Kodi endpoint the command was targeted to.{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "muted": false,
    "volume": 100
  }
}When defining an object type parameter, create it as a pseudo dictionary as below:kodi-cli -H kodi001 Addons.GetAddons properties=[name,version,summary] limits={start:0,end:99}limitsis an object, that contains two values start and end.Some terms:TermDescriptionnamespaceThe data model is split into namespace components which can be called via the APImethodsEach namespace has a number of methods which perform some function within that namespaceparameter(s)Each namespace.method command may have required or optional parameters to control the outputcommandA command is a namespace, method, parameter combiniation used to control Kodi function (fmt: Namespace.Method)Usageusage: kodi-cli [-h] [-H HOST] [-P PORT] [-u USER] [-p PASSWORD] [-C] [-f] [-v] [-i] [command [parameter ...]]

Kodi CLI controller v0.2.1

positional arguments:
  command                   RPC command namespace.method (help namespace to list)

optional arguments:
  -h, --help            show this help message and exit
  -H HOST, --host HOST  Kodi hostname
  -P PORT, --port PORT  Kodi RPC listen port
  -u USER, --kodi-user USER  
                        Kodi authenticaetion username
  -p PASSWORD, --kodi-password PASSWORD
                        Kodi autentication password
  -C, --create_config   Create empty config
  -CO, --create_config_overwrite
                        Create default config, overwrite if exists
  -f, --format_output   Format json output
  -c, --csv-output      Format csv output (only specific commands)
  -v, --verbose         Verbose output, -v = INFO, -vv = DEBUG
  -i, --info            display program info and quitTIPS - When calling the script:actiondescriptionadd -h optionto display script syntax and list of option parametersenter helpas a parameter for help on namespace or namespace.method or namespace.typeadd -v to get json defintionadd -ito output runtime and program informationadd -fto format the json output into a friendly formatadd -C or (-CO)to create a config file with runtime defaults (see "Create config file to store defaults" below)Help commands:You can get help from the command line to view namespaces, namespace methods and calling requirements.Help Examplesactionexamplelist of namespaceskodi-cli helpMethods for Namespacekodi-cli Application helpParameters for Methodkodi-cli Application.GetProperties helpType/Referenceskodi-cli List.Filter.Albumsto get the type defintion for the referenceDetails for namespaces, methods and type parameters may be found athttps://kodi.wiki/view/JSON-RPC_API/v12Prerequsites:Python 3.7+Python packagesrequests packageCode can be installed via pip or pipx:
- pip install kodi-cli [--user]
- pipx install kodi-cliKodi configurationRemote control via HTTP must be enabled.Enable in Kodi UI - Settings -> Services -> ControlUsage ExamplesCreate a config file to store defaultsTo minimize command-line entry, you can store defaults in a config file which will default values on startup.  The
values can be over-ridded at run-time by providing the optional command-line argument.To create a default config file, type your standard defaults as if you were going to execute the CLI and add -C (or -CO)
at the end.
The config file will be written with the values.SYNTAX:
  kodi-cli -u myId -p myPassword -P 8080 -C

OUTPUT:
  a file kodi_cli.cfg will be written as:
...
[LOGGING]
logging_enabled = False
logging_filename = ./logs/kodi_cli.log
logging_rotation = 1 MB
logging_retention = 3
logging_level = INFO
logger_blacklist = 

[SERVER]
host = localhost
port = 8080

[LOGIN]
kodi_user = kodi
kodi_pw = kodi

[OUTPUT]
format_output = False
csv_output = FalseNOTE:if current file does not exist, it will be created as ~/.kodi_cli/kodi_cli.cfgif current file does exist error will be thrown unless -CO option is used.user and password is stored in clear textList allnamespacesNamespaces are modules in Kodi, each namespace manages differ aspects of the Kodi interfaceSYNTAX:
  kodi-cli help

OUTPUT:

  Kodi namespaces -
    Namespace       Methods
    --------------- ----------------------------------------------------------------------------
    Addons          ExecuteAddon, GetAddonDetails, GetAddons, SetAddonEnabled

    Application     GetProperties, Quit, SetMute, SetVolume

    AudioLibrary    Clean, GetAlbumDetails, GetAlbums, GetArtistDetails,
                    GetArtists, Scan

    Favorites       AddFavorite, GetFavorites

    GUI             ActivateWindow, ShowNotification

    Input           Back, ButtonEvent, ContextMenu, Down, ExecuteAction,
                    Home, Info, Left, Right, Select, SendText,
                    ShowCodec, ShowOSD, ShowPlayProcessInfo, Up
    ...List all namespacemethodsEach namespace has a number of methods that can be called.To get a list of supported of supported methods for theApplicationnamespaceSYNTAX:
  kodi-cli Application help
  or
  kodi-cli Application

OUTPUT:

  Application Namespace Methods:

  Method                    Description
  ------------------------- --------------------------------------------
  Application.GetProperties Retrieves the values of the given properties
  Application.Quit          Quit application
  Application.SetMute       Toggle mute/unmute
  Application.SetVolume     Set the current volumeList themethod calling signaturefor a namespace methodList the sytax for the Application.SetMute command————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Signature    : Application.SetMute(mute)
Description  : Toggle mute/unmute
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
mute
   Required  : True
   Reference : Global.Toggle
   Type      : boolean: True,False
               string: enum [toggle]
   Values    : True, FalseTo use:kodi-cli -H kodi001 Application.SetMute mute=falseCommand Execution ExamplesToggle Mute on/offTo toggle the mute on, then offFirst call will toggle mute on, 2nd call will toggle mute off.SYNTAX:
  kodi-cli -H ServerName Application.SetMute mute=toggle

OUTPUT:
  kodi-cli -H MyKodiServer Application.SetMute mute=toggle
  {"id":1,"jsonrpc":"2.0","result":true}

  kodi-cli -H MyKodiServer Application.SetMute mute=toggle
  {"id":1,"jsonrpc":"2.0","result":false}Retrieve Application PropertiesTo retrieve the muted status and volume level for server kodi001SYNTAX:
  kodi-cli -H kodi001 Application.GetProperties properties=[muted,volume] -f

OUTPUT:
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "muted": false,
    "volume": 100
  }
}List AddonsTo retrieve the list of the first five AddonsSYNTAX:
  kodi-cli -H kodi001 Addons.GetAddons properties=[name,version,summary] limits={start:0,end:5} -f

OUTPUT:
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "addons": [
      {
        "addonid": "audioencoder.kodi.builtin.aac",
        "name": "AAC encoder",
        "summary": "AAC Audio Encoder",
        "type": "kodi.audioencoder",
        "version": "1.0.2"
      },

      ...
      
      {
        "addonid": "webinterface.default",
        "name": "Kodi web interface - Chorus2",
        "summary": "Default web interface",
        "type": "xbmc.webinterface",
        "version": "19.x-2.4.8"
      }
    ],
    "limits": {
      "end": 5,
      "start": 0,
      "total": 34
    }
  }
}Display a notification on Kodi UITo display a warning message on Kodi running on kodi001 for 5 secondsSYNTAX:
   kodi-cli -H kodi001 GUI.ShowNotification title="Dinner Time" message="Time to eat!" image="warning" displaytime=5000

OUTPUT:
{"id":1,"jsonrpc":"2.0","result":"OK"}Still TODO:Edit parameters prior to call to avoid runtime error.Provide additional help/runtime detail on parametersDifferent output formats (rather than just raw and formatted json)