plex-prerolls/README.md

196 lines
5.5 KiB
Markdown
Raw Normal View History

# Plex Preroll Scheduler
2021-01-01 18:51:22 +00:00
A script to automate management of Plex pre-rolls.
2021-01-01 18:51:22 +00:00
Define when you want different pre-rolls to play throughout the year. For example:
2021-01-01 18:51:22 +00:00
- Holiday pre-roll rotations
- Special occasions
- Seasonal rotations
2021-01-01 18:51:22 +00:00
- Breaking up the monotony
2021-01-01 20:09:54 +00:00
- Keeping your family on their toes!
2021-01-01 18:51:22 +00:00
2021-01-01 20:09:54 +00:00
---
## Installation and Usage
2021-01-01 20:09:54 +00:00
### Run Script Directly
2021-01-01 20:09:54 +00:00
#### Requirements
2021-01-01 20:09:54 +00:00
- Python 3.8+
2021-01-01 20:09:54 +00:00
Clone the repo:
2021-01-01 18:51:22 +00:00
```sh
git clone https://github.com/nwithan8/plex-schedule-prerolls.git
2021-01-01 18:51:22 +00:00
```
Install Python requirements:
2021-01-01 18:51:22 +00:00
```sh
pip install -r requirements.txt
```
Copy `config.ini.sample` to `config.ini` and complete the `[auth]` section with your Plex server information.
2021-01-01 18:51:22 +00:00
Copy `schedules.yaml.sample` to `schedules.yaml` and [edit your schedule](#schedule-rules).
2021-01-01 18:51:22 +00:00
Run the script:
2021-01-01 18:51:22 +00:00
```sh
python schedule_preroll.py
```
#### Advanced Usage
2021-01-01 18:51:22 +00:00
```sh
$ python schedule_preroll.py -h
2021-01-01 18:51:22 +00:00
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
2021-01-01 18:51:22 +00:00
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: ./schedules.yaml]
2021-01-01 18:51:22 +00:00
```
##### Example
2021-01-01 18:51:22 +00:00
```sh
python schedule_preroll.py \
-c path/to/custom/config.ini \
-s path/to/custom/schedules.yaml \
-lc path/to/custom/logger.conf
2021-01-01 18:51:22 +00:00
```
### Run as Docker Container
2021-01-01 18:51:22 +00:00
#### Requirements
2021-01-01 18:51:22 +00:00
- Docker
#### Docker Compose
2021-01-01 18:51:22 +00:00
Complete the provided `docker-compose.yml` file and run:
2021-01-01 18:51:22 +00:00
```sh
docker-compose up -d
2021-01-01 18:51:22 +00:00
```
#### Docker CLI
2021-01-01 18:51:22 +00:00
```sh
docker run -d \
--name=plex_prerolls \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e CRON_SCHEDULE="0 0 * * *" \
-v /path/to/config:/config \
-v /path/to/logs:/logs \
--restart unless-stopped \
nwithan8/plex_prerolls:latest
2021-01-01 18:51:22 +00:00
```
#### Paths and Environment Variables
2021-01-01 18:51:22 +00:00
| Path | Description |
|-----------|--------------------------------------------------------------------------------------|
| `/config` | Path to config files (`config.ini` and `schedules.yaml` should be in this directory) |
| `/logs` | Path to log files (`schedule_preroll.log` will be in this directory) |
2021-01-01 18:51:22 +00:00
| Environment Variable | Description |
|----------------------|-------------------------------------------------------------------|
| `PUID` | UID of user to run as |
| `PGID` | GID of user to run as |
| `TZ` | Timezone to use for cron schedule |
| `CRON_SCHEDULE` | Cron schedule to run script (see <https://crontab.guru> for help) |
---
## Schedule Rules
Schedules follow the following priority:
1. **misc**: Items listed in `always_use` will always be included (appended) to the preroll list
2. **date_range**: Schedule based on a specific date/time range
3. **weekly**: Schedule based on a specific week of the year
4. **monthly**: Schedule based on a specific month of the year
5. **default**: Default item to use if none of the above apply
For any conflicting schedules, the script tries to find the closest matching range and highest priority.
### Advanced Scheduling
#### Date Range Section Scheduling
`date_range` entries can accept both dates (`yyyy-mm-dd`) and datetimes (`yyyy-mm-dd hh:mm:ss`, 24-hour time).
`date_range` entries can also accept wildcards for any of the date/time fields. This can be useful for scheduling recurring events, such as annual events, "first-of-the-month" events, or even hourly events.
```yaml
date_range:
enabled: true
ranges:
# Each entry requires start_date, end_date, path values
- start_date: 2020-01-01 # Jan 1st, 2020
end_date: 2020-01-02 # Jan 2nd, 2020
path: /path/to/video.mp4
- start_date: xxxx-07-04 # Every year on July 4th
end_date: xxxx-07-04 # Every year on July 4th
path: /path/to/video.mp4
- start_date: xxxx-xx-02 # Every year on the 2nd of every month
end_date: xxxx-xx-03 # Every year on the 3rd of every month
path: /path/to/video.mp4
- start_date: xxxx-xx-xx 08:00:00 # Every day at 8am
end_date: xxxx-xx-xx 09:30:00 # Every day at 9:30am
path: /path/to/holiday_video.mp4
```
You should [adjust your cron schedule](#scheduling-script) to run the script more frequently if you use this feature.
---
## Scheduling Script
**NOTE:** Scheduling is handled automatically in the Docker version of this script via the `CRON_SCHEDULE` environment variable.
### Linux
Add to system scheduler:
```sh
crontab -e
```
2021-01-01 18:51:22 +00:00
Place desired schedule (example below for every day at midnight)
```sh
0 0 * * * python /path/to/schedule_preroll.py >/dev/null 2>&1
```
You can also wrap the execution in a shell script (useful if running other scripts/commands, using venv encapsulation, customizing arguments, etc.)
```sh
0 0 * * * /path/to/schedule_preroll.sh >/dev/null 2>&1
```
2021-01-01 18:51:22 +00:00
Schedule as frequently as needed for your schedule (ex: hourly, daily, weekly, etc.)
2021-01-01 18:51:22 +00:00
---
## Shout out to places to get Pre-Roll
- <a href="https://prerolls.video" target="_blank"><https://prerolls.video></a>