Jellyfin Shows Duplicate or Empty Root Folders — Fixing the Wrong Media Path
You add a movie library in Jellyfin and it comes up empty, or you end up with two near-identical root folders that never fill in. The usual culprit isn't Jellyfin at all — it's a mismatch between the media path you typed and the path where your files actually live. Different docs used different spellings, and only one of them is correct.
Rather not hand-align paths? SparkBox registers one consistent media path across Jellyfin and its downloaders, so this contradiction can't happen in the first place. See the walkthrough →
The 10-second version: The correct root folders are /data/Movies, /data/TV, and /data/Music — capitalized, with no /media/ segment. Point your Jellyfin libraries at those exact paths and remove any that use lowercase or a /data/media/ layout.
What "root folder" means in Jellyfin
A root folder (also called a media folder or library path) is the directory Jellyfin scans to find your files. When you create a library — say "Movies" — you tell Jellyfin one or more folders to look inside. If that folder exists but contains nothing, the library shows up empty. If you point at the wrong spelling of a folder, Jellyfin may even create or reference a brand-new empty directory, which is where "duplicate root folders" come from.
The tricky part on a self-hosted setup is that several tools share the same disk. Your download and organizing tools (often called *arr apps) drop finished files into one path. Jellyfin needs to read from the exact same path. If those two disagree by even a single letter's case, Jellyfin sees nothing.
The real cause: three conflicting path conventions
This problem is almost always a documentation mismatch rather than a broken install. Three different path styles were floating around, and users followed whichever one they happened to read first:
- Capitalized, no
/media/:/data/Movies,/data/TV,/data/Music - Lowercase:
/data/movies,/data/tv,/data/music - With a media segment:
/data/media/moviesand similar
Only the first one is authoritative. The setup scripts register the capitalized paths, the finishing step creates those exact folders, and the shipped Jellyfin libraries point at them. The lowercase and /data/media/ spellings appeared in a couple of user-facing docs pages and caused the confusion — they were wrong.
Why case matters: Linux filesystems are case-sensitive. /data/Movies and /data/movies are genuinely two different folders. Windows and macOS are usually case-insensitive, which is why this bites Linux and Docker users hardest — the "same" path silently becomes a different one.
Fix 1 — Point your libraries at the correct capitalized path
This is the fix for most people. Do not delete anything yet; just correct the path in place so you keep your library settings and watch state.
- Open the Jellyfin web interface and go to Dashboard → Libraries.
- Click the three-dot menu on your Movies library and choose Manage Library (or Edit).
- Look at the folder(s) listed. If you see
/data/movies(lowercase) or/data/media/movies, that's the problem. - Remove the wrong folder from the list and add
/data/Moviesinstead — matching the capitalization exactly. - Repeat for TV (
/data/TV) and Music (/data/Music). - Save, then go to Dashboard → Scheduled Tasks and run Scan All Libraries.
Within a minute or two the library should populate. If it stays empty, the files probably aren't in the capitalized folder yet — see Fix 3.
Fix 2 — Remove the duplicate empty library
If you ended up adding a second Movies library while troubleshooting, you'll now see two entries — one populated, one empty. Clean it up:
- In Dashboard → Libraries, identify which library is empty (it will show 0 items).
- Confirm the working library points at
/data/Moviesand actually lists your files. - Delete only the empty duplicate via its three-dot menu → Delete. Deleting a library does not delete the media files on disk.
- Run Scan All Libraries again to refresh the home screen.
Gotcha: Deleting and re-creating a library resets play state (watched/unwatched, resume points) for those items. That's why Fix 1 corrects the path in place. Only delete the empty duplicate, never the one holding your history.
Fix 3 — Confirm where the files actually live
Jellyfin can only show what's on disk. If both the library path and the folder are correct but the library is still empty, the finishing/organizing step may have put files somewhere else — for example under a lowercase or /data/media/ tree created by following the wrong doc.
- List what's under your data folder to see the real structure. From a shell on the host or inside the container:
ls -la /data - You should see
Movies,TV, andMusicwith capital letters. If you instead see lowercasemoviesor amediafolder holding your files, that's where they went. - Move the files into the correct capitalized folders so everything shares one convention. Verify the target names first:
ls -la /data/Movies - Once files sit under
/data/Movies,/data/TV, and/data/Music, rescan in Jellyfin.
Going forward, make sure your downloader/organizer writes into these same capitalized paths. When Jellyfin and the *arr apps agree on one path, the duplicate/empty-folder problem disappears for good.
Fix 4 — Rule out a genuine permission problem
If the path is exactly right and the files are present but the library is still empty, Jellyfin may not be allowed to read the folder. A permission here means the operating-system rule that decides which user accounts can open a file or directory.
- Check whether the folder is readable by the account Jellyfin runs as:
ls -la /data/Movies - If the owner and group don't include the user Jellyfin runs under, Jellyfin can't scan it. Align ownership so Jellyfin and your downloader use the same user/group across the shared
/datatree. - After adjusting ownership, rescan the library.
Note: In a container, the folder can look perfect from the host but be mounted with different permissions inside Jellyfin's container. Always check from inside the same environment Jellyfin runs in.
Frequently asked
What is the correct Jellyfin root folder path?
The authoritative convention is capitalized with no /media/ segment: /data/Movies, /data/TV, and /data/Music. That's what the setup scripts register and what your Jellyfin libraries should point at.
Why does Jellyfin show duplicate or empty root folders?
Because different docs used different spellings. Some pages said lowercase /data/movies or a /data/media/movies layout while the scripts actually created /data/Movies. Jellyfin then points at a folder with no files (empty), or you add both spellings and get duplicates.
Do file and folder names in Jellyfin paths need to match case exactly?
On Linux, yes. The filesystem is case-sensitive, so /data/Movies and /data/movies are different folders. Point Jellyfin at the exact capitalized path your files live in.
Will fixing the path lose my Jellyfin watch history?
Correcting the path on an existing library keeps your history. Deleting and re-adding a library can reset play state, so use Fix 1 to edit in place and only delete the empty duplicate.
Skip the path-matching entirely
SparkBox ships Jellyfin and its media apps pre-wired to one consistent /data/Movies, /data/TV, /data/Music layout, so libraries fill in on first scan — no duplicate or empty root folders to untangle.