This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/tautulli/tautulli](https://github.com/Tautulli/Tautulli) | minor | `v2.15.3` -> `v2.16.0` | --- ### Release Notes <details> <summary>Tautulli/Tautulli (ghcr.io/tautulli/tautulli)</summary> ### [`v2.16.0`](https://github.com/Tautulli/Tautulli/blob/HEAD/CHANGELOG.md#v2160-2025-09-08) [Compare Source](https://github.com/Tautulli/Tautulli/compare/v2.15.3...v2.16.0) - Important Note! - Several security vulnerabilities have been identified in Tautulli versions <=2.15.3 (CVE-2025-58760, CVE-2025-58761, CVE-2025-58762, CVE-2025-58763). Users are strongly encouraged to update to the latest Tautulli version 2.16.x. (Thanks [@​d-xuan](https://github.com/d-xuan)) - UI: - Fix: Update poster click-through overlay to new Plex logo. ([#​2584](https://github.com/Tautulli/Tautulli/issues/2584)) (Thanks [@​TheMeanCanEHdian](https://github.com/TheMeanCanEHdian)) - Other: - Fix: Race condition in image cache directory creation ([#​2580](https://github.com/Tautulli/Tautulli/issues/2580)) (Thanks [@​keithah](https://github.com/keithah)) - Fix: Validate image path in /image and /pms\_image\_proxy endpoints. - Fix: Validate image format in /pms\_image\_proxy endpoint. - Fix: Don't run git command with shell. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xLjMiLCJ1cGRhdGVkSW5WZXIiOiI0MS4xLjMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImltYWdlIl19--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/1403 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
		
			
				
	
	
		
			149 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
tautulli:
 | 
						|
  controllers:
 | 
						|
    main:
 | 
						|
      type: deployment
 | 
						|
      annotations:
 | 
						|
        reloader.stakater.com/auto: "true"
 | 
						|
      replicas: 1
 | 
						|
      strategy: Recreate
 | 
						|
      revisionHistoryLimit: 3
 | 
						|
      containers:
 | 
						|
        main:
 | 
						|
          image:
 | 
						|
            repository: ghcr.io/tautulli/tautulli
 | 
						|
            tag: v2.16.0
 | 
						|
            pullPolicy: IfNotPresent
 | 
						|
          env:
 | 
						|
            - name: PUID
 | 
						|
              value: 1001
 | 
						|
            - name: GUID
 | 
						|
              value: 1001
 | 
						|
            - name: TZ
 | 
						|
              value: US/Central
 | 
						|
          resources:
 | 
						|
            requests:
 | 
						|
              cpu: 10m
 | 
						|
              memory: 128Mi
 | 
						|
  configMaps:
 | 
						|
    scripts:
 | 
						|
      enabled: true
 | 
						|
      data:
 | 
						|
        select_tmdb_poster.py: |
 | 
						|
          #!/usr/bin/env python
 | 
						|
          # -*- coding: utf-8 -*-
 | 
						|
 | 
						|
          '''
 | 
						|
          Description:  Selects the default TMDB poster if no poster is selected
 | 
						|
                        or the current poster is from Gracenote.
 | 
						|
          Author:       /u/SwiftPanda16
 | 
						|
          Requires:     plexapi
 | 
						|
          Usage:
 | 
						|
              * Change the posters for an entire library:
 | 
						|
                  python select_tmdb_poster.py --library "Movies"
 | 
						|
 | 
						|
              * Change the poster for a specific item:
 | 
						|
                  python select_tmdb_poster.py --rating_key 1234
 | 
						|
 | 
						|
              * By default locked posters are skipped. To update locked posters:
 | 
						|
                  python select_tmdb_poster.py --library "Movies" --include_locked
 | 
						|
 | 
						|
          Tautulli script trigger:
 | 
						|
              * Notify on recently added
 | 
						|
          Tautulli script conditions:
 | 
						|
              * Filter which media to select the poster. Examples:
 | 
						|
                  [ Media Type | is | movie ]
 | 
						|
          Tautulli script arguments:
 | 
						|
              * Recently Added:
 | 
						|
                  --rating_key {rating_key}
 | 
						|
          '''
 | 
						|
 | 
						|
          import argparse
 | 
						|
          import os
 | 
						|
          import plexapi.base
 | 
						|
          from plexapi.server import PlexServer
 | 
						|
          plexapi.base.USER_DONT_RELOAD_FOR_KEYS.add('fields')
 | 
						|
 | 
						|
 | 
						|
          # Environmental Variables
 | 
						|
          PLEX_URL = os.getenv('PLEX_URL')
 | 
						|
          PLEX_TOKEN = os.getenv('PLEX_TOKEN')
 | 
						|
 | 
						|
 | 
						|
          def select_tmdb_poster_library(library, include_locked=False):
 | 
						|
              for item in library.all(includeGuids=False):
 | 
						|
                  # Only reload for fields
 | 
						|
                  item.reload(**{k: 0 for k, v in item._INCLUDES.items()})
 | 
						|
                  select_tmdb_poster_item(item, include_locked=include_locked)
 | 
						|
 | 
						|
 | 
						|
          def select_tmdb_poster_item(item, include_locked=False):
 | 
						|
              if item.isLocked('thumb') and not include_locked:  # PlexAPI 4.5.10
 | 
						|
                  print(f"Locked poster for {item.title}. Skipping.")
 | 
						|
                  return
 | 
						|
 | 
						|
              posters = item.posters()
 | 
						|
              selected_poster = next((p for p in posters if p.selected), None)
 | 
						|
 | 
						|
              if selected_poster is None:
 | 
						|
                  print(f"WARNING: No poster selected for {item.title}.")
 | 
						|
              else:
 | 
						|
                  skipping = ' Skipping.' if selected_poster.provider != 'gracenote' else ''
 | 
						|
                  print(f"Poster provider is '{selected_poster.provider}' for {item.title}.{skipping}")
 | 
						|
 | 
						|
              if posters and (selected_poster is None or selected_poster.provider == 'gracenote'):
 | 
						|
                  # Fallback to first poster if no TMDB posters are available
 | 
						|
                  tmdb_poster = next((p for p in posters if p.provider == 'tmdb'), posters[0])
 | 
						|
                  # Selecting the poster automatically locks it
 | 
						|
                  tmdb_poster.select()
 | 
						|
                  print(f"Selected {tmdb_poster.provider} poster for {item.title}.")
 | 
						|
 | 
						|
 | 
						|
          if __name__ == '__main__':
 | 
						|
              parser = argparse.ArgumentParser()
 | 
						|
              parser.add_argument('--rating_key', type=int)
 | 
						|
              parser.add_argument('--library')
 | 
						|
              parser.add_argument('--include_locked', action='store_true')
 | 
						|
              opts = parser.parse_args()
 | 
						|
 | 
						|
              plex = PlexServer(PLEX_URL, PLEX_TOKEN)
 | 
						|
 | 
						|
              if opts.rating_key:
 | 
						|
                  item = plex.fetchItem(opts.rating_key)
 | 
						|
                  select_tmdb_poster_item(item, opts.include_locked)
 | 
						|
              elif opts.library:
 | 
						|
                  library = plex.library.section(opts.library)
 | 
						|
                  select_tmdb_poster_library(library, opts.include_locked)
 | 
						|
              else:
 | 
						|
                  print("No --rating_key or --library specified. Exiting.")
 | 
						|
  service:
 | 
						|
    main:
 | 
						|
      controller: main
 | 
						|
      ports:
 | 
						|
        http:
 | 
						|
          port: 80
 | 
						|
          targetPort: 8181
 | 
						|
          protocol: HTTP
 | 
						|
  persistence:
 | 
						|
    config:
 | 
						|
      forceRename: tautulli-config
 | 
						|
      storageClass: ceph-block
 | 
						|
      accessMode: ReadWriteOnce
 | 
						|
      size: 5Gi
 | 
						|
      retain: true
 | 
						|
      advancedMounts:
 | 
						|
        main:
 | 
						|
          main:
 | 
						|
            - path: /config
 | 
						|
              readOnly: false
 | 
						|
    scripts:
 | 
						|
      enabled: true
 | 
						|
      type: configMap
 | 
						|
      name: tautulli-scripts
 | 
						|
      advancedMounts:
 | 
						|
        main:
 | 
						|
          main:
 | 
						|
            - path: /config/scripts/select_tmdb_poster.py
 | 
						|
              readOnly: true
 | 
						|
              mountPropagation: None
 | 
						|
              subPath: select_tmdb_poster.py
 |