Share Links for Jellyfin — guide

Installation

You need Jellyfin Server 12.2 or newer and a MediaLab Works account with a license that covers the plugin (an active subscription, a lifetime license within its update window, the Jellyfin bundle or the free 30-day trial).

From your plugin repository (recommended). Jellyfin then installs and updates the plugin by itself.

  1. In your MediaLab Works account open Licenses → Jellyfin plugin repository and click Create address. Copy it: it is private (it contains a token), so do not share it; you can regenerate or revoke it at any time.
  2. In Jellyfin open Dashboard → Plugins → Repositories, click +, give it a name (for example MediaLab Works), paste the address and save.
  3. In Dashboard → Plugins → Catalog find Share Links by MediaLab, click Install, then restart Jellyfin.

The repository lists only the plugins your licenses cover, and only the versions they allow. Its download links are signed and expire after a few hours, so Jellyfin always reads a fresh list.

From the public catalog. https://medialab.works/jellyfin/manifest.json lists every released MediaLab Works plugin with its public build; medialab Server adds it by itself. You can add it the same way to install a plugin before you have a key: the plugin then asks for the license, or starts the trial, on its License page. With a lifetime license whose update window has ended, keep to your private repository, which offers only the versions your license allows.

Manually, from a zip file.

  1. In Account → Licenses download jf-sharelinks_x.y.z.zip (the SHA-256 of the file is shown next to the button).
  2. Extract it into a new folder Share Links by MediaLab_x.y.z.0 inside the Jellyfin plugins folder:
    • Linux (package): /var/lib/jellyfin/plugins/
    • Docker (official image): /config/plugins/ in the config volume
    • Windows: %ProgramData%\Jellyfin\Server\plugins\
  3. Restart Jellyfin.

License activation

  1. Open the plugin page in Dashboard → Plugins → Share Links by MediaLab and click License.
  2. Paste your license key and click Activate with key. The plugin contacts the license server, binds the key to this Jellyfin server and shows the license as Active.
  3. No key yet? On the same page enter your e-mail and start the 30-day free trial (card needed, nothing to pay today) or buy a license; the plugin activates itself when the payment is done.

The license is checked once a day and at every Jellyfin start. Without internet the plugin keeps working for 7 days after the last successful check. Without a valid license the plugin stops its work and only its License page keeps working (trial, key, renewal); links no longer open, but nothing is deleted, and everything resumes as soon as the license is valid again. Move license (release this server) on the same page frees the key for another server.

Updates and rollback

  • From the repository: Jellyfin shows new versions in Dashboard → Plugins and can update the plugin automatically; restart Jellyfin to load the new version.
  • From the plugin's License page: with a valid license, Install update installs the newest version your license allows and Roll back to x.y.z goes back to the previous version (for example if something stopped working after an update). Restart Jellyfin after either. Both packages are checked against the checksum published by the license server.
  • A lifetime license receives the versions released during its update window; after it, the plugin keeps working on the last version it may use.
  • After a rollback, if your plugin repository is added in Jellyfin, Jellyfin's scheduled task Update Plugins (at start-up and daily) installs the newest version again. To stay on the previous version for a while, remove the triggers of that task in Dashboard → Scheduled Tasks and add them back later.

Source code

The GPL-3.0 source code of each version is in Account → Licenses (Source code), next to the download, as a .tar.gz archive made from the exact commit of that version.

Before you share

Open Share Links in the Jellyfin dashboard menu and go to Settings:

  • Public server address: the address used in the links (for example https://media.example.com). Leave it empty to use the address you are using Jellyfin through right now. Guests outside your home network need an address they can reach.
  • Default validity (48 hours) and maximum validity (168 hours = 7 days), default simultaneous viewers (1), guest maximum quality (8 Mbit/s; 0 = the server's own limit) and how many days expired links stay in the list (30).
  • Links work: turned off, existing links no longer open (they are not deleted).

Creating a link

  1. On the Share tab, search for and choose what to share: a movie, an episode, a season or a whole series.
  2. Set the limits:
    • expiry: when the link stops working;
    • maximum opens: how many times it can be opened;
    • maximum simultaneous viewers;
    • an optional PIN of 4 to 8 digits, which the guest must enter.
  3. Send the link: copy it, or send it by WhatsApp, Telegram or e-mail; a QR code is shown too. The full link is shown only once (the server keeps only a fingerprint of it); if you lose it, create a new one.

What the guest does

  • In a browser, the guest opens the link. On a TV or another device, they open the short address (/ShareLinks/s on your server) and type the 8-character code, or scan the QR code with a phone.
  • The title plays in the plugin's own player, where the guest can choose the audio track and the subtitles; a season or series shows its episodes. Nothing can be downloaded, and the bitrate is capped.
  • The guest never gets a password or a token for your server: a hidden, temporary Jellyfin user made for the link keeps its token on the server, and everything goes through a proxy limited to the titles of the link.

Managing links

  • The Links tab lists the links with their state; revoking a link signs its viewers out immediately and deletes the temporary user. Expired links are cleaned up the same way.
  • The Log tab shows the openings, refusals and revocations.
  • 10 wrong codes or PINs from one IP address within 10 minutes block it for 15 minutes; 10 wrong PINs for one link, from any address, block that link's PIN for 15 minutes.

Sharing by regular users

Optionally (Users can create links too), regular users can create links to titles they can see themselves, for one viewer, within a quota per 30 days: a default quota (2 links), or one per Cashier plan, and a maximum validity of their own (48 hours by default). Each user creates, sees and revokes their links on the My links page (/ShareLinks/My on your Jellyfin address). On medialab Server, from version 0.1.1, the web client also shows a Share button on the title page and My links in the menu.

What it sends where

  • The guest's browser talks only to your server; the player and hls.js are served by the plugin.
  • WhatsApp, Telegram and e-mail are only opened with the prepared text; the plugin sends nothing by itself.
  • Nothing goes to medialab.works except the license check.

Troubleshooting

  • The link does not open from outside your network: set the Public server address in Settings to an address guests can reach, then create the link again.
  • "Too many attempts": wait 15 minutes; the block applies to the address (or the link's PIN) that had the wrong attempts.
  • No Share button in the Jellyfin web client: the button and the menu entry appear only on medialab Server; on official Jellyfin use the plugin page or /ShareLinks/My.