f9ce8eae63
implicit inheritance, defined a few docstring params, initialized 2 vars |
||
---|---|---|
.. | ||
kill_else_if_buffering.py | ||
kill_stream.py | ||
limiterr_readme.md | ||
limiterr.py | ||
readme.md |
README
Killing streams is a Plex Pass only feature. So these scripts will only work for Plex Pass users.
kill_stream.py
examples:
Kill transcodes
Triggers:
- Playback Start
- Transcode Decision Change
Conditions: [ Transcode Decision
| is
| transcode
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage 'Transcoding streams are not allowed.'
Kill non-local streams paused for a long time
The default values will kill anything paused for over 20 minutes, checking every 30 seconds.
Script Timeout: 0 Important!
Triggers: Playback Paused
Conditions: [ Stream Local
| is not
| 1
]
Arguments:
--jbop paused --sessionId {session_id} --killMessage 'Your stream was paused for over 20 minutes and has been automatically stopped for you.'
Kill streams paused for a custom time
This is an example of customizing the paused stream monitoring to check every 15 seconds, and kill any stream paused for over 5 minutes.
Script Timeout: 0 Important!
Triggers: Playback Paused
Arguments:
--jbop paused --interval 15 --limit 300 --sessionId {session_id} --killMessage 'Your stream was paused for over 5 minutes and has been automatically stopped for you.'
Kill paused transcodes
Triggers: Playback Paused
Conditions: [ Transcode Decision
| is
| transcode
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage 'Paused streams are automatically stopped.'
Limit User stream count, kill last stream
Triggers: Playback Start
Conditions: [ User Streams
| is greater than
| 3
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage 'You are only allowed 3 streams.'
IP Whitelist
Triggers: Playback Start
Conditions: [ IP Address
| is not
| 192.168.0.100 or 192.168.0.101
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage '{ip_address} is not allowed to access {server_name}.'
Kill by platform
Triggers: Playback Start
Conditions: [ Platform
| is
| Roku or Android
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage '{platform} is not allowed on {server_name}.'
Kill transcode by library
Triggers:
- Playback Start
- Transcode Decision Change
Conditions:
-
`Transcode Decision` | `is` | `transcode`
-
`Library Name` | `is` | `4K Movies`
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage 'Transcoding streams are not allowed from the 4K Movies library.'
Kill transcode by original resolution
Triggers:
- Playback Start
- Transcode Decision Change
Conditions:
-
`Transcode Decision` | `is` | `transcode`
-
`Video Resolution` | `is` | `1080 or 720`
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage 'Transcoding streams are not allowed for {stream_video_resolution}p streams.'
Kill transcode by bitrate
Triggers:
- Playback Start
- Transcode Decision Change
Conditions:
-
`Transcode Decision` | `is` | `transcode`
-
`Bitrate` | `is greater than` | `4000`
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage 'Transcoding streams are not allowed from over 4 Mbps (Yours: {stream_bitrate}).'
Kill by hours of the day
Kills any streams during 9 AM to 10 AM.
Triggers: Playback Start
Conditions: [ Timestamp
| begins with
| 09 or 10
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage '{server_name} is unavailable between 9 and 10 AM.'
Kill non local streams
Triggers: Playback Start
Conditions: [ Stream Local
| is not
| 1
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --killMessage '{server_name} only allows local streams.'
Kill transcodes and send a notification to agent 1
Triggers:
- Playback Start
- Transcode Decision Change
Conditions: [ Transcode Decision
| is
| transcode
]
Arguments:
--jbop stream --username {username} --sessionId {session_id} --notify 1 --killMessage 'Transcoding streams are not allowed.'
Kill transcodes using the default message
Triggers:
- Playback Start
- Transcode Decision Change
Conditions: [ Transcode Decision
| is
| transcode
]
Arguments:
--jbop stream --username {username} --sessionId {session_id}
Kill all of a user's streams with notification
Triggers: Playback Start
Conditions: [ Username
| is
| Bob
]
Arguments:
--jbop allStreams --userId {user_id} --notify 1 --killMessage 'Hey Bob, we need to talk!'
Rich Notifications (Discord or Slack)
The following can be added to any of the above examples.
How it Works
Tautulli > Script Agent > Script > Tautulli > Webhook Agent > Discord/Slack
- Tautulli's script agent is executed
- Script executes
- The script sends the JSON data to the webhook agent
- Webhook agent passes the information to Discord/Slack
Limitations
- Due to size limitations by Slack. A thumbnail may not appear with every notification when using
--posterUrl {poster_url}
. allStreams
will not have poster images in the notifications.
Required arguments
- Discord:
--notify notifierID --richMessage discord
- Slack:
--notify notifierID --richMessage slack
Note: The notifierID must be a Webhook in Tautulli
Optional arguments
--serverName {server_name} --plexUrl {plex_url} --posterUrl {poster_url} --richColor '#E5A00D'
Webhook Setup
- Settings -> Notification Agents -> Add a new notification agent -> Webhook
- For the Webhook URL enter your Slack or Discord webhook URL.
Some examples:- Discord: Intro to Webhooks
- Slack: Incoming Webhooks
- Webhook Method -
POST
- No triggers or any other configuration is needed. The script will pass the notifier the data to send to Discord/Slack.
Debug
Add --debug
to enable debug logging.
Conditions considerations
Kill transcode variants
All examples use [ Transcode Decision
| is
| transcode
] which will kill any variant of transcoding.
If you want to allow audio or container transcoding and only drop video transcodes, your condition would change to
`Video Decision` | `is` | `transcode`