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.
-
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.
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.
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.
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.
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.
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.
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.
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.
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.
-
Clear up first Remove any row Plex can’t hide for that kind of library, before anything else happens.
On nobody’s Home
-
Send the row in hidden It exists in Plex now, but it isn’t on anyone’s home screen yet.
On nobody’s Home
-
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
-
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
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.
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.
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
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.
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 -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 →
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.
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.