Open Source · AGPL-3.0

Playlisterr

Personalized “watch next” rows in every Plex user's own account, chosen by a local LLM from titles you already own.

$ git clone https://github.com/JamesClayPatton/playlisterr
$ cd playlisterr && docker compose up -d
~40
GitHub clones per month
0
third-party dependencies
AGPL-3.0
free and open source
Any LLM
Ollama or OpenAI-compatible
The idea

Recommendations that come to you

On a schedule, Playlisterr reads each Plex user's watch history, works out what they actually like, and asks a language model to pick about fifteen unwatched titles from the library you already have, each with a one-line reason.

The picks land in that person's own Plex as private rows, one per library. There's no website to visit and nothing to request. The recommendations are just waiting the next time someone hits play.

It only ever arranges what you own. It never downloads, never requests, and never touches a row it didn't create.

Playlisterr home screen showing generated picks with reasons
How it works

Only one step talks to a model

Every step is ordinary, deterministic Python except one. The model sees a taste profile and a numbered list of owned titles, and returns numbers. Every answer is checked against that list, so a hallucinated title becomes a dropped pick, never a recommendation for something nobody owns.

  1. 01
    Users
    Who gets a row: the owner and shared accounts, minus anyone switched off
  2. 02
    History
    Each account’s own watch history, with episodes mapped to their show
  3. 03
    Candidates
    Every title the server owns, minus what that person has already seen
  4. 04
    Profile
    Genres, eras and favourites per user and library, with plain arithmetic
  5. 05
    PickLLM
    The model chooses from a numbered list; every pick is validated
  6. 06
    Publish
    A private playlist per account, with the reasons as its description
The result

Every row explains itself

Generated Movies

Because in Movies you've been watching The Long Ferry, Glass Orchard and The Quiet Engine, and you tend to go for drama and mystery, we thought these might be a good match.

  • • The Last Cartographer (2019): a strong match for the genres you watch most
  • • Paper Kingdoms (2017): well rated and still unwatched in your library
  • • Neon Harbor (2021): similar in tone to your recent favourites

Picked for you on 12 Aug 2026 · refreshed nightly by Playlisterr.

A Generated Movies playlist open in Plex, with its auto-written reason text above the picked titles

The same text, written straight into the playlist description in Plex. Each person sees only their own rows, the server owner included.

A tour

A web UI with no framework and no build step

Playlisterr Two-click setup screen
Two-click setup
Sign in with Plex, then let it find your model on the network. No token hunting.
Playlisterr Users screen
Users
Choose exactly who takes part, and see who qualifies for a personal row.
Playlisterr Settings screen
Settings
Every option explained where you set it. Libraries come straight off your server.
Playlisterr System screen
System
Run history, a live log, config backup and a scheduler you control.
Engineering

Choices made for the people who self-host it

Standard library only

No pip packages, ever. Dependencies are a tax on everyone who self-hosts, so the whole app is plain Python 3.11+ plus a vanilla-JS UI.

The model is on a short leash

Structured output where the endpoint supports it, validation against the candidate list regardless, and reasons checked for invented viewing history.

Private by default

Plex playlists belong to an account, so nobody sees anyone else’s picks. With a local Ollama, watch history never leaves your network.

Safe to run unattended

A nightly schedule, webhooks on success and failure, and a health panel so a dead model shows up now, not at 3am.

Writes only what it owns

Everything it creates carries its own label, and nothing without that label is ever touched. A plain run is a dry run.

Try it without Plex

Every checkout ships a fictional sample library, so the whole UI and pipeline run in demo mode with nothing real contacted.

Using it? I'd love to hear from you

Bug reports, feature ideas, or just “it works on my setup” all help decide what goes into the next release.