15 KiB
Plex Custom Image Removal
Your Plex folders are growing out of control. You use overlays from Plex Meta Manager (PMM) or upload lots of custom art from Title Card Maker (TCM) that you no longer want to use or need to eliminate. You don't want to perform the plex dance if you can avoid it. This script will free up gigs of space....
It can also perform some Plex operations like "empty trash", "clean bundles", and "optimize db".
Red is deleted, Green is kept because it is the actively selected poster. The other two come standard from PLEX when the posters are retrieved so the script will not touch those either:
Special Thanks to bullmoose20 for the original Plex Bloat Fix (PBF) Script this is based on.
Installing Plex Custom Image Removal
Generally, Plex Custom Image Removal can be installed in one of two ways:
- Running on a system as a Python script [we will refer to this as a "local" install]
- Running as a Docker container
GENERALLY SPEAKING, running as a Docker container is simpler, as you won't have to be concerned about installing Python, or support libraries, or any possible system conflicts generated by those actions.
For this reason, it's generally recommended that you install via Docker rather than directly on the host.
If you have some specific reason to avoid Docker, or you prefer running it as a Python script for some particular reason, then this general recommendation is not aimed at you. It's aimed at someone who doesn't have an existing compelling reason to choose one over the other.
Install Walkthroughs
There are no detailed walkthroughs specifically for Plex Custom Image Removal but the process is extremely similar to how you would do it with Plex Meta Manager.
Local Install Overview
Plex Custom Image Removal is compatible with Python 3.10 and 3.11. Later versions may function but are untested.
These are high-level steps which assume the user has knowledge of python and pip, and the general ability to troubleshoot issues.
- Clone or download and unzip the repo.
git clone https://github.com/meisnate12/Plex-Custom-Image-Removal
- Install dependencies:
pip install -r requirements.txt
- If the above command fails, run the following command:
pip install -r requirements.txt --ignore-installed
At this point Plex-Custom-Image-Removal has been installed, and you can verify installation by running:
python plex_image_removal.py
Docker Install Overview
Docker Run:
docker run -v <PATH_TO_CONFIG>:/config:rw -v <PATH_TO_PLEX>:/plex:rw meisnate12/plex-custom-image-removal
- The
-v <PATH_TO_CONFIG>:/config:rw
and-v <PATH_TO_PLEX>:/plex:rw
flags mount the location you choose as a persistent volumes to store your files and give access to plex.- Change
<PATH_TO_CONFIG>
to a folder where your .env and other files are. - Change
<PATH_TO_PLEX>
to the folder where your Plex Folder is (It contains folders: Cache, Metadata, Plug-in Support). - If your directory has spaces (such as "My Documents"), place quotation marks around your directory pathing as shown here:
-v "<PATH_TO_CONFIG>:/config:rw"
- Change
Example Docker Run command:
These docs are assuming you have a basic understanding of Docker concepts. One place to get familiar with Docker would be the official tutorial.
docker run -v "X:\Media\Plex Custom Image Removal\config:/config:rw" -v "X:\Plex Media Server:/plex:rw" meisnate12/plex-custom-image-removal
Docker Compose:
Example Docker Compose file:
version: "2.1"
services:
plex-meta-manager:
image: meisnate12/plex-custom-image-removal
container_name: plex-custom-image-removal
environment:
- TZ=TIMEZONE #optional
volumes:
- /path/to/config:/config
- /path/to/plex:/plex
restart: unless-stopped
Dockerfile
A Dockerfile
is included within the GitHub repository for those who require it, although this is only suggested for those with knowledge of dockerfiles. The official Plex Custom Image Removal build is available on the Dockerhub Website.
Usage
IMPORTANT! Due to a recent change that PLEX made (circa Jan 2023), you SHOULD restart plex before running this script. Restarting allows for all temp SQLite files to be written to the primary plex db ensuring that we know exactly which posters have been selected and should be preserved.
IMPORTANT: the script currently does not verify that Plex is idle before doing this. MAKE SURE that Plex is idle before running the script to avoid any database problems that may be caused by copying the DB out from under Plex while it's being optimized or the like. ONLY use this if you have a backup.
Notes / Tips
- Make sure that you are NOT actively updating posters or title cards with PMM or TCM while running this script. Schedule this after the last run happens. So TCM, Plex Scheduled Tasks, PMM, THEN schedule or run Plex Custom Image Removal. Example: TCM @ 00:00, PLEX @ 02:00-05:00, and PMM @ 05:00
- Ensure you have proper permissions to delete/rename or the script will fail
- For performance purposes, it's recommended to run locally so that accessing the files is not done over a network share
- The script will copy the database file rather than downloading it through the Plex API. The assumption here is that you are running the script on the same machine as plex. This is useful in cases where the DB is too large to download.
- If you are using plex in docker, create a script that will perform a docker restart, sleep for about 30 seconds, and then run this script. pbf.sh is an example bash script of doing this with Plex Bloat Fix.
Options
Each option can be applied in three ways:
- Use the Shell Command when launching.
- Setting the Environment Variable.
- Adding the Environment Variables to
config/.env
Option | Description | Required |
---|---|---|
Plex Path | Path to the Plex Install Folder (Contains Folders: Cache, Metadata, Plug-in Support). Shell Command: -p or --plex "C:\Plex Media Server" Environment Variable: PLEX_PATH=C:\Plex Media Server |
✅ |
Mode | Run Mode. Default: report report : File changes will be reported but not done.rename : Files will be renamed in the Metadata Directory. (CAN BE UNDONE)undo : Undo the rename mode.delete : Files will be deleted in the Metadata Directory. (CANNOT BE UNDONE)Shell Command: -m or --mode delete Environment Variable: MODE=delete |
❌ |
Plex URl | Plex URL of the Server you want to connect to. If Plex URL and Plex Token are not specified it assumes a Local Run Shell Command: -u or --url "http://192.168.1.12:32400" Environment Variable: PLEX_URL=http://192.168.1.12:32400 |
❌ |
Plex Token | Plex Token of the Server you want to connect to. If Plex URL and Plex Token are not specified it assumes a Local Run Shell Command: -t or --token "123456789" Environment Variable: PLEX_TOKEN=123456789 |
❌ |
Discord URl | Discord Webhook URL to send notifications to. Shell Command: -d or --discord "https://discord.com/api/webhooks/###/###" Environment Variable: DISCORD=https://discord.com/api/webhooks/###/### |
❌ |
Timeout | Timeout can be any number greater then 0. Default: 600 Shell Command: -ti or --timeout 1000 Environment Variable: TIMEOUT=1000 |
❌ |
Sleep Timer | Sleep Timer between Empty Trash, Clean Bundles, and Optimize DB. Default: 60 Shell Command: -s or --sleep 100 Environment Variable: SLEEP=100 |
❌ |
Ignore Running | Ignore Warnings the Plex is currently Running. Shell Command: -i or --ignore Environment Variable: IGNORE_RUNNING=True |
❌ |
Local DB | Copy Local DB instead of Downloading from the API (Helps with Large DBs). Shell Command: -l or --local Environment Variable: LOCAL_DB=True |
❌ |
Use Existing | Use the existing database if less then 2 hours old. Shell Command: -e or --existing Environment Variable: USE_EXISTING=True |
❌ |
Delete Transcode | Clean Plex's PhotoTranscoder Directory. Shell Command: -dt or --delete-transcode Environment Variable: DELETE_TRANSCODE=True |
❌ |
Empty Trash | Run Plex's Empty Trash Operation. Shell Command: -et or --empty-trash Environment Variable: EMPTY_TRASH=True |
❌ |
Clean Bundles | Run Plex's Clean Bundles Operation. Shell Command: -cb or --clean-bundles Environment Variable: CLEAN_BUNDLES=True |
❌ |
Optimize DB | Run Plex's Optimize DB Operation. Shell Command: -od or --optimize-db Environment Variable: OPTIMIZE_DB=True |
❌ |
Trace Logs | Run with every request and file action logged. Shell Command: -tr or --trace Environment Variable: TRACE=True |
❌ |
Example .env File
PLEX_URL=http://192.168.1.12:32400
PLEX_TOKEN=123456789
PLEX_PATH=C:\Plex Media Server
MODE=report
DISCORD=https://discord.com/api/webhooks/###################/####################################################################
TIMEOUT=600
SLEEP=60
IGNORE_RUNNING=False
LOCAL_DB=False
USE_EXISTING=False
DELETE_TRANSCODE=False
EMPTY_TRASH=False
CLEAN_BUNDLES=False
OPTIMIZE_DB=False
TRACE=False