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.
On this page
Jellyfin (10.9+) makes trickplay images itself. The quickest wins are in its own trickplay options, most of which ship off:
- Turn on key-frame-only extraction.
- Raise the FFmpeg thread count from its default of 1.
- Try hardware decoding.
- For HDR, turn on tone mapping in the transcoding settings.
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 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.
- Key-frame-only extraction (
EnableKeyFrameOnlyExtraction, default off). Jellyfin's own description: "Significantly faster, but is not compatible with all decoders and/or video files." Try it first. - FFmpeg threads (
ProcessThreads, default 1). Raise it if the server has spare cores. - Process priority (
ProcessPriority, default below normal). Playback wins when the CPU is busy, at the cost of slower trickplay. - Hardware decoding (
EnableHwAcceleration, default off). - Hardware MJPEG encoding (
EnableHwEncoding, default off). Jellyfin's help text says it only works with QSV, VA-API, VideoToolbox and RKMPP (source). - Interval and width (default 10 seconds, 320 px, 10×10 tiles). A longer interval means fewer frames to make.
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
- A large backlog still takes days after tuning.
- You want the decoding done on another machine (remote nodes) or a different GPU.
- You want trickplay made per file as soon as Sonarr or Radarr imports it (how).
- You also run Plex or Emby on the same files. Media Preview Generator decodes each file once and writes each server's format.
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:
- Jellyfin 10.10 or newer (why).
- The media folder mounted read-write in the container for the default layout, because the tiles are written beside the video. Match
PUID/PGIDto the media's owner. Off-media mode needs the Jellyfin config folder mounted read-write instead. - Library settings:
- Trickplay extraction (
EnableTrickplayImageExtraction) on. - "Save trickplay with media" (
SaveTrickplayWithMedia) on. - Scan-time extraction set as described below.
- Trickplay extraction (
- Matching tile geometry in Jellyfin's server trickplay options. The Sync options button does this (details).
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).
- Tiles next to the media (the default): optional.
- With the plugin, new trickplay appears as soon as the tiles are written. Turn scan-time extraction off.
- Without it, keep "Extract trickplay images during library scan" on. Jellyfin then picks the tiles up on its next library scan, or at the latest with its daily trickplay task (3 AM by default).
- Tiles off the media drive: required. In this mode the app writes into Jellyfin's data folder (
<config>/data/trickplay/…), not next to the video. It needs the plugin, the Jellyfin config folder set to where that folder is mounted read-write in this container, andSaveTrickplayWithMediaoff. The media itself can then stay read-only. See off-media mode.
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
- Docker only, with a web UI and no CLI.
- On Windows only NVIDIA GPUs are accelerated, and on macOS none are.
- New files are retried after 1, 2, 5, 15 and 60 minutes by default while Jellyfin indexes them (retry queue).
- It doesn't make chapter images.