Access 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 Access 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-accesslinks_x.y.z.zip (the SHA-256 of the file is shown next to the button).
  2. Extract it into a new folder Access 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 → Access 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); 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.

Configuration

Open Access Links in the Jellyfin dashboard menu (or Dashboard → Plugins → Access Links by MediaLab).

  1. HTTPS: Access Links works with HTTPS addresses only. If the page says HTTPS is not enabled, set up HTTPS and a certificate in Jellyfin's network settings; until then the https:// links will not open.
  2. Local address: leave it empty to use the server's network IP, its local HTTPS port and its base URL automatically, type a name from your network (for example media.lan; the HTTPS port is added for you) or a full https://… address. Tip: if your certificate is issued for a name, use that name, resolved to the server in your network; a bare IP address usually makes browsers warn.
  3. External address: type it exactly as you would in a browser outside your home, with the external port, for example https://example.com:2096. The external port may differ from the local one. If an https:// address is set in Jellyfin's Published server URIs, the page suggests it with a button. Anything pasted from the browser bar after the address (such as /web/#/home) is removed for you.
  4. Click Save.

Daily use

  • The page lists every link in groups: Jellyfin (web app, sign-in screen, Jellyfin's own Quick Connect code page, admin dashboard, server address for apps) and one group for each MediaLab plugin installed and active on the server (Quick Connect, Registration, Cashier, Share Links, Headend). Each link shows who it is for and its local and external address.
  • For each address: Open, Copy or QR. Show the QR code on screen so a phone can scan it, for example the Quick Connect phone page or the sign-up form.
  • Check all links reads the certificates, confirms that the external address reaches this same server and tests every page. Warnings say exactly what is wrong: HTTPS off, certificate expired or expiring within 14 days, certificate not covering the address, or an external address that reaches another server.
  • Other Emby / Jellyfin servers: add a name, the type and the https:// address of another server (up to 50). Its links are built for you; Check shows its name, version, real type and which plugin pages exist on it (a missing page usually means the plugin is not installed there).

What it sends where

  • Checks run only when you click Check all links or Check: the server connects to the addresses you entered to read their certificate, their public server information and whether each page answers. Nothing secret is sent.
  • QR codes are generated on your server; no address goes to an outside service.
  • Nothing goes to medialab.works except the license check.

Troubleshooting

  • "HTTPS is not enabled on this server": enable HTTPS with a certificate in Jellyfin's network settings, then restart Jellyfin.
  • "The certificate does not cover the local address": the local address is an IP address or a name missing from the certificate. Use a name the certificate covers, resolved to the server in your network.
  • "The external address does not answer from the server": many routers cannot reach their own external address from inside ("hairpin NAT"). Open the external link from a phone on mobile data to check it.
  • "The external address reaches ANOTHER server": the port forwarding or the reverse proxy sends that address to a different Jellyfin or Emby server; fix the forwarding, or the external address.