github stevezau/shortlist v0.1.0-beta.2
v0.1.0-beta.2 — second public beta

latest releases: v1.8.0, v1.7.0, v1.6.1...
pre-releaseone month ago

Second beta — mostly the things the first beta's users ran into.

The server owner is a user now

Shortlist only ever built rows for accounts you share with, so on a one-person server it did
nothing at all — plex.tv's user list never includes the account that owns the server (#1). The
owner is now synced like anyone else, disabled by default so an existing install gains a switch
rather than a row appearing unannounced.

The honest caveat, stated up front: Plex cannot hide a collection from the server owner, so your own
Home shows every user's row. The app says so where it matters instead of leaving you to find out.

Say why, not just what

  • Every skip explains itself (#3) — "Skipped" used to be the whole message. A run now records
    the reason per person (no watch history yet, no candidates survived filtering, the row's libraries
    don't match their share) and shows it in the run detail.
  • A failed run names the account that blocked it, rather than "promotion skipped — a privacy
    sync failed this run".
  • A skipped person is no longer counted as a success.

Logs, in the app

A Logs view — filter by level, search, follow live, copy, or download every log file as a zip. Built
because diagnosing the first beta meant asking people to fish logs.log out of a container.

Everything is redacted before you see it: Plex tokens, bearer credentials and provider API keys
(Anthropic, OpenAI including sk-proj-/sk-or-v1-, Google, xAI, Groq) are stripped from every line
served, copied or exported — the point of the view is that the output is shareable.

Rows and users

  • Nicknames (#4) — call someone what they're actually called in a row title, without touching
    their Plex username. The label never moves, so their row stays private.
  • Watch history is scoped to the row's own libraries — a row built from your 4K library was
    being seeded by what you watched anywhere.

One local-AI provider

"Local / OpenAI-compatible" replaces the separate Ollama and OpenAI-compatible options (#7).
llama.cpp, LM Studio, vLLM, LocalAI, Ollama and OpenRouter all speak the same
/v1/chat/completions, so one provider with a base URL covers all of them. Existing Ollama setups
migrate automatically.
A bare host gains /v1 for you, and Test lists your models instead of
making one generate, so it answers instantly.

It also now survives the servers it exists for: the request degrades from OpenAI's strict
JSON-schema mode to plain JSON mode to neither (older local builds reject the strict form outright),
and a blank Model resolves to a chat model your server actually reports.

Upgrading

Pull and recreate — migrations run on boot. Nothing to do by hand.

Full detail in CHANGELOG.md.

Don't miss a new shortlist release

NewReleases is sending notifications on new releases.