Jellyfin should keep enough free storage for its largest normal combination of metadata growth, generated assets, transcode scratch, logs, and maintenance work.
A fixed percentage is unreliable because a simple library and a trickplay-heavy library can use app storage very differently. Separate persistent growth from temporary peaks, then measure both on the paths where they actually occur. Free space on a media volume does not help if config or transcode storage is a different full filesystem.
Measure Persistent App-Data Growth First
Database, metadata, artwork, plugins, and generated assets can grow as the library and enabled features expand. Their trend should be measured independently from source media capacity.
Generated assets can materially expand the working set; one Jellyfin operator avoids Trickplay and chapter images because they consume additional storage and processing during library updates.
Record config-directory size after a settled scan, then again after a representative month or large import. Use the observed growth rate instead of guessing from media terabytes.
Measure Transcode Scratch as a Temporary Peak
Active conversions create working files that may disappear when the session ends. The worst case depends on the largest source, number of concurrent transcodes, and configured temporary path.
Keeping transcode scratch on local fast storage separates high-churn temporary work from durable library state.
Run the hardest expected simultaneous transcodes and record peak temporary usage. Reserve that space separately from the long-term app-data budget.
Scheduled Jobs Can Create Short-Lived Bursts
Trickplay, image extraction, scans, and plugin analysis can consume CPU and storage together. Several tasks starting in the same window can produce a temporary footprint much larger than normal idle use.
Background work is visible as scheduled Jellyfin tasks, so free-space tests should include the jobs that actually generate or refresh library data.
Stagger heavy tasks and observe free space through a complete schedule cycle. The home media-server role map helps keep temporary work from silently sharing a nearly full system volume.
Set the Alert Above the Failure Point, Not at Zero
Waiting until the filesystem reaches 100% leaves too little room for database writes, package updates, logs, and recovery operations. The alert should fire while cleanup or relocation is still safe.
Unbounded container logs can consume host storage independently of application media.
Choose a free-space floor above the largest measured temporary peak plus routine growth. Recalculate after enabling new generated-media features or changing the transcode directory.
Support & Tips
More to Read

Should You Back Up Jellyfin Live or Stop the Service First?
Prefer stopped-service backups for simplicity; use live snapshots only when application state is captured consistently and restores are tested.

Why Does Jellyfin Run Hot or Noisy When Nobody Is Streaming?
Idle heat usually means background work or a shared-host workload, so identify the active process and scheduled task before changing cooling or hardware.

When Should You Rebuild Instead of Repairing Jellyfin?
Choose rebuild over repair when runtime drift is the problem and persistent state is backed up; do not “rebuild” by deleting the only good...

