fix(crossseed): reduce false negatives for anime matching - #1243
Merged
Conversation
- Deduplicate normalized codec list (e.g. HEVC+x265 vs H.265) - Relax anime Site matching (only enforce when both present) - Infer season/episode/pack from torrent files when name lacks Sxx/Exx - Update/add tests for codec, site, and inference - Tests: go test -race -count=3 ./internal/services/crossseed
0rkag
pushed a commit
to 0rkag/qui
that referenced
this pull request
Jan 16, 2026
alexlebens
pushed a commit
to alexlebens/infrastructure
that referenced
this pull request
Jan 27, 2026
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.12.0` → `v1.13.0` | --- ### Release Notes <details> <summary>autobrr/qui (ghcr.io/autobrr/qui)</summary> ### [`v1.13.0`](https://github.com/autobrr/qui/releases/tag/v1.13.0) [Compare Source](autobrr/qui@v1.12.0...v1.13.0) #### Highlights - Native RSS support for feeds - Cross-seed upgrades: directory scanning for data-based matching and category affix (prefix/suffix) modes - Automations improvements: Move action support, uncategorized filter option, hasMissingFiles condition, include-cross-seeds mode, configurable FREE\_SPACE source - UI improvements: inline pieces progress bar, clickable dashboard error counts, better mobile workflow modal - Orphan scan safeguards for shared save paths - External programs: new {comment} placeholder ##### Notable bug fixes: - More stable sorting for timestamp fields and last\_activity - Tracker icon fetching reliability and timeout cooldown handling - Cross-seed matching fixes (anime/pack matching, size mismatch handling, V2 hash recheck) - Orphan scan ignores .parts files and OS/NAS artifacts - qBittorrent tracker-down matching improvements and magnet redirect handling #### Changelog ##### New Features - [`9acd789`](autobrr/qui@9acd789): feat(automations): add Move action to Automations ([#​1079](autobrr/qui#1079)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`80aaf22`](autobrr/qui@80aaf22): feat(automations): add hasMissingfiles condition ([#​1081](autobrr/qui#1081)) ([@​jabloink](https://github.com/jabloink)) - [`f942a71`](autobrr/qui@f942a71): feat(automations): add import button to empty state ([#​1111](autobrr/qui#1111)) ([@​jabloink](https://github.com/jabloink)) - [`6b2831e`](autobrr/qui@6b2831e): feat(automations): add include-cross-seeds mode with hardlink support, fix free-space projection ([#​1116](autobrr/qui#1116)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`b152a6a`](autobrr/qui@b152a6a): feat(automations): add tooltips to disabled conditions ([#​1286](autobrr/qui#1286)) ([@​jabloink](https://github.com/jabloink)) - [`f36eb76`](autobrr/qui@f36eb76): feat(automations): add uncategorized category filter option ([#​1268](autobrr/qui#1268)) ([@​aulterego](https://github.com/aulterego)) - [`d7dcb58`](autobrr/qui@d7dcb58): feat(automations): configurable FREE\_SPACE source (qBit or path) ([#​1181](autobrr/qui#1181)) ([@​s0up4200](https://github.com/s0up4200)) - [`d685bee`](autobrr/qui@d685bee): feat(backups): add tooltips and restore from lastest button ([#​1258](autobrr/qui#1258)) ([@​jabloink](https://github.com/jabloink)) - [`4c5a975`](autobrr/qui@4c5a975): feat(crossseed): add category affix with prefix/suffix modes ([#​1296](autobrr/qui#1296)) ([@​jabloink](https://github.com/jabloink)) - [`28cd96d`](autobrr/qui@28cd96d): feat(crossseed): add directory scanner for data-based matching ([#​1203](autobrr/qui#1203)) ([@​s0up4200](https://github.com/s0up4200)) - [`fe84eb0`](autobrr/qui@fe84eb0): feat(dirscan): resumable scans with per-run limit ([#​1274](autobrr/qui#1274)) ([@​s0up4200](https://github.com/s0up4200)) - [`1af2a12`](autobrr/qui@1af2a12): feat(dockerfile): add bash to Dockerfile ([#​903](autobrr/qui#903)) ([@​ryanwalder](https://github.com/ryanwalder)) - [`5c84c3f`](autobrr/qui@5c84c3f): feat(docs): add browser extension links and URL shorteners ([@​s0up4200](https://github.com/s0up4200)) - [`13c5461`](autobrr/qui@13c5461): feat(linking): add option to fallback on linking failure ([#​1056](autobrr/qui#1056)) ([@​Audionut](https://github.com/Audionut)) - [`5f7031f`](autobrr/qui@5f7031f): feat(orphanscan): protect shared save paths across instances ([#​1197](autobrr/qui#1197)) ([@​s0up4200](https://github.com/s0up4200)) - [`341092d`](autobrr/qui@341092d): feat(rss): add native rss support ([#​801](autobrr/qui#801)) ([@​s0up4200](https://github.com/s0up4200)) - [`8d2a371`](autobrr/qui@8d2a371): feat(sort): add stable fallback sorting for timestamp fields ([#​1317](autobrr/qui#1317)) ([@​aulterego](https://github.com/aulterego)) - [`28cf4ad`](autobrr/qui@28cf4ad): feat(torrents): use custom tracker names in table ([#​1120](autobrr/qui#1120)) ([@​s0up4200](https://github.com/s0up4200)) - [`e0d2bb4`](autobrr/qui@e0d2bb4): feat(ui): Use 4 column grid for dashboard instances on 2xl screens ([#​1195](autobrr/qui#1195)) ([@​ewenjo](https://github.com/ewenjo)) - [`7bc98e1`](autobrr/qui@7bc98e1): feat(ui): add inline pieces progress bar visualization ([#​1050](autobrr/qui#1050)) ([@​s0up4200](https://github.com/s0up4200)) - [`0154226`](autobrr/qui@0154226): feat(web): Improve performance for torrents with large file counts ([#​1252](autobrr/qui#1252)) ([@​0rkag](https://github.com/0rkag)) - [`a91df70`](autobrr/qui@a91df70): feat(web): allow merging trackers into existing groups ([#​1175](autobrr/qui#1175)) ([@​jabloink](https://github.com/jabloink)) - [`132c512`](autobrr/qui@132c512): feat(web): improve workflow modal mobile ([#​1302](autobrr/qui#1302)) ([@​jabloink](https://github.com/jabloink)) - [`a7f59ab`](autobrr/qui@a7f59ab): feat(web): make dashboard error counts clickable ([#​937](autobrr/qui#937)) ([@​Gykes](https://github.com/Gykes)) ##### Bug Fixes - [`c6f86e2`](autobrr/qui@c6f86e2): fix(auth): recover cleanly behind upstream SSO ([#​1142](autobrr/qui#1142)) ([@​s0up4200](https://github.com/s0up4200)) - [`0c19899`](autobrr/qui@0c19899): fix(automations): handle -1 value for incomplete torrent completion\_on ([#​1186](autobrr/qui#1186)) ([@​s0up4200](https://github.com/s0up4200)) - [`59a9120`](autobrr/qui@59a9120): fix(automations): include Move action in `rulesUseCondition` ([#​1079](autobrr/qui#1079)) ([#​1287](autobrr/qui#1287)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`618d945`](autobrr/qui@618d945): fix(automations): not being able to enter multiple tags in tag action ([#​1131](autobrr/qui#1131)) ([@​Winter](https://github.com/Winter)) - [`bffecbd`](autobrr/qui@bffecbd): fix(automations): restore preview API and add loading state ([#​1194](autobrr/qui#1194)) ([@​s0up4200](https://github.com/s0up4200)) - [`9b3975b`](autobrr/qui@9b3975b): fix(automations): speed up delete hardlink-copy expansion ([#​1187](autobrr/qui#1187)) ([@​s0up4200](https://github.com/s0up4200)) - [`1549bcf`](autobrr/qui@1549bcf): fix(automations): support qBittorrent global/unlimited limits ([#​1134](autobrr/qui#1134)) ([@​s0up4200](https://github.com/s0up4200)) - [`e31d4aa`](autobrr/qui@e31d4aa): fix(automations): validate local access for hasMissingFiles ([#​1281](autobrr/qui#1281)) ([@​jabloink](https://github.com/jabloink)) - [`dba3419`](autobrr/qui@dba3419): fix(crossseed): allow extra files in size mismatch check ([#​1149](autobrr/qui#1149)) ([@​s0up4200](https://github.com/s0up4200)) - [`f7dced6`](autobrr/qui@f7dced6): fix(crossseed): correct match type for episode-from-pack cross-seeding ([#​1250](autobrr/qui#1250)) ([@​neelmehta247](https://github.com/neelmehta247)) - [`007d87e`](autobrr/qui@007d87e): fix(crossseed): normalize ampersand to "and" for title matching ([#​1202](autobrr/qui#1202)) ([@​s0up4200](https://github.com/s0up4200)) - [`048c034`](autobrr/qui@048c034): fix(crossseed): prevent automation search stalls ([#​1272](autobrr/qui#1272)) ([@​s0up4200](https://github.com/s0up4200)) - [`5c48ccb`](autobrr/qui@5c48ccb): fix(crossseed): prevent false cross-seed delete warnings ([#​1148](autobrr/qui#1148)) ([@​s0up4200](https://github.com/s0up4200)) - [`eda0eee`](autobrr/qui@eda0eee): fix(crossseed): reduce false negatives for anime matching ([#​1243](autobrr/qui#1243)) ([@​s0up4200](https://github.com/s0up4200)) - [`8b08b87`](autobrr/qui@8b08b87): fix(crossseed): restore reuse matched category option ([#​1150](autobrr/qui#1150)) ([@​s0up4200](https://github.com/s0up4200)) - [`b69682d`](autobrr/qui@b69682d): fix(crossseed): support v2 hashes for recheck ([#​1237](autobrr/qui#1237)) ([@​s0up4200](https://github.com/s0up4200)) - [`8fb16c1`](autobrr/qui@8fb16c1): fix(database): remove noisy stmt cache promotion log ([#​1307](autobrr/qui#1307)) ([@​s0up4200](https://github.com/s0up4200)) - [`c8d068b`](autobrr/qui@c8d068b): fix(docs): correct autobrr integration documentation ([@​s0up4200](https://github.com/s0up4200)) - [`c6f4a4a`](autobrr/qui@c6f4a4a): fix(docs): use absolute URLs for extension links ([@​s0up4200](https://github.com/s0up4200)) - [`48510e9`](autobrr/qui@48510e9): fix(instances): auth bypass persistence in instance form ([#​1219](autobrr/qui#1219)) ([@​s0up4200](https://github.com/s0up4200)) - [`0b71b46`](autobrr/qui@0b71b46): fix(makefile): make fmt target only format changed files ([#​1200](autobrr/qui#1200)) ([@​s0up4200](https://github.com/s0up4200)) - [`1f13b0e`](autobrr/qui@1f13b0e): fix(orphanscan): avoid duplicate inode entries in scans ([#​1212](autobrr/qui#1212)) ([@​s0up4200](https://github.com/s0up4200)) - [`fecfebd`](autobrr/qui@fecfebd): fix(orphanscan): gate scans until qBittorrent settled ([#​1193](autobrr/qui#1193)) ([@​s0up4200](https://github.com/s0up4200)) - [`77b2fd6`](autobrr/qui@77b2fd6): fix(orphanscan): ignore .parts files from qBittorrent partial downloads ([#​1264](autobrr/qui#1264)) ([@​s0up4200](https://github.com/s0up4200)) - [`0f7e646`](autobrr/qui@0f7e646): fix(orphanscan): ignore OS/NAS/k8s artifacts ([#​1259](autobrr/qui#1259)) ([@​s0up4200](https://github.com/s0up4200)) - [`b55881c`](autobrr/qui@b55881c): fix(orphanscan): reduce MaxFilesPerRun and fix accordion chevrons ([#​1095](autobrr/qui#1095)) ([@​s0up4200](https://github.com/s0up4200)) - [`0cb682c`](autobrr/qui@0cb682c): fix(qbittorrent): force sync+retry in BulkAction ([#​1097](autobrr/qui#1097)) ([@​s0up4200](https://github.com/s0up4200)) - [`aba9b7e`](autobrr/qui@aba9b7e): fix(qbittorrent): strip URLs before tracker-down pattern matching ([#​1224](autobrr/qui#1224)) ([@​s0up4200](https://github.com/s0up4200)) - [`a60076f`](autobrr/qui@a60076f): fix(reflinktree): fall back to FICLONERANGE when FICLONE unsupported ([#​1221](autobrr/qui#1221)) ([@​s0up4200](https://github.com/s0up4200)) - [`d79a0db`](autobrr/qui@d79a0db): fix(search): handle magnet redirects from indexer downloads ([#​1211](autobrr/qui#1211)) ([@​s0up4200](https://github.com/s0up4200)) - [`1e920c4`](autobrr/qui@1e920c4): fix(sort): truncate `last_activity` to 60s for stability ([#​1318](autobrr/qui#1318)) ([@​aulterego](https://github.com/aulterego)) - [`931d720`](autobrr/qui@931d720): fix(torznab): respect per-indexer caps limits ([#​1265](autobrr/qui#1265)) ([@​s0up4200](https://github.com/s0up4200)) - [`6fe91e8`](autobrr/qui@6fe91e8): fix(trackericons): apply failure cooldown on timeouts ([#​1322](autobrr/qui#1322)) ([@​s0up4200](https://github.com/s0up4200)) - [`35a50b5`](autobrr/qui@35a50b5): fix(web): add max-height to import workflow dialog ([#​1207](autobrr/qui#1207)) ([@​s0up4200](https://github.com/s0up4200)) - [`5bd2706`](autobrr/qui@5bd2706): fix(web): hide redundant actions dropdown ([#​1305](autobrr/qui#1305)) ([@​jabloink](https://github.com/jabloink)) - [`307907f`](autobrr/qui@307907f): fix(web): improve Reannounce In column display ([#​1320](autobrr/qui#1320)) ([@​soggy-cr0uton](https://github.com/soggy-cr0uton)) - [`7881bdc`](autobrr/qui@7881bdc): fix(web): make Add Instance dialog scrollable on small viewports ([#​1232](autobrr/qui#1232)) ([@​s0up4200](https://github.com/s0up4200)) - [`bec5433`](autobrr/qui@bec5433): fix(web): make dialogs scrollable on small viewports ([#​1233](autobrr/qui#1233)) ([@​s0up4200](https://github.com/s0up4200)) - [`0e47b9e`](autobrr/qui@0e47b9e): fix(web): prevent nested scroll containers on iOS ([#​1229](autobrr/qui#1229)) ([@​s0up4200](https://github.com/s0up4200)) - [`f2f0616`](autobrr/qui@f2f0616): fix(web): redirect already authenticated users to dashboard ([#​1127](autobrr/qui#1127)) ([@​burritothief](https://github.com/burritothief)) - [`7a633cf`](autobrr/qui@7a633cf): fix(web): toast message when searching then adding cross-seeds ([#​1290](autobrr/qui#1290)) ([@​rybertm](https://github.com/rybertm)) - [`da14100`](autobrr/qui@da14100): fix(web): use fixed px for sidebar width instead of rem ([#​1313](autobrr/qui#1313)) ([@​soggy-cr0uton](https://github.com/soggy-cr0uton)) ##### Other Changes - [`c93a326`](autobrr/qui@c93a326): chore(deps): bump the golang group across 1 directory with 16 updates ([#​1261](autobrr/qui#1261)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`d3de074`](autobrr/qui@d3de074): chore(docs): clarify tracker pattern necessity in documentation ([@​s0up4200](https://github.com/s0up4200)) - [`2351097`](autobrr/qui@2351097): chore(lint): Add Linting workflow to CI ([#​1270](autobrr/qui#1270)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`e8436e3`](autobrr/qui@e8436e3): chore(lint): update linting base branch from main to develop ([@​s0up4200](https://github.com/s0up4200)) - [`e36afc8`](autobrr/qui@e36afc8): chore: add Ko-fi funding and pre-commit config ([#​1315](autobrr/qui#1315)) ([@​s0up4200](https://github.com/s0up4200)) - [`df4375e`](autobrr/qui@df4375e): chore: update copyright headers to 2025-2026 ([#​1303](autobrr/qui#1303)) ([@​s0up4200](https://github.com/s0up4200)) - [`7a6f2d1`](autobrr/qui@7a6f2d1): docs(automations): clarify tag behavior ([#​1260](autobrr/qui#1260)) ([@​jabloink](https://github.com/jabloink)) - [`05e2028`](autobrr/qui@05e2028): refactor(build): cross platform building ([#​1060](autobrr/qui#1060)) ([@​Audionut](https://github.com/Audionut)) - [`6355f4f`](autobrr/qui@6355f4f): refactor(crosssed): require full recheck for disc based content ([#​1168](autobrr/qui#1168)) ([@​Audionut](https://github.com/Audionut)) - [`7466a98`](autobrr/qui@7466a98): refactor(filesmanager): improve logging messages for orphan cleanup process ([@​s0up4200](https://github.com/s0up4200)) - [`ad90209`](autobrr/qui@ad90209): refactor(orphan): improve disc based content handling ([#​1167](autobrr/qui#1167)) ([@​Audionut](https://github.com/Audionut)) - [`3b85f8a`](autobrr/qui@3b85f8a): refactor(web): use TanStack Query for path autocomplete ([#​1309](autobrr/qui#1309)) ([@​soggy-cr0uton](https://github.com/soggy-cr0uton)) **Full Changelog**: <autobrr/qui@v1.12.0...v1.13.0> #### Docker images - `docker pull ghcr.io/autobrr/qui:v1.13.0` - `docker pull ghcr.io/autobrr/qui:latest` #### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi42OS4yIiwidXBkYXRlZEluVmVyIjoiNDIuNjkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/3540 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
Zmegolaz
pushed a commit
to Zmegolaz/qui
that referenced
this pull request
Mar 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.