Faster Jellyfin trickplay generation

Speed up Jellyfin trickplay with its own settings first (threads, key frames, hardware decode, tone mapping), then offload it to a GPU container.

Jellyfin (10.9+) makes trickplay images itself. The quickest wins are in its own trickplay options, most of which ship off:

If a backlog is still too slow, you can move the work off Jellyfin. You might want it on another machine, or you might run Plex or Emby too. Media Preview Generator can write Jellyfin's native trickplay tiles from a GPU in its own Docker container. That needs Jellyfin 10.10 or newer. The tiles go next to each video, or into Jellyfin's own data folder if you want the media kept read-only.

Jellyfin's web player mid-scrub, showing a preview thumbnail this app made

Jellyfin's web player on a test server. Tears of Steel, (CC) Blender Foundation | mango.blender.org, CC BY 3.0.

Start with Jellyfin's own settings

These live under Dashboard → Playback → Trickplay. Defaults are from Jellyfin's TrickplayOptions.cs, checked 23 September 2026.

Hardware decoding is not a guaranteed win. A Jellyfin core team member has said its use in 10.9 trickplay is "not the most efficient". Users report it failing on some files, or not measurably beating the CPU (#13468). Test on a few files before relying on it.

HDR looks grey or washed out? Jellyfin only tone-maps trickplay when tone mapping is on in its transcoding settings. A core developer confirmed this in #13142. A Dolby Vision colour fix landed via #8049, but green-tinted Dolby Vision trickplay is still reported by users in 2026.

When to move it off Jellyfin

If none of these apply, the built-in is simpler. See the comparison.

How Media Preview Generator writes trickplay

By default it writes Jellyfin's own "saved with media" layout, next to each video:

Movie (2010).trickplay/
    320 - 10x10/
        0.jpg   # sheet of 10×10 thumbnails
        1.jpg

Tiles are written to a staging folder first, then moved into place, so Jellyfin never reads half a set. Jellyfin adopts these tiles as its own and doesn't run FFmpeg on them again. With Store trickplay off the media drive on (Servers → Edit for the server), the same tiles go to <Jellyfin config>/data/trickplay/<id[:2]>/<id>/320 - 10x10/ instead. Details are in Per-vendor output formats.

What that needs:

Warning

Don't turn trickplay extraction off on a library. When EnableTrickplayImageExtraction is off, Jellyfin deletes the .trickplay folders on its next refresh, including ones this app wrote. The app asks you to type a confirmation before it will flip that setting.

The Setup Health tab (Servers → Edit for the Jellyfin server) checks all of these and can fix them in one click. See Setup Health.

When you need the Media Preview Bridge plugin

The plugin tells Jellyfin about tiles that something else wrote (plugin README).

Install it from the server's Setup Health tab. Or add this repository in Jellyfin → Dashboard → Plugins → Repositories, then install Media Preview Bridge:

https://mediapreviewgenerator.dev/jellyfin-plugin/manifest.json

Verify one file before a full library

After installing the container, open Servers → Edit → Setup Health for Jellyfin. Fix the checks for the output mode you chose, then use Process a file or folder on the Dashboard to process one movie or episode. In the job's Job details, check Jellyfin's result; Open logs and files shows the per-file reason if it is waiting or failed. Finally, scrub the video in Jellyfin's player.

If the tiles exist but the player does not show them, check plugin status, library scan timing and tile geometry before regenerating the whole library. These affect adoption of existing tiles; changing worker group settings will not fix them. For remote processing, follow the shared-media and output-mount checklist.

Triggering from Jellyfin

Install Jellyfin's Webhook plugin. Add a Generic destination pointing at https://<this-app>/api/webhooks/incoming?token=<webhook secret>, and subscribe it to Item Added. The app recognises Jellyfin's payload and looks up the file path. A "Recently Added" schedule also works with Jellyfin, and needs no plugin. See Webhook configuration per vendor.

Limits

Edit this page on GitHub
Type to search the documentation.