# Schedule Plex server related Pre-roll intro videos A helper script to automate management of Plex pre-rolls. \ Define when you want different pre-rolls to play throughout the year. Ideas include: - Holiday pre-roll rotations - Special occasions - Summer/Winter/Seasonal rotations - Breaking up the monotony - Keeping your family on their toes! Simple steps: > 1. Config the schedule > 2. Schedule script on server > 3. ... > 4. Profit! See [Installation & Setup](#install) section --- ## Schedule Rules Schedule priority for a given Date: 1. **misc** - always_use - always includes in listing (append) 2. **date_range** \ Include listing for the specified Start/End date range that include the given Date \ Multipe ranges may apply at same time (append) \ **overrides usage of *week/month/default* listings 3. **weekly** \ Include listing for the specified WEEK of the year for the given Date \ **override usage of *month/default* listings 4. **monthly** \ Include listing for the specified MONTH of the year for the given Date \ **overrides usage of *week/month/default* listings 5. **default** \ Default listing used of none of above apply to the given Date --- ## Installation & Setup Grab a copy of the code ```sh cd /path/to/your/location git clone https://github.com/BrianLindner/plex-schedule-prerolls.git ``` ### Install Requirements See `requirements.txt` for Python modules [link](requirements.txt) Install Python requirements ```sh pip install -r requirements.txt ``` ### Create `config.ini` file with Plex connection information Script checks for: - local ./config.ini (See: [Sample](sample_config.ini)) - PlexAPI global config.ini - Custom location config.ini (see [Arguments](#arguments)) (See: [plexapi.CONFIG](https://python-plexapi.readthedocs.io/en/latest/configuration.html) for more info) Rename `sample_config.ini` -> `config.ini` and update to your environment Example `config.ini` ```ini [auth] server_baseurl = http://127.0.0.1:32400 # your plex server url server_token = # access token ``` ### Create `preroll_schedules.yaml` file with desired schedule Rename `sample_preroll_schedules.yaml` -> `preroll_schedules.yaml` and update for your environment Example YAML config layout (See: [Sample](sample_preroll_schedules.yaml) for more info) ```yaml --- monthly: enabled: (yes/no) jan: /path/to/file.mp4;/path/to/file.mp4 ... dec: /path/to/file.mp4;/path/to/file.mp4 date_range: enabled: (yes/no) ranges: - start_date: 2020-01-01 end_date: 2020-01-01 path: /path/to/file(s) - start_date: 2020-07-04 end_date: 2020-07-04 path: /path/to/file(s) weekly: enabled: (yes/no) 1: /path/to/file(s) ... 52: /path/to/file(s) misc: enabled: (yes/no) always_use: /path/to/file(s) default: enabled: (yes/no) path: /path/to/file.mp4;/path/to/file.mp4 ``` ### (Optional) Config `logger.conf` to your needs See: [https://docs.python.org/3/howto/logging.html](https://docs.python.org/3/howto/logging.html) --- ## Usage ### Default Usage ```sh python schedule_preroll.py ``` ### Runtime Arguments - -v : version information - -h : help information - -c : config.ini (local or PlexAPI system central) for Connection Info (see [sample_config.ini](sample_config.ini)) - -s : preroll_schedules.yaml for various scheduling information (see [sample_preroll_schedules.yaml](sample_preroll_schedules.yaml)) - -l : location of custom logger.conf config file \ See: - Sample [logger config](logging.conf) - Logger usage [Examples](https://github.com/amilstead/python-logging-examples/blob/master/configuration/fileConfig/config.ini) - Logging [Info](https://www.internalpointers.com/post/logging-python-sub-modules-and-configuration-files) ```sh python schedule_preroll.py -h usage: schedule_preroll.py [-h] [-v] [-l LOG_CONFIG_FILE] [-c CONFIG_FILE] [-s SCHEDULE_FILE] Automate scheduling of pre-roll intros for Plex optional arguments: -h, --help show this help message and exit -v, --version show the version number and exit -l LOG_CONFIG_FILE, --logconfig-path LOG_CONFIG_FILE Path to logging config file. [Default: ./logging.conf] -c CONFIG_FILE, --config-path CONFIG_FILE Path to Config.ini to use for Plex Server info. [Default: ./config.ini] -s SCHEDULE_FILE, --schedule-path SCHEDULE_FILE Path to pre-roll schedule file (YAML) to be use. [Default: ./preroll_schedules.yaml] ``` ### Runtime Arguments Example ```sh python schedule_preroll.py \ -c path/to/custom/config.ini \ -s path/to/custom/preroll_schedules.yaml \ -l path/to/custom/logger.conf ``` --- ## Scheduling (Optional) Add to system scheduler: Linux: ```sh crontab -e ``` Place desired schedule (example below for everyday at midnight) ```sh 0 0 * * * python /path/to/schedule_preroll.py >/dev/null 2>&1 ``` or \ (Optional) Wrap in a shell script: \ useful if running other scripts/commands, using venv encapsulation, customizing arguments ```sh 0 0 * * * /path/to/schedule_preroll.sh >/dev/null 2>&1 ``` --- ## Wrapping Up > Sit back and enjoy the Intros! --- ## Shout out to places to get Pre-Roll [https://prerolls.video](https://prerolls.video)