From a52dda6a7fceb74d2201892fc977e15df3a090f1 Mon Sep 17 00:00:00 2001 From: BoulderBadgeDad Date: Sun, 21 Jun 2026 02:11:40 -0700 Subject: [PATCH] Video quality: recognize plain WEB + accept resolution-only releases Two over-rejections that filtered out legit releases as "unknown quality": - the source parser only matched WEB-DL/WEBDL, not plain "WEB" (very common) - a release with a known resolution but no recognized source had no tier Now plain WEB parses as web-dl, and a resolution-only release assumes web so it lands on a tier instead of being rejected (ffprobe verifies the real quality after download). Truly quality-less packs still reject. Tests added. --- core/video/quality_eval.py | 9 ++++++++- core/video/release_parse.py | 1 + tests/test_video_quality_eval.py | 15 +++++++++++++++ tests/test_video_release_parse.py | 8 ++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/core/video/quality_eval.py b/core/video/quality_eval.py index 62e750f7..197a8c9b 100644 --- a/core/video/quality_eval.py +++ b/core/video/quality_eval.py @@ -109,7 +109,14 @@ def tier_key(source, resolution) -> str: ladder tier (junk sources like cam/screener have no tier).""" pre = _SRC_TIER.get(source) if not pre: - return "" + # A loosely-named release with a known resolution but NO recognised source + # (very common — lots of releases tag '1080p' but not the source) → assume web + # so it still lands on a tier instead of being rejected as 'unknown quality'. + # ffprobe verifies the real quality after download. + if resolution and not source: + pre = "web" + else: + return "" if pre == "dvd": return "dvd" return (pre + "-" + resolution) if resolution else "" diff --git a/core/video/release_parse.py b/core/video/release_parse.py index a0306437..c70e5116 100644 --- a/core/video/release_parse.py +++ b/core/video/release_parse.py @@ -29,6 +29,7 @@ _SOURCE = [ (re.compile(r"\b(blu-?ray|bdrip|brrip|bd25|bd50)\b", re.I), "bluray"), (re.compile(r"\b(web-?dl|web\.?dl|amzn|nf|dsnp|hmax|atvp)\b", re.I), "web-dl"), (re.compile(r"\bweb-?rip\b", re.I), "webrip"), + (re.compile(r"\bweb\b", re.I), "web-dl"), # plain "WEB" (very common) — treat as WEB-DL (re.compile(r"\bhdtv\b", re.I), "hdtv"), (re.compile(r"\b(dvdrip|dvd)\b", re.I), "dvd"), (re.compile(r"\b(cam|hdcam|ts|telesync|hdts)\b", re.I), "cam"), diff --git a/tests/test_video_quality_eval.py b/tests/test_video_quality_eval.py index f8f34831..6eebaec2 100644 --- a/tests/test_video_quality_eval.py +++ b/tests/test_video_quality_eval.py @@ -6,10 +6,14 @@ from __future__ import annotations from core.video.quality_eval import ( evaluate_owned, + evaluate_release, meets_cutoff, resolution_label, resolution_rank, + tier_key, ) +from core.video.quality_profile import default_profile +from core.video.release_parse import parse_release def test_resolution_rank_agrees_across_formats(): @@ -64,3 +68,14 @@ def test_evaluate_owned_always_upgrade_when_cutoff_empty(): def test_evaluate_owned_handles_garbage_inputs(): assert evaluate_owned(None, None)["meets"] in (True, False) # never raises assert evaluate_owned("nope", 42)["resolution_label"] == "" + + +def test_resolution_only_release_still_grabbable(): + # a known resolution with NO recognised source assumes web → lands on a tier + # (instead of being rejected as 'unknown quality'); ffprobe verifies after. + assert tier_key(None, "1080p") == "web-1080p" + assert tier_key("web-dl", "720p") == "web-720p" # plain WEB now resolves here + assert tier_key(None, None) == "" # no res + no source → still unknown + v = evaluate_release(parse_release("Show S01E01 720p"), default_profile(), + scope="episode", want_season=1, want_episode=1) + assert v["accepted"] is True diff --git a/tests/test_video_release_parse.py b/tests/test_video_release_parse.py index 94cefc26..319c52ec 100644 --- a/tests/test_video_release_parse.py +++ b/tests/test_video_release_parse.py @@ -63,3 +63,11 @@ def test_garbage_never_raises(): p = parse_release(None) assert p["resolution"] is None and p["title"] == "" assert parse_release(12345)["title"] == "12345" + + +def test_plain_web_is_recognised_as_a_source(): + # 'WEB' (not just 'WEB-DL') is extremely common — must parse as web-dl + assert parse_release("Show S01E01 1080p WEB h264-GRP")["source"] == "web-dl" + assert parse_release("Movie.2020.WEB.x265")["source"] == "web-dl" + # but it must NOT mis-grab the WEB inside WEBRip + assert parse_release("Movie 1080p WEBRip x264")["source"] == "webrip"