Installation
EasyPlayTV ships as three packages. Depending on how much you want, install one or more of them:
| Package | Install on | Adds |
|---|---|---|
plugin.video.easyplaytv — video addon | Every Kodi device | Playback, channel grid, sign-in |
service.easyplaytv — Service addon | The server Kodi device | PVR + EPG, library sync, HTTP serving of PVR files |
easyplaytv-service — standalone | Non-Kodi server | The same Service runtime via systemd/Docker + config.yaml |
Requirements
- Kodi 19+ (Matrix or later, Python 3) — video addon
- inputstream.adaptive — required for DASH/Widevine stream playback (install from Kodi repository)
- MySQL database — for library sync across multiple devices (reads connection details from
advancedsettings.xml; the standalone service reads them fromconfig.yamlinstead) - Python 3.11+ or a container runtime — standalone service only
EasyPlayTV works without a MySQL database — you can still browse live TV and play content. MySQL is only needed if you want the Movies and TV Shows library sync, or if you want to share the library across multiple Kodi devices (server/client mode).
Variant A — playback only (video addon)
Install the video addon for the live channel grid and direct stream resolution, on every Kodi device. This box runs no service and does no sync, but can still get Live TV via PVR by pointing pvr.iptvsimple at any EasyPlayTV server's files (step 4).
- Download
plugin.video.easyplaytv.zipfrom the latest release - In Kodi: Settings → Add-ons → Install from zip file → select the downloaded zip
- Open Settings → Add-ons → EasyPlayTV → Configure and set your preferences (see Usage)
- Optional — Live TV via another box's server: enable PVR integration and set PVR server URL (e.g.
http://server-ip:8899). On next addon open the addon pointspvr.iptvsimpleat that server'schannels.m3u/epg.xml, and live channels appear in Kodi's native TV / Radio sections.
Variant B — full Kodi experience (video addon + Service addon, server role)
Install the video addon on every Kodi device. Install the Service addon only on the box that acts as the server: it runs a background service that generates the PVR channel list + EPG, configures pvr.iptvsimple, syncs the VOD catalogue into your library, and optionally serves the PVR files over HTTP. Client boxes stay on the video addon alone and configure client PVR (Variant A step 4).
- Follow Variant A on every Kodi device
- Set up the MySQL video database shared by all devices
- On the server device: Settings → Add-ons → Install from zip file → select
service.easyplaytv.zip - On client boxes, enable PVR integration in the video addon settings and set PVR server URL to
http://<server-ip>:8899so theirpvr.iptvsimplepulls the same channels + EPG over HTTP - Restart Kodi on the server — the service generates
channels.m3u/epg.xml, configurespvr.iptvsimple, and starts the first VOD sync
service.easyplaytv declares a dependency on plugin.video.easyplaytv ≥ 1.2.0 — it does not ship its own playback code. Install both on the same device. The standalone service has no such dependency.
Variant C — standalone service on a server
Run the Service runtime on a non-Kodi server (the MySQL host is the natural choice) and keep Kodi devices on the video addon only.
Install (on the server)
git clone ssh://git@codeberg.org/scottrix/EasyPlayTV.git
cd EasyPlayTV/easyplaytv-service
python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt
cp config.yaml.example config.yaml # edit: database, credentials, region
PYTHONPATH=src ./.venv/bin/python -m easyplaytv_service.main --config config.yaml
Run as a systemd service
Copy easyplaytv-service.service to ~/.config/systemd/user/ (or /etc/systemd/system/), adjust the ExecStart paths, then:
systemctl daemon-reload
systemctl --user enable --now easyplaytv-service.service
Run in Docker
cd EasyPlayTV/easyplaytv-service
docker build -t easyplaytv-service .
docker run -d --name easyplaytv-service --restart unless-stopped \
-p 8899:8899 \
-v /path/to/config.yaml:/config/config.yaml \
easyplaytv-service
Point Kodi at the server
The service serves channels.m3u and epg.xml on http://<server>:8899. On each Kodi device, open the video addon settings, enable PVR integration, and set PVR server URL to http://<server>:8899. The addon configures pvr.iptvsimple for you on addon open (no Service addon needed on that box).
One-shot CLI flag
# Regenerate PVR files once and exit
PYTHONPATH=src ./.venv/bin/python -m easyplaytv_service.main --config config.yaml --once-pvr
Manual install
Copy the plugin.video.easyplaytv folder to your Kodi addons directory and restart Kodi:
cp -r plugin.video.easyplaytv ~/.kodi/addons/
Post-install setup
- Install inputstream.adaptive from the Kodi add-on repository if not already present
- Configure the video addon — open Settings → Add-ons → EasyPlayTV → Configure (see Usage)
- Configure the Service addon (Variant B) — open Settings → My add-ons → EasyPlayTV Service → Configure for PVR and sync settings
- Restart Kodi (Variant B) — the service will generate the PVR files and begin syncing content on its next scheduled interval
MySQL database setup (for library sync)
If you want the Movies and TV Shows library sync, ensure advancedsettings.xml contains your MySQL connection details:
<advancedsettings>
<videodatabase>
<type>mysql</type>
<host>192.168.178.17</host>
<port>3306</port>
<user>kodi</user>
<pass>kodi</pass>
<name>MyVideos</name>
</videodatabase>
</advancedsettings>
If no advancedsettings.xml is found, the service addon falls back to built-in defaults (the same host/port/user/pass shown above). The addon auto-detects the versioned database name (e.g. MyVideos131). The standalone service takes its database settings from config.yaml instead.
Server / Client mode
For sharing a library across multiple devices:
- Server — one device runs the Service runtime (Service addon or standalone) and writes to the shared MySQL database, generates the PVR files, and serves them over HTTP
- Client — other devices read from the same database (no sync runs on them) and read the server's PVR files over HTTP, configured from the video addon's settings (no second service runs on them)
There is no device-role setting in the Service addon — it is always a server. Use it on one box (or run the standalone service as the server) and point the remaining boxes' video addon PVR server URL at its HTTP URL.
OSMC / Raspberry Pi notes
On Pi 3/4 with large .mkv libraries, set these in guisettings.xml to prevent GPU/CMA memory exhaustion:
<setting id="myvideos.extractflags">false</setting>
<setting id="myvideos.extractchapterthumbs">false</setting>
Restart mediacenter.service after changing. EasyPlayTV writes its own poster/art rows directly, so Kodi's ffmpeg-probe is not needed for addon content.
Set NOSECUREDECODER=true in inputstream.adaptive's settings on OSMC to force the V4L2 mem2mem hardware decoder instead of the broken secure decoder path for ITVX Widevine content.