<%inherit file="base.html"/> <%! import os import sys import plexpy from plexpy import common, notifiers, newsletters from plexpy.helpers import anon_url, checked docker_setting = 'disabled' if plexpy.DOCKER else '' docker_msg = '(Controlled by Docker Container)' if plexpy.DOCKER else '' available_notification_agents = sorted(notifiers.available_notification_agents(), key=lambda k: k['label'].lower()) available_newsletter_agents = sorted(newsletters.available_newsletter_agents(), key=lambda k: k['label'].lower()) %> <%def name="headIncludes()"> <%def name="headerIncludes()"> <%def name="body()">
% if plexpy.CONFIG.CHECK_DOCKER_MOUNT and plexpy.DOCKER and not plexpy.DOCKER_MOUNT:
The /config volume mount was not configured properly for the Docker container. All data may be cleared when the container is recreated or updated.
% endif
Settings
% if config['show_advanced_settings'] == 1:
% else:
% endif % if config['check_github']:
% endif
% if common.RELEASE:

### Version ${common.RELEASE} Changelog

% endif

### Tautulli News

Loading news...

### Tautulli Configuration

Loading configuration table...

### Tautulli Scheduled Tasks

Loading scheduler table...

### Display Settings

Date Format

Set your preferred date format. Click here to see the parameter list.

Time Format

Set your preferred time format. Click here to see the parameter list.

Week Starting on Monday

Change the "Play by day of week" graph to start on Monday. Default is start on Sunday.

Current Activity in History Tables

Include current activity in the history tables. Statistics will not be counted until the stream has ended.

Calculate Total File Sizes

Enable if you want Tautulli to calculate the total file size for TV Shows/Seasons and Artists/Albums on the media info tables.

Mask Sensitive Information in Logs

Enable to mask passwords, access tokens, and public IP addresses, and email addresses with asterisks (*) in the logs.
Note: Only logs from the time this setting is enabled will be masked. Do not post your logs publically without masking sensitive information!

Mask Usernames in Logs

Enable to mask Plex usernames with asterisks (*) in the logs.
Note: Only logs from the time this setting is enabled will be masked.

### History Logging

Ignore Interval

The interval (in seconds) an item must be in a playing state before logging it. 0 to disable.

Movie Watched Percent

Set the percentage for a movie to be considered as watched. Minimum 50, Maximum 95.

TV Episode Watched Percent

Set the percentage for a TV episode to be considered as watched. Minimum 50, Maximum 95.

Music Listened Percent

Set the percentage for a music track to be considered as listened. Minimum 50, Maximum 95.

Video Watched Completion Behaviour

Decide whether to use end credits markers to determine the 'watched' state of video items. When markers are not available the selected threshold percentage will be used.

Group Play History

Group play history for the same item and user as a single entry when progress is less than the watched percent.

Regroup Play History

Fix grouping of play history in the database.

Flush Temporary Sessions

Attempt to fix history logging by flushing out all of the temporary sessions in the database.
Warning: This will reset all currently active sessions. For emergency use only when history logging is stuck!

### Updates

Check for Tautulli Updates

Enable to check for Tautulli updates.

Update Check Interval

The interval (in hours) Tautulli will check for a new update. Minimum 1, default 6.

% if not plexpy.SNAP and not plexpy.FROZEN:
Update Automatically ${docker_msg | n}

Update Tautulli automatically if an update is available.

% endif
Repeat Tautulli Update Notifications

Enable to allow Tautulli to send repeat update notifications everytime it checks for updates. Disable to only send one notifications for each Tautulli version.

GitHub API Token

Optional: Use your own GitHub API token when checking for updates.

% if plexpy.INSTALL_TYPE == 'git':
Git Remote / Branch ${docker_msg | n}

The git tracking remote and branch (default "origin/master"). Select to switch the git branch (requires restart).

Git Path ${docker_msg | n}

Optional: The path to your git environment variable. Leave blank for default.

Repair Git Install

Attempt to fix updating by resetting your Tautulli installation back to ${common.RELEASE}.
Note: This will not affect any saved history or settings.

% endif

### Activity

Activity Refresh Interval

Set the interval (in seconds) to refresh the current activity on the homepage. Minimum 2, default 10.

### Sections

Select the sections to show on the homepage. Drag the items below to reorder your homepage content.

- Current Activity
- Watch Statistics
- Library Statistics
- Recently Added

### Watch Statistics

Select the cards to show in the watch statistics on the home page. Drag the items below to reorder your homepage content.

- Most Watched Movie
- Most Popular Movie
- Most Watched TV
- Most Popular TV
- Most Listened to Artist
- Most Popular Artist
- Last Watched
- Most Active Libraries
- Most Active User
- Most Active Platform
- Most Concurrent Streams

### Library Statistics

Select the cards to show in the library statistics on the home page. Drag the items below to reorder your homepage content.

### Web Interface

Note: Web interface changes require a restart.

% if common.PLATFORM in ('Windows', 'Darwin'): <% tray = {'Windows': 'System Tray', 'Darwin': 'Menu Bar'} tray_disabled = tray_disabled_msg = '' if common.PLATFORM == 'Darwin': from plexpy.macos import HAS_PYOBJC if not HAS_PYOBJC: tray_disabled = 'disabled' tray_disabled_msg = '(Missing pyobjc module)' %>
Enable ${tray[common.PLATFORM]} Icon ${tray_disabled_msg | n}

Show Tautulli shortcut in the ${tray[common.PLATFORM].lower()}.

Launch at System Startup

Start Tautulli automatically after Login.

% endif
Launch Browser on Startup

Launch browser pointed to Tautulli on startup.

HTTP Port ${docker_msg | n}

Port to bind web server to. Note that ports below 1024 may require root.

Public Tautulli Domain

Set your public Tautulli domain for self-hosted notification images and newsletters. (e.g. http://mydomain.com)

HTTP Root

The base URL of the web server. Used for reverse proxies.

Enable HTTP Proxy

Respect the X-Forwarded-Proto header. Used for reverse proxies with SSL.

Enable HTTPS

Enable HTTPS for web server for encrypted communication.

Create Self-signed Certificate

Check to have Tautulli create a self-signed SSL certificate. Uncheck if you want to use your own certificate.

HTTPS Domains

The domain names used to access Tautulli, separated by commas (,).

HTTPS IPs

The IP addresses used to access Tautulli, separated by commas (,).

HTTPS Certificate

The location of the SSL certificate in PEM format.

HTTPS Certificate Chain

The location of the SSL certificate chain in PEM format.

HTTPS Key

The location of the SSL key in PEM format.

### Authentication

Note: Authentication changes require a restart.

HTTP Username

Username for web server authentication. Leave empty to disable.

HTTP Password

Password for web server authentication. Leave empty to disable.

Allow Plex Admin

Allow the Plex server admin to login as a Tautulli admin using their Plex.tv account.

Allow Guest Access to Tautulli

Allow shared users to login to Tautulli using their Plex.tv account. Individual user access needs to be enabled from Users > Edit Mode.

### API

Enable API

Allow external applications to interface with Tautulli.

API key

API key used to access the Tautulli API.

### Plex Media Server Version ${config['pms_version']}

Plex IP Address or Hostname

Select your Plex Media Server from the dropdown menu or enter an IP address or hostname.

Plex Port

Port that Plex Media Server is listening on.

Use Secure Connection

Connect to your Plex server using HTTPS if you have secure connections enabled.

Plex Server URL

The server URL that Tautulli will use to connect to your Plex server. Retrieved automatically.

Plex Server Identifier

The unique identifier for your Plex server. Retrieved automatically.

Manual Connection

Use the user defined connection details. Do not retrieve the server connection URL automatically.

Plex Web URL

Optional: Manually override the Plex Web URL used for click-through links on the media info pages and notifications. Default https://app.plex.tv/desktop.

Plex Logs Folder

Optional: Set your Plex logs folder to use Tautulli as a log viewer. Plex logs are not needed for Tautulli to function. A complete folder path is required, shortcuts are not recognized, and the logs must be accessible from the machine where Tautulli is installed. Click here for help.

Cache Plex Images

Enable to cache images from Plex to reduce API calls and improve loading times.
Note: Video preview thumbnails (BIF) are not cached.

### Server Monitoring

Monitor Plex Updates

Enable to have Tautulli check if updates are available for the Plex Media Server.

Update Channel
Release
Plex Update Check Interval

The interval (in hours) Tautulli will check for a new Plex Media Server update. Minimum 1, default 24.

Repeat Plex Server Update Notifications

Enable to allow Tautulli to send repeat Plex server update notifications everytime it checks for updates. Disable to only send one notifications for each Plex server version.

Users List Refresh Interval

The interval (in hours) Tautulli will request an updated friends list from Plex.tv. Minimum 1, maximum 24, default 12.

Refresh Users List on Startup

Refresh the users list when Tautulli starts.

Libraries List Refresh Interval

The interval (in hours) Tautulli will request an updated libraries list from your Plex Media Server. Minimum 1, maximum 24, default 12.

Refresh Libraries List on Startup

Refresh the libraries list when Tautulli starts.

### Plex.tv Authentication

Plex.tv Account Token

Fetch a new Plex.tv account authentication token.

### Current Activity Notifications

Buffer Threshold

The number of buffer events required before triggering the first notification. Buffer events increment on each incoming websocket message if the play state is buffering.
Note: Buffer warnings only work on certain Plex clients. Some clients can send excessive buffer messages or no messages at all. This notification may be unreliable and not indicative of a real problem.

Buffer Wait

The value (in seconds) Tautulli should wait before triggering the next buffer warning. Set to 0 to always trigger.

Allow Playback Stop Notifications Exceeding Watched Percent

Enable to allow sending of playback stop notifications after the watched percent is exceeded. Disable to only send playback stop notifications below the watched percent.

User Concurrent Streams Notifications by IP Address

Enable to only send a concurrent streams notification by a single user from different IP addresses. Disable to send a concurrent streams notification anytime the concurrent stream threshold is exceeded regardless of IP address.

User Concurrent Stream Threshold

The number of concurrent streams by a single user for Tautulli to trigger a notification. Minimum 2.

User New Device Notification First Time Only

Enable to only send a new device notification the first time a user streams from a new device. Disable to send a new device notification everytime a user streams from the device until it is recorded in history (i.e. exceeds the ignore interval).

Continued Session Threshold

The number of seconds between stopping and starting a new stream to be considered as a continued session. Set to 0 to consider all streams as new sessions.
Note: The threshold is only used by the "Initial Stream" notification parameter to determine if a stream is the first stream of a continuous streaming session.

### Recently Added Notifications

Group Notifications by Season or Album

Enable to only send one season or album notification when multiple episodes or tracks are added. Movies, single episodes, and single tracks are unaffected.
Note: An episode/track range can be shown (e.g. 01-12), but all other episode/track metadata will be unavailable.

Group Notifications by TV Show or Artist

Enable to only send one TV show or artist notification when multiple seasons or albums are added. Movies, single episodes, and single tracks are unaffected.
Note: A season range can be shown (e.g. 1-3), but all other season/episode/album/track metadata will be unavailable.

Recently Added Notification Delay

Set the delay (in seconds) to wait for consecutive recently added items to group together and to allow metadata to be processed before sending the recently added notification. Minimum 60 seconds, default 300.

Flush Recently Added

Attempt to fix recently added notifications by flushing out all of the recently added items in the database.
Warning: This will reset all recently added notifications. For emergency use only when recently added notifications are stuck!

### Server Notifications

Plex Server Down Threshold

The duration (in seconds) for the Plex server to be down before sending a notification. Minimum 60, default 60.

Remote Access Down Threshold

The duration (in seconds) for Plex remote access to be down before sending a notification. Minimum 60, default 60.

### Newsletters

Self-Hosted Newsletters

Enable to host newsletters on your own domain. This will generate a link to an HTML page where you can view the newsletter.

Note: The ${http_root}newsletter endpoint on your domain must be publicly accessible from the internet.

Warning: Public Tautulli domain not set under Web Interface.

Newsletter Authentication

Select the authentication method to use for self-hosted newsletters.

Warning: Guest Access is not enabled under Web Interface.

Newsletter Password

Enter the password that will be required to view self-hosted newsletters.

Use Inline Styles Template

Enable to use newsletter templates with inline CSS styles. Inline styles render better in email clients, but are larger in size which may cause long newsletters to be clipped.
Note: This setting does not affect custom templates. CSS styles will depend on your own template.

Custom Newsletter Templates Folder

Optional: Enter the full path to your custom newsletter templates folder. Leave blank for default.
Note: allow_mounted_folders = 1 must be manually enabled in the configuration file to allow mounted folder paths. Enabling this setting could pose a security risk. Enable at your own risk. It is recommended to leave this feature disabled if it is not being used.

Newsletter Output Directory ${docker_msg | n}

Enter the full path to where newsletter files will be saved.

### Notification Agents

Add a new notification agent, or configure an existing notification agent by clicking on the item below.

Please see the Notification Agents Guide for instructions on setting up each notification agent.

Loading notification agents...

### Newsletter Agents

Add a new newsletter agent, or configure an existing newsletter agent by clicking on the item below.

Warning: The Image Hosting setting must be enabled for images to display on the newsletter.

Loading newsletter agents...

### Image Hosting

Image hosting is used to provide posters and artwork for some notification agents and newsletters.

Image Host
% if config['notify_upload_posters'] in (1, 3):
% endif

Select where to host Plex images for notifications and newsletters.

Please see the 3rd Party APIs Guide for instructions on setting up Imgur.
Warning: Imgur uploads are rate-limited and newsletters may exceed the limit. Please use Cloudinary for newsletters instead.

Imgur Client ID

Enter your Imgur API Client ID.

Note: The ${http_root}image endpoint on your domain must be publicly accessible from the internet.

Warning: Public Tautulli domain not set under Web Interface.

Please see the 3rd Party APIs Guide for instructions on setting up Cloudinary.

Cloudinary Cloud Name

Enter your Cloudinary Cloud Name.

Cloudinary API Key

Enter your Cloudinary API Key.

Cloudinary API Secret

Enter your Cloudinary API Secret.

### Metadata Lookups

Metadata lookups are used to provide additional links for notifications when available.

Lookup TheMovieDB Links

Enable to lookup links to TheMovieDB (and IMDb if needed) for movies and TV shows when available.

Lookup TVmaze Links

Enable to lookup links to TVmaze (and IMDb if needed) for TV shows when available.

Lookup MusicBrainz Links

Enable to lookup links to MusicBrainz for music when available.

Delete Lookup Info

Delete all cached metadata lookup info in Tautulli.

### Import

Database Import

Click a button below to import an existing database from the selected app.

Configuration Import

Click the button below to import a previous Tautulli configuration.

### Backup

Backup Interval

The interval (in hours) Tautulli will backup the database and configuration file. Minimum 1, maximum 24, default 6.

Backup Days

The number of days to keep scheduled backups. Minimum 1, default 3.
Note: Manual backups are not removed automatically.

### Directories

Log Directory ${docker_msg | n}
Backup Directory ${docker_msg | n}
Cache Directory ${docker_msg | n}
Export Directory ${docker_msg | n}

### Tautulli Remote App

Get the App

Get the Tautulli Remote app on Google Play or the App Store to access Tautulli from your mobile device.

Google Play and the Google Play logo are trademarks of Google LLC.
Apple and the Apple Logo are trademarks of Apple Inc.

Registered Devices

Register a new device using a QR code, or configure an existing device by clicking on the item below.

Warning: The API must be enabled under Web Interface to use the app.

Loading registered devices...
Your Plex.tv token is no longer valid.
Please fetch a new token.
<%def name="modalIncludes()">

#### Guidelines

Please read the guidelines in the README document
before submitting a new !
Your post may be removed for failure to follow the guidelines.

#### Support

Please read the FAQ before asking for help!

#### Date & Time Format Options

% for category in common.DATE_TIME_FORMATS:

${category['category']}
% for parameter in category['parameters']:
${parameter['value']} | ${parameter['description']} | ${parameter['example']}
% endfor

% endfor

#### Add a Notification Agent

% for agent in sorted(available_notification_agents, key=lambda k: k['label'].lower()):
- ${agent['label']}
% endfor

#### Add a Newsletter Agent

% for agent in available_newsletter_agents:
- ${agent['label']}
% endfor

#### Notification Parameters

If the value for a selected parameter cannot be provided, it will display as blank.

% for category in common.NOTIFICATION_PARAMETERS:

${category['category']}
% for parameter in category['parameters']:
{${parameter['value']}} | ${parameter['description']} % if parameter.get('example'): (${parameter['example']}) % endif % if parameter.get('help_text'): (${parameter['help_text']}) % endif
% endfor

% endfor

#### Notification Exclusion Tags

Note: Tags separate the media type that triggered the notifications (i.e. a complete show added to Plex vs. a single episode added to Plex). They do not separate the notification parameters (i.e. {show_name} vs. {episode_name}.

Note: Nesting tags inside each other is not supported.

#### Movie Tag

All text inside <movie></movie> tags will only be sent when the media type is movie.

Example:

    {title}<movie>({year})</movie> was recently added to Plex

#### Show / Season / Episode Tags

All text inside <show></show>/<season></season>/<episode></episode> tags will only be sent when the media type is show, season, or episode, respectively.

Example:

    {show_name}<season> - Season {season_num}</season><episode> - S{season_num}E{episode_num} - {episode_name}</episode> was recently added to Plex.

#### Artist / Album / Track Tag

All text inside <artist></artist>/<album></album>/<track></track> tags will only be sent when the media type is artist, album, or track, respectively.

Example:

    {artist_name}<album> - {album_name}</album><track> - {album_name} - {track_name}</track> was recently added to Plex.

#### Notification Text Modifiers

#### Case Modifiers

Notification parameters with the !u modifier will be converted to uppercase.

Example:

    {video_codec}   --> hevc
    {video_codec!u} --> HEVC

Notification parameters with the !l modifier will be converted to lowercase.

Example:

    {content_rating}   --> TV-PG
    {content_rating!l} --> tv-pg

Notification parameters with the !c modifier will be converted to title case.

Example:

    {media_type}   --> movie
    {media_type!c} --> Movie

#### Time Formats

Notification parameters which are "in date format" or "in time format" can be formatted using the Date & Time Format Options by adding a :format specifier. If no format is specified, the default Date Format and Time Format under Settings > General will be used.

Example:

    {started_datestamp:ddd, MMMM DD, YYYY}   --> Mon, December 25, 2023
    {stopped_timestamp:h:mm a}               --> 9:56 pm
    {duration_time:HH:mm:ss}                 --> 01:42:20

#### List Slicing

Notification parameters which have a list of items can be sliced with a slice formatter :[X:Y] to limit the number of items. Note: the first item in the list is numbered 0.

Example:

    {actors:[0]}   --> Only include the 1st actor (Actors: 0)
    {actors:[:4]}  --> Only the first 4 actors (Actors: 0, 1, 2, 3)
    {actors:[2:]}  --> Only the 3rd to last actors (Actors: 2, 3, 4, ...)
    {actors:[1:5]} --> Only the 2nd to 5th actors (Actors: 1, 2, 3, 4)

#### Prefix and Suffix

A prefix or a suffix can be added to the notification parameters using Prefix< and >Suffix. If the notification parameter is unavailable, the prefix or suffix will not be displayed.

Example:

    {rating}              --> 8.9
    {Rating: <rating}     --> Rating: 8.9
    {rating>/10}          --> 8.9/10
    {Rating: <rating>/10} --> Rating: 8.9/10

Example with unavailable parameter:

    {rating}              -->
    Rating: {rating}/10   --> Rating: /10
    {Rating: <rating>/10} -->

#### Expressions

Note: notify_text_eval = 1 must be manually enabled in the configuration file to allow expressions. Enabling this setting could pose a security risk. Enable at your own risk. It is recommended to leave this feature disabled if it is not being used.

Notification parameters can be wrapped with backticks `expr` to be evaluated as Python expressions. Only the following functions are supported in expressions:

- bool(x)
- divmod(a, b)
- float(x)
- int(x)
- len(s)
- round(n[, ndigits])
- str(x)

Example:

    {`float(rating) * 10`>%}                           --> 89%
    {`"%d hr %d min" % divmod(int(duration), 60)`}     --> 1 hr 50 min
    {`round(float(stream_bandwidth) / 1000, 1)`> Mbps} --> 6.9 Mbps

#### Combined

If combining multiple notification text modifiers, the order of the modifiers must be:

1. Prefix
2. Evaluation
3. Parameter
4. Case Modifier
5. Time Formats / List Slicing
6. Suffix

Example:

    {Starring <actors!c:[0]> as the main character.} --> Starring Arnold Schwarzenegger as the main character.

#### Newsletter Parameters

If the value for a selected parameter is unavailable, it will display as blank.

% for category in common.NEWSLETTER_PARAMETERS:

${category['category']}
% for parameter in category['parameters']:
{${parameter['value']}} | ${parameter['description']} % if parameter.get('example'): (${parameter['example']}) % endif % if parameter.get('help_text'): (${parameter['help_text']}) % endif
% endfor

% endfor

#### Changelog

#### Restart

You have changed settings that require Tautulli to restart.
Click the restart button below to restart now.

#### Register Tautulli Remote App

Instructions

Scan the QR code below with the Tautulli Remote app to automatically register it with the server (make sure the Tautulli Address below is correct) or manually enter the connection info and device token into the app settings. This window will automatically close once device registration is successful.

Note: OneSignal.com must not be blocked (e.g. in Pi-hole) for device registration.

QR Code
Tautulli Address

Note: 127.0.0.1 and localhost will not work. Please enter an internal or external IP address, or hostname or domain instead.

Note: This is a private IP address. Tautulli will not be reachable outside of your home network. Access Tautulli via an external address or manually enter the address above to generate the QR code for remote access.

Note: This URL is not secure. Requests between the app and the server will not be encrypted. Enable HTTPS to connect the app securely.

Device Token

#### File Browser

Select a Below

<%def name="javascriptIncludes()">