Why Does Thumbnail Generation Fill a Media Server’s App Storage?

Eva Wong is the Technical Writer and resident tinkerer at ZimaSpace. A lifelong geek with a passion for homelabs and open-source software, she specializes in translating complex technical concepts into accessible, hands-on guides. Eva believes that self-hosting should be fun, not intimidating. Through her tutorials, she empowers the community to demystify hardware setups, from building their first NAS to mastering Docker containers.

Thumbnail generation fills app storage because the server creates many derivative images and stores them in a writable metadata or cache path.

A media library may keep multi-terabyte videos on an HDD pool while its container maps configuration, metadata, and cache to a much smaller SSD or boot volume. Chapter images, trickplay previews, posters, backdrops, and temporary extraction files then grow with library runtime and generation settings rather than source-file size alone. The safe fix begins by identifying the exact derivative type and path before deleting anything the database still expects.

Locate the Directory That Is Actually Growing

Measure the media application’s configuration, cache, metadata, transcode, and temporary directories separately. Sort subdirectories by allocated size and recent modification time while a thumbnail task runs.

Chapter-image extraction is explicitly described by Jellyfin’s interface strings as slow, resource intensive, and potentially requiring several gigabytes of space.

Confirm whether growth lands in the host bind mount, a named volume, or the container writable layer. If the container layer grows, correct persistence before cleanup; otherwise the space can disappear from the app view while still consuming Docker’s system storage.

Identify Which Image Feature Created the Files

Separate ordinary posters and backdrops from chapter images, trickplay previews, video-preview thumbnails, intro markers, and plugin-generated artwork. Each feature has a different trigger and retention rule.

Trickplay creates repeated visual samples across a video timeline so clients can show previews while seeking. The resulting image grids scale mainly with total runtime, sampling interval, resolution, quality, and tile layout rather than whether the source is 1080p or 4K.

Run one scheduled task manually while watching the target directory. Match new filenames and database entries to the feature that produced them. Do not disable all metadata providers when only one preview task is responsible.

Check Interval, Resolution, Quality, and Library Scope

Record the thumbnail width, sampling interval, JPEG or WebP quality, tile dimensions, thread count, and libraries included in generation. Shorter intervals and larger images create more stored pixels per hour of video.

Generation can also restart after a setting change or upgrade. A Jellyfin issue describes users who could not stop previously generated trickplay data from returning because disabling the feature did not clean existing output.

Change one setting on a small test library and compare bytes generated per hour of media. Use that measured ratio to estimate the complete library before launching another full extraction task.

Setting change Likely storage effect Tradeoff
Longer sampling interval Fewer images Less precise seek previews
Lower thumbnail width Smaller files Softer TV preview images
Lower image quality Smaller files More compression artifacts
Narrower library scope Less total storage No previews for excluded libraries

Select settings that fit the real client screens and seek behavior rather than generating the highest-quality derivative for every title.

Look for Stale or Orphaned Thumbnail Sets

Compare active media items with generated directories after files are replaced, renamed, moved, or removed. Old preview sets may remain when the new file receives a different item ID or output name.

A Jellyfin report shows outdated trickplay images stored beside media were not deleted when replacement previews were generated, leaving stale trickplay data beside the current set.

Use the application’s supported cleanup task first and verify a backup of the metadata database. If manual removal is necessary, test one orphaned item and refresh it before deleting large directory trees whose references are unknown.

Verify Whether Images Belong in App Storage or Beside Media

Some media servers can save artwork or trickplay data next to the library, while others keep database-linked derivatives inside app metadata. Moving the location changes backup, permissions, migration, and read-only media behavior.

Saving previews beside media can improve migration portability, but it can also multiply small files on a large HDD share and require write access to the library. One Jellyfin migration issue shows that locally stored trickplay files may not transfer cleanly between instances.

Keep database-bound and high-churn derivatives on a deliberately sized app volume unless the application fully supports portable local images. Keep the media share read-only when write access is not required for the chosen layout.

Move the App Volume Without Splitting Its Database State

If the settings are reasonable but the app volume is undersized, stop the media server and move the complete configuration, metadata, and cache units according to the container’s persistent mount design. Preserve ownership, ACLs, database files, and symbolic links.

The ZimaSpace article on SSD app volumes for metadata and thumbnails explains why these small-file workloads benefit from fast storage while large source media can remain on HDDs.

Do not move only the largest image folder while leaving database paths behind unless the application supports that split. Start the migrated instance in isolation and confirm old thumbnails resolve before generating new ones.

Clean Up Safely and Establish a Growth Baseline

Pause thumbnail tasks, back up the application database, and record the current file count and bytes by derivative type. Remove only confirmed stale output or use the application’s supported deletion and regeneration controls.

A filled SSD can affect more than thumbnails. A Jellyfin issue links an exhausted SSD with suspected database damage and an incomplete library view, showing why free-space exhaustion can threaten app state.

After cleanup, run generation on one library, measure daily growth, and set alerts before the app volume reaches its reserve threshold. The repair is complete when expected previews work, stale data no longer returns, and storage growth matches the chosen interval, resolution, quality, and library scope.

Support & Tips

More to Read

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.