Merge pull request #1726 from YozoraXCII/nightly

various doc admonitions, table amendments, fix dynamic collections nav
pull/1731/head
meisnate12 6 months ago committed by GitHub
commit 19dac0b6b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -111,8 +111,8 @@ The `sync_mode: sync` and `collection_order: custom` Details are recommended sin
|:------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `username` | **Description:** A user's AniList Username |
| `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.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.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 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.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:**<table class="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
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.
```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.
**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.**
[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.
???+ warning
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
@ -218,6 +209,18 @@ Special Filters each have their own set of rules for how they're used.
| `tmdb_type`<sup>**[2](#table-annotations)**</sup><br>`tmdb_type.not`<sup>**[2](#table-annotations)**</sup> | Uses TMDb Type to match<br>**Values:** `documentary`, `news`, `production`, `miniseries`, `reality`, `scripted`, `talk_show`, `video` | :fontawesome-solid-circle-xmark:{ .red } | :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.
## Collection Filter Examples
A few examples are listed below:

@ -2,7 +2,9 @@
Smart Builders allow Plex Meta Manager to create Smart Collections in two different ways.
** Smart Builders do not currently work with Playlists **
???+ note
Smart Builders do not currently work with Playlists
## Smart Label

@ -8,7 +8,7 @@ Using `username` and `password` allows you to access mature content with AniDB B
**All AniDB Builders still work without this, they will just not have mature content**
A `anidb` mapping is in the root of the config file.
An `anidb` mapping is in the root of the config file.
Below is a `anidb` mapping example and the full set of attributes:
```yaml
@ -30,31 +30,31 @@ anidb:
| `username` | AniDB Username | N/A | :fontawesome-solid-circle-xmark:{ .red } |
| `password` | AniDB Password | N/A | :fontawesome-solid-circle-xmark:{ .red } |
* 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/)
2. Go to you [API Client Page](https://anidb.net/software/add) and go to the `Add New Project` Tab.
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.
![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.
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.
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.
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
6b. Select `HTTP API` in the API Dropdown
6c. Put `1` for Version.
6. Come up with and enter a unique to AniDB Client Name
7. Select `HTTP API` in the API Dropdown
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.
```yaml
anidb:
client: UniqueAniDBName
version: 1
language: en
cache_expiration: 60
```
```yaml
anidb:
client: UniqueAniDBName
version: 1
language: en
cache_expiration: 60
```

@ -155,12 +155,13 @@ libraries:
#### Remove Overlays
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"
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
libraries:
TV Shows:
@ -173,11 +174,11 @@ You can remove overlays from a library by adding `remove_overlays: true` to `ove
#### 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.
???+ 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
libraries:
@ -191,11 +192,12 @@ You can reapply overlays from a library by adding `reapply_overlays: true` to `o
#### 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.
???+ 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).
```yaml
libraries:

@ -16,6 +16,8 @@ mdblist:
| `apikey` | MdbList API Key | N/A | :fontawesome-solid-circle-check:{ .green } |
| `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

@ -5,6 +5,7 @@ Configuring [MyAnimeList](https://myanimelist.net/) is optional but is required
A `mal` mapping is in the root of the config file.
Below is a `mal` mapping example and the full set of attributes:
```yaml
mal:
client_id: ################################
@ -23,46 +24,55 @@ mal:
| `client_secret` | MyAnimeList Application Client Secret | :fontawesome-solid-circle-check:{ .green } |
| `localhost_url` | MyAnimeList Authorization URL | :fontawesome-solid-circle-xmark:{ .red } |
* 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
```
https://myanimelist.net/v1/oauth2/authorize?response_type=code&client_id=CLIENT_ID&code_challenge=k_UHwN_eHAPQVXiceC-rYGkozKqrJmKxPUIUOBIKo1noq_4XGRVCViP_dGcwB-fkPql8f56mmWj5aWCa2HDeugf6sRvnc9Rjhbb1vKGYLY0IwWsDNXRqXdksaVGJthux
```
* 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)
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
```
https://myanimelist.net/v1/oauth2/authorize?response_type=code&client_id=CLIENT_ID&code_challenge=k_UHwN_eHAPQVXiceC-rYGkozKqrJmKxPUIUOBIKo1noq_4XGRVCViP_dGcwB-fkPql8f56mmWj5aWCa2HDeugf6sRvnc9Rjhbb1vKGYLY0IwWsDNXRqXdksaVGJthux
```
15. You should see a page that looks like this
![MAL Details](mal.png)
![MAL Details](mal.png)
16. Click "Allow"
17. You will be taken to a page that will not load. That's fine and expected.
Click "Allow"
16. You will be taken to a page that will not load. That's fine and expected.
![Localhost Failure](localhost-fail.png)
![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`.
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.
**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.
## Alternative Way Letting PMM make the 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.
* 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:
```
@ -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.
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.
@ -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.
<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.

@ -16,6 +16,8 @@ omdb:
| `apikey` | OMDb API Key | N/A | :fontawesome-solid-circle-check:{ .green } |
| `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

@ -66,7 +66,7 @@ Deletes collections based on a set of given attributes. The Collection must matc
|:-------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `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.** |
| `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:**
@ -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.
???+ 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`
**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.
???+ 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`
**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.
Below is a `plex` mapping example and the full set of attributes:
```yaml
plex:
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 | &#10060; |
| `optimize` | Runs Optimize on the Server after all Metadata Files are run | false | &#10060; |
* **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/).
# Multi-Plex Instance Setup:

@ -6,7 +6,9 @@ search:
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.
@ -49,9 +51,11 @@ radarr:
| `plex_path` | When using `add_existing` or `radarr_add_all` Convert this part of the path to `radarr_path`. | ` ` | &#10060; |
| `radarr_path` | When using `add_existing` or `radarr_add_all` Convert the `plex_path` part of the path to this. | ` ` | &#10060; |
* 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.
@ -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.
```
libraries:
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 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.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>true</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | true |
| Allowed Values | `true` or `false` |
## Cache Expiration
Set the number of days before each cache mapping expires and has to be re-cached.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>60</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>any integer</td>
</tr>
</table>
| | |
|---|---|
| Default Value | 60 |
| Allowed Values | any integer |
## Image Asset Directory
Specify the directory where assets (posters, backgrounds, etc) are located.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>[Directory containing YAML config]/assets</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>any directory</td>
</tr>
</table>
| | |
|---|---|
| Default Value | [Directory containing YAML config]/assets |
| Allowed Values | any directory |
## Image Asset Folders
Search the `asset_directory` for a dedicated folder. Set to true if each poster is within its own directory.<br>
i.e. `assets/Star Wars/poster.png` instead of `assets/Star Wars.png`
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>true</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | true |
| Allowed Values | `true` or `false` |
## Asset Depth
@ -130,19 +108,17 @@ At each asset level, PMM will look for either `medianame.ext` [such as Star Wars
i.e. `assets/Star Wars/poster.png` and `assets/Star Wars.png` are both asset depth 0
and `assets/Movies/Star Wars/poster.png` and `assets/Movies/Star Wars.png` are both asset level 1
* `asset_folders` must be set to `true` for this to take effect.
* increasing the amount of levels to scan will reduce performance
???+ note
`asset_folders` must be set to `true` for this to take effect.
increasing the amount of levels to scan will reduce performance
| | |
|---|---|
| Default Value | 0 |
| Allowed Values | any integer |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>0</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>any integer</td>
</tr>
</table>
## Create Asset Folders
@ -157,196 +133,131 @@ Asset Searches can happen in a number of ways.
* Any Item that has an Overlay applied to it.
* Any Item found by a Builder while the definition also has `item_assets: true` specified.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Prioritize Assets
When determining which image to use on an item prioritize the `asset_directory` over all other images types.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Dimensional Asset Rename
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.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
???+ note
`asset_folders` must be set to `true` for this to take effect.
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## 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.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Show Missing Season Assets
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.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Show Missing Episode Assets
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.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Show Asset Not Needed
Whilst searching for assets, show or hide the `update not needed` messages.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Sync Mode
Set the default `sync_mode` for collections.
* `sync` will add and remove any items that are added/removed from the source builder
* `append` will only add items that are added from the source builder, but will not remove anything even if it is removed from the source builder.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>append</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>append</code> or <code>sync</code>
</td>
</tr>
</table>
???+ note
`sync` will add and remove any items that are added/removed from the source builder
`append` will only add items that are added from the source builder, but will not remove anything even if it is removed from the source builder.
| | |
|---|---|
| Default Value | append |
| Allowed Values | `append` or `sync` |
## Default Collection Order
Set the default `collection_order` for every collection run by PMM.
* `custom` cannot be used if more than one builder is being used for the collection (such as `imdb_list` and `trakt_list` within the same collection)
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>None</code></td>
</tr>
<tr>
<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>
???+ note
`custom` cannot be used if more than one builder is being used for the collection (such as `imdb_list` and `trakt_list` within the same collection)
| | |
|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Default Value | `None` |
| 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 |
<sup>1</sup> `plex_search` sort options can be found [here](plex.md#sort-options)
## Minimum Items
Set the minimum number of items that must be found in order to build or update a collection/playlist.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>1</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>any integer</td>
</tr>
</table>
| | |
|---|---|
| Default Value | 1 |
| Allowed Values | any integer |
## Delete Below Minimum
When a collection is run, delete the collection if it is below the minimum number specified by `minimum_items`.
* Relies on `minimum_items` being set to the desired integer.
???+ note
Relies on `minimum_items` being set to the desired integer.
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
## Delete Not Scheduled
If a collection is skipped due to it not being scheduled, delete the collection.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Run Again Delay
@ -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.
* 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.
| | |
|---|---|
| Default Value | 1 |
| Allowed Values | any integer |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>1</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>any integer</td>
</tr>
</table>
## Missing Only Released
Whilst running a collection, all unreleased missing items will be filtered out from the [missing YAML file](../builders/details/definition.md)
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Show Unmanaged Collections
List all collections not managed by Plex Meta Manager at the end of each run.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>true</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | true |
| Allowed Values | `true` or `false` |
## Show Filtered
List all items which have been filtered out of a collection (i.e. if it doesn't meet the filter criteria)
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Show Options
While `show_options` is true the available options for an attribute when using `plex_search`, `smart_filter` or `filters` will be shown.
i.e. a `smart_filter` on the `genre` attribute will return all of the attributes within the specified library.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Show Missing
While `show_missing` is true items missing from collections will be displayed.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>true</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | true |
| Allowed Values | `true` or `false` |
## Only Filter Missing
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
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
## Show Missing Assets
Display missing asset warnings
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>true</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | true |
| Allowed Values | `true` or `false` |
## Save Report
Save a report of the items added, removed, filtered, or missing from collections to a YAML file in the same directory as your Metadata file.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>true</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
| | |
|---|---|
| Default Value | true |
| Allowed Values | `true` or `false` |
## TVDb Language
Specify the language to query TVDb in.
* If no language is specified or the specified language is not found then the original language is used.
???+ note
If no language is specified or the specified language is not found then the original language is used.
| | |
|---|---|
| Default Value | None |
| Allowed Values | Any ISO 639-2 Language Code1 |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>None</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>Any ISO 639-2 Language Code<sup>1</sup></td>
</tr>
</table>
<sup>1</sup> Language Codes can be found [here](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes)
@ -517,145 +376,116 @@ Specify the language to query TVDb in.
Set a list or comma-separated string of TMDb/TVDb IDs to ignore in all collections.
* this does not apply to `smart_filter` Collections
???+ note
this does not apply to `smart_filter` Collections
| | |
|---|---|
| Default Value | None |
| Allowed Values | List or comma-separated string of TMDb/TVDb IDs |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>None</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>List or comma-separated string of TMDb/TVDb IDs</td>
</tr>
</table>
## Ignore IMDb IDs
Set a list or comma-separated string of IMDb IDs to ignore in all collections.
* this does not apply to `smart_filter` Collections
???+ note
this does not apply to `smart_filter` Collections
| | |
|---|---|
| Default Value | None |
| Allowed Values | List or comma-separated string of IMDb IDs |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>None</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>List or comma-separated string of IMDb IDs</td>
</tr>
</table>
## Item Refresh Delay
Specify the amount of time to wait between each `item_refresh` of every movie/show in a collection/playlist.
* Useful if your Plex Media Server is having issues with high request levels.
???+ note
Useful if your Plex Media Server is having issues with high request levels.
| | |
|---|---|
| Default Value | 0 |
| Allowed Values | any integer |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>0</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>any integer</td>
</tr>
</table>
## Playlist Sync to Users
Set the default playlist `sync_to_users`. To Sync a playlist to only yourself leave `playlist_sync_to_users` blank.
* sharing playlists with other users will not share any posters associated with the playlist, this is a Plex limitation.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>all</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>all</code>, list of users, or comma-separated string of users</td>
</tr>
</table>
???+ note
sharing playlists with other users will not share any posters associated with the playlist, this is a Plex limitation.
| | |
|---|---|
| Default Value | all |
| Allowed Values | all, list of users, or comma-separated string of users |
## Playlist Exclude Users
Set the default playlist `exclude_users`.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code> </code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>list of users or comma-separated string of users</td>
</tr>
</table>
| | |
|---|---|
| Default Value | |
| Allowed Values | list of users or comma-separated string of users |
# Playlist Report
Set `playlist_report` to true to print out a playlist report at the end of the log.
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</tr>
</table>
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |
## Custom Repo
Specify where the `repo` attribute's base is when defining `metadata_path`, `playlist_file` and `overlay_path`.
* Ensure you are using the raw GitHub link (i.e. https://github.com/meisnate12/Plex-Meta-Manager-Configs/tree/master/meisnate12 )
???+ note
Ensure you are using the raw GitHub link (i.e. https://github.com/meisnate12/Plex-Meta-Manager-Configs/tree/master/meisnate12 )
| | |
|---|---|
| Default Value | None |
| Allowed Values | link to base repository |
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>None</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td>link to base repository</td>
</tr>
</table>
## Verify SSL
Turn SSL Verification on or off.
* set to false if your log file shows any errors similar to "SSL: CERTIFICATE_VERIFY_FAILED"
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>true</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
???+ note
set to false if your log file shows any errors similar to "SSL: CERTIFICATE_VERIFY_FAILED"
| | |
|---|---|
| Default Value | true |
| Allowed Values | `true` or `false` |
## Check Nightly
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.
* It is recommended to set this to `true` if you primarily use the `nightly` branch
<table class="dualTable colwidths-auto align-default table">
<tr>
<th>Default Value</th>
<td><code>false</code></td>
</tr>
<tr>
<th>Allowed Values</th>
<td><code>true</code> or <code>false</code>
</td>
</tr>
</table>
???+ note
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.
It is recommended to set this to `true` if you primarily use the `nightly` branch
| | |
|---|---|
| Default Value | false |
| Allowed Values | `true` or `false` |

@ -6,7 +6,9 @@ search:
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.
@ -55,9 +57,11 @@ sonarr:
| `plex_path` | When using `add_existing` or `sonarr_add_all` Convert this part of the path to `sonarr_path`. | ` ` | &#10060; |
| `sonarr_path` | When using `add_existing` or `sonarr_add_all` Convert the `plex_path` part of the path to this. | ` ` | &#10060; |
* 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.

@ -17,9 +17,11 @@ tautulli:
| `url` | Tautulli URL<br>**Example:** http://192.168.1.12:8659 | N/A | :fontawesome-solid-circle-check:{ .green } |
| `apikey` | Tautulli API Key | N/A | :fontawesome-solid-circle-check:{ .green } |
* The apikey can be found by going to Tautulli > Settings > Web Interface > API > API Key
???+ tip
The apikey can be found by going to Tautulli > Settings > Web Interface > API > API Key
# Other examples:
# Other examples
Specifying a second Tautulli instance for a specific library:

@ -31,18 +31,22 @@ trakt:
* 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:
1. [Click here to create a Trakt API application.](https://trakt.tv/oauth/applications/new)
2. Enter a `Name` for the application.
3. Enter `urn:ietf:wg:oauth:2.0:oob` for `Redirect uri`.
4. Click the `SAVE APP` button.
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
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.
3. Enter `urn:ietf:wg:oauth:2.0:oob` for `Redirect uri`.
4. Click the `SAVE APP` button.
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)
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.
## Online Authorization Script

@ -41,8 +41,8 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:---------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `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_<<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` | **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 than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<table class="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:**<table class="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:**<table class="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> |

@ -39,11 +39,11 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:----------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `limit` | **Description:** Changes the Smart Filter Limit for all collections in a Defaults file.<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 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 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_<<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.<table class="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.<table class="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.

@ -44,8 +44,8 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:---------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `10`<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 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 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_<<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) |

@ -42,8 +42,8 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:---------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<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 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 than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<table class="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:**<table class="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:**<table class="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> |

@ -43,7 +43,7 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:---------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `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:**<table class="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:**<table class="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:**<table class="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> |

@ -41,10 +41,10 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:---------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `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_<<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_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_<<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_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 than 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 than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<table class="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:**<table class="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:**<table class="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> |

@ -44,8 +44,8 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:---------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<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 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 than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<table class="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:**<table class="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:**<table class="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> |

@ -44,8 +44,8 @@ All [Shared Collection Variables](../collection_variables.md) are available as w
| Variable | Description & Values |
|:---------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `limit` | **Description:** Changes the Builder Limit for all collections in a Defaults file.<br>**Default:** `100`<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 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 than 0 |
| `sync_mode` | **Description:** Changes the Sync Mode for all collections in a Defaults file.<br>**Default:** `sync`<br>**Values:**<table class="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:**<table class="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:**<table class="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> |

@ -37,6 +37,7 @@ These collections are applied by calling the below paths into the `metadata_path
| [Other Charts](chart/other.md) | `other_chart` | AniDB Popular, Common Sense Selection | &#9989; | &#9989; |
<sup>1</sup> Requires [Trakt Authentication](../config/trakt.md)
<sup>2</sup> Requires [Tautulli Authentication](../config/tautulli.md)
### Content Collections

@ -39,8 +39,9 @@ These overlays are applied by calling the below paths into the `overlay_path` [s
| [Versions](overlays/versions.md) | `versions` | Multiple Versions logo | &#9989; | &#9989; | &#9989; | &#9989; |
| [Video Format](overlays/video_format.md)<sup>1</sup> | `video_format` | "REMUX", "HDTV" | &#9989; | &#10071; | &#10071; | &#9989; |
<sup>1</sup> Designed for [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>1</sup> Designed to use the [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
### Production Overlays

@ -35,7 +35,6 @@ libraries:
Movies:
overlay_path:
- remove_overlays: false
- reapply_overlays: true
- pmm: resolution # 1, 4
- pmm: audio_codec # 2
- pmm: mediastinger # 3
@ -81,7 +80,6 @@ libraries:
TV Shows:
overlay_path:
- remove_overlays: false
- reapply_overlays: true
- pmm: resolution # 1
- pmm: audio_codec # 2
- pmm: mediastinger # 3
@ -124,7 +122,6 @@ libraries:
TV Shows:
overlay_path:
- remove_overlays: false
- reapply_overlays: true
- pmm: resolution # 1
template_variables:
builder_level: season
@ -150,7 +147,6 @@ libraries:
TV Shows:
overlay_path:
- remove_overlays: false
- reapply_overlays: true
- pmm: resolution # 1
template_variables:
builder_level: episode

@ -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 |
| `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_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` |
| `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` |
| `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` |
1. Each default overlay has a `key` that when calling to effect a specific overlay you must replace `<<key>>` with when calling.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -44,7 +44,7 @@ There are multiple types of attributes that can be utilized within a collection:
* [Builders](builders.md)
* [Settings/Updates](update.md)
* [Filters]filters.md)
* [Filters](filters.md)
### Example

@ -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).**
**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**
@ -42,7 +44,7 @@ There are multiple types of attributes that can be utilized within an overlay:
* [Builders](builders.md)
* [Settings/Updates](update.md)
* [Filters]filters.md)
* [Filters](filters.md)
## 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.
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.
@ -40,7 +42,7 @@ There are multiple types of attributes that can be utilized within a playlist:
* [Builders](builders.md)
* [Settings/Updates](update.md)
* [Filters]filters.md)
* [Filters](filters.md)
### Special Playlist Attributes

@ -84,7 +84,7 @@ collections:
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.

@ -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.
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
@ -73,11 +73,11 @@ Specify the location of the configuration YAML file.
!!! example
=== "Local Environment"
```
python plex_meta_manager.py --config <path_to_config>
python plex_meta_manager.py --config /data/config.yml
```
=== "Docker Environment"
```
docker run -it -v "X:\Media\Plex Meta Manager\config:/config:rw" meisnate12/plex-meta-manager --config <path_to_config>
docker run -it -v "X:\Media\Plex Meta Manager\config:/config:rw" meisnate12/plex-meta-manager --config /data/config.yml
```
### Time to Run
@ -140,6 +140,22 @@ Perform a debug test run immediately, bypassing the time to run flag. This will
```
docker run -it -v "X:\Media\Plex Meta Manager\config:/config:rw" meisnate12/plex-meta-manager --run-tests
```
=== "Example Collection File"
In my collection YAML file, I would set `true: false` like this:
```yaml
collections:
Marvel Cinematic Universe:
test: true # HERE
trakt_list: https://trakt.tv/users/jawann2002/lists/marvel-cinematic-universe-movies?sort=rank,asc
smart_label: release.desc
```
collections:
Marvel Cinematic Universe:
trakt_list: https://trakt.tv/users/jawann2002/lists/marvel-cinematic-universe-movies?sort=rank,asc
smart_label: release.desc
### Debug
@ -298,11 +314,11 @@ Only run library overlays skipping collections/metadata, playlists, and operatio
Perform a collections run immediately to run only the pre-defined collections, bypassing the time to run flag.
| | Shell Command | Environment Variable |
|:--------|:------------------------------------------------|:----------------------|
| Flags | `-rc` or `--run-collections` | `PMM_RUN_COLLECTIONS` |
| Example | `--run-collections "Harry Potter\ | Star Wars"` |`PMM_COLLECTIONS=Harry Potter\|Star Wars`|
| Values | Pipe-separated list of Collection Names to run |
| | Shell Command | Environment Variable |
|:--------|:--------------------------------------------------|:---------------------------------------------|
| Flags | `-rc` or `--run-collections` | `PMM_RUN_COLLECTIONS` |
| Example | --run-collections "Harry Potter&#124;Star Wars" | PMM_COLLECTIONS=Harry Potter&#124;Star Wars |
| Values | Pipe-separated list of Collection Names to run |
!!! example
=== "Local Environment"
@ -318,43 +334,47 @@ Perform a collections run immediately to run only the pre-defined collections, b
Perform a libraries run immediately to run only the pre-defined libraries, bypassing the time to run flag.
| | Shell Command | Environment Variable |
|:--------|:--------------------------------------------|:---------------------|
| Flags | `-rl` or `--run-libraries` | `PMM_RUN_LIBRARIES` |
| Example | `--run-libraries "Movies - 4K\ | TV Shows - 4K"` |`PMM_LIBRARIES=Movies - 4K\|TV Shows - 4K`|
| Values | Pipe-separated list of Library Names to run |
| | Shell Command | Environment Variable |
|:--------|:--------------------------------------------------|:-----------------------------------------------|
| Flags | `-rl` or `--run-libraries` | `PMM_RUN_LIBRARIES` |
| Example | --run-libraries "Movies - 4K&#124;TV Shows - 4K" | PMM_LIBRARIES=Movies - 4K&#124;TV Shows - 4K` |
| Values | Pipe-separated list of Library Names to run |
!!! example
=== "Local Environment"
```
python plex_meta_manager.py --run-libraries "TV Shows"
python plex_meta_manager.py --run-libraries "Movies - 4K|TV Shows - 4K"
```
=== "Docker Environment"
```
docker run -it -v "X:\Media\Plex Meta Manager\config:/config:rw" meisnate12/plex-meta-manager --run-libraries "TV Shows"
docker run -it -v "X:\Media\Plex Meta Manager\config:/config:rw" meisnate12/plex-meta-manager --run-libraries "Movies - 4K|TV Shows - 4K"
```
### Run Metadata Files
Perform a metadata files run immediately to run only the pre-defined metadata files, bypassing the time to run flag.
| | Shell Command | Environment Variable |
|:-----------------|:-------------------------------------------------|:-------------------------|
| Flags | `-rm` or `--run-metadata-files` | `PMM_RUN_METADATA_FILES` |
| Example | `--run-metadata-files "Movies.yml\ | MovieCharts"` |`PMM_METADATA_FILES=Movies.yml\|MovieCharts`|
| Available Values | Pipe-separated list of Metadata Filenames to run |
???+ warning
Do not use this to run Overlay files, as Overlay files must run all together or not at all due to their nature.
| | Shell Command | Environment Variable |
|:-----------------|:--------------------------------------------------------|:-----------------------------------------------|
| Flags | `-rm` or `--run-metadata-files` | `PMM_RUN_METADATA_FILES` |
| Example | --run-metadata-files "Movies.yml&#124;MovieCharts" | PMM_METADATA_FILES=Movies.yml&#124;MovieCharts |
| Available Values | Pipe-separated list of Metadata Filenames to run |
* This works for all different metadata paths i.e. `git`, `url`, `file`, or `repo`.
* This works for all different metadata paths i.e. `pmm`, `git`, `url`, `file`, or `repo`.
!!! example
=== "Local Environment"
```
python plex_meta_manager.py --run-metadata-files "Movies"
python plex_meta_manager.py --run-metadata-files "Movies.yml|seasonal|genre"
```
=== "Docker Environment"
```
docker run -it -v "X:\Media\Plex Meta Manager\config:/config:rw" meisnate12/plex-meta-manager --run-metadata-files "Movies"
docker run -it -v "X:\Media\Plex Meta Manager\config:/config:rw" meisnate12/plex-meta-manager --run-metadata-files "Movies.yml|seasonal|genre"
```
### Libraries First
@ -421,6 +441,10 @@ Ignore all ghost logging for the run. A ghost log is what's printed to the conso
Delete all collections in a Library prior to running collections/operations.
???+ warning
You will lose **all** collections in the library - this will delete all collections, including ones not created or maintained by Plex Meta Manager.
| | Shell Command | Environment Variable |
|:---------|:--------------------------------|:-------------------------------|
| 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.
???+ 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.
| | Shell Command | Environment Variable |
|:---------|:---------------------------|:--------------------------|
| Flags | `-dl` or `--delete-labels` | `PMM_DELETE_LABELS` |
@ -498,10 +530,10 @@ Run without displaying a countdown to the next scheduled run.
Run without utilizing the missing movie/show functions.
| | Shell Command | Environment Variable |
|:--------|:---------------------------|:------------------------|
| Flags | `-nc` or `--no-countdown` | `PMM_NO_COUNTDOWN` |
| Example | `--no-countdown` | `PMM_NO_COUNTDOWN=true` |
| | Shell Command | Environment Variable |
|:--------|:------------------------|:-----------------------|
| Flags | `-nm` or `--no-missing` | `PMM_NO_MISSING` |
| Example | `--no-missing` | `PMM_NO_MISSING=true` |
!!! example
=== "Local Environment"

@ -4,7 +4,9 @@ search:
---
# Frequently Asked Questions & Knowledgebase
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).
## Frequently Asked Questions

@ -102,7 +102,9 @@ 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`
* 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:
![](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.
* `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.
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.
* 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.
![](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)
* 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:
![](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`
* `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.
When the above is run you should get:
![](ratings/ratings-10.png)

@ -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 } |
| 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>&#124;</code>) list.<br>**Shell Command:** `-it` or <code>--items "Mad Max&#124;Mad Max 2"</code><br>**Environment Variable:** <code>ITEMS=Mad Max&#124;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 } |
| Flat Assets | PMM Asset Folder uses [Flat Assets Image Paths](../../install/guides/assets.md#asset-naming).<br>**Shell Command:** `-f` or `--flat`<br>**Environment Variable:** `PMM_FLAT=True` | :fontawesome-solid-circle-xmark:{ .red } |
| Reset Season Posters | Restore Season posters during run.<br>**Shell Command:** `-s` or `--season`<br>**Environment Variable:** `SEASON=True` | :fontawesome-solid-circle-xmark:{ .red } |

@ -2,22 +2,24 @@
This article will walk you through getting Plex-Meta-Manager [PMM] set up and running. It will cover:
1. Retrieving the PMM code
2. Installing requirements
3. Setting up the initial config file
4. Setting up a metadata file and creating a couple sample collections.
1. Retrieving the PMM code
2. Installing requirements
3. Setting up the initial config file
4. Setting up a metadata file and creating a couple sample collections.
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
3. Use `git` to retrieve the code
4. Install requirements [extra bits of code required for PMM]
5. Gather two things that the script requires:
1. TMDb API Key
2. Plex URL and Token
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.
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
3. Use `git` to retrieve the code
4. Install requirements [extra bits of code required for PMM]
5. Gather two things that the script requires:
1. TMDb API Key
2. Plex URL and Token
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.
@ -35,15 +37,17 @@ something like this
Thats a command youre 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:
This walkthrough is going to be pretty pedantic. Im assuming youre reading it because you have no idea how to get a Python script going, so Im proceeding from the assumption that you want to be walked through every little detail. Youre 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 whats happening. If I only give you the happy path, then when you make a typo later on youll have no idea where that typo might be or why its breaking things.
???+ warning ""
This walkthrough is going to be pretty pedantic. Im assuming youre reading it because you have no idea how to get a Python script going, so Im proceeding from the assumption that you want to be walked through every little detail. Youre 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 whats happening. If I only give you the happy path, then when you make a typo later on youll have no idea where that typo might be or why its 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.
### Prepare a small test library [optional]

@ -53,8 +53,11 @@ libraries:
```
* `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.
* `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.
</details>
@ -102,6 +105,8 @@ libraries:
* `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>
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.
* `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>
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.
* 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>
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)
* 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>
When the above is run you should get:
@ -263,8 +275,11 @@ libraries:
```
* `rating1_image` was changed to `trakt` from `rt_score`
* `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.
</details>
When the above is run you should get:

@ -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
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**
* [unRAID Walkthrough](guides/unraid.md)
@ -70,11 +71,13 @@ python plex_meta_manager.py
```shell
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.
* 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"`
- 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.
* 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"`
Example Docker Run command:

@ -58,9 +58,8 @@
}
[data-md-color-scheme="slate"] .md-typeset code {
background-color: hsl(225deg 17.25% 6.84%);
background-color: hsl(225deg 8.87% 10.98%);
}
@media only screen and (min-width: 76.25em) {
.md-main__inner {
max-width: 80%;

@ -86,6 +86,7 @@ markdown_extensions:
- tables
- toc:
permalink: true
toc_depth: 3
- pymdownx.emoji:
emoji_generator: !!python/name:material.extensions.emoji.to_svg
emoji_index: !!python/name:material.extensions.emoji.twemoji
@ -381,43 +382,42 @@ nav:
- MyAnimeList ID: builders/myanimelist/#myanimelist-id
- MyAnimeList UserList: builders/myanimelist/#myanimelist-userlist
- MyAnimeList Seasonal: builders/myanimelist/#myanimelist-seasonal
- "DYNAMIC COLLECTIONS":
- DYNAMIC COLLECTIONS:
- Overview: metadata/dynamic.md
- Dynamic Collection Builders:
- TMDb Dynamic Collections:
- TMDb Collection: metadata/dynamic/#tmdb-collection
- TMDb Popular People: metadata/dynamic/#tmdb-popular-people
- Original Language: metadata/dynamic/#original-language
- Origin Country: metadata/dynamic/#origin-country
- Trakt Dynamic Collections:
- Trakt User Lists: metadata/dynamic/#trakt-user-lists
- Trakt Liked Lists: metadata/dynamic/#trakt-liked-lists
- Trakt People Lists: metadata/dynamic/#trakt-people-lists
- Plex Dynamic Collections:
- Actor: metadata/dynamic/#actor
- Director: metadata/dynamic/#director
- Writer: metadata/dynamic/#writer
- Producer: metadata/dynamic/#producer
- Genre: metadata/dynamic/#genre
- Album Genre: metadata/dynamic/#album-genre
- Content Rating: metadata/dynamic/#content-rating
- Year: metadata/dynamic/#year
- Decade: metadata/dynamic/#decade
- Country: metadata/dynamic/#country
- Resolution: metadata/dynamic/#resolution
- Subtitle Language: metadata/dynamic/#subtitle-language
- Audio Language: metadata/dynamic/#audio-language
- Studio: metadata/dynamic/#studio
- Edition: metadata/dynamic/#edition
- Network: metadata/dynamic/#network
- Mood: metadata/dynamic/#mood
- Album Mood: metadata/dynamic/#album-mood
- Track Mood: metadata/dynamic/#track-mood
- Style: metadata/dynamic/#style
- Album Style: metadata/dynamic/#album-style
- Other Dynamic Collections:
- Number: metadata/dynamic/#number
- Custom: metadata/dynamic/#custom
- TMDb Dynamic Collections:
- TMDb Collection: metadata/dynamic_types/#tmdb-collection
- TMDb Popular People: metadata/dynamic_types/#tmdb-popular-people
- Original Language: metadata/dynamic_types/#original-language
- Origin Country: metadata/dynamic_types/#origin-country
- Trakt Dynamic Collections:
- Trakt User Lists: metadata/dynamic_types/#trakt-user-lists
- Trakt Liked Lists: metadata/dynamic_types/#trakt-liked-lists
- Trakt People Lists: metadata/dynamic_types/#trakt-people-lists
- Plex Dynamic Collections:
- Actor: metadata/dynamic_types/#actor
- Director: metadata/dynamic_types/#director
- Writer: metadata/dynamic_types/#writer
- Producer: metadata/dynamic_types/#producer
- Genre: metadata/dynamic_types/#genre
- Album Genre: metadata/dynamic_types/#album-genre
- Content Rating: metadata/dynamic_types/#content-rating
- Year: metadata/dynamic_types/#year
- Decade: metadata/dynamic_types/#decade
- Country: metadata/dynamic_types/#country
- Resolution: metadata/dynamic_types/#resolution
- Subtitle Language: metadata/dynamic_types/#subtitle-language
- Audio Language: metadata/dynamic_types/#audio-language
- Studio: metadata/dynamic_types/#studio
- Edition: metadata/dynamic_types/#edition
- Network: metadata/dynamic_types/#network
- Mood: metadata/dynamic_types/#mood
- Album Mood: metadata/dynamic_types/#album-mood
- Track Mood: metadata/dynamic_types/#track-mood
- Style: metadata/dynamic_types/#style
- Album Style: metadata/dynamic_types/#album-style
- Other Dynamic Collections:
- Number: metadata/dynamic_types/#number
- Custom: metadata/dynamic_types/#custom
- SETTINGS & UPDATES:
- Overview: metadata/update.md
- Settings:

Loading…
Cancel
Save