Rule Fields¶
Every field a rule condition can use, generated from the rule engine. See Rule Format for how conditions fit into a rule file.
Fields are grouped by the operators they accept. The Scopes column lists the target_scope values where the field is allowed (all means every scope); import rejects a rule that uses a field outside its scope.
Fields marked install-specific hold IDs or names that differ between Reclaimerr installs. Rules that use them must be edited after import.
Numbers¶
Operators: equals, exists, greater_than, greater_than_or_equal, less_than, less_than_or_equal, not_equals, not_exists
value is a single number.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
anilist.favourites |
AniList favourites | all | whole number >= 0 |
anilist.popularity |
AniList popularity | all | whole number >= 0 |
anilist.score |
AniList score | all | whole number 0-100 |
arr.days_since_file_added |
Days since latest Arr file added | all | days |
arr.days_since_first_import |
Days since first Arr import | movie_version, series | days |
audio.bitrate_kbps |
Audio bitrate (kbps) | movie_version | kbps |
audio.channels |
Audio channels | movie_version, series, season | |
audio.track_count |
Audio track count | movie_version | |
collection.days_since_latest_sibling_watched |
Days since collection sibling watched | movie_version | days |
disk.free_bytes |
Disk free | all | bytes |
disk.free_percent |
Disk free (%) | all | 0-100 |
episode.days_since_air_date |
Days since episode aired | episode | days |
episode.number |
Episode number | episode | |
episode.position_by_air_date |
Episode position by air date | episode | |
episode.season_number |
Episode season number | episode | |
favorites.user_count |
Favorite/watchlist user count | all | |
imdb.rating |
IMDb rating | all | number 0-10 |
imdb.vote_count |
IMDb votes | all | whole number >= 0 |
letterboxd.score |
Letterboxd score | all | whole number 0-100; Letterboxd publishes this as 0-5; Reclaimerr stores it as a percentage |
letterboxd.vote_count |
Letterboxd votes | all | whole number >= 0 |
media.days_since_added |
Days since added | all | days |
media.duration |
Duration (ms) | movie_version | milliseconds |
media.size |
Size | all | bytes |
media.year |
Year | all | |
media_server.user_rating |
Media server user rating | all | number 0-10 |
metacritic.metascore |
Metacritic metascore | all | whole number 0-100 |
metacritic.user_score |
Metacritic user score | all | whole number 0-100; Metacritic publishes this as 0-10; Reclaimerr stores it as a percentage |
metacritic.user_vote_count |
Metacritic user votes | all | whole number >= 0 |
metacritic.vote_count |
Metacritic critic count | all | whole number >= 0 |
movie.version_count |
Movie version count | movie_version | |
playback.days_since_last_activity |
Days since playback activity | all | days |
playback.longest_duration_minutes |
Longest playback (minutes) | all | minutes |
playback.play_count |
Playback plays | all | |
playback.total_duration_minutes |
Playback duration (minutes) | all | minutes |
playback.unique_user_count |
Playback user count | all | |
playback_history.days_since_last_activity |
Days since recorded history activity | all | days |
playback_history.days_since_last_completed |
Days since recorded completed watch | all | days |
playback_history.longest_duration_minutes |
Longest recorded history playback (minutes) | all | minutes |
playback_history.play_count |
Recorded history plays | all | |
playback_history.total_duration_minutes |
Recorded history duration (minutes) | all | minutes |
playback_history.unique_user_count |
Recorded history user count | all | |
rottentomatoes.popcorn_meter |
Rotten Tomatoes Popcornmeter | all | whole number 0-100 |
rottentomatoes.popcorn_vote_count |
Rotten Tomatoes Popcornmeter votes | all | whole number >= 0 |
rottentomatoes.tomato_meter |
Rotten Tomatoes Tomatometer | all | whole number 0-100 |
rottentomatoes.tomato_vote_count |
Rotten Tomatoes Tomatometer votes | all | whole number >= 0 |
season.days_since_air_date |
Days since season aired | season, episode | days |
season.episode_count |
Episode count | season, episode | |
season.position_by_air_date |
Season position by air date | season | |
season.season_number |
Season number | season, episode | |
season.seasons_from_latest |
Seasons from latest | season, episode | |
season.watched_percent |
Season watched (%) | season, episode | 0-100 |
seerr.days_since_last_requested |
Days since latest active Seerr request | all | days |
series.library_season_count |
Library season count | series, season, episode | |
series.tmdb_season_count |
TMDB season count | series, season, episode | |
series.watched_percent |
Series watched (%) | series | 0-100 |
subtitle.track_count |
Subtitle track count | movie_version | |
tmdb.days_since_first_air_date |
Days since first aired | series, season, episode | days |
tmdb.days_since_last_air_date |
Days since last aired | series, season, episode | days |
tmdb.days_since_release |
Days since released | movie_version | days |
tmdb.popularity |
TMDB popularity | all | |
tmdb.runtime_minutes |
TMDB runtime (minutes) | movie_version | minutes |
tmdb.vote_average |
TMDB rating | all | number 0-10 |
tmdb.vote_count |
TMDB votes | all | whole number >= 0 |
trakt.rating |
Trakt rating | all | whole number 0-100 |
trakt.vote_count |
Trakt votes | all | whole number >= 0 |
video.bit_depth |
Video bit depth | movie_version | |
video.bitrate_kbps |
Video bitrate (kbps) | movie_version | kbps |
video.height |
Video height | movie_version, series, season | |
video.width |
Video width | movie_version, series, season | |
watch.days_since_last_watched |
Days since watched | all | days |
watch.view_count |
View count | all |
Dates¶
Operators: after, before, exists, not_exists, on_or_after, on_or_before
value is an ISO date string such as "2024-01-31". A value that is not a valid date never matches.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
collection.latest_sibling_watched_at |
Collection sibling last watched | movie_version | |
episode.air_date |
Episode air date | episode | |
playback.last_activity_at |
Last playback activity | all | |
playback_history.last_activity_at |
Last recorded history activity | all | |
playback_history.last_completed_at |
Last recorded completed watch | all | latest explicit completion; episode completion for TV targets |
season.air_date |
Season air date | season, episode | |
seerr.last_requested_at |
Seerr latest active request | all | |
tmdb.first_air_date |
TMDB first air date | series, season, episode | |
tmdb.last_air_date |
TMDB last air date | series, season, episode | |
tmdb.release_date |
TMDB release date | movie_version | |
watch.last_viewed_at |
Last watched | all |
True / false¶
Operators: exists, is_false, is_true, not_exists
Every operator here is valueless: omit value.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
arr.monitored |
Arr monitored | all | |
favorites.exists |
Favorited or watchlisted | all | |
playback.has_activity |
Playback activity | all | |
playback_history.has_activity |
Recorded history activity | all | |
playback_history.has_completed_watch |
Recorded completed watch | all | explicit provider completion; episode completion for TV targets |
season.fully_watched |
Season fully watched | season, episode | |
season.is_latest_season |
Is latest season | season, episode | |
seerr.requested |
Seerr requested | all | |
seerr.requester_has_watched |
Seerr requester has watched | all | |
seerr.requester_watched_after_request |
Seerr requester watched after requesting | all | |
series.fully_watched |
Series fully watched | series | |
sonarr.latest_season_has_finale |
Latest season has finale | series | |
sonarr.latest_season_has_unaired_episodes |
Latest season has unaired episodes | series | |
subtitle.has_forced |
Has forced subtitles | movie_version | |
tmdb.in_collection |
TMDB in collection | movie_version | |
video.dolby_vision |
Dolby Vision | movie_version, series, season | |
video.hdr |
HDR | movie_version, series, season | |
watch.never_watched |
Never watched | all |
Text¶
Operators: contains_all, contains_any, equals, exists, in, not_contains_all, not_contains_any, not_equals, not_exists, not_in
equals / not_equals take one string. The list operators take an array of strings. Comparisons ignore case.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
audio.codec_family |
Audio codec family | movie_version, series, season | |
audio.languages |
Audio languages | movie_version, season | ISO 639 codes, e.g. eng |
imdb.id |
IMDb ID | all | |
media.container |
Container | movie_version | |
media.title |
Title | all | |
series.status |
Series status | series, season, episode | |
sonarr.series_status |
Sonarr series status | series, season, episode | |
subtitle.languages |
Subtitle languages | movie_version, series, season | ISO 639 codes, e.g. eng |
tmdb.collection_name |
TMDB collection name | movie_version | |
tmdb.id |
TMDB ID | all | |
tmdb.origin_country |
TMDB origin country | all | ISO 3166 codes, e.g. US |
tmdb.original_language |
TMDB original language | all | ISO 639 codes, e.g. en |
tvdb.id |
TVDB ID | series, season, episode | |
video.codec_family |
Video codec family | movie_version, series, season | |
video.color_primaries |
Video color primaries | movie_version | |
video.color_space |
Video color space | movie_version | |
video.color_transfer |
Video color transfer | movie_version | |
video.resolution |
Resolution | movie_version |
Multi-value text¶
Operators: contains_all, contains_any, exists, not_contains_all, not_contains_any, not_exists
The item can hold several values (for example several genres). value is an array of strings.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
emby.genres |
Emby genres | all | |
favorites.usernames |
Favorite/watchlist users | all | install-specific usernames |
jellyfin.genres |
Jellyfin genres | all | |
media_server.collections |
Media server collections | all | |
playback.fully_watched_usernames |
Fully watched by users | all | install-specific usernames |
playback.usernames |
Playback users | all | install-specific usernames |
playback_history.usernames |
Recorded history users | all | install-specific usernames; selected provider only |
plex.genres |
Plex genres | all | |
tmdb.genres |
TMDB genres | all |
ID lists¶
Operators: contains_all, contains_any, exists, in, not_contains_all, not_contains_any, not_exists, not_in
value is an array of strings.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
arr.movie_ids |
Radarr movie IDs | movie_version | install-specific Radarr IDs |
arr.series_ids |
Sonarr series IDs | series, season, episode | install-specific Sonarr IDs |
library.id |
Library | all | install-specific library IDs |
seerr.requested_by_user_ids |
Seerr requester IDs | all | "instanceId:userId", install-specific |
Paths¶
Operators: contains_all, contains_any, equals, exists, in, matches_any_regex, not_contains_all, not_contains_any, not_equals, not_exists, not_in
Like Text, plus matches_any_regex with an array of patterns.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
media.file_name |
Filename | all | |
media.path |
Path | all | equals matches a folder prefix |
Arr tags¶
Operators: contains_all, contains_any, contains_substring, equals, exists, in, matches_any_regex, not_contains_all, not_contains_any, not_contains_substring, not_equals, not_exists, not_in, not_matches_any_regex
Like Text, plus substring and regex operators. Substring and regex operators take an array of strings.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
arr.tags |
Arr tags | all |
Per-user playback¶
Operators: equals, greater_than, greater_than_or_equal, less_than, less_than_or_equal, not_equals
value is an object: {"usernames": ["alice"], "amount": 30}. At least one username is required; amount is 0 or greater.
| Field | Label | Scopes | Value notes |
|---|---|---|---|
playback.user_watched_duration_minutes |
Playback duration by user (minutes) | all | amount is minutes, max 100000 |
playback.user_watched_percent |
Playback watched by user (%) | movie_version, episode | amount is 0-100 |