05e11f81c9dd3d2968f0843f1e2875b20314e716
Provisioning already created each member's Jellyfin account and signed in as them to get a token — its own header says the token exists so "the person's Officer session can already read their library". It was then dropped, because linkJellyfinAccount had nowhere to put it. So every non-owner resolved to no config and got a 503 setup form, asking them to connect a Jellyfin server with a password nobody knows. It reads as a permissions fault and is not one: the grant, the role and the account list were all correct. jellyfin_accounts now carries access_token and device_id, getConfig falls back to the link row when the caller has no registry of their own, and there is no path from there to the owner's token — a member resolving to the owner's credential would read the owner's watch state and every library. POST /_config/:id/provision repairs accounts linked before the column existed. It resets the password to mint, which is free on an account Officer created (random, discarded, known to nobody) and destructive on an adopted one, so adopted accounts are skipped unless includeAdopted says otherwise. Applied on alpha: conceiba and guipinto minted and verified against the live server; fedra and diogo skipped as adopted. Co-Authored-By: Claude Fable 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%