Every Plex user gets their own recommendations

Shortlist looks at what each person on your server has watched, then builds them a “Picked for You” row on their Plex home screen that only they can see. It refreshes overnight.

One Docker container No AI key required Undoes itself if you remove it

A Movies Picked for You row on Plex, filled with film posters
A “Picked for You” row on Plex, private to that user and built from what they watched.
  • 1

    container to run

    No database of its own, and nothing else to install.

  • 8

    row templates

    Start from one instead of a blank form, then change anything.

  • 0

    AI keys required

    It chooses and explains on its own. Add a model only if you want to.

  • 10min

    to the first row

    From starting the container to a row on somebody's home screen.

The problem

Plex shows everyone the same rows

Everyone on your server opens Plex to a big library and no idea what to put on. The rows Plex builds are the same for every account and often suggest what's in Plex's own streaming catalogue rather than what's in your library, so they don't know your sister has watched every heist film you own and your dad hasn't touched one.

Shortlist gives each person a row of their own instead.

How it works

From an empty container to a private row

You do the first two once. Shortlist does the other three every night, on a schedule you choose.

Connect Plex once

Sign in with your Plex account, pick your server, and choose who gets a row. The wizard asks for nothing you have to look up first, and every answer can be changed later.

shortlist.local:5959/setup
The setup wizard's connect step, showing a Plex sign-in and the servers found on that account

Decide what rows people get

A row is a recipe: what goes in it, how big it is, who sees it, and how often it changes. Start from a template rather than a blank form, then change anything. You can run as many at once as you like.

shortlist.local:5959/rows
The Rows page listing four configured rows: the default Picked for You row, a Because you watched row, a rewatch row, and one shared row

It runs while everyone is asleep

One person at a time, so a problem with one row never stops anyone else getting theirs. Read their history, find things like it, throw away anything not in your library, then choose. If a row does not turn up, this page names the step that failed.

shortlist.local:5959/runs/42
A run detail page showing per-user timings, the picks delivered, and a live activity log

Every pick carries its reason

“Because you watched Heat.” You can see what led to each title, and if one looks wrong you can tell Shortlist to ignore the watch behind it. That watch stays in their Plex history, it just stops shaping their row.

shortlist.local:5959/users/sarah
A user detail page listing that person's ranked picks, each with the title that inspired it

And nobody else can see it

The row goes to Plex hidden, every other account is told to hide its label, and only then does it appear. Here are two accounts on one server on the same night, each read using that account's own Plex token.

Two Plex home screens side by side. Sarah's has a Movies row and a TV Shows row; Mike's has only a TV Shows row, holding completely different titles. Each one notes that the other people's rows are not on this home screen.
Rows

It isn't only “Picked for You”

That's the default, but a row is really a recipe: what goes in it, how big it is, who sees it and how often it changes. Pick one of these to start from and change anything you like. You can run as many as you want at once.

Picked for You

The everyday row. Blends someone's whole recent history into a general set of suggestions.

Because you watched…

Names one recent film and fills the row with things like it. The title tells them why it's there.

Happy to see again

Films and shows they've already finished, put back in front of them. A shelf of old favourites rather than new suggestions.

Fresh finds

Rebuilds every night, nothing they've seen. For people who want something new each evening.

From the vault

Built once and left alone. A shelf that stays put, for a curated set you don't want reshuffled.

Movie night

Films only, a short shelf, refreshed weekly. Something to pick from on a Friday.

More TV to watch

Series they have never opened, not one they're part-way through. A shelf of things to start.

Popular on this server shared

One row everybody sees, built only from titles several people have watched. Nothing personal in it.

Every one of these is built per person, except “Popular on this server”, which is the same row for everybody.

Privacy

A row nobody else can see

Plex can't share a collection with one person. What it can do is hide things by label. So Shortlist labels each row, then tells every other account to hide that label. What's left is a row only its owner sees.

The order those steps happen in matters more than the trick itself. Do it the obvious way round and the row is briefly visible to your whole server.

  1. Clear up first Remove any row Plex can’t hide for that kind of library, before anything else happens.

    On nobody’s Home

  2. Send the row in hidden It exists in Plex now, but it isn’t on anyone’s home screen yet.

    On nobody’s Home

  3. Hide it from everyone else Every other account is told to hide that row’s label. Their own settings are left as they were.

    On nobody’s Home

  4. Now show it Only now does the row appear, so it is never visible before it is private.

    On its owner’s Home, and nobody else’s

Steps 1 to 3 leave the row on nobody’s home screen. There is no moment where it exists and is visible to the wrong person.

Your settings are saved first

Shortlist copies your sharing settings before it changes anything. Removing it puts them back the way they were.

It adds, it doesn't replace

Shortlist reads what is already in your sharing settings and adds only its own entries. Anything you or another tool set is left alone.

It leaves Kometa alone

Only the collections Shortlist made are ever touched. Anything else on your server is spotted and skipped.

How the hiding works

Features

What you get

A private row for every user

Built from what that person watched, and only they can see it. One container covers your whole server. You get a row too, so it's still worth running if you're the only user.

Only films and shows you actually have

Every suggestion is checked against your library first. Shortlist never makes up a title, and it never sends anyone to something you don't own.

It tells you why

Every pick comes with its reason, like “Because you watched Heat”. You can see what led to it and change your mind about it.

Ignore a film that skews someone's picks

Somebody puts on a kids' film for a visiting nephew and suddenly that's all Shortlist suggests. Tell it to ignore that watch. It stays in their Plex history, it just stops shaping their row.

Suggestions from more than one place

TMDB and Trakt find similar titles. An optional web search adds recent, well-reviewed ones they miss. Shortlist runs that search itself, so it works even with an AI model that has no internet.

More than one row

Give people a personal row, a “New this week” row everyone shares, or a row per library. Each one has its own size, sources and audience. Start from a ready-made template instead of a blank form.

Rows that don't change every day

Pick how often each row refreshes, from nightly to once a fortnight. Nobody opens Plex to find everything shuffled again overnight.

Ask Radarr or Sonarr for what's missing

When a good suggestion isn't in your library, Shortlist can request it. This is off until you turn it on. The best few send themselves each night and the rest wait for you to approve them.

See whether anyone is watching them

A dashboard shows what Shortlist put in front of people and how much of it they actually played, per person and per row.

Works with

Where the suggestions come from, and where they go

Shortlist pulls candidates from TMDB and Trakt, and from a web search if you want one. An AI model can do the choosing and write the reasons, or Shortlist does it itself. What comes out goes onto Plex home screens, and anything you're missing can go to Radarr or Sonarr.

Suggestions in

TMDB · Trakt · MDBList · web search

Shortlist decides

on its own, or with an AI model

Results out

a private Plex row each · Radarr & Sonarr requests

Only Plex and a free TMDB key are required. Everything else is there if you already run it.

Required

  • Plex Media Server1.43.2.10687 or newer, with Plex Pass on the admin account
  • TMDBfree API key, finds similar titles

Watch history

  • Plexbuilt in, nothing to set up
  • Tautullioptional, only improves the names people are shown by

More suggestions

  • Traktoptional, finds titles TMDB misses
  • MDBListoptional, ratings from IMDb, Rotten Tomatoes and others

Getting missing titles

  • Radarroptional, for films
  • Sonarroptional, for TV

AI models

  • Claude, GPT, Geminioptional, writes the reason next to each pick
  • Ollama, llama.cpp, LM Studio, vLLM, LocalAIoptional, any model you run yourself

Web search

  • Exaoptional, and the only way a model you run yourself can search
  • Your AI provider's own searchoptional, works with Claude, GPT and Gemini
Quick start

Running in about ten minutes

Start the container and open it in a browser. A setup wizard connects your Plex account, asks who should get rows, and builds the first ones.

docker compose
mkdir shortlist && cd shortlist
curl -fsSLO https://raw.githubusercontent.com/stevezau/shortlist/master/docker-compose.example.yml
mv docker-compose.example.yml docker-compose.yml
docker compose up -d
docker run
docker run -d --name shortlist \
  -p 5959:5959 \
  -e TZ=Etc/UTC \
  -e PUID=1000 -e PGID=1000 \
  -v /path/to/shortlist/config:/config \
  --restart unless-stopped \
  ghcr.io/stevezau/shortlist:latest

Want to try it without touching your server? Add -e SHORTLIST_DRY_RUN=1. Shortlist will show you everything it would do and write nothing to Plex. Remove the flag when you're ready for it to make real changes.

Needs Plex Media Server 1.43.2.10687 or newer, Plex Pass on the admin account, and a free TMDB key. Full requirements →

Questions

Common questions

Can I give each Plex user recommendations based on what they watched?

Yes, that is exactly what Shortlist does. It reads each person’s own Plex history, finds films and shows in your library they haven’t seen but are likely to want, and puts them in a “Picked for You” row on that person’s Plex home screen. Everyone gets a different row, and each row is only visible to the person it was made for. It runs on a schedule you set, usually overnight.

Can you make a Plex collection visible to only one user?

Not directly, but you can get there. Plex has no per-user collections. What it does have is the ability to hide things by label. Give the collection a label, then set every other account to hide that label, and one person is left able to see it. You need Plex Media Server 1.43.2.10687 or newer, because older versions ignore that setting on the Home and Recommended shelves. The order is the risky part: make the collection hidden first, hide it from everyone else, and only then show it. Do it the other way round and it is briefly visible to your whole server.

Do I need an AI or OpenAI key to use Shortlist?

No. Shortlist works with no AI and no key. It picks the titles itself, and the suggestions come from TMDB, which is free. Adding an AI model is optional. If you do add one (Claude, GPT, Gemini, or something you run yourself like Ollama, llama.cpp, LM Studio, vLLM or LocalAI) it writes the short reason next to each pick and can search the web for recent titles TMDB doesn’t return. That web search is off until you turn it on.

Will the AI recommend films I don't actually have?

No. The AI only ever chooses from titles already confirmed to be in your library and not yet watched by that person. Anything else it suggests is thrown away and logged, so a made-up title can’t reach anyone’s row.

Does Shortlist conflict with Kometa?

No, they are built to run side by side. Shortlist only ever changes collections it made itself, which carry its own shortlist_* label. Everything else on your server, including every Kometa collection, is spotted and skipped. It is the same story with your sharing settings: Shortlist reads what is there and adds only its own entries, leaving the rest alone.

What can the server owner see?

Everything. Plex cannot hide collections from the account that owns the server, so the admin account’s home screen shows every user’s row, not just its own. That is a Plex limitation rather than a Shortlist choice. If you share with other people and want a tidy home screen, watch on a Plex Home user and keep the admin account for admin.

What happens to my Plex settings if I uninstall?

They go back exactly as they were. Shortlist copies every account’s sharing settings before it makes its first change, and removing it restores them from that copy and deletes the collections it created. You can also try the whole thing first without touching anything: set SHORTLIST_DRY_RUN=1 and it will show you every change it would make while writing nothing.

What do I need to run it?

Plex Media Server 1.43.2.10687 or newer, Plex Pass on the admin account, a free TMDB key, and somewhere to run one Docker container. Tautulli, Radarr, Sonarr, Trakt, MDBList and an AI key are all optional. Images run on both Intel and ARM machines.

Does Shortlist work with Jellyfin or Emby?

No, it is Plex only. The way each row is kept private relies on a Plex feature for hiding things by label, and there is nothing equivalent in Jellyfin or Emby to build it on.

Read the full FAQ

Give it a try

Shortlist is new and still in beta, though it runs in production every night. If something breaks, please open an issue.