You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Plex-Meta-Manager/docs/home/scripts/image-removal.md

15 KiB

Plex Custom Image Removal

GitHub release (latest by date) Docker Image Version (latest semver) Docker Pulls Develop GitHub commits since latest stable release (by SemVer)

Discord Reddit Wiki GitHub Sponsors Sponsor or Donate

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:

  1. Running on a system as a Python script [we will refer to this as a "local" install]
  2. 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.

  1. Clone or download and unzip the repo.
git clone https://github.com/meisnate12/Plex-Custom-Image-Removal
  1. Install dependencies:
pip install -r requirements.txt
  1. 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"

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:

  1. Use the Shell Command when launching.
  2. Setting the Environment Variable.
  3. 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