################################################################################## # Version: 2 # Recently added media widget for Homepage dashboard using Tautulli API & LazyLibrarian API # # - This shows the 6 most recently added Plex items from your Movie, Shows and Music library # - Additionally, it will show the 6 most recently added Books, Audiobooks and Magazines from LazyLibrarian # - The date shown in the additionalField is the date the item was added to your library. This can be changed to the release date or episode title or author etc by changing the field # # Note: The custom.css id has changed from tautulli_recent to list ################################################################################## ################################################################################## # Add to services.yaml # # 1. Replace {{HOMEPAGE_VAR_TAUTULLI_IPPORT}} with your Tautulli IP:PORT (on Docker with Tautulli and Homepage on the same network, use tautulli:8181) # 2. Replace {{HOMEPAGE_VAR_TAUTULLI_API_KEY}} with your Tautulli API key (Tautulli > Settings > Web Interface > API) # 3. Change count=6 to whatever you want then add/remove mappings to match. Note mappings start at 0 not 1 # 4. For TV you need to set your section_id in the Tautulli API URL. You can get this using http://{{HOMEPAGE_VAR_TAUTULLI_IPPORT}}/api/v2?apikey={{HOMEPAGE_VAR_TAUTULLI_API_KEY}}&cmd=get_libraries # 5. Replace {{HOMEPAGE_VAR_LAZYLIBRARIAN_API_KEY}} with your LazyLibrarian API key (LazyLibrarian > Config > API Read-Only key) # 6. Replace {{HOMEPAGE_VAR_LAZYLIBRARIAN_IPPORT}} with your LazyLibrarian IP:PORT (on Docker with LazyLbrarian and Homepage on the same network, use lazylibrarian:5299) ################################################################################## - Most Recent: ################################################################################## # Movies ################################################################################## - Movies: icon: mdi-movie id: list widget: type: customapi url: http://{{HOMEPAGE_VAR_TAUTULLI_IPPORT}}/api/v2?apikey={{HOMEPAGE_VAR_TAUTULLI_API_KEY}}&cmd=get_recently_added&count=6&media_type=movie display: list mappings: - field: response: data: recently_added: 0: title additionalField: field: response: data: recently_added: 0: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 1: title color: theme additionalField: field: response: data: recently_added: 1: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 2: title additionalField: field: response: data: recently_added: 2: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 3: title additionalField: field: response: data: recently_added: 3: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 4: title additionalField: field: response: data: recently_added: 4: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 5: title additionalField: field: response: data: recently_added: 5: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme ################################################################################## # TV ################################################################################## - TV: icon: mdi-television id: list widget: type: customapi url: http://{{HOMEPAGE_VAR_TAUTULLI_IPPORT}}/api/v2?apikey={{HOMEPAGE_VAR_TAUTULLI_API_KEY}}&cmd=get_recently_added&count=6&media_type=episode§ion_id=1 display: list mappings: - field: response: data: recently_added: 0: grandparent_title additionalField: field: response: data: recently_added: 0: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 1: grandparent_title additionalField: field: response: data: recently_added: 1: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 2: grandparent_title additionalField: field: response: data: recently_added: 2: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 3: grandparent_title additionalField: field: response: data: recently_added: 3: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 4: grandparent_title additionalField: field: response: data: recently_added: 4: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 5: grandparent_title additionalField: field: response: data: recently_added: 5: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme ################################################################################## # Music ################################################################################## - Music: icon: mdi-music id: list widget: type: customapi url: http://{{HOMEPAGE_VAR_TAUTULLI_IPPORT}}/api/v2?apikey={{HOMEPAGE_VAR_TAUTULLI_API_KEY}}&cmd=get_recently_added&count=6&media_type=artist display: list mappings: - field: response: data: recently_added: 0: title additionalField: field: response: data: recently_added: 0: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 1: title additionalField: field: response: data: recently_added: 1: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 2: title additionalField: field: response: data: recently_added: 2: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 3: title additionalField: field: response: data: recently_added: 3: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 4: title additionalField: field: response: data: recently_added: 4: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: response: data: recently_added: 5: title additionalField: field: response: data: recently_added: 5: added_at scale: 1000 format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme ################################################################################## # Books ################################################################################## - Books: icon: mdi-book id: list widget: type: customapi url: http://{{HOMEPAGE_VAR_LAZYLIBRARIAN_IPPORT}}/api?apikey={{HOMEPAGE_VAR_LAZYLIBRARIAN_API_KEY}}&cmd=getallbooks&limit=6&sort=booklibrary%20desc display: list mappings: - field: 0: BookName additionalField: field: 0: BookLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 1: BookName additionalField: field: 1: BookLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 2: BookName additionalField: field: 2: BookLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 3: BookName additionalField: field: 3: BookLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 4: BookName additionalField: field: 4: BookLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 5: BookName additionalField: field: 5: BookLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme ################################################################################## # Audiobooks ################################################################################## - Audiobooks: icon: mdi-audiobook id: list widget: type: customapi url: http://{{HOMEPAGE_VAR_LAZYLIBRARIAN_IPPORT}}/api?apikey={{HOMEPAGE_VAR_LAZYLIBRARIAN_API_KEY}}&cmd=getallbooks&limit=6&sort=audiolibrary%20desc display: list mappings: - field: 0: BookName additionalField: field: 0: AudioLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 1: BookName additionalField: field: 1: AudioLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 2: BookName additionalField: field: 2: AudioLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 3: BookName additionalField: field: 3: AudioLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 4: BookName additionalField: field: 4: AudioLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 5: BookName additionalField: field: 5: AudioLibrary format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme ################################################################################## # Magazines ################################################################################## - Magazines: icon: mdi-book-open-page-variant-outline id: list widget: type: customapi url: http://{{HOMEPAGE_VAR_LAZYLIBRARIAN_IPPORT}}/api?apikey={{HOMEPAGE_VAR_LAZYLIBRARIAN_API_KEY}}&cmd=getissues&limit=6&sort=issueacquired%20desc display: list mappings: - field: 0: Title additionalField: field: 0: IssueAcquired format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 1: Title additionalField: field: 1: IssueAcquired format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 2: Title additionalField: field: 2: IssueAcquired format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 3: Title additionalField: field: 3: IssueAcquired format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 4: Title additionalField: field: 4: IssueAcquired format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme - field: 5: Title additionalField: field: 5: IssueAcquired format: relativeDate # if date, uncomment dateStyle & timeStyle if required locale: en-GB numeric: auto style: narrow # long, short, narrow # dateStyle: medium # ["full", "long", "medium", "short"] # timeStyle: medium # ["full", "long", "medium", "short"] color: theme ################################################################################## # Add to custom.css ################################################################################## /* Left align text for Recently Added Widget */ /* make sure to set "id: list"*/ #list>div>div.relative.flex.flex-row.w-full.service-container { &>div>div { display: block; &>div.flex.flex-row.text-right { &>div:nth-child(0) { display: none; } &>div:nth-child(1) { text-align: left; margin-left: .5rem; } &>div:nth-child(2) { text-align: right; margin-left: auto; } } } } ################################################################################## # Version: 1 # Plex recently added widget for Homepage dashboard using Tautulli API # This shows the 6 most recently added Plex items from your Movie, Shows and Music library ################################################################################## ################################################################################## # Add to services.yaml # 1. Replace x.x.x.x:xxxx with your Tautulli IP:PORT (on Docker with Tautulli and Homepage on the same network, use tautulli:8181) # 2. Replace xxxxxxxxxx with Tautulli API key (Tautulli > Settings > Web Interface > API) # 3. Change count=6 to whatever you want then add/remove mappings to match ################################################################################## - Activity: - Recent Movies: icon: mdi-movie id: tautulli_recent widget: type: customapi url: http://x.x.x.x:xxxx/api/v2?apikey=xxxxxxxxxx&cmd=get_recently_added&count=6&media_type=movie method: GET display: list mappings: - field: response: data: recently_added: 0: title additionalField: field: response: data: recently_added: 0: year color: theme - field: response: data: recently_added: 1: title color: theme additionalField: field: response: data: recently_added: 1: year color: theme - field: response: data: recently_added: 2: title additionalField: field: response: data: recently_added: 2: year color: theme - field: response: data: recently_added: 3: title additionalField: field: response: data: recently_added: 3: year color: theme - field: response: data: recently_added: 4: title additionalField: field: response: data: recently_added: 4: year color: theme - field: response: data: recently_added: 5: title additionalField: field: response: data: recently_added: 5: year color: theme - Recent Music: icon: mdi-music id: tautulli_recent widget: type: customapi url: http://x.x.x.x:9009/api/v2?apikey=xxxxxxxxxx&cmd=get_recently_added&count=6&media_type=artist method: GET display: list mappings: - field: response: data: recently_added: 0: title additionalField: field: response: data: recently_added: 0: parent_title color: theme - field: response: data: recently_added: 1: title additionalField: field: response: data: recently_added: 1: parent_title color: theme - field: response: data: recently_added: 2: title additionalField: field: response: data: recently_added: 2: parent_title color: theme - field: response: data: recently_added: 3: title additionalField: field: response: data: recently_added: 3: parent_title color: theme - field: response: data: recently_added: 4: title additionalField: field: response: data: recently_added: 4: parent_title color: theme - field: response: data: recently_added: 5: title additionalField: field: response: data: recently_added: 5: parent_title color: theme - Recent TV: icon: mdi-television id: tautulli_recent widget: type: customapi url: http://x.x.x.x:9009/api/v2?apikey=xxxxxxxxxx&cmd=get_recently_added&count=6&media_type=episode§ion_id=1 method: GET display: list mappings: - field: response: data: recently_added: 0: grandparent_title additionalField: field: response: data: recently_added: 0: title color: theme - field: response: data: recently_added: 1: grandparent_title additionalField: field: response: data: recently_added: 1: title color: theme - field: response: data: recently_added: 2: grandparent_title additionalField: field: response: data: recently_added: 2: title color: theme - field: response: data: recently_added: 3: grandparent_title additionalField: field: response: data: recently_added: 3: title color: theme - field: response: data: recently_added: 4: grandparent_title additionalField: field: response: data: recently_added: 4: title color: theme - field: response: data: recently_added: 5: grandparent_title additionalField: field: response: data: recently_added: 5: title color: theme ################################################################################## # Add to custom.css ################################################################################## /* Left align text for Plex Recently Added*/ #tautulli_recent>div>div.relative.flex.flex-row.w-full.service-container { &>div>div { display: block; text-align: right; /* Adjusted to align all elements left */ &>div.flex.flex-row.text-right { &>div:nth-child(1) { text-align: right; /* Adjusted to align left */ margin-left: .5rem; } &>div:nth-child(2) { text-align: right; /* Adjusted to align left */ margin-left: auto; } } } }