Skip to content

Migrating from Plex

So remember how I never said Plex was the best solution for a media server? Yeah thank fuck I never did that and gave Jellyfin a second chance. Don't get me wrong, I love Plex and I still believe that it's the best looking self hosted media platform you can use. But it's pay to use mobile, limited users, and it's able to lose access to a graphics card while running in Docker. So for those reasons I will be describing how I managed to migrate 30+ users from Plex to Jellyfin with little to no a bit of effort.

What won't transfer

Before I show you how to do this, lemme give a warning of what will not trasnfer.

Watch history will sorta-maybe work. This happened to a few of my users, so please make sure that they can see their watch history on Plex to mark what they have already watched.

User Icons will also not transfer, as it does not pull those.

Usernames will mostly pull, please note if someone doesn't have a username, the username will be their email address on the Plex account.

How to do this

First clone this script and cd into it.

git clone https://github.com/nwithan8/Plex2Jellyfin.git
cd Plex2Jellyfin

Next go to your Jellyfin instance you installed and go to Administrator - Dashboard > Advanced - API Keys and create a new API key, it doesn't matter the name, just make sure to NEVER GIVE IT TO ANYONE

Then install all pip requirements, go into the scripts folder, and make a copy of the creds.py file, and modify it to match what you need

pip install -r requirements.txt
cd scripts
cp creds.py.blank creds.py

Below is an example file. It will obviously not work as the info is not valid, please make sure to put your information in it

Example creds.py file
PLEX_URL = "http://localhost:32400"
PLEX_TOKEN = "plextokenyoucangetfromtautulli"
PLEX_SERVER_NAME = "46620's Server" # As it appears on app.plex.tv
JELLYFIN_URL = "https://jellyfin.domain.tld" # include /jellyfin if needed (whatever URL used for mobile apps)
JELLYFIN_API_KEY = "abcdefghijklmnopqrstuvwxyz123456"
JELLYFIN_ADMIN_USERNAME = 'USERNAME'
JELLYFIN_ADMIN_PASSWORD = 'PASSWORD'
JELLYFIN_USER_POLICY = {
    "IsAdministrator": "false",
    "IsHidden": "true",
    "IsHiddenRemotely": "true",
    "IsDisabled": "false",
    "EnableRemoteControlOfOtherUsers": "false",
    "EnableSharedDeviceControl": "false",
    "EnableRemoteAccess": "true",
    "EnableLiveTvManagement": "false",
    "EnableLiveTvAccess": "true",
    "EnableContentDeletion": "false",
    "EnableContentDownloading": "true",
    "EnableSyncTranscoding": "true",
    "EnableSubtitleManagement": "false",
    "EnableAllDevices": "true",
    "EnableAllChannels": "false",
    "EnablePublicSharing": "false",
    "InvalidLoginAttemptCount": 5,
    "BlockedChannels": [
        "IPTV",
        "TVHeadEnd Recordings"
    ],
    "AuthenticationProviderId": "Emby.Server.Implementations.Library.DefaultAuthenticationProvider",
    "PasswordResetProviderId": "Emby.Server.Implementations.Library.DefaultPasswordResetProvider"
}

Afterwards run python migrate_users.py