Smart Skip 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.
- 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.
- In Jellyfin open Dashboard → Plugins → Repositories, click +, give it a name (for example MediaLab Works), paste the address and save.
- In Dashboard → Plugins → Catalog find Smart Skip 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.
- In Account → Licenses download
jf-smartskip_x.y.z.zip(the SHA-256 of the file is shown next to the button). - Extract it into a new folder
Smart Skip by MediaLab_x.y.z.0inside the Jellyfin plugins folder:- Linux (package):
/var/lib/jellyfin/plugins/ - Docker (official image):
/config/plugins/in the config volume - Windows:
%ProgramData%\Jellyfin\Server\plugins\
- Linux (package):
- Restart Jellyfin.
License activation
- Open the plugin page in Dashboard → Plugins → Smart Skip by MediaLab and click License.
- 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.
- 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.
Automatic analysis
There is nothing to install besides the plugin: Smart Skip uses the ffmpeg of your Jellyfin server (chromaprint, signalstats), at low priority, and no graphics card.
- New episodes and movies are analyzed automatically, about a minute after they arrive (a season added at once is analyzed once).
- A nightly task (Smart Skip in Dashboard → Scheduled Tasks, by default at 03:30) analyzes the rest of the library. Analyze now on the plugin page starts it at once.
- Intros are found per season, by comparing the audio fingerprints of the episodes, including episodes with a scene before the opening titles. The fingerprints are kept, so a new episode does not make the whole season decode again.
- Recaps ("Previously on…") are detected too. With recap detection on, a new season takes about twice as long to analyze; you can turn recap detection off.
- End credits are found for episodes and movies; movie epilogues are protected.
- A file that failed to analyze is not retried at every run, only when the file changes.
Settings
Open Smart Skip in the Jellyfin dashboard menu, tab Settings (administrators only): analysis on or off, intros, recaps, end credits, movies, and how far to search: the first minutes for the intro (15 by default, at most a quarter of the episode), the last seconds for the credits of episodes (450) and of movies (900).
Reviewing the results
The Overview tab shows how many titles are analyzed, with an intro, a recap or credits, failed, corrected and queued. The Titles tab lists them:
- Each title shows its confidence (certain or likely).
- The To review filter gathers the titles where the analysis is not sure, the episodes without an intro in a season where the others have one, and the failed ones.
- The editor shows the exact frames at each boundary (start and end of the intro, recap and credits), so you can check and correct them.
- Manual corrections are kept: a later analysis never overwrites them, until you click Re-analyze for that title. A correction updates the Jellyfin segments at once.
In Jellyfin
- Smart Skip is a media segment provider: Jellyfin reads the Intro, Recap and Outro segments from it, and the Jellyfin apps that support media segments show their own Skip button.
- When nothing follows the credits, the Outro runs to the end of the file, so Jellyfin offers the next episode as soon as the credits start.
- No segment starts at 0:00, and an intro the analysis is not sure of is not handed to Jellyfin.
- In Jellyfin Web, each user chooses what happens at each segment type in Settings → Playback → Media segments; for recaps the default is to do nothing.
What it sends where
Nothing: the analysis is fully local. Only the license check reaches medialab.works.
Limits
- "Next time on" previews are not detected.
- Remixed recaps are detected only sometimes; Smart Skip prefers marking nothing to marking the wrong part. Check such titles in the To review list.
- A season with a single episode gets no intro: there is nothing to compare it with.