591c0dadc35669f7e79d00d9943e944bc8f82843
pastilhas rendered on the Jellyfin side with nothing opposite it, labelled as belonging to nobody — reported by the owner, about their own name, which is the only line on that screen that could not possibly be true. The cause is a correct exclusion used for the wrong question. `listProvisionableUsers` leaves the owner out on purpose: they hold the admin account this flow authenticates as, and provisioning them would be a second admin nobody asked for. But this view is not the provisioning list, it is "who exists on each side", and an account absent from the input read as an account that does not exist. So the viewer is looked up directly and joined onto the account the connection signs in as — known exactly from `jellyfinUserId` on the server row, never matched by name. It gets its own state rather than being called "linked", because there is no row in jellyfin_accounts and there should not be: it is the credential, not a provisioned account. It is also excluded from the "Jellyfin only" count, which was counting the one account both sides agree on as belonging to neither. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Video (Jellyfin)
Films and shows from your own Jellyfin server, inside Officer — with a player that handles direct play, HLS and progressive, and an access token that never leaves the server.
What you get
- Home — resume, next up, recently added
- Libraries — browse films, shows, seasons and episodes
- Search across the library
- A real player — direct play where the file allows it, HLS where it doesn't, progressive as the fallback, with playback reported back to Jellyfin so resume works everywhere
- Multiple servers — add several and switch between them
Requirements
A running Jellyfin server Officer can reach, and an access token.
Setup
Install the plugin, open /jellyfin, and add a server: a label, the URL, and the token. The token is encrypted at rest and never sent to the browser.
Unlike Transmission and Soulseek, this plugin keeps its own registry — jellyfin_servers — because
having more than one Jellyfin is a real thing (a home server and a friend's). One is marked active.
The plugin does not install or supervise Jellyfin. Point it at one you already run.
Permissions
One permission, jellyfin, grantable per role like any other app permission.
Notes
web/vendor/hls.mjsis a checked-in third-party build (~1.3 MB), deliberately excluded from formatting so the diff against upstream stays readable.- Transcoding is the Jellyfin server's job. This plugin asks for a stream and plays what it gets.
Languages
TypeScript
100%