| `username` | **Description:** A user's AniList Username |
| `username` | **Description:** A user's AniList Username |
| `list_name` | **Description:** A user's AniList List Name |
| `list_name` | **Description:** A user's AniList List Name |
| `score.gt`<sup>1</sup> | **Description:** Only return items that have a score greater then the given number.<br>**Values:** `0.0`-`10.0` |
| `score.gt`<sup>1</sup> | **Description:** Only return items that have a score greater than the given number.<br>**Values:** `0.0`-`10.0` |
| `score.gte`<sup>1</sup> | **Description:** Only return items that have a score greater then or equal to the given number.<br>**Values:** `0.0`-`10.0` |
| `score.gte`<sup>1</sup> | **Description:** Only return items that have a score greater than or equal to the given number.<br>**Values:** `0.0`-`10.0` |
| `score.lt`<sup>1</sup> | **Description:** Only return items that have a score less then the given number.<br>**Values:** `0.0`-`10.0` |
| `score.lt`<sup>1</sup> | **Description:** Only return items that have a score less then the given number.<br>**Values:** `0.0`-`10.0` |
| `score.lte`<sup>1</sup> | **Description:** Only return items that have a score less then or equal to the given number.<br>**Values:** `0.0`-`10.0` |
| `score.lte`<sup>1</sup> | **Description:** Only return items that have a score less then or equal to the given number.<br>**Values:** `0.0`-`10.0` |
| `sort_by` | **Description:** Sort Order to return<br>**Default:** `score`<br>**Values:**<tableclass="clearTable"><tr><td>`score`</td><td>Sort by User Score</td></tr><tr><td>`popularity`</td><td>Sort by Popularity</td></tr><tr><td>`status`</td><td>Sort by Status</td></tr><tr><td>`progress`</td><td>Sort by Progress</td></tr><tr><td>`last_updated`</td><td>Sort by Last Updated</td></tr><tr><td>`last_added`</td><td>Sort by Last Added</td></tr><tr><td>`start_date`</td><td>Sort by Start Date</td></tr><tr><td>`completed_date`</td><td>Sort by Completed Date</td></tr></table> |
| `sort_by` | **Description:** Sort Order to return<br>**Default:** `score`<br>**Values:**<tableclass="clearTable"><tr><td>`score`</td><td>Sort by User Score</td></tr><tr><td>`popularity`</td><td>Sort by Popularity</td></tr><tr><td>`status`</td><td>Sort by Status</td></tr><tr><td>`progress`</td><td>Sort by Progress</td></tr><tr><td>`last_updated`</td><td>Sort by Last Updated</td></tr><tr><td>`last_added`</td><td>Sort by Last Added</td></tr><tr><td>`start_date`</td><td>Sort by Start Date</td></tr><tr><td>`completed_date`</td><td>Sort by Completed Date</td></tr></table> |
@ -5,6 +5,7 @@ Filters allow for you to filter every item added to the collection/overlay/playl
## Using Filters
## Using Filters
Filters cannot do anything alone they require the use of at least one [Builder](../metadata/builders.md) to function.
Filters cannot do anything alone they require the use of at least one [Builder](../metadata/builders.md) to function.
You can have multiple filters in each set but an item must match at least one value from **each** filter to not be ignored. The values for each must match what Plex has including special characters in order to match.
You can have multiple filters in each set but an item must match at least one value from **each** filter to not be ignored. The values for each must match what Plex has including special characters in order to match.
```yaml
```yaml
@ -31,19 +32,9 @@ All filter options are listed below. To display items filtered out add `show_fil
You can use the `plex_all: true` builder to filter from your entire library.
You can use the `plex_all: true` builder to filter from your entire library.
**Filters can be very slow. Try to build or narrow your items using [Plex Search](plex.md#plex-search) or another [Builder](../metadata/builders.md) if possible.**
???+ warning
[definition.md](details%2Fdefinition.md)
## Table Annotations
<sup>**1**</sup> Filters using the special `episodes`/`tracks` [filter](#special-filters) with the [default percent](details/definition.md).
<sup>**2**</sup> Also filters out missing movies/shows from being added to Radarr/Sonarr. These Values also cannot use the `count` modifiers.
<sup>**3**</sup> You can use `current_year` to have PMM use the current years value. This can be combined with a `-#` at the end to subtract that number of years. i.e. `current-2`
<sup>**4**</sup> The actual numbers are pulled from the [PMM-Mediastingers](https://github.com/meisnate12/PMM-Mediastingers) Repo.
<sup>**5**</sup> Also is a Tag Filter and can use all of those modifiers.
Filters can be very slow, particularly on larger libraries. Try to build or narrow your items using a [Smart Label Collection](smart.md#smart-label), [Plex Search](plex.md#plex-search) or another [Builder](../metadata/builders.md) if possible.
## String Filters
## String Filters
@ -218,6 +209,18 @@ Special Filters each have their own set of rules for how they're used.
| `imdb_keyword`<sup>**[2](#table-annotations)**</sup><sup>**[5](#table-annotations)**</sup> | Uses the keywords from IMDb to match<br>`keywords`: list of keywords to match<br>`minimum_votes`: minimum number of votes keywords must have<br>`minimum_relevant`: minimum number of relevant votes keywords must have<br>`minimum_percentage`: minimum percentage of relevant votes keywords must have | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `imdb_keyword`<sup>**[2](#table-annotations)**</sup><sup>**[5](#table-annotations)**</sup> | Uses the keywords from IMDb to match<br>`keywords`: list of keywords to match<br>`minimum_votes`: minimum number of votes keywords must have<br>`minimum_relevant`: minimum number of relevant votes keywords must have<br>`minimum_percentage`: minimum percentage of relevant votes keywords must have | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
## Table Annotations
<sup>**1**</sup> Filters using the special `episodes`/`tracks` [filter](#special-filters) with the [default percent](details/definition.md).
<sup>**2**</sup> Also filters out missing movies/shows from being added to Radarr/Sonarr. These Values also cannot use the `count` modifiers.
<sup>**3**</sup> You can use `current_year` to have PMM use the current years value. This can be combined with a `-#` at the end to subtract that number of years. i.e. `current-2`
<sup>**4**</sup> The actual numbers are pulled from the [PMM-Mediastingers](https://github.com/meisnate12/PMM-Mediastingers) Repo.
<sup>**5**</sup> Also is a Tag Filter and can use all of those modifiers.
* To get a Client Name and Client Version please follow the following steps.
To get a Client Name and Client Version please follow the following steps.
1. Login to [AniDB](https://anidb.net/)
1. Login to [AniDB](https://anidb.net/)
2. Go to you [API Client Page](https://anidb.net/software/add) and go to the `Add New Project` Tab.
2. Go to you [API Client Page](https://anidb.net/software/add) and go to the `Add New Project` Tab.
![AniDB Add Project](anidb-1.png)
![AniDB Add Project](anidb-1.png)
3. Fill in the Project Name with whatever name you want and then hit `+ Add Project`. The rest of the settings don't matter.
3. Fill in the Project Name with whatever name you want and then hit `+ Add Project`. The rest of the settings don't matter.
4. After you've added the project you should end up on the Projects Page. If not go back to the [API Client Page](https://anidb.net/software/add) and click your projects name.
4. After you've added the project you should end up on the Projects Page. If not go back to the [API Client Page](https://anidb.net/software/add) and click your projects name.
5. Once you're on the project page click `Add Client` in the top right.
5. Once you're on the project page click `Add Client` in the top right.
![AniDB Add Client](anidb-2.png)
![AniDB Add Client](anidb-2.png)
6a. Come up with and enter a unique to AniDB Client Name
6. Come up with and enter a unique to AniDB Client Name
6b. Select `HTTP API` in the API Dropdown
7. Select `HTTP API` in the API Dropdown
6c. Put `1` for Version.
8. Put `1` for Version.
![AniDB Client Page](anidb-3.png)
![AniDB Client Page](anidb-3.png)
7. Put the Client Name and Client Version you just created in your config.yml as `client` and `version` respectively.
9. Put the Client Name and Client Version you just created in your config.yml as `client` and `version` respectively.
This will remove all overlays from your library, but will not delete the overlaid images from your system, resulting in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
You can remove overlays from a library by adding `remove_overlays: true` to `overlay_path`. This will remove all overlays when run and not generate new ones.
You can remove overlays from a library by adding `remove_overlays: true` to `overlay_path`.
???+ warning "Proceed with Caution"
???+ warning "Proceed with Caution"
This will remove all overlays from your library, but will not delete the overlaid images from your system, resulting in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
```yaml
```yaml
libraries:
libraries:
TV Shows:
TV Shows:
@ -173,11 +174,11 @@ You can remove overlays from a library by adding `remove_overlays: true` to `ove
#### Reapply Overlays
#### Reapply Overlays
This will reapply all overlays on each run until this attribute is set to `false`, which will result in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
You can reapply overlays from a library by adding `reapply_overlays: true` to `overlay_path`. This will reapply overlays to every item in your library.
You can reapply overlays from a library by adding `reapply_overlays: true` to `overlay_path`. This will reapply overlays to every item in your library.
???+ danger Proceed with Caution
???+ danger "Important Notice"
This will reapply all overlays on each run until this attribute is set to `false`, which will result in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
```yaml
```yaml
libraries:
libraries:
@ -191,11 +192,12 @@ You can reapply overlays from a library by adding `reapply_overlays: true` to `o
#### Reset Overlays
#### Reset Overlays
This will reset all posters to the desired source on each run until this attribute is set to `false`, and will reapply all overlays on each run, which will result in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
You can reset overlays from a library by adding `reset_overlays` to `overlay_path` and setting it to either `tmdb` or `plex` depending on where you want to source the images from. This will use the reset image when overlaying items in your library.
You can reset overlays from a library by adding `reset_overlays` to `overlay_path` and setting it to either `tmdb` or `plex` depending on where you want to source the images from. This will use the reset image when overlaying items in your library.
???+ danger "Proceed with Caution"
???+ danger "Important Notice"
This will reset all posters to the desired source on each run until this attribute is set to `false`, and will reapply all overlays on each run, which will result in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
| `cache_expiration` | Number of days before each cache mapping expires and has to be re-cached. | 60 | :fontawesome-solid-circle-xmark:{ .red } |
| `cache_expiration` | Number of days before each cache mapping expires and has to be re-cached. | 60 | :fontawesome-solid-circle-xmark:{ .red } |
* The MdbList apikey can be found [here](https://mdblist.com/preferences/).
???+ tip
* The free apikey is limited to 1000 requests per day so if you hit your limit the program should be able to pick up where it left off the next day as long as the `cache` [Setting](settings.md#cache) is enabled
The MdbList apikey can be found [here](https://mdblist.com/preferences/).
The free apikey is limited to 1000 requests per day so if you hit your limit the program should be able to pick up where it left off the next day as long as the `cache` [Setting](settings.md#cache) is enabled
* All other attributes will be filled in by Plex Meta Manager.
All other attributes will be filled in by Plex Meta Manager.
To connect to MyAnimeList.net you must create a MyAnimeList application and supply Plex Meta Manager the `client id` and `client secret` provided, please do the following:
1. [Click here to create a MyAnimeList API application.](https://myanimelist.net/apiconfig/create)
2. Enter an `App Name` for the application. Ex. `Plex Meta Manager`
3. Select `web` for `App Type`.
4. Enter an `App Description` for the application Ex. `Plex Meta Manager manages metadata and collections`
5. Enter `http://localhost/` for `App Redirect URL`.
6. Enter `https://github.com/meisnate12/Plex-Meta-Manager` for `Homepage URL`.
7. Select `non-commercial` for `Commercial / Non-Commercial`.
8. Enter any name under `Name / Company Name`.
9. Select `hobbyist` for `Purpose of Use`.
10. Agree to the API License and Developer Agreement and hit the `Submit` button
11. You should see `Successfully registered.` followed by a link that says `Return to list` click this link.
12. On this page Click the `Edit` button next to the application you just created.
13. Record the `Client ID` and `Client Secret` found on the application page.
14. Go to this URL but replace `CLIENT_ID` with your Client ID
* To connect to MyAnimeList.net you must create a MyAnimeList application and supply Plex Meta Manager the `client id` and `client secret` provided, please do the following:
15. You should see a page that looks like this
1. [Click here to create a MyAnimeList API application.](https://myanimelist.net/apiconfig/create)
![MAL Details](mal.png)
2. Enter an `App Name` for the application. Ex. `Plex Meta Manager`
3. Select `web` for `App Type`.
4. Enter an `App Description` for the application Ex. `Plex Meta Manager manages metadata and collections`
5. Enter `http://localhost/` for `App Redirect URL`.
6. Enter `https://github.com/meisnate12/Plex-Meta-Manager` for `Homepage URL`.
7. Select `non-commercial` for `Commercial / Non-Commercial`.
8. Enter any name under `Name / Company Name`.
9. Select `hobbyist` for `Purpose of Use`.
10. Agree to the API License and Developer Agreement and hit the `Submit` button
11. You should see `Successfully registered.` followed by a link that says `Return to list` click this link.
12. On this page Click the `Edit` button next to the application you just created.
13. Record the `Client ID` and `Client Secret` found on the application page.
14. Go to this URL but replace `CLIENT_ID` with your Client ID
17. You will be taken to a page that will not load. That's fine and expected.
Click "Allow"
![Localhost Failure](localhost-fail.png)
16. You will be taken to a page that will not load. That's fine and expected.
![Localhost Failure](localhost-fail.png)
18. Copy the URL, which will be `localhost/?code=BLAH` and paste in your config file next to `localhost_url`.
17. Copy the URL, which will be `localhost/?code=BLAH` and paste in your config file next to `localhost_url`.
**If you do not see an error as above but instead get taken to some seemingly random website, you probably have a webserver running on your local computer, probably from some sort of tutorial if you don't recall having set one up. For example, some Docker tutorials have you start up local web servers.**
NOTE: If you do not see an error as above but instead get taken to some seemingly random website, you probably have a webserver running on your local computer, probably from some sort of tutorial if you don't recall having set one up. For example, some Docker tutorials have you start up local web servers.
You will need to stop that web server while you're doing this in order to grab that localhost URL.
18. Run PMM and the auth will be completed.
## Alternative Way Letting PMM make the URL
You will need to stop that web server while you're doing this in order to grab that localhost URL.
19. Run PMM and the auth will be completed.
## Alternative Way of Letting PMM make the URL
You can record just your `client_id` and `client_secret` and pmm will create the url for you described below.
You can record just your `client_id` and `client_secret` and pmm will create the url for you described below.
* On the first run, Plex Meta Manager will walk the user through the OAuth flow by producing a MyAnimeList URL for the user to follow. After following the URL login to MyAnimeList.net and authorize the application by clicking the `Allow` button which will redirect the user to `http://localhost/`. Copy the entire URL and paste it into Plex Meta Manager and if the URL is correct then Plex Meta Manager will populate the `authorization` sub-attributes to use in subsequent runs.
On the first run, Plex Meta Manager will walk the user through the OAuth flow by producing a MyAnimeList URL for the user to follow.
After following the URL login to MyAnimeList.net and authorize the application by clicking the `Allow` button which will redirect the user to `http://localhost/`.
Copy the entire URL and paste it into Plex Meta Manager and if the URL is correct then Plex Meta Manager will populate the `authorization` sub-attributes to use in subsequent runs.
On first run:
On first run:
```
```
@ -87,7 +97,7 @@ Click "Allow", and you will be taken to a page that will not load. That's fine
Copy the URL, which will be `localhost/?code=BLAH` and paste it at the prompt.
Copy the URL, which will be `localhost/?code=BLAH` and paste it at the prompt.
NOTE: If you do not see an error as above but instead get taken to some seemingly random website, you probably have a webserver running on your local computer, probably from some sort of tutorial if you don't recall having set one up. For example, some Docker tutorials have you start up local web servers.
**If you do not see an error as above but instead get taken to some seemingly random website, you probably have a webserver running on your local computer, probably from some sort of tutorial if you don't recall having set one up. For example, some Docker tutorials have you start up local web servers.**
You will need to stop that web server while you're doing this in order to grab that localhost URL.
You will need to stop that web server while you're doing this in order to grab that localhost URL.
@ -99,11 +109,11 @@ You will need to stop that web server while you're doing this in order to grab t
```
```
<h4>OAuth Flow using Docker</h4>
### OAuth Flow using Docker
To authenticate MyAnimeList the first time, you need run the container with the `-it` flags in order to walk through the OAuth flow mentioned above. Once you have the MyAnimeList authentication data saved into the YAML, you'll be able to run the container normally.
To authenticate MyAnimeList the first time, you need run the container with the `-it` flags in order to walk through the OAuth flow mentioned above. Once you have the MyAnimeList authentication data saved into the YAML, you'll be able to run the container normally.
<h4>OAuth Flow using unRAID Docker</h4>
### OAuth Flow using unRAID Docker
Directions on how to authenticate MyAnimeList on unRAID can be found on the [unRAID Walkthrough](../pmm/install/guides/unraid.md#advanced-installation-authenticating-trakt-or-myanimelist) page.
Directions on how to authenticate MyAnimeList on unRAID can be found on the [unRAID Walkthrough](../pmm/install/guides/unraid.md#advanced-installation-authenticating-trakt-or-myanimelist) page.
| `cache_expiration` | Number of days before each cache mapping expires and has to be re-cached. | 60 | :fontawesome-solid-circle-xmark:{ .red } |
| `cache_expiration` | Number of days before each cache mapping expires and has to be re-cached. | 60 | :fontawesome-solid-circle-xmark:{ .red } |
* The OMDb apikey can be generated [here](http://www.omdbapi.com/apikey.aspx).
???+ tip
* The free apikey is limited to 1000 requests per day so if you hit your limit the program should be able to pick up where it left off the next day as long as the `cache` [Setting](settings.md#cache) is enabled
The OMDb apikey can be generated [here](http://www.omdbapi.com/apikey.aspx).
The free apikey is limited to 1000 requests per day so if you hit your limit the program should be able to pick up where it left off the next day as long as the `cache` [Setting](settings.md#cache) is enabled
| `managed` | **Values:**<br>`true`: Collection must be a Managed Collection to be deleted (the collection has the `PMM` label)<br>`false`: Collection must be an Unmanaged Collection to be deleted (the collection does not have the `PMM` label) |
| `managed` | **Values:**<br>`true`: Collection must be a Managed Collection to be deleted (the collection has the `PMM` label)<br>`false`: Collection must be an Unmanaged Collection to be deleted (the collection does not have the `PMM` label) |
| `configured` | **Values:**<br>`true`: Collection must be a Configured Collection to be deleted (collection is in the config file of the specific PMM run)<br>`false`: Collection must be an Unconfigured Collection to be deleted (collection is not in the config file of the specific PMM run).<br>**The collection does not need to be scheduled to be considered configured and only needs to be in the config file.** |
| `configured` | **Values:**<br>`true`: Collection must be a Configured Collection to be deleted (collection is in the config file of the specific PMM run)<br>`false`: Collection must be an Unconfigured Collection to be deleted (collection is not in the config file of the specific PMM run).<br>**The collection does not need to be scheduled to be considered configured and only needs to be in the config file.** |
| `less` | Collection must contain less then the given number of items to be deleted.<br>**Values:** Number Greater then 0 |
| `less` | Collection must contain less then the given number of items to be deleted.<br>**Values:** Number greater than 0 |
**Example:**
**Example:**
@ -246,6 +246,11 @@ Updates every item's episode's audience/critic/user rating in the library to the
Updates every item's poster to the chosen sites poster. Will fallback to `plex` if the given option fails. Assets will be used over anything else.
Updates every item's poster to the chosen sites poster. Will fallback to `plex` if the given option fails. Assets will be used over anything else.
???+ warning
When used in combination with Overlays, this could cause PMM to reset the poster and then reapply all overlays on each run, which will result in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
**Attribute:** `mass_poster_update`
**Attribute:** `mass_poster_update`
**Values:** There are a few different options to determine how the `mass_poster_update` works.
**Values:** There are a few different options to determine how the `mass_poster_update` works.
@ -272,6 +277,10 @@ library:
Updates every item's background to the chosen sites background. Will fallback to `plex` if the given option fails. Assets will be used over anything else.
Updates every item's background to the chosen sites background. Will fallback to `plex` if the given option fails. Assets will be used over anything else.
???+ warning
When used in combination with Overlays, this could cause PMM to reset the background and then reapply all overlays on each run, which will result in [image bloat](../pmm/essentials/scripts/image-cleanup.md).
**Attribute:** `mass_background_update`
**Attribute:** `mass_background_update`
**Values:** There are a few different options to determine how the `mass_background_update` works.
**Values:** There are a few different options to determine how the `mass_background_update` works.
@ -9,6 +9,7 @@ Configuring [Plex](https://www.plex.tv/) is required in order to connect to your
A `plex` mapping can be either in the root of the config file as global mapping for all libraries, or you can specify the `plex` mapping individually per library.
A `plex` mapping can be either in the root of the config file as global mapping for all libraries, or you can specify the `plex` mapping individually per library.
Below is a `plex` mapping example and the full set of attributes:
Below is a `plex` mapping example and the full set of attributes:
```yaml
```yaml
plex:
plex:
url: http://192.168.1.12:32400
url: http://192.168.1.12:32400
@ -30,11 +31,14 @@ plex:
| `empty_trash` | Runs Empty Trash on the Server after all Metadata Files are run | false | ❌ |
| `empty_trash` | Runs Empty Trash on the Server after all Metadata Files are run | false | ❌ |
| `optimize` | Runs Optimize on the Server after all Metadata Files are run | false | ❌ |
| `optimize` | Runs Optimize on the Server after all Metadata Files are run | false | ❌ |
* **Do Not Use the Plex Token found in Plex's Preferences.xml file**
???+ warning
Do Not Use the Plex Token found in Plex's Preferences.xml file.
If you need help finding your Plex authentication token, please see Plex's [support article](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/).
* This script can be run on a remote Plex server, but be sure that the `url` provided is publicly addressable, and it's recommended to use `HTTPS`.
This script can be run on a remote Plex server, but be sure that the `url` provided is publicly addressable, and it's recommended to use `HTTPS`.
* If you need help finding your Plex authentication token, please see Plex's [support article](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/).
Configuring [Radarr](https://radarr.video/) is optional but will allow you to send movies to a Radarr instance when they're found missing while updating a library's collections.
Configuring [Radarr](https://radarr.video/) is optional but will allow you to send movies to a Radarr instance when they're found missing while updating a library's collections.
Radarr V2 may work, but it is not supported please upgrade to V3 if you can.
???+ note
Radarr V2 may work, but it is not supported. Please upgrade to V3 if you can.
Items in your List Exclusions will be ignored by PMM.
Items in your List Exclusions will be ignored by PMM.
@ -49,9 +51,11 @@ radarr:
| `plex_path` | When using `add_existing` or `radarr_add_all` Convert this part of the path to `radarr_path`. | ` ` | ❌ |
| `plex_path` | When using `add_existing` or `radarr_add_all` Convert this part of the path to `radarr_path`. | ` ` | ❌ |
| `radarr_path` | When using `add_existing` or `radarr_add_all` Convert the `plex_path` part of the path to this. | ` ` | ❌ |
| `radarr_path` | When using `add_existing` or `radarr_add_all` Convert the `plex_path` part of the path to this. | ` ` | ❌ |
* The `token` can be found by going to `Radarr > Settings > General > Security > API Key`
???+ tip
The `token` can be found by going to `Radarr > Settings > General > Security > API Key`
* The `quality_profile` must be the exact name of the desired quality profile, including all spaces and capitalization.
The `quality_profile` must be the exact name of the desired quality profile, including all spaces and capitalization.
* You can set most attributes per collection by using the [Radarr Details](../builders/details/arr.md#radarr-definition-settings) in the collection definition.
* You can set most attributes per collection by using the [Radarr Details](../builders/details/arr.md#radarr-definition-settings) in the collection definition.
@ -82,7 +86,6 @@ Specifying different options for specific libraries:
In this example we have two Radarr instances, standard and 4K, and four libraries showing how one can override individual settings at the library level. Also, movies are being added to the "Library05" library outside Radarr via a custom script and I want those new movies added to Radarr for tracking.
In this example we have two Radarr instances, standard and 4K, and four libraries showing how one can override individual settings at the library level. Also, movies are being added to the "Library05" library outside Radarr via a custom script and I want those new movies added to Radarr for tracking.
```
```
libraries:
libraries:
Library01: # this library uses the default radarr config
Library01: # this library uses the default radarr config
@ -67,61 +67,39 @@ The available setting attributes which can be set at each level are outlined bel
## Cache
## Cache
Cache the Plex GUID and associated IDs for each library item for faster subsequent processing. The cache file is created in the same directory as the configuration file.
Cache the Plex GUID and associated IDs for each library item for faster subsequent processing. The cache file is created in the same directory as the configuration file.
Whilst searching for assets, scan the folders within the `asset_directory` and if an asset poster (i.e. `/ASSET_NAME/poster.ext`) was not found, rename the first image found that has a height greater than or equal to its width to `poster.ext`. If an asset background (i.e. `/ASSET_NAME/background.ext`), rename the first image found that has a width greater than its height to `background.ext`.
Whilst searching for assets, scan the folders within the `asset_directory` and if an asset poster (i.e. `/ASSET_NAME/poster.ext`) was not found, rename the first image found that has a height greater than or equal to its width to `poster.ext`. If an asset background (i.e. `/ASSET_NAME/background.ext`), rename the first image found that has a width greater than its height to `background.ext`.
* `asset_folders` must be set to `true` for this to take effect.
`asset_folders` must be set to `true` for this to take effect.
<th>Default Value</th>
<td><code>false</code></td>
| | |
</tr>
|---|---|
<tr>
| Default Value | false |
<th>Allowed Values</th>
| Allowed Values | `true` or `false` |
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
## Download URL Assets
## Download URL Assets
Whilst searching for assets, download images set within Metadata/Playlist files( i.e. images set by `url_poster` or `url_background`) into the asset folder if none are already present.
Whilst searching for assets, download images set within Metadata/Playlist files( i.e. images set by `url_poster` or `url_background`) into the asset folder if none are already present.
Whilst searching for assets, when scanning for assets for a TV Show, if Season posters are found (i.e. `/ASSET_NAME/Season##.ext`), notify the user of any seasons which do not have an asset image.
Whilst searching for assets, when scanning for assets for a TV Show, if Season posters are found (i.e. `/ASSET_NAME/Season##.ext`), notify the user of any seasons which do not have an asset image.
Whilst searching for assets, when scanning for assets for a TV Show, if an Episode Title Card is found (i.e. `/ASSET_NAME/S##E##.ext`), notify the user of any episodes which do not have an asset image.
Whilst searching for assets, when scanning for assets for a TV Show, if an Episode Title Card is found (i.e. `/ASSET_NAME/S##E##.ext`), notify the user of any episodes which do not have an asset image.
| Allowed Values | `release`: Order Collection by Release Dates</br>`alpha`: Order Collection Alphabetically</br>`custom`: Order Collection Via the Builder Order</br>Any `plex_search` sort option1 |
<th>Allowed Values</th>
<td><code>release</code>: Order Collection by Release Dates<br>
<code>alpha</code>: Order Collection Alphabetically<br>
<code>custom</code>: Order Collection Via the Builder Order<br>
Any <code>plex_search</code> sort option<sup>1</sup><br>
</td>
</tr>
</table>
<sup>1</sup>`plex_search` sort options can be found [here](plex.md#sort-options)
<sup>1</sup>`plex_search` sort options can be found [here](plex.md#sort-options)
## Minimum Items
## Minimum Items
Set the minimum number of items that must be found in order to build or update a collection/playlist.
Set the minimum number of items that must be found in order to build or update a collection/playlist.
@ -354,162 +265,110 @@ Set the number of minutes to delay running `run_again` collections after daily r
For example, if a collection adds items to Sonarr/Radarr, the library can automatically re-run "X" amount of time later so that any downloaded items are processed.
For example, if a collection adds items to Sonarr/Radarr, the library can automatically re-run "X" amount of time later so that any downloaded items are processed.
* A collection is a `run_again` collection if it has the `run_again` [Setting Detail](../builders/details/definition.md) attribute set to true.
???+ note
A collection is a `run_again` collection if it has the `run_again` [Setting Detail](../builders/details/definition.md) attribute set to true.
Only items missing from a collection will be filtered. **Only specific filters can filter missing. See [Filters](../metadata/filters.md) for more information.**
Only items missing from a collection will be filtered. **Only specific filters can filter missing. See [Filters](../metadata/filters.md) for more information.**
* this can be used to filter which missing media items get sent to Sonarr/Radarr
???+ note
this can be used to filter which missing media items get sent to Sonarr/Radarr
set to false if your log file shows any errors similar to "SSL: CERTIFICATE_VERIFY_FAILED"
<th>Default Value</th>
<td><code>true</code></td>
| | |
</tr>
|---|---|
<tr>
| Default Value | true |
<th>Allowed Values</th>
| Allowed Values | `true` or `false` |
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
## Check Nightly
## Check Nightly
Will check nightly for updates instead of develop.
Will check nightly for updates instead of develop.
* This does not affect which version of PMM is grabbed when using `git pull` or any other update mechanism, it is only used for the initial version check when PMM runs to specify if a new version is available.
???+ note
* It is recommended to set this to `true` if you primarily use the `nightly` branch
This does not affect which version of PMM is grabbed when using `git pull` or any other update mechanism, it is only used for the initial version check when PMM runs to specify if a new version is available.
Configuring [Sonarr](https://sonarr.tv/) is optional but will allow you to send shows to a Sonarr instance when they're found missing while updating a library's collections.
Configuring [Sonarr](https://sonarr.tv/) is optional but will allow you to send shows to a Sonarr instance when they're found missing while updating a library's collections.
Sonarr V2 may work, but it is not supported please upgrade to V3 if you can.
???+ note
Sonarr V2 may work, but it is not supported please upgrade to V3 if you can.
Items in your List Exclusions will be ignored by PMM.
Items in your List Exclusions will be ignored by PMM.
@ -55,9 +57,11 @@ sonarr:
| `plex_path` | When using `add_existing` or `sonarr_add_all` Convert this part of the path to `sonarr_path`. | ` ` | ❌ |
| `plex_path` | When using `add_existing` or `sonarr_add_all` Convert this part of the path to `sonarr_path`. | ` ` | ❌ |
| `sonarr_path` | When using `add_existing` or `sonarr_add_all` Convert the `plex_path` part of the path to this. | ` ` | ❌ |
| `sonarr_path` | When using `add_existing` or `sonarr_add_all` Convert the `plex_path` part of the path to this. | ` ` | ❌ |
* The `token` can be found by going to `Sonarr > Settings > General > Security > API Key`
???+ tip
The `token` can be found by going to `Sonarr > Settings > General > Security > API Key`
* The `quality_profile` and `language_profile` must be the exact name of the desired quality profile, including all spaces and capitalization.
The `quality_profile` and `language_profile` must be the exact name of the desired quality profile, including all spaces and capitalization.
* You can set most attributes per collection by using the [Sonarr Details](../builders/details/arr.md#sonarr-definition-settings) in the collection definition.
* You can set most attributes per collection by using the [Sonarr Details](../builders/details/arr.md#sonarr-definition-settings) in the collection definition.
* All other attributes will be filled in by Plex Meta Manager.
* All other attributes will be filled in by Plex Meta Manager.
* To connect to Trakt.tv you must create a Trakt application and supply Plex Meta Manager the `client_id`, `client_secret`, and `pin` provided, please do the following:
To connect to Trakt.tv you must create a Trakt application and supply Plex Meta Manager the `client_id`, `client_secret`, and `pin` provided, please do the following:
1. [Click here to create a Trakt API application.](https://trakt.tv/oauth/applications/new)
2. Enter a `Name` for the application.
1. [Click here to create a Trakt API application.](https://trakt.tv/oauth/applications/new)
3. Enter `urn:ietf:wg:oauth:2.0:oob` for `Redirect uri`.
2. Enter a `Name` for the application.
4. Click the `SAVE APP` button.
3. Enter `urn:ietf:wg:oauth:2.0:oob` for `Redirect uri`.
5. Record the `Client ID` and `Client Secret` as `client_id` and `client_secret` in your Configuration File.
4. Click the `SAVE APP` button.
6. Click the Green Authorize Button next to the Redirect URI
5. Record the `Client ID` and `Client Secret` as `client_id` and `client_secret` in your Configuration File.
6. Click the Green Authorize Button next to the Redirect URI
![Trakt Authorize](trakt.png)
![Trakt Authorize](trakt.png)
8. Record the `PIN` as `pin` in your Configuration File.
* Run Plex Meta Manager shortly after obtaining your PIN; the PIN may expire at some point.
7. Record the `PIN` as `pin` in your Configuration File.
???+ warning
Run Plex Meta Manager shortly after obtaining your PIN; the PIN may expire at some point.
| `limit` | **Description:** Changes the number of items in a collection for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number greater then 0 |
| `limit` | **Description:** Changes the number of items in a collection for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number greater than 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the number of items in a collection of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number greater then 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the number of items in a collection of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number greater than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `limit` | **Description:** Changes the Smart Filter Limit for all collections in a Defaults file.<br>**Values:** Number Greater then 0 |
| `limit` | **Description:** Changes the Smart Filter Limit for all collections in a Defaults file.<br>**Values:** Number greater than 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Smart Filter Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number Greater then 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Smart Filter Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number greater than 0 |
| `sort_by` | **Description:** Changes the Smart Filter Sort for all collections in a Defaults file.<br>**Default:** `release.desc`<br>**Values:** [Any `smart_filter` Sort Option](../../builders/smart.md#sort-options) |
| `sort_by` | **Description:** Changes the Smart Filter Sort for all collections in a Defaults file.<br>**Default:** `release.desc`<br>**Values:** [Any `smart_filter` Sort Option](../../builders/smart.md#sort-options) |
| `sort_by_<<key>>`<sup>1</sup> | **Description:** Changes the Smart Filter Sort of the specified key's collection.<br>**Default:** `sort_by`<br>**Values:** [Any `smart_filter` Sort Option](../../builders/smart.md#sort-options) |
| `sort_by_<<key>>`<sup>1</sup> | **Description:** Changes the Smart Filter Sort of the specified key's collection.<br>**Default:** `sort_by`<br>**Values:** [Any `smart_filter` Sort Option](../../builders/smart.md#sort-options) |
| `in_the_last_<<key>>`<sup>1</sup> | **Description:** Changes how far back the Smart Filter looks.<tableclass="clearTable"><tr><td>**Default:**</td></tr><tr><td>`released`</td><td>`90`</td></tr><tr><td>`episodes`</td><td>`7`</td></tr></table>**Values:** Number Greater then 0 |
| `in_the_last_<<key>>`<sup>1</sup> | **Description:** Changes how far back the Smart Filter looks.<tableclass="clearTable"><tr><td>**Default:**</td></tr><tr><td>`released`</td><td>`90`</td></tr><tr><td>`episodes`</td><td>`7`</td></tr></table>**Values:** Number greater than 0 |
1. Each default collection has a `key` that when calling to effect a specific collection you must replace `<<key>>` with when calling.
1. Each default collection has a `key` that when calling to effect a specific collection you must replace `<<key>>` with when calling.
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `10`<br>**Values:** Number Greater then 0 |
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `10`<br>**Values:** Number greater than 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number Greater then 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number greater than 0 |
| `location` | **Description:** Changes the Builder Location for all collections in a Defaults file.<br>**Default:** `world`<br>**Values:** [`location` Attribute Options](../../builders/flixpatrol.md#top-platform-attributes) |
| `location` | **Description:** Changes the Builder Location for all collections in a Defaults file.<br>**Default:** `world`<br>**Values:** [`location` Attribute Options](../../builders/flixpatrol.md#top-platform-attributes) |
| `location_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Location of the specified key's collection.<br>**Default:** `location`<br>**Values:** [`location` Attribute Options](../../builders/flixpatrol.md#top-platform-attributes) |
| `location_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Location of the specified key's collection.<br>**Default:** `location`<br>**Values:** [`location` Attribute Options](../../builders/flixpatrol.md#top-platform-attributes) |
| `time_window` | **Description:** Changes the Builder Time Window for all collections in a Defaults file.<br>**Default:** `last_week`<br>**Values:** [`time_window` Attribute Options](../../builders/flixpatrol.md#top-platform-attributes) |
| `time_window` | **Description:** Changes the Builder Time Window for all collections in a Defaults file.<br>**Default:** `last_week`<br>**Values:** [`time_window` Attribute Options](../../builders/flixpatrol.md#top-platform-attributes) |
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number Greater then 0 |
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number greater than 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number Greater then 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number greater than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `limit_anidb` | **Description:** Changes the Builder Limit of the AniDB Popular Collection.<br>**Default:** `30`<br>**Values:** Number Greater then 0 |
| `limit_anidb` | **Description:** Changes the Builder Limit of the AniDB Popular Collection.<br>**Default:** `30`<br>**Values:** Number greater than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `list_days` | **Description:** Changes the `list_days` attribute of the builder for all collections in a Defaults file.<br>**Values:** Number greater then 0 |
| `list_days` | **Description:** Changes the `list_days` attribute of the builder for all collections in a Defaults file.<br>**Values:** Number greater than 0 |
| `list_days_<<key>>`<sup>1</sup> | **Description:** Changes the `list_days` attribute of the builder of the specified key's collection.<br>**Values:** Number greater then 0 |
| `list_days_<<key>>`<sup>1</sup> | **Description:** Changes the `list_days` attribute of the builder of the specified key's collection.<br>**Values:** Number greater than 0 |
| `list_size` | **Description:** Changes the `list_size` attribute of the builder for all collections in a Defaults file.<br>**Values:** Number greater then 0 |
| `list_size` | **Description:** Changes the `list_size` attribute of the builder for all collections in a Defaults file.<br>**Values:** Number greater than 0 |
| `list_size_<<key>>`<sup>1</sup> | **Description:** Changes the `list_size` attribute of the builder of the specified key's collection.<br>**Values:** Number greater then 0 |
| `list_size_<<key>>`<sup>1</sup> | **Description:** Changes the `list_size` attribute of the builder of the specified key's collection.<br>**Values:** Number greater than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number Greater then 0 |
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number greater than 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number Greater then 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number greater than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number Greater then 0 |
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<br>**Values:** Number greater than 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number Greater then 0 |
| `limit_<<key>>`<sup>1</sup> | **Description:** Changes the Builder Limit of the specified key's collection.<br>**Default:** `limit`<br>**Values:** Number greater than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `sync_mode_<<key>>`<sup>1</sup> | **Description:** Changes the Sync Mode of the specified key's collection.<br>**Default:** `sync_mode`<br>**Values:**<tableclass="clearTable"><tr><td>`sync`</td><td>Add and Remove Items based on Builders</td></tr><tr><td>`append`</td><td>Only Add Items based on Builders</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order for all collections in a Defaults file.<br>**Default:** `custom`<br>**Values:**<tableclass="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
<sup>1</sup> Designed for [TRaSH Guides](https://trash-guides.info/) filename naming scheme
<sup>1</sup> Designed to use the [TRaSH Guides](https://trash-guides.info/) filename naming scheme
<sup>2</sup> Requires Plex Pass or [TRaSH Guides](https://trash-guides.info/) filename naming scheme
<sup>2</sup> Editions overlay is designed to use the Editions field within Plex [which requires Plex Pass to use] or the [TRaSH Guides](https://trash-guides.info/) filename naming scheme
@ -68,11 +68,11 @@ All [Shared Overlay Variables](../overlay_variables.md) except `horizontal_offse
| `weight_<<key>>`<sup>1</sup> | **Description:** Controls the weight of the Overlay. Higher numbers have priority.<br>**Values:** Any Number |
| `weight_<<key>>`<sup>1</sup> | **Description:** Controls the weight of the Overlay. Higher numbers have priority.<br>**Values:** Any Number |
| `font` | **Description:** Choose the font for the Overlay.<br>**Default:** `fonts/Inter-Medium.ttf`<br>**Values:** Path to font file |
| `font` | **Description:** Choose the font for the Overlay.<br>**Default:** `fonts/Inter-Medium.ttf`<br>**Values:** Path to font file |
| `font_style` | **Description:** Font style for Variable Fonts.<br>**Values:** Variable Font Style |
| `font_style` | **Description:** Font style for Variable Fonts.<br>**Values:** Variable Font Style |
| `font_size` | **Description:** Choose the font size for the Overlay.<br>**Default:** `50`<br>**Values:** Any Number greater then 0 |
| `font_size` | **Description:** Choose the font size for the Overlay.<br>**Default:** `50`<br>**Values:** Any Number greater than 0 |
| `font_color` | **Description:** Choose the font color for the Overlay.<br>**Default:** `#FFFFFF`<br>**Values:** Color Hex Code in format `#RGB`, `#RGBA`, `#RRGGBB` or `#RRGGBBAA` |
| `font_color` | **Description:** Choose the font color for the Overlay.<br>**Default:** `#FFFFFF`<br>**Values:** Color Hex Code in format `#RGB`, `#RGBA`, `#RRGGBB` or `#RRGGBBAA` |
| `stroke_width` | **Description:** Font Stroke Width for the Text Overlay.<br>**Values:** Any Number greater then 0 |
| `stroke_width` | **Description:** Font Stroke Width for the Text Overlay.<br>**Values:** Any Number greater than 0 |
| `stroke_color` | **Description:** Font Stroke Color for the Text Overlay.<br>**Values:** Color Hex Code in format `#RGB`, `#RGBA`, `#RRGGBB` or `#RRGGBBAA` |
| `stroke_color` | **Description:** Font Stroke Color for the Text Overlay.<br>**Values:** Color Hex Code in format `#RGB`, `#RGBA`, `#RRGGBB` or `#RRGGBBAA` |
| `addon_offset` | **Description:** Text Addon Image Offset from the text.<br>**Default:** `30`<br>**Values:** Any Number greater then 0 |
| `addon_offset` | **Description:** Text Addon Image Offset from the text.<br>**Default:** `30`<br>**Values:** Any Number greater than 0 |
| `addon_position` | **Description:** Text Addon Image Alignment in relation to the text.<br>**Default:** `top`<br>**Values:** `left`, `right`, `top`, `bottom` |
| `addon_position` | **Description:** Text Addon Image Alignment in relation to the text.<br>**Default:** `top`<br>**Values:** `left`, `right`, `top`, `bottom` |
1. Each default overlay has a `key` that when calling to effect a specific overlay you must replace `<<key>>` with when calling.
1. Each default overlay has a `key` that when calling to effect a specific overlay you must replace `<<key>>` with when calling.
@ -8,7 +8,9 @@ All overlay coordinates assume 1000 x 1500 for Posters and 1920 x 1080 for Backg
**To remove all overlays add `remove_overlays: true` to the `overlay_path` [Libraries Attribute](../config/libraries.md#remove-overlays).**
**To remove all overlays add `remove_overlays: true` to the `overlay_path` [Libraries Attribute](../config/libraries.md#remove-overlays).**
**IMPORTANT NOTE ON OVERLAYS:** Once you have applied overlays to your posters in Plex, it is highly recommended that you never change artwork on a thing directly in Plex again. PMM uses labels on the items in Plex to decide if an overlay has been applied, so if you change artwork behind PMM's back things can become confused and items can end up with double-overlaid posters. It's recommended to set new artwork using the asset directory, which will ensure that this doesn't happen.
???+ danger "Important Notice"
Once you have applied overlays to your posters in Plex, it is highly recommended that you never change artwork on a thing directly in Plex again. PMM uses labels on the items in Plex to decide if an overlay has been applied, so if you change artwork behind PMM's back things can become confused and items can end up with double-overlaid posters. It's recommended to set new artwork using the asset directory, which will ensure that this doesn't happen.
**To change a single overlay original image either remove the `Overlay` shared label and update the Image in Plex or replace the image in the assets folder and then PMM will overlay the new image**
**To change a single overlay original image either remove the `Overlay` shared label and update the Image in Plex or replace the image in the assets folder and then PMM will overlay the new image**
@ -42,7 +44,7 @@ There are multiple types of attributes that can be utilized within an overlay:
@ -4,7 +4,9 @@ Playlist files are used to create and maintain playlists on the Plex Server.
If utilized to their fullest, these files can be used to maintain the entire server's collections and playlists, and can be used as a backup for these in the event of a restore requirement.
If utilized to their fullest, these files can be used to maintain the entire server's collections and playlists, and can be used as a backup for these in the event of a restore requirement.
Playlists are defined in one or more Playlist files that are mapped in the [Playlist Files Attribute](../config/playlists.md) within the Configuration File.
???+ tip
Playlists are defined in one or more Playlist files that are mapped in the [Playlist Files Attribute](../config/playlists.md) within the Configuration File.
You can use the [`playlist_report` setting](../config/settings.md#playlist-report) to get a list of your playlists printed out in your log.
You can use the [`playlist_report` setting](../config/settings.md#playlist-report) to get a list of your playlists printed out in your log.
@ -40,7 +42,7 @@ There are multiple types of attributes that can be utilized within a playlist:
Note that we provide the template name `Actor` and the value to insert in the place of `<<person>>`. The `<<collection_name>>` is a template variable that is always available and doesn't have to be called out like `<<person>>`.
Note that we provide the template name `Actor` and the value to insert in the place of `<<person>>`. The `<<collection_name>>` is a template variable that is always available and doesn't have to be called out like `<<person>>`.
Inside a template, you can use all the Builders, Details, and [Filters]filters.md) attributes that you can give collections/playlists [except `template`; templates cannot be nested].
Inside a template, you can use all the Builders, Details, and [Filters](filters.md) attributes that you can give collections/playlists [except `template`; templates cannot be nested].
The names of template variables that you define are arbitrary. In the example above, `<<person>>` could have been `<<tvdb_person_id>>` or `<<bing>>` or anything else. The only thing that matters is that in the template definition you surround them with `<< >>` and in the collection definition you spell it correctly.
The names of template variables that you define are arbitrary. In the example above, `<<person>>` could have been `<<tvdb_person_id>>` or `<<bing>>` or anything else. The only thing that matters is that in the template definition you surround them with `<< >>` and in the collection definition you spell it correctly.
@ -57,7 +57,7 @@ Another way to specify environmental variables is by adding them to a .env file
Further explanation and examples of each command can be found below.
Further explanation and examples of each command can be found below.
Environment variables are expressed as `KEY=VALUE` Depending on the context where you are specifying them, you may enter those two things in two different fields, or some other way. The examples below show how you would specify the environment variable in a script or a `docker run` command. Things like Portainer or a NAS Docker UI will have different ways to specify these things.
Environment variables are expressed as `KEY=VALUE`depending on the context where you are specifying them, you may enter those two things in two different fields, or some other way. The examples below show how you would specify the environment variable in a script or a `docker run` command. Things like Portainer or a NAS Docker UI will have different ways to specify these things.
## Config
## Config
@ -73,11 +73,11 @@ Specify the location of the configuration YAML file.
| Flags | `-dc` or `--delete-collections` | `PMM_DELETE_COLLECTIONS` |
| Flags | `-dc` or `--delete-collections` | `PMM_DELETE_COLLECTIONS` |
@ -440,6 +464,14 @@ Delete all collections in a Library prior to running collections/operations.
Delete all labels on every item in a Library prior to running collections/operations.
Delete all labels on every item in a Library prior to running collections/operations.
???+ warning
To preserve functionality of PMM, this will **not** remove the Overlay label, which is required for PMM to know which items have Overlays applied.
This will impact any [Smart Label Collections](../../builders/smart.md#smart-label) that you have in your library.
We do not recommend using this on a regular basis if you also use any operations or collections that update labels, as you are effectively deleting and adding labels on each run.
This page aims to provide knowledge based on combined user experience, and to answer the frequent questions that we are asked in our [Discord Server](https://discord.gg/NfH6mGFuAB).
This page aims to provide knowledge based on combined user experience, and to answer the frequent questions that we are asked in our
If you have a question that is not answered here, try enter some keywords into the search bar above, or join our [Discord Server](https://discord.gg/NfH6mGFuAB).
@ -103,6 +103,8 @@ You and I both know that the IMDb rating isn't 6.0, but Plex Meta Manager is jus
* `rating1_image` and `rating2_image` were both changed from `rt_score` and `rt_popcorn` respectively to `imdb`
* `rating1_image` and `rating2_image` were both changed from `rt_score` and `rt_popcorn` respectively to `imdb`
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
When the above is run you see this result:
When the above is run you see this result:
![](ratings/ratings-06.png)
![](ratings/ratings-06.png)
@ -135,8 +137,11 @@ Now let's actually update the ratings and push some numbers into those boxes usi
```
```
* `operations` with the attribute `mass_user_rating_update` set to `imdb` is added.
* `operations` with the attribute `mass_user_rating_update` set to `imdb` is added.
* `rating1_image` and `rating2_image` were both changed back to `rt_score` and `rt_popcorn` respectively from `imdb`
* `rating1_image` and `rating2_image` were both changed back to `rt_score` and `rt_popcorn` respectively from `imdb`
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
This will put the actual IMDb rating value, retrieved from IMDb, into the "user" rating field.
This will put the actual IMDb rating value, retrieved from IMDb, into the "user" rating field.
After that has been run, we see:
After that has been run, we see:
@ -173,6 +178,8 @@ Now let's update the critic and audience ratings to some different ratings:
* under `operations` the attribute `mass_critic_rating_update` set to `trakt_user` and `mass_audience_rating_update` set to `tmdb` are added.
* under `operations` the attribute `mass_critic_rating_update` set to `trakt_user` and `mass_audience_rating_update` set to `tmdb` are added.
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
Running the above will put the Trakt User's personal rating into the critic box and the TMDb rating into the audience box. Note that we haven't changed the rating images yet.
Running the above will put the Trakt User's personal rating into the critic box and the TMDb rating into the audience box. Note that we haven't changed the rating images yet.
![](ratings/ratings-08.png)
![](ratings/ratings-08.png)
@ -220,6 +227,8 @@ Let's change the Trakt rating to that trakt public rating of `85%` instead, whic
* under `operations` the attribute `mass_critic_rating_update` was changed to `mdb_trakt` from `trakt_user`. (This step requires MDBList to be configured)
* under `operations` the attribute `mass_critic_rating_update` was changed to `mdb_trakt` from `trakt_user`. (This step requires MDBList to be configured)
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
When the above is run you should get:
When the above is run you should get:
![](ratings/ratings-09.png)
![](ratings/ratings-09.png)
@ -252,8 +261,11 @@ Now, finally, let's make the poster rating images match the numbers we put in th
```
```
* `rating1_image` was changed to `trakt` from `rt_score`
* `rating1_image` was changed to `trakt` from `rt_score`
* `rating2_image` was changed to `tmdb` from `rt_popcorn`
* `rating2_image` was changed to `tmdb` from `rt_popcorn`
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
@ -105,7 +105,7 @@ Each option can be applied in three ways:
| TMDb V3 API Key | TMDb V3 API Key for restoring posters from TMDb.<br>**Shell Command:** `-ta` or `--tmdbapi 123456789123456789`<br>**Environment Variable:** `TMDBAPI=123456789123456789` | :fontawesome-solid-circle-xmark:{ .red } |
| TMDb V3 API Key | TMDb V3 API Key for restoring posters from TMDb.<br>**Shell Command:** `-ta` or `--tmdbapi 123456789123456789`<br>**Environment Variable:** `TMDBAPI=123456789123456789` | :fontawesome-solid-circle-xmark:{ .red } |
| Start From | Plex Item Title to Start restoring posters from.<br>**Shell Command:** `-st` or `--start "Mad Max"`<br>**Environment Variable:** `START=Mad Max` | :fontawesome-solid-circle-xmark:{ .red } |
| Start From | Plex Item Title to Start restoring posters from.<br>**Shell Command:** `-st` or `--start "Mad Max"`<br>**Environment Variable:** `START=Mad Max` | :fontawesome-solid-circle-xmark:{ .red } |
| Items | Restore specific Plex Items by Title. Can use a bar-separated (<code>|</code>) list.<br>**Shell Command:** `-it` or <code>--items "Mad Max|Mad Max 2"</code><br>**Environment Variable:** <code>ITEMS=Mad Max|Mad Max 2</code> | :fontawesome-solid-circle-xmark:{ .red } |
| Items | Restore specific Plex Items by Title. Can use a bar-separated (<code>|</code>) list.<br>**Shell Command:** `-it` or <code>--items "Mad Max|Mad Max 2"</code><br>**Environment Variable:** <code>ITEMS=Mad Max|Mad Max 2</code> | :fontawesome-solid-circle-xmark:{ .red } |
| Timeout | Timeout can be any number greater then 0. **Default:**`600`<br>**Shell Command:** `-ti` or `--timeout 1000`<br>**Environment Variable:** `TIMEOUT=1000` | :fontawesome-solid-circle-xmark:{ .red } |
| Timeout | Timeout can be any number greater than 0. **Default:**`600`<br>**Shell Command:** `-ti` or `--timeout 1000`<br>**Environment Variable:** `TIMEOUT=1000` | :fontawesome-solid-circle-xmark:{ .red } |
| Dry Run | Run as a Dry Run without making changes in Plex.<br>**Shell Command:** `-d` or `--dry`<br>**Environment Variable:** `DRY_RUN=True` | :fontawesome-solid-circle-xmark:{ .red } |
| Dry Run | Run as a Dry Run without making changes in Plex.<br>**Shell Command:** `-d` or `--dry`<br>**Environment Variable:** `DRY_RUN=True` | :fontawesome-solid-circle-xmark:{ .red } |
This article will walk you through getting Plex-Meta-Manager [PMM] set up and running. It will cover:
This article will walk you through getting Plex-Meta-Manager [PMM] set up and running. It will cover:
1. Retrieving the PMM code
1. Retrieving the PMM code
2. Installing requirements
2. Installing requirements
3. Setting up the initial config file
3. Setting up the initial config file
4. Setting up a metadata file and creating a couple sample collections.
4. Setting up a metadata file and creating a couple sample collections.
The specific steps you will be taking:
The specific steps you will be taking:
1. Verify that Python 3.8 or better is installed and install it if not
2. Verify that the Git tools are installed and install them if not
1. Verify that Python 3.8 or better is installed and install it if not
3. Use `git` to retrieve the code
2. Verify that the Git tools are installed and install them if not
4. Install requirements [extra bits of code required for PMM]
3. Use `git` to retrieve the code
5. Gather two things that the script requires:
4. Install requirements [extra bits of code required for PMM]
1. TMDb API Key
5. Gather two things that the script requires:
2. Plex URL and Token
1. TMDb API Key
6. Then, iteratively:
2. Plex URL and Token
1. use `python` to run the script
2. use a text editor to modify a couple of text files until you have a working config file and a single working metadata file.
6. Then, iteratively:
1. use `python` to run the script
2. use a text editor to modify a couple of text files until you have a working config file and a single working metadata file.
Note that running a Python script is inherently a pretty technical process. If you are unable or unwilling to learn the rudiments of using tools like python and git, you should probably strongly consider running PMM in [Docker](docker.md). That will eliminate the Python and git installs from this process and make it as simple as it can be.
Note that running a Python script is inherently a pretty technical process. If you are unable or unwilling to learn the rudiments of using tools like python and git, you should probably strongly consider running PMM in [Docker](docker.md). That will eliminate the Python and git installs from this process and make it as simple as it can be.
@ -35,15 +37,17 @@ something like this
That’s a command you’re going to type or paste into your terminal (OSX or Linux) or Powershell (Windows). In some cases it's displaying *output* from a command you've typed, but the difference should be apparent in context.
That’s a command you’re going to type or paste into your terminal (OSX or Linux) or Powershell (Windows). In some cases it's displaying *output* from a command you've typed, but the difference should be apparent in context.
IMPORTANT NOTE:
???+ warning ""
This walkthrough is going to be pretty pedantic. I’m assuming you’re reading it because you have no idea how to get a Python script going, so I’m proceeding from the assumption that you want to be walked through every little detail. You’re going to deliberately cause errors and then fix them as you go through it. This is to help you understand what exactly is going on behind the scenes so that when you see these sorts of problems in the wild you will have some background to understand what’s happening. If I only give you the happy path, then when you make a typo later on you’ll have no idea where that typo might be or why it’s breaking things.
This walkthrough is going to be pretty pedantic. I’m assuming you’re reading it because you have no idea how to get a Python script going, so I’m proceeding from the assumption that you want to be walked through every little detail. You’re going to deliberately cause errors and then fix them as you go through it. This is to help you understand what exactly is going on behind the scenes so that when you see these sorts of problems in the wild you will have some background to understand what’s happening. If I only give you the happy path, then when you make a typo later on you’ll have no idea where that typo might be or why it’s breaking things.
I am assuming you do not have any of these tools already installed. When writing this up I started with a brand new Windows 10 install.
I am assuming you do not have any of these tools already installed. When writing this up I started with a brand new Windows 10 install.
This walkthrough involves typing commands into a command window. On Mac OS X or Linux, you can use your standard terminal window, whether that's the builtin Terminal app or something like iTerm. On Windows, you should use PowerShell. There are other options for command windows in Windows, but if you want this to work as written, which I assume is the case since you've read this far, you should use Powershell.
This walkthrough involves typing commands into a command window. On Mac OS X or Linux, you can use your standard terminal window, whether that's the builtin Terminal app or something like iTerm. On Windows, you should use PowerShell. There are other options for command windows in Windows, but if you want this to work as written, which I assume is the case since you've read this far, you should use Powershell.
???+ danger "Important"
IMPORTANT:
This walkthrough is assuming you are doing the entire process on the same platform; i.e. you're installing PMM and editing its config files on a single Linux, Windows, or OS X machine. It doesn't account for situations like running PMM on a Linux machine while editing the config files on your Windows box.
This walkthrough is assuming you are doing the entire process on the same platform; i.e. you're installing PMM and editing its config files on a single Linux, Windows, or OS X machine. It doesn't account for situations like running PMM on a Linux machine while editing the config files on your Windows box.
* `rating1`, `rating1_image`, `rating2`, `rating2_image` are set to match the ratings that Plex already has assigned to those fields (critic/audience). The order here is arbitrary.
* `rating1`, `rating1_image`, `rating2`, `rating2_image` are set to match the ratings that Plex already has assigned to those fields (critic/audience). The order here is arbitrary.
* `rating3` is set to be the user rating and it's image (`rating3_image`) is set to IMDb just because we have to pick something.
* `rating3` is set to be the user rating and it's image (`rating3_image`) is set to IMDb just because we have to pick something.
* `reapply_overlays` is set to true to ensure that PMM always updates the overlays as we run things.
* `reapply_overlays` is set to true to ensure that PMM always updates the overlays as we run things.
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
</details>
</details>
@ -102,6 +105,8 @@ libraries:
* `rating1_image` and `rating2_image` were both changed from `rt_score` and `rt_popcorn` respectively to `imdb`
* `rating1_image` and `rating2_image` were both changed from `rt_score` and `rt_popcorn` respectively to `imdb`
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
</details>
</details>
When the above is run you see this result:
When the above is run you see this result:
@ -137,8 +142,11 @@ libraries:
```
```
* `operations` with the attribute `mass_user_rating_update` set to `imdb` is added.
* `operations` with the attribute `mass_user_rating_update` set to `imdb` is added.
* `rating1_image` and `rating2_image` were both changed back to `rt_score` and `rt_popcorn` respectively from `imdb`
* `rating1_image` and `rating2_image` were both changed back to `rt_score` and `rt_popcorn` respectively from `imdb`
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
</details>
</details>
This will put the actual IMDb rating value, retrieved from IMDb, into the "user" rating field.
This will put the actual IMDb rating value, retrieved from IMDb, into the "user" rating field.
@ -178,6 +186,8 @@ libraries:
* under `operations` the attribute `mass_critic_rating_update` set to `trakt_user` and `mass_audience_rating_update` set to `tmdb` are added.
* under `operations` the attribute `mass_critic_rating_update` set to `trakt_user` and `mass_audience_rating_update` set to `tmdb` are added.
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
</details>
</details>
Running the above will put the Trakt User's personal rating into the critic box and the TMDb rating into the audience box. Note that we haven't changed the rating images yet.
Running the above will put the Trakt User's personal rating into the critic box and the TMDb rating into the audience box. Note that we haven't changed the rating images yet.
@ -228,6 +238,8 @@ libraries:
* under `operations` the attribute `mass_critic_rating_update` was changed to `mdb_trakt` from `trakt_user`. (This step requires MDBList to be configured)
* under `operations` the attribute `mass_critic_rating_update` was changed to `mdb_trakt` from `trakt_user`. (This step requires MDBList to be configured)
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
</details>
</details>
When the above is run you should get:
When the above is run you should get:
@ -263,8 +275,11 @@ libraries:
```
```
* `rating1_image` was changed to `trakt` from `rt_score`
* `rating1_image` was changed to `trakt` from `rt_score`
* `rating2_image` was changed to `tmdb` from `rt_popcorn`
* `rating2_image` was changed to `tmdb` from `rt_popcorn`
* We do not recommend using `reapply_overlays: true` consistently in a live/production environment, make sure to switch this back to `false` when finished.
@ -27,6 +27,7 @@ For those who need full installation walkthroughs, please refer to the following
* [Docker Walkthrough](guides/docker.md) - this discusses using Docker at the command line
* [Docker Walkthrough](guides/docker.md) - this discusses using Docker at the command line
If you are using unRAID, Kubernetes, QNAP, or Synology refer to the following basic guide to Docker container setup for each system:
If you are using unRAID, Kubernetes, QNAP, or Synology refer to the following basic guide to Docker container setup for each system:
**this doesn't cover the PMM setup specifics found in the guides above**
**this doesn't cover the PMM setup specifics found in the guides above**
* [unRAID Walkthrough](guides/unraid.md)
* [unRAID Walkthrough](guides/unraid.md)
@ -70,11 +71,13 @@ python plex_meta_manager.py
```shell
```shell
docker run -it -v <PATH_TO_CONFIG>:/config:rw meisnate12/plex-meta-manager
docker run -it -v <PATH_TO_CONFIG>:/config:rw meisnate12/plex-meta-manager
```
```
* The `-it` flag allows you to interact with the script when needed (such as for Trakt or MyAnimeList authentication).
* The `-v <PATH_TO_CONFIG>:/config:rw` flag mounts the location you choose as a persistent volume to store your files.
- The `-it` flag allows you to interact with the script when needed (such as for Trakt or MyAnimeList authentication).
* Change `<PATH_TO_CONFIG>` to a folder where your config.yml and other files are.
- The `-v <PATH_TO_CONFIG>:/config:rw` flag mounts the location you choose as a persistent volume to store your files.
* The docker image defaults to running the configuration file named `config.yml` which resides in your persistent volume.
* 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 `<PATH_TO_CONFIG>` to a folder where your config.yml and other files are.
* The docker image defaults to running the configuration file named `config.yml` which resides in your persistent volume.
* 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"`