kryspal-media

kryspal-media

Docker app from Kryspal Media's Repository

Overview

Kryspal Media is a self-hosted media server for your movies and TV shows that stays fast on very large libraries. It plays your files in original quality (4K, HDR and lossless audio are never transcoded), works with Emby and Jellyfin players such as Infuse, SenPlayer and VidHub, and has a built-in web player, separate watch history for every member and open-source plugins for metadata and subtitles. No account is needed; the FREE plan is a complete media server. INSTALL ORDER: first install the Kryspal Media Database template (kryspal-media-postgres), then this server. Updating either container needs no extra steps. After the first start, open the Web UI and create the administrator in the setup wizard. This is a beta release: back up the database before upgrading.

Kryspal Media templates for Unraid

Docker templates for Kryspal Media, a self-hosted media server for movies and TV shows. It plays files in original quality and works with Emby and Jellyfin players such as Infuse, SenPlayer and VidHub. The server needs its own PostgreSQL database, so there are two templates.

Template What it is
kryspal-media-postgres The PostgreSQL 16 database. Install it first.
kryspal-media The media server. Install it second.

Install

  1. Install Kryspal Media Database (kryspal-media-postgres) from Apps. The Data folder defaults to /mnt/user/appdata/kryspal-media-postgres; see "Where to keep the database" below.
  2. Install Kryspal Media (kryspal-media) from Apps. Set the Media folder to your library share. The Password folder must be the same folder you used for the database.
  3. Open the Web UI (port 5797) and create the administrator in the setup wizard. Then add libraries from folders under /media.
  4. In Infuse, SenPlayer or VidHub, add an Emby (or Jellyfin) server at http://SERVER-IP:5797.

No network or Docker setting needs to be changed, and updating either container needs no extra steps. Both containers use the default bridge network. The database container publishes PostgreSQL on the Docker bridge gateway only (extra parameter -p 172.17.0.1:5799:5432), so your local network cannot reach it. The server connects to it as host.docker.internal:5799; the server's extra parameter --add-host=host.docker.internal:host-gateway makes Docker resolve that name to the real gateway address, so the server needs no change if your bridge address differs.

If the database container does not start and its log says "cannot assign requested address", your Docker bridge does not use 172.17.0.1. Run docker network inspect bridge in the Unraid terminal and put the Gateway address in place of 172.17.0.1 in the database template's extra parameters.

The database container generates a random password on its first start and keeps it in the Password folder, which the server reads. You never type or copy a password. Back up the database's Data folder and the Password folder together.

This needs a Kryspal Media server version that supports DB_HOST and DB_PORT (0.9.11 or newer).

Alternative: your own Docker network

If you prefer a user-defined network, set Settings, Docker (switch to the Advanced View if you do not see it) "Preserve user defined networks" to Yes, run docker network create kryspal-media in the Unraid terminal, set the network of both containers to kryspal-media, remove -p 172.17.0.1:5799:5432 from the database's extra parameters and set DB_HOST=postgres, DB_PORT=5432 on the server. Without the Preserve setting, Unraid can remove the network when the Docker service restarts and the server could no longer reach its database.

Where to keep the database

PostgreSQL is much faster on an SSD, and reports from the Unraid community suggest it can also run into permission or file-locking problems on the array and through the /mnt/user (shfs) layer. We therefore recommend keeping the database on a cache pool: set the appdata share to Cache: Only (or Prefer), or use a path such as /mnt/cache/appdata/kryspal-media-postgres directly. Use only one path form for the database folder, and use /mnt/cache only if you really have a pool of that name. This is a recommendation, not a requirement.

More media folders

Add a Path to the Kryspal Media container for each extra folder, at its own container path such as /movies (not inside /media), then list all paths in the MEDIA_ROOT variable separated by a colon, for example /media:/movies.

Notes

  • Port 5798 is for access from the internet: forward only this port on your router. Automatic discovery on the local network is not enabled; add the server by address.
  • The server runs as nobody:users (99:100) so files it writes next to your videos match your shares.
  • The containers use the latest tag, so Unraid shows update notices. To pin a version, change the tag to a specific version number, for example kryspal/kryspalmedia:0.9.10-beta.
  • This is a beta release. Back up the database before upgrading (see the documentation).
  • Support: GitHub Discussions.

License

The files in this repository (the templates, the profile and this README) are licensed under the Apache License 2.0; see LICENSE. The license covers only these templates. The Kryspal Media server image is proprietary software with its own terms. A free plan is available; the PRO and MAX plans are paid. See media.kryspal.net. The database image contains PostgreSQL and the pg_bigm extension under their own licenses.

Media gallery

1 / 3

Requirements

Install the Kryspal Media Database template (kryspal-media-postgres) first and use the same Password folder as below. The server reaches the database at DB_HOST:DB_PORT (host.docker.internal:5799, which is the Docker bridge gateway where the database publishes its port). Needs a server version with DB_HOST and DB_PORT support (0.9.11 or newer, see the README).

Download Statistics

655
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
kryspal/kryspalmedia:latest
Last Updated2026-10-27
First Seen2026-10-27

Runtime arguments

Web UI
http://[IP]:[PORT:5797]
Network
bridge
Shell
sh
Privileged
false
Extra Params
--user=99:100 --stop-timeout=60 --add-host=host.docker.internal:host-gateway

Template configuration

Web UI portPorttcp

Web interface and the port players connect to (add the server as http://SERVER-IP:5797).

Target
5797
Default
5797
Value
5797
Internet access portPorttcp

Second web port for access from the internet. If you want remote access, forward only this port on your router.

Target
5798
Default
5798
Value
5798
Media folderPathrw

Your movies and TV shows. The server needs write access to save subtitles and NFO files next to the videos.

Target
/media
Default
/mnt/user/media
Value
/mnt/user/media
Data folderPathrw

Server data: settings, images and cache.

Target
/var/lib/mediaserver
Default
/mnt/user/appdata/kryspal-media/data
Value
/mnt/user/appdata/kryspal-media/data
Password folderPathro

The folder where the database container writes its generated password. Must be the SAME folder as in the Kryspal Media Database template.

Target
/var/lib/kryspal-db
Default
/mnt/user/appdata/kryspal-media/db
Value
/mnt/user/appdata/kryspal-media/db
MEDIA_ROOTVariable

The media folders inside the container, separated by a colon. To add folders, add a Path to this template at its own container path (for example /movies, not inside /media) and list it here, for example /media:/movies.

Default
/media
Value
/media
EXTERNAL_HTTP_ADDRVariable

Listen address of the internet access port. Keep it in line with the container port above.

Default
:5798
Value
:5798
DB_HOSTVariable

Where the database container is published. host.docker.internal resolves to the Docker bridge gateway of this server (through the extra parameter --add-host). Change it only if you publish the database somewhere else.

Default
host.docker.internal
Value
host.docker.internal
DB_PORTVariable

The published database port (see the database template).

Default
5799
Value
5799
TZVariable

Time zone, for example Europe/Berlin. Optional.