How to Migrate from Emby to Jellyfin in 2026: Complete Guide
Emby and Jellyfin share a common ancestor - Jellyfin forked from Emby in December 2018 when Emby went closed-source. This shared DNA means migration is smoother than you might expect. Your media files stay exactly where they are. Your folder structure works identically. The main challenge is preserving watch history and recreating your user setup.
This guide walks you through the full migration with zero data loss.
Why People Are Leaving Emby for Jellyfin in 2026
| Feature | Emby (Free) | Emby Premiere | Jellyfin |
|---|---|---|---|
| Hardware transcoding | No | Yes (~$119 lifetime) | Free |
| Full mobile app | No | Yes | Free |
| Live TV / DVR | No | Yes | Free |
| Offline sync | No | Yes | Free |
| Account required | Yes | Yes | No |
| Open source | No | No | Yes |
| HDR tone mapping quality | Good | Good | Better (community consensus) |
| Plugin ecosystem | Moderate | Moderate | Larger and growing |
The most common migration triggers in 2026:
- Emby Premiere subscription renewal fatigue
- Better HDR tone mapping in Jellyfin (documented in community comparisons)
- Larger plugin ecosystem (Intro Skipper, Jellyfin-Enhanced, SSO plugins)
- No external account requirement
- Jellyfin 10.11 stability improvements
Before You Start: What Migrates and What Does Not
Migrates easily (zero effort)
- Media files - they stay exactly where they are, both servers read the same files
- Folder structure - Jellyfin uses the same naming conventions as Emby
- NFO files - if you use NFO metadata, Jellyfin reads the same format
- Local artwork - poster.jpg, backdrop.jpg, etc. are read identically
Requires manual steps
- Watch history - use Trakt as an intermediary (detailed below)
- User accounts - recreate manually in Jellyfin (different auth system)
- Playlists - recreate manually or export/import via M3U
- Custom artwork - re-upload any manually set posters
- Plugin configurations - reconfigure equivalent Jellyfin plugins
What you lose
- Emby-specific features - Emby Connect, Emby Premiere perks
- Emby mobile app data - app-specific settings and downloads
- Emby plugin data - plugin databases do not transfer
Step 1: Install Jellyfin Alongside Emby
Run both servers simultaneously during migration. Do not uninstall Emby until you have verified everything works in Jellyfin.
Docker Compose
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
ports:
- "8097:8096" # Use 8097 to avoid conflict with Emby on 8096
volumes:
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- /path/to/media:/media:ro # Same media path as Emby
devices:
- /dev/dri:/dev/dri # GPU passthrough for transcoding
restart: unless-stopped
Port note: Emby and Jellyfin both default to port 8096. Map Jellyfin to 8097 temporarily. After migration, switch Jellyfin to 8096.
Point Jellyfin to the exact same media folders Emby uses. Your files do not move.
Native Linux
curl -fsSL https://repo.jellyfin.org/install-debuntu.sh | sudo bash
# Edit /etc/jellyfin/network.xml to change the port if Emby is on 8096
sudo systemctl enable --now jellyfin
Step 2: Set Up Libraries in Jellyfin
- Open Jellyfin at
http://your-server:8097 - Complete the setup wizard - create your admin account
- Add libraries pointing to your existing media paths:
- Movies →
/media/movies - TV Shows →
/media/tv - Music →
/media/music
- Movies →
- Let Jellyfin scan and fetch metadata
Jellyfin uses TMDB and TVDB - the same sources as Emby. Metadata quality is identical. The scan takes 10-60 minutes depending on library size.
If you use NFO files
If Emby was configured to save metadata as NFO files alongside your media, Jellyfin reads them natively:
- Dashboard → Libraries → [Library] → Edit
- Metadata readers → Enable Nfo
- Set NFO as the first reader to prioritize local metadata
This preserves any custom metadata you set in Emby without re-fetching from online sources.
Step 3: Migrate Watch History via Trakt
This is the most important step. Trakt acts as an intermediary to transfer watched status between Emby and Jellyfin.
On Emby: Export to Trakt
- Install the Trakt plugin in Emby (Dashboard → Plugins → Catalog)
- Authenticate with your Trakt account
- Run a full sync - this pushes all your watched history to Trakt
- Verify on trakt.tv that your history appears correctly
On Jellyfin: Import from Trakt
- Install the Trakt plugin in Jellyfin (Dashboard → Plugins → Catalog)
- Authenticate with the same Trakt account
- Run a full sync - this pulls all watched status from Trakt into Jellyfin
- Verify in Jellyfin that movies and episodes show as "Played"
For multiple users
Repeat the Trakt sync for each user:
- Each user needs their own Trakt account
- On Emby: sync each user individually
- On Jellyfin: create the user account first, then sync their Trakt
Alternative without Trakt: If you do not want to use Trakt, community tools like
jellyfin-emby-migrator(search GitHub) can read Emby database files and import watched status directly. These tools are less polished but avoid the Trakt intermediary.
Step 4: Recreate User Accounts
Jellyfin user accounts are local - no Emby Connect equivalent.
- Dashboard → Users → Add User
- Create accounts matching your Emby users
- For each user, configure:
- Library access (which libraries they can see)
- Parental controls (rating limits, blocked tags)
- Remote streaming bitrate limit
- Subtitle language preference
Permission mapping from Emby to Jellyfin
| Emby Permission | Jellyfin Equivalent |
|---|---|
| Allow media playback | Allow media playback |
| Allow media downloads | Allow media downloads |
| Allow remote connections | Allow remote connections |
| Allow Live TV access | Allow Live TV access |
| Parental rating limit | Maximum parental rating |
| Disable user | Disable this user |
Most permissions map directly. Jellyfin offers additional granularity (SyncPlay access, subtitle management, etc.).
Step 5: Map Emby Plugins to Jellyfin Equivalents
Most popular Emby plugins have Jellyfin equivalents - often with more features.
| Emby Plugin | Jellyfin Equivalent | Notes |
|---|---|---|
| Trakt | Trakt | Same functionality |
| OpenSubtitles | OpenSubtitles | Same functionality |
| Auto Organize | Radarr/Sonarr | More powerful automation |
| Webhooks | Webhook plugin | Same concept, different config |
| Server Backup | Built-in backup (10.11+) | Native in Jellyfin now |
| IPTV / Live TV | Built-in (free) | No Premiere required |
| Playback Reporting | Playback Reporting | Same plugin, different repo |
| - | Intro Skipper | No Emby equivalent |
| - | Skin Manager | No Emby equivalent |
| - | Jellyfin-Enhanced | No Emby equivalent |
| - | SSO Plugin | No Emby equivalent |
Jellyfin has significantly more community plugins than Emby in 2026. The Intro Skipper plugin alone is a major draw for migrating users.
Step 6: Configure Clients
Switch each device from the Emby app to the Jellyfin app.
Android
- Install Jellyfin for Android from Google Play
- Or install Findroid for a more polished experience
- Add your Jellyfin server URL and log in
Android TV / Fire TV
- Install Jellyfin for Android TV from Play Store or Amazon Appstore
- The interface is similar to Emby TV - your users will adapt quickly
iOS / Apple TV
- Install Swiftfin (official, free) or Infuse (premium, best quality)
- Both connect to Jellyfin the same way they connected to Emby
Desktop
- Install Jellyfin Media Player or use the web interface at
http://your-server:8096
Smart TVs
- Samsung: Jellyfin for Tizen (requires sideloading)
- LG: Jellyfin for WebOS (available in LG Content Store)
- Android TV built-in: Jellyfin for Android TV from Play Store
Step 7: Configure Remote Access
If you had Emby accessible remotely, replicate the setup for Jellyfin:
Reverse proxy (recommended)
Update your Caddyfile or Nginx config to point to Jellyfin:
jellyfin.yourdomain.com {
reverse_proxy localhost:8096
}
Tailscale / WireGuard
If you used a VPN for Emby remote access, simply update the server URL in your clients to point to the Jellyfin port.
Step 8: Verify and Decommission Emby
Before removing Emby, verify everything:
- [ ] All media appears correctly in Jellyfin
- [ ] Watch history transferred for all users
- [ ] All users can log in and stream
- [ ] Hardware transcoding works (test with a forced transcode)
- [ ] Clients configured on all devices
- [ ] Remote access working
- [ ] Plugins configured and functional
- [ ] Reverse proxy updated
Once confirmed, stop and remove Emby:
# Docker
docker stop emby
docker rm emby
# Native
sudo systemctl stop emby-server
sudo systemctl disable emby-server
sudo apt remove emby-server
Switch Jellyfin to port 8096:
# Update docker-compose.yml
ports:
- "8096:8096" # Now using the standard port
docker compose down && docker compose up -d
Update all client URLs to use port 8096.
Common Migration Issues
| Issue | Cause | Fix |
|---|---|---|
| Wrong metadata on some items | Different TMDB match | Edit → Identify → select correct match |
| Missing episodes | Naming format difference | Rename to Jellyfin standard (S##E##) |
| Watch history incomplete | Trakt sync missed items | Re-run Trakt sync or mark manually |
| Custom posters lost | Emby stored them internally | Re-upload in Jellyfin or use local poster.jpg |
| Subtitles not detected | Different naming convention | Rename to filename.en.srt format |
| Hardware transcoding not working | GPU not configured | Map /dev/dri and enable QSV/NVENC |
FAQ
Can I run Emby and Jellyfin at the same time? Yes. They use different ports and can share the same media files simultaneously. This is the recommended approach during migration.
Will my media files be affected? No. Both servers read your files in read-only mode. Nothing is moved, renamed, or modified.
Do I need to re-download all metadata? If you use NFO files, Jellyfin reads them directly - no re-download needed. If you relied on Emby fetching metadata online, Jellyfin re-fetches from the same sources (TMDB/TVDB) during the library scan.
What about my Emby Premiere license? Your Premiere license stays valid for Emby. If you fully migrate to Jellyfin, you no longer need it - all Premiere features are free in Jellyfin.
Is the Jellyfin interface similar to Emby? Yes. Jellyfin forked from Emby, so the dashboard layout, library views, and settings structure are familiar. The web UI has diverged over the years but the core navigation is recognizable.
Can I migrate my Emby Live TV / IPTV setup? Yes. Export your M3U playlist URL and XMLTV EPG URL from Emby, then add them in Jellyfin under Dashboard → Live TV. The configuration is nearly identical.
What about EmbyWatch - does it work with Jellyfin? EmbyWatch is built specifically for Emby. For Jellyfin, use JellyWatch - the same app, same features, built for the Jellyfin API.
The Admin App: EmbyWatch → JellyWatch
If you used EmbyWatch to monitor your Emby server, the transition to JellyWatch is seamless - same team, same features, different API:
| Feature | EmbyWatch (Emby) | JellyWatch (Jellyfin) |
|---|---|---|
| Real-time sessions | Yes | Yes |
| Transcoding diagnostics | Yes | Yes |
| Push notifications | Yes | Yes |
| Radarr/Sonarr/Seerr | Yes | Yes |
| Watch history & stats | Yes | Yes |
| Home screen widget | Yes | Yes |
| Watch Pass | Yes | Yes |
Both apps are built by the same team and share the same feature set.
Migrating from Emby? Monitor your new Jellyfin server from day one. Download JellyWatch on Google Play - real-time session monitoring, transcoding alerts, and server health for Jellyfin on Android.
Still running Emby alongside Jellyfin during migration? Download EmbyWatch on Google Play - monitor both servers from your phone.




Comments
No comments yet. Be the first to share your thoughts.
Leave a comment