← Docs

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.

💡 Rule builder vs. typing. Anything below works typed directly into a search bar. The rule builder covers the same ground with dropdowns/pickers instead of memorizing field names — reach for typing when you want something faster than clicking, or something the one-level-deep visual builder can't express (deeper nesting, see Grouping).

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.

FieldMatchesValue
titleTitle texttext
genreGenre tagstext
tagScraper-derived keywords/themes (TMDB keywords, AniList tags, Wikidata main subject — e.g. "christmas", "time travel")text
yearRelease yearnumber
decadeRelease decade2020s, 2010s, … 1930s
content_rating (alias: rating)Content rating (PG-13, TV-MA, …)text
audience_ratingAudience scorenumber, 0–10
durationRuntimenumber, minutes
studioStudiotext
networkNetwork (shows only — movies never match)text
directorDirector (movies only — shows never match)text
writerWriter (movies only — shows never match)text
actorCasttext
countryProduction countrytext
collectionCollection membershiptext
labelUser-applied labelstext
resolutionVideo resolution4K, 1080p, 720p, SD
audio_languageEmbedded audio track languagetext (e.g. eng, jpn)
subtitle_languageEmbedded or external-sidecar subtitle languagetext
addedDate added to the librarysee Date Filters
watch_state Your watch progress (per-user — only applies to your own library browsing, not smart playlists) watched, in_progress, unwatched
sourceWhich media source (by ID) an item is mapped fromsource ID
libraryWhich library (by ID) an item belongs tolibrary 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 asMeansApplies to
field:valueis / equalsmost text + number fields
-field:valueis notsame fields as is
field:>valuegreater thanyear, audience_rating, duration
field:>=valueat leastaudience_rating, duration
field:<valueless thanyear, audience_rating, duration
field:<=valueat mostaudience_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.