{"id":13731591,"url":"https://github.com/matthuisman/docker-kodi-headless","last_synced_at":"2025-05-08T05:30:21.277Z","repository":{"id":45255163,"uuid":"224729567","full_name":"matthuisman/docker-kodi-headless","owner":"matthuisman","description":"A headless install of kodi in a docker container","archived":false,"fork":false,"pushed_at":"2025-05-01T08:21:43.000Z","size":262,"stargazers_count":158,"open_issues_count":0,"forks_count":16,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-05-01T09:28:02.586Z","etag":null,"topics":["docker","kodi"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matthuisman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"matthuisman","patreon":"matthewhuisman","open_collective":null,"ko_fi":"matthuisman","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"https://www.matthuisman.nz/support-me"}},"created_at":"2019-11-28T21:05:37.000Z","updated_at":"2025-05-01T08:21:47.000Z","dependencies_parsed_at":"2023-02-17T00:01:00.746Z","dependency_job_id":"d5b65410-585c-459c-8169-293ca021d04c","html_url":"https://github.com/matthuisman/docker-kodi-headless","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthuisman%2Fdocker-kodi-headless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthuisman%2Fdocker-kodi-headless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthuisman%2Fdocker-kodi-headless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthuisman%2Fdocker-kodi-headless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matthuisman","download_url":"https://codeload.github.com/matthuisman/docker-kodi-headless/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253008265,"owners_count":21839623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","kodi"],"created_at":"2024-08-03T02:01:33.660Z","updated_at":"2025-05-08T05:30:21.268Z","avatar_url":"https://github.com/matthuisman.png","language":null,"funding_links":["https://github.com/sponsors/matthuisman","https://patreon.com/matthewhuisman","https://ko-fi.com/matthuisman","https://www.matthuisman.nz/support-me"],"categories":["Dockerfile"],"sub_categories":[],"readme":"# matthuisman/kodi-headless\nA headless install of kodi in a docker container.\nCommonly used with MySQL Kodi setup to allow library updates via web interface.\n\nhttps://hub.docker.com/r/matthuisman/kodi-headless\n\n## Usage\n```\ndocker run -d \\\n--name=kodi-headless \\\n--restart unless-stopped \\\n-v \u003cpath to data\u003e:/config/.kodi \\\n-e PUID=\u003cuid\u003e \\\n-e PGID=\u003cgid\u003e \\\n-e TZ=\u003ctimezone\u003e \\\n-e KODI_DELAY=10 \\\n-p 8080:8080 \\\n-p 9090:9090 \\\n-p 9777:9777/udp \\\nmatthuisman/kodi-headless:\u003ctag\u003e\n```\n**Parameters**\n\nFor simplicity, if changing ports - keep the external ports and internal ports the same. \\\nAlso remember to update / override the default advancedsettings.xml with the new ports.\n\n* `-p 8080:8080` - webui port (change advancedsettings.xml \"webserverport\" to match internal port)\n* `-p 9090:9090` - websockets port (change advancedsettings.xml \"tcpport\" to match internal port \u0026 change Chorus2 \"Advanced Options \u003e Websockets port\" to match external port)\n* `-p 9777:9777/udp` - esall interface port (change advancedsettings.xml \"esport\" to match internal port)\n* `-v /config/.kodi` - path for kodi configuration files\n* `-e PUID` for UserID - see below for explanation\n* `-e PGID` for GroupID - see below for explanation\n* `-e TZ` to set the timezone eg. Europe/London, etc.\n* `-e KODI_DELAY` when present, container will wait this many seconds before starting Kodi\n\nThere is also an example [docker-compose.yml](https://github.com/matthuisman/docker-kodi-headless/blob/master/docker-compose.yml) file which will setup a SQL db and set Kodi up to use it.\n\n## Tags\n+ Leia\n+ Matrix\n+ Nexus\n+ Omega\n\n## Platforms\n+ x86_64 / amd64\n+ armv7\n+ armv8 / arm64\n\nDocker will automatically pull the correct version for your platform \n\n## Install add-ons\nAny add-ons found in your config addons directory will automatically be enabled when Kodi starts. \\\nSimply copy add-ons to the add-ons directory and then restart the docker container.\n\nYou can also install add-ons (and all their dependencies) from enabled repositories using the below command\n```\ndocker exec kodi-headless install_addon \"\u003caddon_id\u003e\" \"\u003caddon_id\u003e\" \"\u003caddon_id\u003e\"\n```\neg. `docker exec kodi-headless install_addon \"metadata.tvshows.thetvdb.com.v4.python\" \"another.addon.id\"`\n\n## Python Versions\n+ Leia - Python 2.7.17\n+ Matrix - Python 3.6.5\n+ Nexus - Python 3.10.4\n+ Omega - Python 3.10.4\n\n## User / Group Identifiers\n\nSometimes when using data volumes (`-v` flags) permissions issues can arise between the host OS and the container. We avoid this issue by allowing you to specify the user `PUID` and group `PGID`. Ensure the data volume directory on the host is owned by the same user you specify and it will \"just work\" ™.\n\nIn this instance `PUID=1001` and `PGID=1001`. To find yours use `id user` as below:\n\n```\n  $ id \u003cdockeruser\u003e\n    uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup)\n```\n\n## Setting up the application\n\nSQL settings are entered by editing the file advancedsettings.xml which is found in the userdata folder of your /config/.kodi mapping. \nMany other settings are within this file as well.\n\nIf you intend to use this kodi instance to perform library tasks other than merely updating, eg. library cleaning etc, it is important to copy over the sources.xml from the host machine that you performed the initial library scan on to the userdata folder of this instance, otherwise database loss can and most likely will occur.\n\n## Info\n\n* Shell access whilst the container is running: `docker exec -it kodi-headless /bin/bash`\n* To monitor the logs of the container in realtime: `docker logs -f kodi-headless`\n\n## Fast Scanning\nThe below works if your media is stored on the same machine as this docker container and you're using smb:// to share that media on the network.\n\nFirst, mount your host media directory somewhere inside the container so Kodi can see it.  \neg. ```--mount type=bind,source=/sharedfolders/pool,target=/media```\n\nNow, the below magic is done in Kodi's advancedsettings.xml\n```\n\u003cpathsubstitution\u003e\n  \u003csubstitute\u003e\n    \u003cfrom\u003esmb://192.168.20.3/sharedfolders/pool/\u003c/from\u003e\n    \u003cto\u003e/media/\u003c/to\u003e\n  \u003c/substitute\u003e\n\u003c/pathsubstitution\u003e\n```\n\nThat's it. \nNow instead of always needing to scan over smb://, it will replace that with /media and scan much quicker.\nWhen it does find new items, they are correctly stored in the SQL using their smb:// path\n\n\n## HTTPS Webserver\nThe container includes a self-signed server.pem and server.key that expire in 2034. \\\nSimply uncomment / add ```\u003cwebserverssl\u003etrue\u003c/webserverssl\u003e``` to /config/userdata/advancedsettings.xml under ```\u003cservices\u003e``` \\\nRestart the container and you should now be able to access the webserver using https:// \n\nYou can also generate your own server key pair with something like below\n```\nopenssl genrsa 1024 \u003e server.key\nopenssl req -new -x509 -nodes -sha1 -days 3650 -key server.key \u003e server.pem\n```\nCopy the generated server.key and server.pem into your /config/userdata mount.\n\nRestart the container and you should now be able to access the webserver using https://\n\n\n## Known Issues\n\nIf you receive errors like `unable to iopause`, `what(): Operation not permitted`,`/usr/lib/kodi/kodi-x11 not found` then see: https://github.com/sdr-enthusiasts/Buster-Docker-Fixes#the-situation\n\n## Credits\n\n+ [linuxserver](https://github.com/linuxserver/docker-kodi-headless/) (original headless container)\n\n## Changelog\n\n+ **16.01.25:** Bump Omega to 21.2\n+ **17.08.24:** Bump Omega to 21.1\n+ **06.04.24:** Bump Omega to 21.0\n+ **19.03.24:** Bump Omega to 21.0rc2\n+ **07.03.24:** Bump Omega to 21.0rc1\n+ **03.03.24:** Bump Nexus to 20.5\n+ **15.02.24:** Bump Omega to 21.0b3\n+ **13.02.24:** Bump Nexus to 20.4\n+ **10.01.24:** Bump Nexus to 20.3\n+ **10.12.23:** Bump Omega to 21.0b2\n+ **01.11.23:** Bump Omega to 21.0b1\n+ **30.06.23:** Bump Nexus to 20.2\n+ **12.03.23:** Bump Nexus to 20.1\n+ **16.01.23:** Bump Nexus to 20.0\n+ **25.12.22:** Bump Matrix to 19.5\n+ **21.12.22:** Bump Nexus to 20.0rc2\n+ **11.12.22:** Bump Nexus to 20.0rc1\n+ **24.11.22:** Bump Nexus to 20.0b1\n+ **10.03.22:** Bump Matrix to 19.4\n+ **29.10.21:** Bump Matrix to 19.3\n+ **10.10.21:** Bump Matrix to 19.2\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthuisman%2Fdocker-kodi-headless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatthuisman%2Fdocker-kodi-headless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthuisman%2Fdocker-kodi-headless/lists"}