How to Set Up Local Metadata Files Without Allowing Unwanted Rewrites

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.

Local NFO files and artwork make a media library portable, but the same server that reads them may also be allowed to replace titles, images, or identifiers. A read-only media mount prevents accidental writes, yet it changes where the server can store downloaded sidecars.

Choose one authority for each metadata field before changing permissions. Curated sidecars should be versioned or backed up, server database state should remain writable, and a refresh test should prove that the server reads without rewriting the source files. Repeat that test after upgrades and any library-wide metadata refresh.

Decide Which Metadata Source Is Authoritative

List the fields you curate locally: title, sort title, edition, date, people, provider IDs, poster, and background art. If local files are authoritative, disable or limit provider updates that can overwrite those fields during a refresh.

Review the Jellyfin NFO field behavior for the installed server family before adopting a file naming scheme. Support varies by library type, and a filename that looks obvious may not be the file the scanner reads.

Keep a small sample directory outside the production library. It should contain one movie or episode, its NFO, and selected artwork so that scan and refresh behavior can be tested without risking thousands of curated files.

Separate Read-Only Media From Writable Server State

Mount the media tree read-only inside the container while leaving the configuration, cache, and database paths writable. A container flag such as a read-only bind mount is stronger than relying on an application checkbox that may change semantics across releases.

If the server must download new artwork beside media, a fully read-only library is incompatible with that workflow. Store downloaded metadata in application state instead, or use a controlled staging job that writes sidecars outside the server process.

Treat the mount map as part of the deployment record. The Jellyfin container upgrade checklist helps preserve the distinction between media, metadata, and application state during recreation.

Disable Write-Back Paths That Conflict With Curation

Turn off options that save artwork or NFO metadata into media folders when those folders are curated externally. Also check per-library metadata saver settings; a global setting may not be the only place that enables writes.

Do not make the whole container filesystem read-only as a substitute for correct mounts unless every required writable path is explicitly provided. Databases, logs, plugins, and temporary files still need controlled writable locations.

Capture file hashes or modification times for the sample NFO and images, run a library scan, edit a title in the UI, and run a metadata refresh. The files should remain unchanged while the application records allowed local state in its database.

-15% OFF
Single board computer zimaboard2

Verify Restore and Upgrade Behavior

Export or back up the curated sidecars independently from the media-server database. The sidecars restore presentation metadata; the database may still contain watch state, users, collections, and other information that local files do not cover.

Recreate the container in a test window and confirm that the read-only mount flag survives the deployment process. Then scan the sample directory and compare hashes again, because an upgrade can introduce a new metadata saver or change a default.

The final stop rule is simple: if a refresh requires write access to preserve your intended result, the source-of-truth design is unresolved. Restore the sample, keep production read-only, and decide whether the server or the external curator owns that field.

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.