Filter Syntax
One grammar, three faces: type it straight into the Library search bar, build it visually with the "Filters" rule builder, or (Playlists / Filler Lists / the channel content picker) use the same panel there. The visual builder is a structured editor over this exact syntax — anything you build with it round-trips through the same text form.
Basics #
A query is a sequence of space-separated terms. Each term is either a field:value clause or a bare word.
horrorBare word — fuzzy free-text match against title, genre, actor, studio, network, and a few other searchable columns.genre:horrorA clause — genre exactly matches "Horror".genre:horror 2020Clauses and bare words freely mix in the same query — genre is Horror and the title/etc. fuzzy-matches "2020".Fields #
An unrecognized something:value prefix isn't an error — it just falls back to a plain fuzzy word (typing foo:bar searches for the literal text "foo:bar"). rating is an alias for content_rating.
| Field | Matches | Value |
|---|---|---|
title | Title text | text |
genre | Genre tags | text |
tag | Scraper-derived keywords/themes (TMDB keywords, AniList tags, Wikidata main subject — e.g. "christmas", "time travel") | text |
year | Release year | number |
decade | Release decade | 2020s, 2010s, … 1930s |
content_rating (alias: rating) | Content rating (PG-13, TV-MA, …) | text |
audience_rating | Audience score | number, 0–10 |
duration | Runtime | number, minutes |
studio | Studio | text |
network | Network (shows only — movies never match) | text |
director | Director (movies only — shows never match) | text |
writer | Writer (movies only — shows never match) | text |
actor | Cast | text |
country | Production country | text |
collection | Collection membership | text |
label | User-applied labels | text |
resolution | Video resolution | 4K, 1080p, 720p, SD |
audio_language | Embedded audio track language | text (e.g. eng, jpn) |
subtitle_language | Embedded or external-sidecar subtitle language | text |
added | Date added to the library | see Date Filters |
watch_state |
Your watch progress (per-user — only applies to your own library browsing, not smart playlists) | watched, in_progress, unwatched |
source | Which media source (by ID) an item is mapped from | source ID |
library | Which library (by ID) an item belongs to | library ID |
source and library take internal IDs, not display names — typing them by hand is impractical.
Use the rule builder's "Source"/"Library" dropdowns to pick one visually; it fills in the right ID underneath, and the
resulting rule is exactly the same source:… / library:… clause described here.
(library composes fine alongside the Library page's separate multi-select source/library pills — one is
"which libraries are visible at all," the other is a normal, AND/OR-able filter clause like any other field.)
Operators & Comparators #
Most text fields default to is (exact match) when no comparator is given. Numeric fields support >/>=/</<= prefixes directly on the value; not every field supports every operator (e.g. duration has no exact-match is, only comparisons).
| Write it as | Means | Applies to |
|---|---|---|
field:value | is / equals | most text + number fields |
-field:value | is not | same fields as is |
field:>value | greater than | year, audience_rating, duration |
field:>=value | at least | audience_rating, duration |
field:<value | less than | year, audience_rating, duration |
field:<=value | at most | audience_rating, duration |
Wildcards #
For text fields that support substring matching. A leading/trailing * is a wildcard marker, not a literal asterisk — wrap the value in quotes to search for a literal *.
studio:*Bros*contains — substring match anywhere.studio:Warner*begins with.studio:*Studiosends with.-studio:*Bros*does not contain.title:"3*"Quoted — an exact/literal match for the value 3*, asterisk included, rather than a "begins with 3" wildcard.Date Filters — added #
Date-added has its own comparator set (in_last / before / after) instead of the generic >/< ones.
added:30Added in the last 30 days (unit-less number = days).added:2wAdded in the last 2 weeks. Units: d days, w weeks, m months (×30 days), y years (×365 days).added:>2024-01-01Added after Jan 1, 2024.added:<2024-01-01Added before Jan 1, 2024.Combining & Grouping #
Terms are implicitly AND'd together — no need to write AND between every clause. OR/||, NOT/-, and parentheses all work, and nest arbitrarily deep. The visual rule builder is deliberately bounded to one level of grouping ("match all/any of these, optionally with one nested match-all/any group") — deeper nesting is only reachable by typing.
genre:horror year:>2015Implicit AND: Horror and after 2015.genre:horror OR genre:thriller|| also works.NOT genre:horror-genre:horror is equivalent and folds into a plain "is not" clause.(genre:horror AND year:>2015) OR studio:A24Parenthesized group OR'd with a third clause — exactly what the rule builder's "match all/any within this group" produces.Examples #
genre:animation decade:2010sAnimated titles from the 2010s.resolution:4K audience_rating:>=74K titles rated 7 or higher.studio:*A24* -content_rating:RA24-produced, excluding R-rated.added:<30 -genre:documentaryAdded in the last 30 days, excluding documentaries.audio_language:jpn subtitle_language:engJapanese audio with English subtitles available.tag:christmasA seasonal shelf that auto-populates from scraper-tagged content — no manual per-item labeling needed. Wire it into a smart playlist's filter and set an active window (Home shelf settings) to only show it in December.watch_state:unwatched genre:comedyComedies you haven't started yet.