Package: plexmediafixup
OverviewThe PlexMediaFixup project provides a command namedplexmediafixupthat
performs certain changes in the media database of aPlex Media Server.The functionality to perform these changes is organized in plugins calledfixups. Each fixup can be enabled or disabled and configured as needed.Currently supported fixups are:sync_title:This fixup walks through the movie and episode items of the configured
library sections of the Plex Media Server, and syncs the “title” field of
each item by setting it to the value of the title tag found in the
corresponding media files. The ffprobe command is used to get the title
tag from the media files.Use this fixup if you properly maintain the title tags in your media files
and are not happy with the titles that get set from the metadata sites.sync_sort_title:This fixup walks through the movie, show and episode items of the configured
library sections of the Plex Media Server, and syncs the “sort title” field of
each item by setting it to the value of its “title” field.Use this fixup if you are not happy with the fact that PMS removes leading
articles and other words from the sort title.video_genre_cleanup:This fixup walks through the movie and show items of the configured library
sections of the Plex Media Server, and cleans up the “Genres” field of each
item. It can consolidate differently spelled genres into a single genre,
remove useless genres, and set a default genre if the list of genres is empty.
These changes can be configured in the config file.preserve_collections:This fixup walks through the movie and show items of the configured library
sections of the Plex Media Server, and preserves the collections of each item.
This is done by syncing any present collections between PMS and a collections
file. This solves the issue that PMS resets the collections every now and
then, when updating the metadata of the item. Since the presence of a
collection either in PMS or in the collections file causes it to be synced,
the intentional removal of a collection now requires removing it from PMS and
removing it from the collections file. The collections file is in YAML format
and is self-explanatory. The path name of the collections file can be
configured in the config file.Look at the example plexmediafixup config fileexample_config_file.ymlif
you want to see what can be configured. It describes each parameter.This project uses thepython-PlexAPI package, and access to the Plex Media
Server is specified in thePlexAPI config file. Theplexmediafixupcommand supports a choice of using a direct connection to a network-accessible
Plex Media Server (which is the faster choice) or using an indirect connection
through the Plex web site (which works from anywhere but is slower).Installation and configurationInstall the latest released version of the plexmediafixup Python package
into your active Python environment:$pipinstallplexmediafixupThis will also install any prerequisite Python packages, including thepython-PlexAPI package.If this is the first time you use thepython-PlexAPI package, create itsPlexAPI config fileas follows.If you want to use direct connections to a network-accessible Plex Media
Server, specify the following parameters:[auth]
server_baseurl = <URL of your PMS>
server_token = <server auth token of your PMS>The server auth token of your PMS can be found as described inFinding your server auth token.If you want to use indirect connections through the Plex web site, specify
the following parameters. This is simpler to set up compared to direct
connections, but every request goes through the Plex web site and from there
to your Plex Media Server:[auth]
myplex_username = <your plex account username/email>
myplex_password = <your plex account password>ThePlexAPI environment variablescan also be used.Create a plexmediafixup config file.A plexmediafixup config file is inYAML formatand specifies some general
parameters (such as whether to use direct or indirect connections, or the
location of thePlexAPI config file) and the fixups that should be run,
including any parameters for the fixups.An example plexmediafixup config file is provided asexample_config_file.yml. This example config file contains descriptions
for all parameters, and describes all supported fixups.Create your plexmediafixup config file by copying that example file and
modifying it as needed.The copy of the example file should work without further modifications.
By default, it uses a direct connection and has all fixups enabled and
configured to process all items. However, please review your copy
carefully and make changes as needed.Install the ffprobe commandThis command is only used by the sync_title fixup.On Windows with Chocolatey, on MacOS with HomeBrew, and on most Linux
distros, the package containing this command is namedffmpeg.
Alternatively, download it fromhttps://ffmpeg.org/download.html.UsageTo explore the command line options and general usage of theplexmediafixupcommand, invoke:$plexmediafixup--helpThe following commands assume thatmy_config_file.ymlis the plexmediafixup
config file you have created.First, invoke theplexmediafixupcommand in dry-run mode. This shows you
what would be changed in a real run without actually doing any changes:$plexmediafixupmy_config_file.yml--verbose--dryrunIf you are satisfied with what you see, perform the changes:$plexmediafixupmy_config_file.yml--verboseSimplified setup and run scriptIf you want to run theplexmediafixupcommand regularly, this GitHub repo
containsrun_plexmediafixup.shandrun_plexmediafixup.batscripts that
simplify the setup somewhat.
Copy the script for your OS (.bat for native Windows, .sh otherwise) to a
directory in your PATH and modify it as needed.These scripts have the following prerequisites:The plexmediafixup config file exists as$HOME/.config/plexmediafixup.ymlor, on native Windows as%HOMEDRIVE%%HOMEPATH%\.config\plexmediafixup.ymlThePlexAPI config fileexistsTheffprobeandvirtualenvcommands are available in the PATHThese scripts perform all the setup that is needed (such as checking if thevirtualenvandffprobecommands are available, creating a Python virtual
environment, activating it, installing the plexmediafixup package into that
virtual environment, checking if the plexmediafixup config file exists), and
finally run theplexmediafixupcommand with that config file.Trouble shootingHTTP status 500 Internal Server ErrorIf thevideo_genre_cleanupfixup of theplexmediafixupcommand fails as follows:Error: Cannot change the genres field of movie 'Star Wars VW Werbung' from [] to ['<keins>']:
  (500) internal_server_error; http://192.168.0.12:32400/library/sections/None/all?type=1&
  id=53458&genre%5B%5D.tag.tag-=&genre%5B0%5D.tag.tag=%3Ckeins%3E
  <html><head><title>Internal Server Error</title></head><body><h1>500 Internal Server Error</h1></body></html>
  (raised plexapi.exceptions.BadRequest after 0s)
Error: Fixup video_genre_cleanup has encountered errors - abortingThen one possible reason is that the server auth token is invalid.To fix this, update theserver_tokenparameter in thePlexAPI config fileto the current server auth token (seeFinding your server auth token).Bugs and featuresPlease report any bugs and request features via theissue tracker.ContributingContributions to the PlexMediaFixup project are welcome; for details seeDevelopment.LicenseThe PlexMediaFixup project is provided under theApache Software License 2.0.