Skip to main content
Version: Latest

Filters

Filters are how you tell autobrr what to grab. Each filter is a set of conditions (resolution, size, release group and so on) that every announce is checked against; when a release matches, the filter's actions run and the release is sent to your download client, an *arr, or whatever else you've configured. You can run as many filters as you like side by side, each with its own indexers, rules and actions.

How a filter is evaluated

Every field you set in a filter must match for a release to be approved; fields you leave empty are skipped entirely. A typical TV filter checks a handful of fields against the parsed release name:

Orbital.Decay.S02E04.1080p.WEB.H264-PARSECannounced in #announce · filter: TV 1080p WEBRESOLUTION1080p ✓SOURCEWEB ✓CODECH.264 ✓RELEASE GROUPPARSEC ✓Match ✓Send to Sonarr

If any single check fails, the release is rejected. Rejected releases don't show up on the Releases page; only releases that matched a filter do. To see why something was skipped, check the logs with log level DEBUG:

Paper.Lanterns.2022.2160p.BluRay.x265.DV-KOI · 109.5 GBannounced in #announce · filter: Movies 4K HDR (max size 90 GB)RESOLUTION2160p ✓HDRDV ✓YEAR2022 ✓MAX SIZE109.5 GB ✗Rejected ✗size over limit

The Except fields work the other way around: a match there is a reason to reject. Here the release passes every quality check, but its group is on the filter's except list:

Static.Fields.S01E10.1080p.WEB.h264-SCUMannounced in #announce · filter: TV 1080p WEB (except groups: SCUM,TRASH)RESOLUTION1080p ✓SOURCEWEB ✓CODECh264 ✓EXCEPT GROUPSSCUM ✗Rejected ✗group excluded

Check order

Checks run from cheap to expensive, and a failure at any step stops the rest:

01FIELDSeverything seton the filter02SMART EPISODEnewer thanlast seen?03DUPLICATESreleaseprofiles04SIZEAPI or .torrentif not announced05UPLOADERuploader / labelvia API06EXTERNALscriptswebhooks

The regular fields are checked first, against what the announce itself contains. The gold steps only run when your filter needs a value the announce didn't include: if you set size limits and the indexer doesn't announce size, autobrr fetches it out of band, via the indexer's API where available, or by downloading the .torrent file as a last resort. The same applies to uploader and record label checks on API-enabled indexers. External filters always run last, so your scripts and webhooks are only called for releases that already passed everything else.

The same order as a flowchart; every reject path ends the same way, only a release that clears every step reaches the actions:

New announce01 · FIELDSeverything set on the filter02 · SMART EPISODEnewer than last seen?03 · DUPLICATESrelease profiles04 · SIZEAPI or .torrent · only if not announced05 · UPLOADER / LABELvia the indexer API06 · EXTERNALscripts · webhooksApproved ✓actions runRejected ✗reason loggedat DEBUG log level

Wildcard matching

Most fields can take a comma-separated list like value1, value2.

The comma-separated lists support wildcards, where * means zero or more characters and ? means exactly one character. An example would be: *this*,that?movie. In this case we would match any title containing this (or tHiS) or in the second case, any title that matches exactly like That Movie or tHaT MoViE or even THAT.MOVIE.

If no value is specified in a field, then that field will match any/all possible values. That means if nothing but Filter Name and Indexers is given, then the filter it will match all/any releases for the specified indexers.

Please note that all filters are case-insensitive, so write them however you desire. Another thing to note is that it is not possible to escape wildcard fields.

info

If you want to match a string partially, then remember to use the * around the before/after/around what you're looking for. If you want to match a string exactly, then try to avoid the use of the * wildcard character.

Exception: the Match/Except releases, description and release tags fields on the Advanced tab match substrings even without wildcards and cannot match exactly in non-regex mode.

Sharing filters

Filters can be exported and imported as JSON, which makes it easy to back them up or share them with others:

  • Export: Open the dropdown next to a filter in the filter list and pick Export JSON, or **Export JSON (Discord) ** to get the same JSON wrapped in a Discord code block. The result is copied to your clipboard.
  • Import: Click the arrow next to Create Filter and choose Import Filter. It accepts autobrr filter JSON as well as autodl-irssi .tracker configs, and imported filters are renamed automatically if the name is already taken.