You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Plex-Meta-Manager/docs/metadata/dynamic.md

39 KiB

Dynamic Collections

Plex Meta Manager can dynamically create collections based on different criteria, such as

  • Collections based on the Collections from TMDb for every item in the library. (Star Wars, Harry Potter, etc...)
  • Collections based on each of a Users Trakt Lists
  • Collections for the top X popular people on TMDb (Bruce Willis, Tom Hanks, etc...)
  • Collections for each decade represented in the library (Best of 1990s, Best of 2000s, etc...)
  • Collections for each of the moods/styles within a Music library (A Cappella, Pop Rock, etc...)

The main purpose of dynamic collections is to automate the creation of collections which would otherwise require considerable user input and repetition (such as creating a collection for every genre).

Each dynamic collection must have a mapping name (just like standard collections), which is also attached to the collection as a label to mark it as having been created by this dynamic collection.

This example will create a collection for every TMDb Collection associated with items in the library.

dynamic_collections:
  TMDb Collections:          # This name is the mapping name
    type: tmdb_collections
    remove_suffix: "Collection"

Collection Naming

By default, the collections generated will be named for the thing being used to create them; things like genres, countries, actors or even Trakt List Names.

There are many attributes that can change the titles, including title_format, remove_suffix, remove_prefix, pre_format_override, and post_format_override all detailed below.

Dynamic Keys & Titles

A dynamic key or key for short is used to refer to a specific value/result from the dynamic collection criteria that will be used to create the collection.

A title in this case is the name that replaces <<title>> in title_format to create the collection titles for each key.

An example of some keys that would be generated from a genre dynamic collection are; "Animation", "Horror" and "Comedy"

Example Key Usage

Keys can be used for a number of purposes, examples can be found throughout this page. A few examples are shown below:

  • Excluding the "Horror" key from the Genre dynamic collection definition
dynamic_collections:
  Genres:         # mapping name does not matter, just needs to be unique
    type: genre
    exclude:
      - Horror
  • Using the pre_format_override attribute to change the formatting of "France" to "French" so that a collection can be named "French Cinema" instead of simply "France"
    • This particular example also uses the title_format attribute to manipulate the naming convention of the collections.
dynamic_collections:
  Countries:         # mapping name does not matter, just needs to be unique
    type: country
    title_format: <<country>> Cinema
    pre_format_override:
      France: French
  • Using the addons attribute to combine multiple keys, i.e. merging "MTV", "MTV2", "MTV3" and "MTV (UK)" into one "MTV Worldwide" collection.
    • When doing this, individual collections will not be created for the individual MTV collections, instead they will be merged within the "MTV Worldwide" collection.
dynamic_collections:
  networks:
    type: network
    addons:
      MTV Worldwide:
        - MTV
        - MTV2
        - MTV3
        - MTV (UK)

Attributes

Attribute Description Required
type Type of Dynamic Collection to be created.
data Data to determine how dynamic collections with a certain type are created. Depends on type
exclude Exclude this list of keys from being created into collections.
addons Defines how multiple keys can be combined under a parent key.
template Name of the template to use for these dynamic collections.
template_variables Defines how template variables can be defined by key.
remove_suffix Removes the defined suffixes from the key before it's used in the collection title.
remove_prefix Removes the defined prefixes from the key before it's used in the collection title.
title_format This is the format for the collection titles.
pre_format_override Defines how titles can be overridden before they are formatted into collection titles.
post_format_override Defines how collection titles can be overridden ignoring title formatting.
test Will add test: true to all collections for test runs.
sync Will remove dynamic collections that are no longer in the creation list.
include Define a list of keys to be made into collections.
other_name Used in combination with include. When defined, all keys not in include or addons will be combined into this collection.

Type & Data

Specifies the type of dynamic collection to be created.

Depending on the type of dynamic collection, data is used to specify the options that are required to fulfill the requirements of creating the collection.

Type Option Description Uses
data
Movies Shows Music Video
tmdb_collection Create a collection for each TMDb Collection associated with an item in the library
tmdb_popular_people Create a collection for each actor found on TMDb's Popular People List
original_language Create a collection for each TMDb original language associated with an item in the library
trakt_user_lists Create a collection for each list from specific trakt users
trakt_liked_lists Create a collection for each list the authenticated trakt user likes
trakt_people_list Create a collection for each actor found in the trakt list
actor Create a collection for each actor found in the library
director Create a collection for each director found in the library
writer Create a collection for each writer found in the library
producer Create a collection for each producer found in the library
genre Create a collection for each genre found in the library
year Create a collection for each year found in the library
decade Create a collection for each decade found in the library
country Create a collection for each country found in the library
network Create a collection for each network found in the library
mood Create a collection for each mood found in the library
style Create a collection for each style found in the library

TMDb Collection

Create collections based on the TMDb Collections associated with items in the library.

type Option tmdb_collection
data Value Not Used
Keys TMDb Collection ID
Titles TMDb Collection Title
Default title_format <<title>>
Default Template
default_template:
  tmdb_collection_details: <<tmdb_collection>>

Example: Create collection for every TMDb Collection found in the library.

dynamic_collections:
  TMDb Collections:          # This name is the mapping name
    type: tmdb_collections
    remove_suffix: Collection
    remove_prefix: The

Create collections based on each actor found on TMDb's Popular People List.

type Option tmdb_popular_people
data Value Number greater then 0
Keys TMDb Person ID
Titles TMDb Person Name
Default title_format <<title>>
Default Template
default_template:
  tmdb_person: <<tmdb_popular_people>>
  plex_search:
    all:
      actor: tmdb
dynamic_collections:
  TMDb Popular People:          # This name is the mapping name
    type: tmdb_popular_people
    data: 10

Original Language

Create collections based on the TMDb original language associated with items in the library.

type Option original_language
data Value Not Used
Keys ISO 639-1 Code
Titles ISO Language Name
Default title_format <<title>> <<library_type>>s
Default Template
default_template:
  plex_all: true
  filters:
    original_language: <<original_language>>

Example: Create collection for every TMDb Original Language found in the library.

dynamic_collections:
  TMDb Languages:          # This name is the mapping name
    type: original_language

Trakt User Lists

Create collections for each of the Trakt lists for the specified users. Use me to reference the authenticated user.

type Option trakt_user_lists
data Value List of Trakt Users
Keys Trakt List URL
Titles Trakt List Title
Default title_format <<title>>
Default Template
default_template:
  trakt_list_details: <<trakt_user_lists>>

Example: Create collections for each of the lists that the users have created

dynamic_collections:
  Trakt User Lists:          # This name is the mapping name
    type: trakt_user_lists
    data:
     - me
     - yozoraxcii

Trakt Liked Lists

Create collections for each of the Trakt lists that the authenticated user has liked.

type Option trakt_liked_lists
data Value Not Used
Keys Trakt List URL
Titles Trakt List Title
Default title_format <<title>>
Default Template
default_template:
  trakt_list_details: <<trakt_liked_lists>>

Example: Create collections for each of the lists that the user has liked within Trakt

dynamic_collections:
  Trakt Liked Lists:          # This name is the mapping name
    type: trakt_liked_lists

Trakt People Lists

Create collections for each of the people found within Trakt lists that the user specifies.

type Option trakt_user_lists
data Value List of Trakt URLs
Keys TMDb Person ID
Titles TMDb Person Name
Default title_format <<title>>
Default Template
default_template:
  tmdb_person: <<trakt_people_list>>
  plex_search:
    all:
      actor: tmdb

Example: Create a collection for each of the people on the trakt list

dynamic_collections:
  Trakt User Lists:
    type: trakt_people_lists
    data:
     - https://trakt.tv/users/ash9001/lists/all-time-top-actors

Actor

Create a collection for each actor found in the library.

type Option actor
data Values
Attribute Description & Values
depth Values: Number greater then 0 Default: 3
minimum Values: Number greater then 0 Default: 3
limit Values: Number greater then 0 Default: None
Keys TMDb Person ID
Titles TMDb Person Name
Default title_format <<title>>
Default Template
default_template:
  tmdb_person: <<actor>>
  plex_search:
    all:
      actor: tmdb
  • depth determines how many top billed actor per item they are in. (i.e. if they play a cameo role, this is unlikely to be counted)
  • minimum determines the minimum number of times the actor must appear within depth for the collection to be created.
  • limit determines the number of actor collection to max out at. (i.e. if to make collections for the top 25 actors)

Director

Create a collection for each director found in the library.

type Option director
data Values
Attribute Description & Values
depth Values: Number greater then 0 Default: 3
minimum Values: Number greater then 0 Default: 3
limit Values: Number greater then 0 Default: None
Keys TMDb Person ID
Titles TMDb Person Name
Default title_format <<title>>
Default Template
default_template:
  tmdb_person: <<director>>
  plex_search:
    all:
      director: tmdb
  • depth determines how many directors are looked at per item.
  • minimum determines the minimum number of times the director must appear within depth for the collection to be created.
  • limit determines the number of director collection to max out at. (i.e. if to make collections for the top 25 directors)

Writer

Create a collection for each writer found in the library.

type Option writer
data Values
Attribute Description & Values
depth Values: Number greater then 0 Default: 3
minimum Values: Number greater then 0 Default: 3
limit Values: Number greater then 0 Default: None
Keys TMDb Person ID
Titles TMDb Person Name
Default title_format <<title>>
Default Template
default_template:
  tmdb_person: <<writer>>
  plex_search:
    all:
      writer: tmdb
  • depth determines how many writers are looked at per item.
  • minimum determines the minimum number of times the writer must appear within depth for the collection to be created.
  • limit determines the number of writer collection to max out at. (i.e. if to make collections for the top 25 writers)

Producer

Create a collection for each producer found in the library.

type Option producer
data Values
Attribute Description & Values
depth Values: Number greater then 0 Default: 3
minimum Values: Number greater then 0 Default: 3
limit Values: Number greater then 0 Default: None
Keys TMDb Person ID
Titles TMDb Person Name
Default title_format <<title>>
Default Template
default_template:
  tmdb_person: <<producer>>
  plex_search:
    all:
      producer: tmdb
  • depth determines how many producers are looked at per item.
  • minimum determines the minimum number of times the producer must appear within depth for the collection to be created.
  • limit determines the number of producer collection to max out at. (i.e. if to make collections for the top 25 producers)

Example:

  • Create a collection for the top 25 actors who appear in the top 5 billing credits of movies
dynamic_collections:
  Top Actors:         # mapping name does not matter just needs to be unique
    type: actor
    data:
      depth: 5
      limit: 25

Example:

  • Create a collection for actors who appear in the top 5 billing credits of movies
  • Only create the collection if they are in the top 5 billing credits of at least 20 movies
dynamic_collections:
  Actors:         # mapping name does not matter just needs to be unique
    type: actor
    data:
      depth: 5
      minimum: 20

Genre

Create a collection for each genre found in the library.

type Option genre
data Value Not Used
Keys Genre
Titles Genre
Default title_format Top <<title>> <<library_type>>s
Default Template
default_template:
  smart_filter:
    limit: 50
    sort_by: critic_rating.desc
      any:
        genre: <<genre>>

Example:

  • Create dynamic collections based on each genre found in the library (TV and Movies)
  • Amend the template to increase the limit from 50 to 100
  • Exclude the "Talk Show" genre
  • Name the collection Top [Genre] Movies or Top [Genre] Shows
templates:
  genre collection:
    smart_filter:
      limit: 100
      sort_by: critic_rating.desc
      all:
        genre: <<genre>>
dynamic_collections:
  Genres:         # mapping name does not matter just needs to be unique
    type: genre
    exclude:
      - Talk Show
    title_format: Top <<title>> <<library_type>>s
    template: genre collection

Year

Create a collection for each year found in the library.

type Option year
data Value Not Used
Keys Year
Titles Year
Default title_format Best <<library_type>>s of <<title>>
Default Template
default_template:
  smart_filter:
    limit: 50
    sort_by: critic_rating.desc
      any:
        year: <<year>>

Example

  • Create dynamic collections based on each year found in the library (TV and Movies)
  • Use the include attribute to only show collections for years "2020", "2021" and "2022"
  • Name the collection "Best of (year)"
dynamic_collections:
  Years:         # mapping name does not matter just needs to be unique
    type: year
    include:
      - 2020
      - 2021
      - 2022
    title_format: Best of <<title>>

Decade

Create a collection for each decade found in the library

type Option decade
data Value Not Used
Keys Decade
Titles Decade
Default title_format Best <<library_type>>s of <<title>>
Default Template
default_template:
  smart_filter:
    limit: 50
    sort_by: critic_rating.desc
      any:
        decade: <<decade>>

Example:

  • Create a collection for each decade found in the library (TV and Movies)
  • Name the collection Top [Decade] Movies
  • Rename the 2020 collection name to "Top 2020 Movies (so far)"
dynamic_collections:
  Decades:         # mapping name does not matter just needs to be unique
    type: decade
    title_format: Top <<title>> <<library_type>>s
    post_format_override:
      2020: Top 2020 Movies (so far)

Country

Create a collection for each country found in the library

type Option country
data Value Not Used
Keys Country
Titles Country
Default title_format Top <<title>> <<library_type>>s
Default Template
default_template:
  smart_filter:
    limit: 50
    sort_by: critic_rating.desc
      any:
        country: <<country>>

Example:

  • Create a collection for the top movies from each country found in the library
  • Name the collection Top [Country] Cinema
  • The pre_format_override attribute is used here in combination with the title_format to change the collection name from "France" which would be the default title, to "Top French Cinema"
dynamic_collections:
  Countries:         # mapping name does not matter just needs to be unique
    type: country
    title_format: Top <<country>> Cinema
    pre_format_override:
      France: French
      Germany: German
      India: Indian

Network

Create a collection for each network found in the library.

type Option network
data Value Not Used
Keys Network
Titles Network
Default title_format Top <<title>> <<library_type>>s
Default Template
default_template:
  smart_filter:
    limit: 50
    sort_by: critic_rating.desc
      any:
        network: <<network>>

Example:

  • Create a collection for each network found in a TV Shows library
templates:
  network collection:
    smart_filter: 
      sort_by: critic_rating.desc
      all: 
        network: <<network>>
dynamic_collections:
  Networks:         # mapping name does not matter just needs to be unique
    type: network
    title_format: <<title>>
    template: network collection

Mood

Create a collection for each mood found in the library.

type Option mood
data Value Not Used
Keys Mood
Titles Mood
Default title_format Most Played <<title>> <<library_type>>s
Default Template
default_template:
  smart_filter:
    limit: 50
    sort_by: plays.desc
      any:
        artist_mood: <<mood>>

Example:

  • Create a collection for the top 100 items for each mood found in the Music library
  • Name the collection Top [Mood] Tracks
templates:
  mood collection:
    smart_filter:
      limit: 100
      sort_by: plays.desc
      type: tracks
      all:
        track_mood: <<mood>>
dynamic_collections:
  Moods:         # mapping name does not matter just needs to be unique
    type: mood
    title_format: Top <<title>> Tracks
    template: mood collection

Style

Create a collection for each style found in the library.

type Option style
data Value Not Used
Keys Style
Titles Style
Default title_format Most Played <<title>> <<library_type>>s
Default Template
default_template:
  smart_filter:
    limit: 50
    sort_by: plays.desc
      any:
        artist_style: <<style>>

Example:

  • Create a collection for the top 10 albums for each style found in the Music library
  • Name the collection Top [Style] Albums
templates:
  style collection:
    smart_filter:
      limit: 10
      sort_by: plays.desc
      type: albums
      all:
        album_style: <<style>>
dynamic_collections:
  Styles:         # mapping name does not matter just needs to be unique
    type: style
    title_format: Top <<title>> Albums
    template: style collection

Exclude

Exclude this list of keys from being created into collections.

For example when making a genre dynamic collection definition you can exclude "Horror" from having a collection created from the key.

dynamic_collections:
  Genres:         # mapping name does not matter, just needs to be unique
    type: genre
    exclude:
      - Horror

Addons

Defines how multiple keys can be combined under a parent key.

For example, the addons attribute can be used to combine multiple keys, i.e. merging "MTV", "MTV2", "MTV3" and "MTV (UK)" into one "MTV Worldwide" collection.

  • When doing this, individual collections will not be created for the individual MTV collections, instead they will be merged within the "MTV Worldwide" collection.
dynamic_collections:
  networks:
    type: network
    addons:
      MTV Worldwide: 
        - MTV
        - MTV2
        - MTV3
        - MTV (UK)

Template

Name of the template to use for these dynamic collections. Each type has its own default template, but if you want to define and use your own template you can.

For example, the template below removes the limit on the smart_filter so it shows all items in each network

templates:
  network collection:
    smart_filter: 
      sort_by: critic_rating.desc
      all: 
        network: <<network>>
dynamic_collections:
  Networks:         # mapping name does not matter just needs to be unique
    type: network
    title_format: <<title>>
    template: network collection

Template Variables

Defines how template variables can be defined by key.

For example, when using type: tmdb_collections and you want to define a poster url for some collections

templates:
  optional:
    - my_collection_poster
  tmdb_collection_details: <<collection_id>>
  collection_order: release
  url_poster: <<my_collection_poster>>
dynamic_collections:
  TMDb Collections:          # This name is the mapping name
    type: tmdb_collections
    remove_suffix: "Collection"
    template_variables:
      my_collection_poster:
        119: https://www.themoviedb.org/t/p/original/oENY593nKRVL2PnxXsMtlh8izb4.jpg
        531241: https://www.themoviedb.org/t/p/original/nogV4th2P5QWYvQIMiWHj4CFLU9.jpg

Remove Prefix/Suffix

Removes the defined prefixes/suffixes from the key before its used in the collection title.

For example, when using type: tmdb_collections you may not want every collection title to end with Collection

dynamic_collections:
  TMDb Collections:          # This name is the mapping name
    type: tmdb_collections
    remove_suffix: "Collection"

Title Format

This is the format for the collection titles.

there are two special tags you can include in the title_format

  • <<title>> is required and is what will be replaced by the dynamic title
  • <<library_type>> will be replaced with either Movie, Show, or Artist depending on your library type.

Here's an example using title_format.

dynamic_collections:
  Genres:         # mapping name does not matter just needs to be unique
    type: genre
    title_format: Top 50 <<title>> <<library_type>>s

Pre Format Override

Defines how titles can be overridden before they are formatted into collection titles.

This example uses the pre_format_override attribute to change the formatting of "France" to "French" so that a collection can be named "French Cinema" instead of simply "France"

  • This particular example also uses the title_format attribute to manipulate the naming convention of the collections.
dynamic_collections:
  Countries:         # mapping name does not matter, just needs to be unique
    type: country
    title_format: <<country>> Cinema
    pre_format_override:
      France: French

Post Format Override

Defines how collection titles can be overridden ignoring title formatting.

Here's an example using post_format_override that will override the TMDb Star Wars collection which has an TMDb ID of 10 with `Star Wars Universe.

dynamic_collections:
  TMDb Collections:          # mapping name does not matter, just needs to be unique
    type: tmdb_collections
    remove_suffix: "Collection"
    post_format_override:
      10: Star Wars Universe

Test

Will add test: true to all collections for test runs.

Here's an example using test.

dynamic_collections:
  Genres:         # mapping name does not matter just needs to be unique
    type: genre
    test: true

Sync

Will remove dynamic collections that are no longer in the creation list.

The mapping name is added as a label to any collection created using dynamic and because of this when sync is true all collections with that label not found in this run will be deleted.

Here's an example using sync.

dynamic_collections:
  Trakt Liked Lists:          # mapping name does not matter just needs to be unique
    type: trakt_liked_lists
    sync: true

Include

Define a list of keys to be made into collections.

This cannot be used with exclude.

Here's an example using include.

dynamic_collections:
  Genres:         # mapping name does not matter just needs to be unique
    type: genre
    include: 
      - Action
      - Adventure
      - Animation
      - Comedy
      - Family
      - Fantasy
      - Horror
      - Romance
      - Science Fiction
      - War

Other Name

Used in combination with include. When defined, all keys not in include or addons will be combined into this collection.

This is the main reason to use include. It allows a catch all collection for everything not defined in the config file.

Here's an example using other_name.

dynamic_collections:
  Genres:         # mapping name does not matter just needs to be unique
    type: genre
    other_name: Top Other Movies
    include:
      - Action
      - Adventure
      - Animation
      - Comedy
      - Family
      - Fantasy
      - Horror
      - Romance
      - Science Fiction
      - War