Disclaimer: This documentation is provided for convenience and may contain errors. Always verify information against the official Kodi and provider documentation. Report issues.
Fastmail
Home / Installation

Installation

EasyPlayTV ships as three packages. Depending on how much you want, install one or more of them:

PackageInstall onAdds
plugin.video.easyplaytv — video addonEvery Kodi devicePlayback, channel grid, sign-in
service.easyplaytv — Service addonThe server Kodi devicePVR + EPG, library sync, HTTP serving of PVR files
easyplaytv-service — standaloneNon-Kodi serverThe same Service runtime via systemd/Docker + config.yaml

Requirements

MySQL is optional for playback-only use

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).

  1. Download plugin.video.easyplaytv.zip from the latest release
  2. In Kodi: Settings → Add-ons → Install from zip file → select the downloaded zip
  3. Open Settings → Add-ons → EasyPlayTV → Configure and set your preferences (see Usage)
  4. 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 points pvr.iptvsimple at that server's channels.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).

  1. Follow Variant A on every Kodi device
  2. Set up the MySQL video database shared by all devices
  3. On the server device: Settings → Add-ons → Install from zip file → select service.easyplaytv.zip
  4. On client boxes, enable PVR integration in the video addon settings and set PVR server URL to http://<server-ip>:8899 so their pvr.iptvsimple pulls the same channels + EPG over HTTP
  5. Restart Kodi on the server — the service generates channels.m3u/epg.xml, configures pvr.iptvsimple, and starts the first VOD sync
Service addon requires the video addon

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

  1. Install inputstream.adaptive from the Kodi add-on repository if not already present
  2. Configure the video addon — open Settings → Add-ons → EasyPlayTV → Configure (see Usage)
  3. Configure the Service addon (Variant B) — open Settings → My add-ons → EasyPlayTV Service → Configure for PVR and sync settings
  4. 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:

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

Disable ffmpeg probing to prevent GPU crashes

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.

ITVX Widevine: force V4L2 hardware decoder

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.