staffpicked

staffpicked

Docker app from cj0r's Repository

Overview

StaffPicked builds collections and playlists on Emby and Jellyfin from MDBList lists, Trakt lists and your own Markdown lists, with artwork from TMDB, fanart.tv, MediUX or your own files, all kept in sync on a schedule from one web UI.

StaffPicked

Docker image version Docker pulls Tests License: GPL-3.0

Named for the shelf of staff picks at the old video store: a few carefully chosen lists, put together by people who care.

StaffPicked builds collections and playlists on Emby and Jellyfin from MDBList lists, Trakt lists and your own Markdown lists, with artwork from TMDB, fanart.tv, MediUX or your own files. It can also give the genres on your server your own artwork. Collections and playlists can be seasonal, appearing only inside a date window. Playlists keep the list's order and can skip what you've already watched. It runs as one Docker container with a web UI, and keeps everything in sync on a schedule (set times each day, or every few hours), on one media server or several at once.

Emby and Jellyfin are supported equally: every feature works on both, you pick the kind for each server in the setup screen (or with SERVER_TYPE), and one StaffPicked can keep an Emby server and a Jellyfin server in step at once.

StaffPicked's shelf of collections, shown as tape covers

[!WARNING] StaffPicked is provided as is, with no warranty, and you use it at your own risk. It creates, changes and deletes collections and playlists on your media servers and replaces their artwork, and it holds the API keys for your servers and list services. Try a dry run first, and read Security and the Disclaimer before you put it on a server you care about.

What it does

  • Collections and playlists from MDBList, Trakt and your own Markdown lists, kept in sync on a schedule.
  • Seasonal date windows, so a list is on the server only while it's in season.
  • Playlists in list order that drop films once they're watched, shared or built per person.
  • Posters and backdrops from TMDB, fanart.tv, MediUX or your own files, for collections, playlists and genres.
  • A web UI to set it all up, preview every change with a dry run, see what's in your library and what's missing, and read the logs.
  • One server or several, Emby and Jellyfin side by side.

The user guide has the full list.

Quick start

  1. Get docker-compose.yml and start it. Nothing needs editing first:
    mkdir staffpicked && cd staffpicked
    curl -fsSLO https://raw.githubusercontent.com/cj0r/staffpicked/main/docker-compose.yml
    docker compose up -d
    
  2. Open http://<host>:9343. A setup screen asks for your media server (with a Test button), optional MDBList and Trakt keys, and a password. Then add collections, playlists and your own lists in the browser.
  3. Enable Admin Mode at the top of Settings, run Sync with Dry run ticked to see every change it would make, then Sync for real.

To update: docker compose pull && docker compose up -d. Compose managers (Dockge, Portainer), Unraid, building from source and permissions are in Getting started.

Screenshots

The dashboard: lists on the shelf, what's in season, the next sync and recent runs A playlist's artwork, season and films, with which are in the library
The shelf. Every list, whether it's in season, when it last synced and how much of it is in your library. A list up close. Its artwork, season and sharing, and each film marked in the library or missing.
The season calendar: when each collection and playlist is on the server across the year Settings with an Emby server and a Jellyfin server side by side
Season calendar. When each list is on the server, across the whole year. Emby and Jellyfin together. One server or several, of either kind, each with its own Test button.

User guide

Everything else is in the user guide:

Disclaimer: use at your own risk

StaffPicked is provided "as is", without warranty of any kind, express or implied. The LICENSE has the full legal text. In plain terms:

  • You use it entirely at your own risk. The author and contributors accept no responsibility or liability for lost or changed collections, playlists or artwork, wrong metadata, service interruptions, exposed API keys, security incidents, suspended accounts at the services it connects to, or any other damage from using or misusing it.
  • It changes and deletes things on your media servers. Syncs add and remove films in collections and playlists, a list's season ending deletes its collection or playlist, remove deletes everything configured, and artwork is replaced. A collection or playlist you made yourself is changed too if a StaffPicked entry has the same name. Your media files are never touched, but run a dry run first and keep backups of your server's data.
  • Check your configuration before running it against a real server. A wrong list, server or name can change far more than intended, and the author can't undo it for you.
  • Your deployment's security is yours: network exposure, the password and two-factor sign-in, HTTPS, the reverse proxy and who can read the config folder. See Security.
  • You're responsible for following the terms of the services you connect it to (MDBList, Trakt, TMDB, fanart.tv, MediUX and the rest) and of your own API keys, and for having the right to the artwork you use.
  • StaffPicked isn't affiliated with or endorsed by Emby, Jellyfin, or any of the services it works with. Their names belong to their owners.

It's a hobby project maintained on a best-effort basis, with no guarantee of support or fixes. Report security problems privately, as SECURITY.md describes, rather than in a public issue.

AI-assisted development

StaffPicked is developed with the help of AI coding tools. AI-generated code, tests and documentation are reviewed and tested by the maintainer before they're merged, and the maintainer is responsible for everything in a release. Even so, AI-assisted code can contain mistakes that review and testing miss, which is one more reason to follow the disclaimer above: try a dry run first and keep backups of your server's data. If you find a bug, please open an issue.

Support the project

If StaffPicked keeps your shelves stocked, you can support its development. Every bit is appreciated.

Support on Ko-fi Buy Me a Coffee

Contributing and license

Bug reports and pull requests are welcome; see CONTRIBUTING.md, and SECURITY.md for reporting a security problem privately. What changed in each release is in CHANGELOG.md.

StaffPicked is free software under the GNU General Public License v3.0. The icons, QR code library and fonts it bundles are under their own licenses, listed in THIRD_PARTY_NOTICES.md.

Media gallery

1 / 4

Requirements

An Emby or Jellyfin server. MDBList and Trakt lists need a free API key from those services.

Download Statistics

1,096
Total Downloads

Related apps

Details

Repository
cj0r/staffpicked:latest
Last Updated2026-10-07
First Seen2026-10-07

Runtime arguments

Web UI
http://[IP]:[PORT:9343]/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--security-opt no-new-privileges:true

Template configuration

Web UI PortPorttcp

Web interface access port.

Target
9343
Default
9343
Value
9343
App ConfigurationPathrw

Settings, list files, artwork copies and backups.

Target
/config
Default
/mnt/user/appdata/staffpicked
Value
/mnt/user/appdata/staffpicked
Artwork FolderPathro

Optional: a folder of your own posters and backdrops, so a list can point at /artwork/name.jpg.

Target
/artwork
PUIDVariable

User the container runs as (99 = nobody on Unraid).

Default
99
Value
99
PGIDVariable

Group the container runs as (100 = users on Unraid).

Default
100
Value
100