Lifecycle Rules
The lifecycle rule engine lets you define conditions to automatically identify and act on media in your library. It uses a flexible rule group structure with AND/OR logic.
Concepts
Section titled “Concepts”Rule Sets
Section titled “Rule Sets”A rule set is a named collection of rules and actions. Each rule set targets a specific media type (movies, series, or music).
Rule Groups
Section titled “Rule Groups”Rules are organized into groups that use either AND or OR logic:
- AND: All rules in the group must match
- OR: At least one rule in the group must match
Groups can be nested to create complex conditions.
Each individual rule consists of:
- Field — what property to evaluate (e.g.,
playCount,resolution,addedAt) - Operator — how to compare (e.g.,
equals,greaterThan,before) - Value — the target value
Rules can be negated (NOT) to invert their logic.
Available Fields
Section titled “Available Fields”Over 50 fields are available for rule conditions.
Media Fields
Section titled “Media Fields”| Field | Description | Operators |
|---|---|---|
playCount | Number of times played | equals, greaterThan, lessThan, etc. |
lastPlayedAt | When last played | before, after, inLastDays |
addedAt | When added to library | before, after, inLastDays |
title | Media title | equals, contains, matchesWildcard |
parentTitle | Series name (for episodes) | equals, contains, matchesWildcard |
year | Release year | equals, greaterThan, lessThan, etc. |
contentRating | Content rating (PG, R, etc.) | equals, notEquals |
rating | Critic rating | greaterThan, lessThan, etc. |
audienceRating | Audience rating | greaterThan, lessThan, etc. |
studio | Production studio | equals, contains |
genre | Genre(s) | equals, contains |
duration | Duration in minutes | greaterThan, lessThan, etc. |
Video Fields
Section titled “Video Fields”| Field | Description |
|---|---|
resolution | 4K, 1080P, 720P, etc. |
videoCodec | H.264, H.265, AV1, etc. |
videoBitrate | Video bitrate |
videoBitDepth | 8-bit, 10-bit |
videoProfile | Baseline, Main, High |
videoFrameRate | Frame rate (23.976, 24, etc.) |
aspectRatio | 16:9, 4:3, 2.39:1, etc. |
dynamicRange | SDR, HDR10, HDR10+, Dolby Vision, HLG |
scanType | progressive, interlaced |
Audio Fields
Section titled “Audio Fields”| Field | Description |
|---|---|
audioCodec | AAC, AC3, FLAC, etc. |
audioChannels | Channel count (2, 6, 8, etc.) |
audioProfile | Dolby Atmos, DTS-HD MA, etc. |
audioSamplingRate | Sampling rate (48000, etc.) |
audioBitrate | Audio bitrate |
audioLanguage | Audio track language |
audioStreamCount | Number of audio tracks |
File Fields
Section titled “File Fields”| Field | Description |
|---|---|
fileSize | File size (in MB) |
container | File container (MKV, MP4, etc.) |
subtitleLanguage | Subtitle track language |
subtitleStreamCount | Number of subtitle tracks |
External / *arr Fields
Section titled “External / *arr Fields”These fields require configured Sonarr, Radarr, or Lidarr integrations.
| Field | Description |
|---|---|
arrTag | Tags in *arr instance |
arrQualityProfile | Quality profile name |
arrMonitored | Whether monitored in *arr |
arrRating | Rating in *arr |
Seerr Fields
Section titled “Seerr Fields”These fields require a configured Seerr integration.
| Field | Description |
|---|---|
seerrRequested | Whether requested in Seerr |
seerrRequestDate | When the request was made |
seerrRequestCount | Number of requests |
seerrRequestedBy | Who requested it |
seerrApprovalDate | When approved |
seerrDeclineDate | When declined |
Operators
Section titled “Operators”| Operator | Applicable Types | Description |
|---|---|---|
equals | text, number | Exact match |
notEquals | text, number | Not an exact match |
greaterThan | number | Greater than value |
greaterThanOrEqual | number | Greater than or equal |
lessThan | number | Less than value |
lessThanOrEqual | number | Less than or equal |
contains | text | Substring match (case-insensitive) |
notContains | text | Does not contain substring |
matchesWildcard | text | Wildcard match (* = any characters, ? = single character) |
notMatchesWildcard | text | Does not match wildcard pattern |
before | date | Before a specific date |
after | date | After a specific date |
inLastDays | date | Within the last N days |
Building Rules
Section titled “Building Rules”Using the Rule Builder
Section titled “Using the Rule Builder”- Create a Rule Set: Give it a name and select the target media type
- Add rules: Select a field, operator, and value
- Group rules: Use AND/OR groups to combine conditions
- Nest groups: Create sub-groups for complex logic
- Toggle rules: Enable/disable individual rules or groups without deleting them
- Negate rules: Apply NOT to invert a rule’s logic
- Reorder: Drag rules to change their position within a group
Example: Identify Old, Unwatched Movies
Section titled “Example: Identify Old, Unwatched Movies”Create a rule set with an AND group containing:
playCountequals0— Never watchedaddedAtbefore2023-01-01— Added over a year agoresolutionnotEquals4K— Not 4K quality
Example: Find Duplicate Quality
Section titled “Example: Find Duplicate Quality”Create a rule set with an OR group:
resolutionequals480PresolutionequalsSDvideoCodecequalsmpeg2video
Previewing Matches
Section titled “Previewing Matches”Before executing any actions, use the Preview feature to see which media items match your rules:
- Shows a count of matching items
- Displays a paginated list (50 per page) with metadata
- Updates in real time as you modify rules
Actions
Section titled “Actions”Actions determine what happens to matched media. Configure them in the Actions tab of a rule set.
Available Actions
Section titled “Available Actions”| Action | Description | Requires |
|---|---|---|
| Delete | Remove from *arr and optionally delete files | Sonarr/Radarr/Lidarr |
| Unmonitor | Stop monitoring for upgrades in *arr | Sonarr/Radarr/Lidarr |
| Do Nothing | Track matches without taking action | — |
Tags can be added or removed as a supplementary operation alongside any action (including Do Nothing).
Configuring Actions
Section titled “Configuring Actions”Each action links a rule set to an *arr instance:
- Select the *arr integration (e.g., “My Radarr”)
- Choose the action type (delete, unmonitor, do nothing)
- Set action-specific options (e.g., delete files toggle)
- Optionally configure tags to add or remove
- Set priority — actions execute top-to-bottom
How Rules Are Evaluated
Section titled “How Rules Are Evaluated”Rules are evaluated in two steps:
-
Step 1 — Local data: Rules based on your media’s own properties (resolution, play count, dates, file size, etc.) are evaluated first using your database — this is fast.
-
Step 2 — External data: Rules based on Sonarr, Radarr, Lidarr, or Seerr data (tags, quality profiles, monitored status, requests) require live lookups to those services, so they run after Step 1 narrows down the results.
Scheduling
Section titled “Scheduling”Lifecycle processing runs on two independent schedules (configured in Settings → Scheduling):
- Detection: Evaluates rules and identifies matching media
- Execution: Performs configured actions on matched media
Both can be run manually via the Run Now button at any time.
Limitations
Section titled “Limitations”- *arr actions require the corresponding integration to be configured and reachable
- Rules using integration data are slower and scale with the number of matches
- File size rules accept input in MB but are stored and compared in bytes
- Wildcard matching uses
*(any characters) and?(single character), not regex