Your media, on every screen.
OnScreen is an open-source media server for movies, TV, music, audiobooks, books and photos. It runs on PostgreSQL, ships as a single binary, and puts hardware transcoding, Live TV, DVR and single sign-on in the core, not behind a subscription.
Why OnScreen
Built like infrastructure, made for your couch.
Plex, Jellyfin and Emby are all good. OnScreen exists for people who want a server that scales past one machine, keeps every feature in the open-source core, and treats the database as the source of truth.
PostgreSQL-native
No SQLite file to corrupt. Use the backup, replication and tooling you already trust, and run more than one API instance behind a load balancer.
A GPU transcode fleet
NVENC, Quick Sync, VAAPI and AMF, with HDR tone mapping on the GPU. Add worker machines that pull the file over HTTP; jobs go to the node that can handle them and fail over when a GPU is full.
Everything in core
Live TV and DVR, hardware transcoding, downloads on the Android phone app, intro and credit skipping, Trakt and Last.fm scrobbling. No premium tier, because there isn't one.
Serious about accounts
OIDC, SAML and LDAP sign-in, two-factor codes for local accounts, per-user rating limits and library access, and an audit log. Nothing depends on a vendor's cloud.
Music for listeners
MusicBrainz metadata, ReplayGain, gapless playback, lyrics, and a bit-perfect desktop engine with WASAPI exclusive mode and DSD over DoP.
Playback that adapts
Each app tells the server what it can decode, and the server decides: direct play, remux or transcode. Adaptive bitrate, Dolby Vision where the TV supports it, and Chromecast for any video.
A look around
One app design, from the phone to the living room.
The TV apps share a design built for the remote: big targets, clear focus, and every action a button press away.




Apps
Watch anywhere.
Every app talks to your server and nothing else. Here is where each one stands today.
On iPhone, iPad and Mac, use the web app in Safari.
Compare
How it stacks up.
A few highlights. The full comparison covers fourteen areas, including where OnScreen is behind.
| OnScreen | Plex | Jellyfin | Emby | |
|---|---|---|---|---|
| Database | PostgreSQL | SQLite | SQLite | SQLite |
| License | AGPLv3 | Proprietary | GPLv2 | GPLv2 + proprietary |
| Live TV & DVR | Free | Paid | Free | Paid |
| Hardware transcoding | Free | Paid | Free | Paid |
| OIDC / SAML / LDAP | Built in | No | Plugin | Paid |
| Multi-node transcode fleet | Built in | No | No | No |
| Books: CBZ, CBR and EPUB | Built in | No | Partial | Partial |
Get started
Up in a few minutes.
OnScreen needs PostgreSQL 16+ and Valkey (or Redis) 7+ next to it. Point it at your media folder and open port 7070.
# Release images: ghcr.io/collinjaycock/onscreen (tags 2.6, 2)
docker run -p 7070:7070 \
-e DATABASE_URL="postgres://onscreen:${DB_PASS}@postgres:5432/onscreen?sslmode=disable" \
-e VALKEY_URL="redis://valkey:6379" \
-e SECRET_KEY="$(openssl rand -hex 32)" \
-e AUTO_MIGRATE=true \
-v /your/media:/media:ro \
ghcr.io/collinjaycock/onscreen:2.6
- 1. Run the serverWith Docker as above, or with the Windows and Linux installers from the GitHub releases.
- 2. Open the web appGo to
http://your-server:7070and create the admin account. - 3. Add librariesPoint each library at a folder. Metadata and artwork come from TMDB, TVDB, MusicBrainz and AniList.
- 4. Pair your TVInstall an app, enter your server's address, or sign in with a code from another device.
GPU transcoding, worker nodes, high availability and upgrade notes: see the deployment guide.
Support the project
Free, with no paid tier. Help keep it that way.
OnScreen is built in spare time. If it's useful to you, a one-off or monthly sponsorship helps keep it going.
Sponsor on GitHubSpecial thanks
Thank you to my wife, parents, friends and daughter. You all put up with my rambling about this project and being used as guinea pigs. I love you all.