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:
- Config the schedule
- Schedule script on server
- ...
- Profit!
See Installation & Setup section
Schedule priority for a given Date:
-
misc
always_use - always includes in listing (append) -
date_range
Include listing for the specified Start/End date range that include the given Date
Range can be specified as a Date or DateTime
Advanced features to have recurring timeframes
**overrides usage of week/month/default listings -
weekly
Include listing for the specified WEEK of the year for the given Date
**override usage of month/default listings -
monthly
Include listing for the specified MONTH of the year for the given Date
**overrides usage of default listings -
default
Default listing used of none of above apply to the given Date
Note: Script tries to find the closest matching range if multiple overlap at same time
Grab a copy of the code
cd /path/to/your/location
git clone https://github.com/BrianLindner/plex-schedule-prerolls.git
Requires:
- Python 3.8+ [may work on 3.6+ but not tested]
- See
requirements.txt
for Python modules and versions link- plexapi, configparser, pyyaml, etc.
Install Python requirements
(highly recomend using Virtual Environments )
pip install -r requirements.txt
Script checks for:
- local ./config.ini (See: Sample)
- PlexAPI global config.ini
- Custom location config.ini (see Arguments)
(See: plexapi.CONFIG for more info)
Rename config.ini.sample
-> config.ini
and update to your environment
Example config.ini
[auth]
server_baseurl = http://127.0.0.1:32400 # your plex server url
server_token = <PLEX_TOKEN> # access token
Use it for Day or Ranges of Dates needs
Now with Time support! (optional)
Formatting Supported:
- Dates: yyyy-mm-dd
- DateTime: yyyy-mm-dd hh:mm:ss (24hr time format)
Rename preroll_schedules.yaml.sample
-> preroll_schedules.yaml
and update for your environment
Example YAML config layout (See: Sample for more info)
---
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/video.mp4
- start_date: 2020-07-03
end_date: 2020-07-05
path: /path/to/video.mp4
- start_date: 2020-12-19
end_date: 2020-12-26
path: /path/to/video.mp4
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
See Advancecd Date Ranges for additional features
python schedule_preroll.py
- -v : version information
- -h : help information
- -c : config.ini (local or PlexAPI system central) for Connection Info (see config.ini.sample)
- -s : preroll_schedules.yaml for various scheduling information (see spreroll_schedules.yaml.sample)
- -lc : location of custom logger.conf config file
See:- Sample logger config
- Logger usage Examples
- Logging Doc Info
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
-lc 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]
python schedule_preroll.py \
-c path/to/custom/config.ini \
-s path/to/custom/preroll_schedules.yaml \
-lc path/to/custom/logger.conf
Add to system scheduler:
Linux:
crontab -e
Place desired schedule (example below for everyday at midnight)
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
0 0 * * * /path/to/schedule_preroll.sh >/dev/null 2>&1
Schedule as frequently as needed for your environment and how specific and to your personal rotation schedule needs
Date Ranges with Recurring Timeframes
Useful for static dates or times where you want recurring preroll activity
Examples:
- Every Morning
- Yearly holidays (Halloween, New Years, Independence)
- Birthdays, Anniversaries
For either Start and/or End date of range
Substitute "xx" for date/times to schedule for "any"
Substitute "xxxx" for recurring year
- xxxx-xx-01 - Every first of month
- xxxx-xx-xx - Every day
- xxxx-xx-xx 08:00:00 - every day from 8am
- xxxx-01-01 - Every year on Jan 1 (new years day)
if using Time, still must have a full datetime pattern (ex: hour, minute, second hh:mm:ss)
#every July 4
- start_date: xxxx-07-04
end_date: xxxx-07-04
path: /path/to/video.mp4
# every first of month, all day
- start_date: xxxx-xx-01
end_date: xxxx-xx-01
path: /path/to/video.mp4
# 8-9 am every day
- start_date: xxxx-xx-xx 08:00:00
end_date: xxxx-xx-xx 08:59:59
path: /path/to/video.mp4
Note: Detailed time based schedules benefit from increased running of the Python script for frequently - ex: Hourly
(See: Scheduling Script section)
See: https://docs.python.org/3/howto/logging.html
Sit back and enjoy the Intros!