a single Rust binary · open source · GPL-2.0

Your media library, at home.

KROMA is a self-hosted media server. It direct-plays HEVC on the web, on mobile and on every television. The indexer, the download engine, the VPN and the AI install as modules, in one click.

  • starts in milliseconds
  • zero containers
  • video is never re-encoded

A single server

Six containers. One server.

A typical setup bolts together half a dozen services: six configs, six things that break, never at the same time. KROMA replaces them with one Rust server that starts in milliseconds, and a set of modules it installs and supervises itself.

Before · six containers

  • Sonarr · Radarracquisition
  • Prowlarr / Jackettindexers
  • qBittorrentdownloading
  • GluetunVPN + kill-switch
  • Jellyfinserver + player
  • Overseerrrequests
KROMA1 server + modules

In the server

  • Direct-play player, native HEVC
  • Library scan, TMDB metadata, requests
  • Accounts, profiles, casting

Modules, one click

  • Cardigann + Torznab indexers
  • librqbit BitTorrent engine
  • Quality decisions, import and renaming
  • WireGuard → SOCKS5 bridge with kill-switch

The server and its modules

The whole chain, without the container farm

Find, download, organize, stream. The server plays and catalogs; the rest are modules you install from inside the app. Nothing to wire between them.

Module

Automatic acquisition

Ask for a title: KROMA searches every one of your indexers, scores each release on resolution, codec, size, seeders and your keywords, grabs the best one, then imports and renames it Plex-style.

decision engine · wanted-list

Module

VPN with a real kill-switch

Paste a WireGuard config and all torrent traffic goes through a managed WireGuard→SOCKS5 bridge. A failed tunnel check pauses every download on the spot: no leak, no Gluetun to wire up.

WireGuard → SOCKS5

Module

Native indexers

A reimplemented Cardigann engine runs the tracker definitions from Jackett and Prowlarr, directly.

Cardigann + Torznab

Module

Download engine

A librqbit BitTorrent client fetches releases directly, driven by KROMA. Transmission and qBittorrent stay supported.

librqbit

In the server

Direct-play player

Original files are streamed by byte range and decoded by the client. Video is never re-encoded.

HEVC/H.265 · range-streamed

Module

On-device AI

Recommendations and semantic search over local embeddings, subtitles generated by Whisper. On your machine, no cloud.

on-device · Whisper

In the server

Multi-user

Accounts, profiles, PIN locks, WebAuthn passkeys, invitations and per-user permissions. Share without opening everything up.

profiles · PIN · passkeys

In the server

Live statistics

Downloads, library scans and playback pushed in real time over a WebSocket bus, to dashboards and clients.

WebSocket bus

Modules

The server plays. The modules do the rest.

A fresh install is a media server: playback, library, accounts. Downloading, indexers, the VPN and the AI arrive as modules, from a store inside the app. No compose file, no ports to map, no credentials to copy between services.

How modules work

12 official modules

  • Embeddings
  • mDNS discovery
  • Release parser
  • Remote access
  • Whisper transcription
  • qBittorrent engine
  • Torznab indexers
  • Transmission engine
  • VPN
  • Indexers
  • Acquisition
  • Torrent downloads

Direct-play, HEVC first

The server never transcodes video.

KROMA streams the original files by byte range; each client decodes HEVC/H.265 itself, in 10-bit and HDR, in hardware on Samsung and LG televisions. No transcoding pipeline, no CPU farm to keep warm.

One exception: an audio-only HLS stream for browsers that cannot decode AC3/EAC3/DTS. The video is copied, only the audio is transcoded to stereo AAC.

Decoded by the client

HEVC / H.26510-bit · HDRAV1H.264AACAC3 / EAC3
NAS CPU during playbackidle

Nothing to re-encode: playback never wakes the processor. Your NAS stays free for everything else.

Platforms

The same KROMA, on every screen

The components and design tokens exist once, in a shared kit. They render natively in a browser, on a phone, and on a television driven by a remote.

Screens

Web

browser · responsive

Mobile

iPhone · iPad · Android

Desktop

macOS · Windows · Linux · Steam Deck

Televisions

Samsung

Tizen

LG

webOS

Android TV

Google TV

Apple TV

tvOS

Cast

phone → TV

Server

Synology

.spk package

Docker

multi-arch image

Raspberry Pi

arm64 64-bit

Self-hosted

Built to be owned, not rented.

Open source, under the GPL-2.0 license. No account to create, no subscription, no central service that could shut down. Your library and your activity never leave your network.

Free
Open source, GPL-2.0 license
Private
Nothing leaves your network
No central service
No account, no subscription
Offline
Playback works without internet
start KROMA
$ docker run -d -p 4040:4040 \
    -v /volume1/video:/media \
    -v kroma-data:/data \
    ghcr.io/maxscharwath/kroma

Run your own media server.

One binary to launch, your hardware, your files. No subscription, no telemetry.

© 2026 · free software · GPL-2.0 license