test(fixtures): seed SHITTY release bucket with 15 anti-regression cases
Add 15 expected.yaml fixtures under tests/fixtures/releases/shitty/ covering the awkward but real-world release names from the downloads folder. Each fixture locks in the current parse_release behavior so future parser changes are intentional, not silent drift. Cases captured: - Angel INTEGRALE 3-level hierarchy (tv_complete media_type) - Buffy custom French title with dots preserved - Archer S14E09E10E11 multi-episode (E11 lost — tech debt) - Notre Planète lowercase s01e01 - Vinyl ' - 1x01 - FHD' (stray dash artifact — tech debt) - Deutschland.83 (year-suffix as part of title) - Tatortreiniger S01-06 range (falls to movie — tech debt) - Derry Girls duplicated title - Jurassic Park bare folder (media_type=unknown) - La Nuit au Musée bilingual MULTI - Chérie j'ai agrandi (ASCII-stripped apostrophe, parses fine) - Honey Don't (unescaped apostrophe — full AI-path degeneration) - Hook MULTi.SUBS movie with Subs/ folder - Predator Badlands space separators (group=UNKNOWN — tech debt) - Westworld S04 Subs.Only (no video file) Each fixture also captures the future 3-flow routing (library / torrents / seed_hardlinks) ahead of the organize_media refactor. Suite: 1011 passed, 8 skipped.
This commit is contained in:
+12
-2
@@ -21,8 +21,18 @@ callers).
|
||||
each documenting an expected `ParsedRelease` plus the future `routing`
|
||||
(library / torrents / seed_hardlinks) for the upcoming `organize_media`
|
||||
refactor. EASY bucket seeded with 5 cases (movie, single-episode, season
|
||||
pack, movie + noise, YTS bracket-heavy). Parametrized over
|
||||
`tests/domain/test_release_fixtures.py` for anti-regression.
|
||||
pack, movie + noise, YTS bracket-heavy). SHITTY bucket seeded with 15
|
||||
anti-regression cases covering: 3-level INTEGRALE hierarchy (Angel),
|
||||
French custom titles (Buffy, La Nuit au Musée, Chérie j'ai agrandi),
|
||||
multi-episode chain `S14E09E10E11` (Archer, captures E11 loss),
|
||||
lowercase `s01e01` (Notre Planète), `NxNN` with ` - ` separators
|
||||
(Vinyl, captures dash artifact), title-with-year-suffix (Deutschland.83),
|
||||
season-range `S01-06` (Tatortreiniger, captures movie misclassification),
|
||||
duplicated title (Derry Girls), bare folder name (Jurassic Park,
|
||||
media_type=unknown), apostrophe-in-name (Honey Don't, captures full AI-path
|
||||
degeneration), SUBS-tag movie (Hook), space separators (Predator Badlands,
|
||||
captures group=UNKNOWN), subs-only release (Westworld S04).
|
||||
Parametrized over `tests/domain/test_release_fixtures.py` for anti-regression.
|
||||
- **`NxNN` alt season/episode form supported** by `parse_release`. Releases like
|
||||
`Show.1x05.720p.HDTV.x264-GRP` and `Show.2x07x08.1080p.WEB.x265-GRP` (multi-ep
|
||||
alt form) now parse as TV shows.
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
release_name: "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO"
|
||||
|
||||
# INTEGRALE token correctly drives media_type=tv_complete + edition=INTEGRALE.
|
||||
# No season numbers anywhere in the release name — folder hierarchy carries
|
||||
# the season info. The organiser will need to walk the tree to learn seasons.
|
||||
parsed:
|
||||
title: "Angel"
|
||||
year: null
|
||||
season: null
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "BluRay"
|
||||
codec: "x265"
|
||||
group: "FRANCISCO"
|
||||
tech_string: "1080p.BluRay.x265"
|
||||
media_type: "tv_complete"
|
||||
edition: "INTEGRALE"
|
||||
languages: ["MULTI"]
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Bonus/"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Bonus/Making.Of.mkv"
|
||||
|
||||
# Bonus/ is parasitic (not in the show canon) — stays with torrents only.
|
||||
routing:
|
||||
library:
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
torrents:
|
||||
- "Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
target: "torrents/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- source: "library/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
target: "torrents/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 1/Angel.S01E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- source: "library/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
target: "torrents/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E01.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
- source: "library/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
target: "torrents/Angel.INTEGRALE.MULTI.1080p.BluRay.x265-FRANCISCO/Saison 2/Angel.S02E02.MULTI.1080p.BluRay.x265-FRANCISCO.mkv"
|
||||
@@ -0,0 +1,33 @@
|
||||
release_name: "Archer.S14E09E10E11.1080p.WEB.h264-ETHEL"
|
||||
|
||||
# Tech debt: triple-episode chain (E09E10E11) — current parser captures
|
||||
# episode=9 and episode_end=10, but E11 is lost. Anti-regression: lock in
|
||||
# the partial behavior so any future improvement is intentional.
|
||||
parsed:
|
||||
title: "Archer"
|
||||
year: null
|
||||
season: 14
|
||||
episode: 9
|
||||
episode_end: 10
|
||||
quality: "1080p"
|
||||
source: "WEB"
|
||||
codec: "h264"
|
||||
group: "ETHEL"
|
||||
tech_string: "1080p.WEB.h264"
|
||||
media_type: "tv_show"
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Archer.S14E09E10E11.1080p.WEB.h264-ETHEL/"
|
||||
- "Archer.S14E09E10E11.1080p.WEB.h264-ETHEL/Archer.S14E09E10E11.1080p.WEB.h264-ETHEL.mkv"
|
||||
- "Archer.S14E09E10E11.1080p.WEB.h264-ETHEL/RARBG.txt"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Archer.S14E09E10E11.1080p.WEB.h264-ETHEL/Archer.S14E09E10E11.1080p.WEB.h264-ETHEL.mkv"
|
||||
torrents:
|
||||
- "Archer.S14E09E10E11.1080p.WEB.h264-ETHEL/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Archer.S14E09E10E11.1080p.WEB.h264-ETHEL/Archer.S14E09E10E11.1080p.WEB.h264-ETHEL.mkv"
|
||||
target: "torrents/Archer.S14E09E10E11.1080p.WEB.h264-ETHEL/Archer.S14E09E10E11.1080p.WEB.h264-ETHEL.mkv"
|
||||
@@ -0,0 +1,39 @@
|
||||
release_name: "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD"
|
||||
|
||||
# French-localized title with dots kept as part of the title (no
|
||||
# title-casing or smart-Detection). is_season_pack=True from S01 + no episode.
|
||||
parsed:
|
||||
title: "Buffy.contre.les.Vampires"
|
||||
year: null
|
||||
season: 1
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "WEB-DL"
|
||||
codec: "x264"
|
||||
group: "FRENCHWORLD"
|
||||
tech_string: "1080p.WEB-DL.x264"
|
||||
media_type: "tv_show"
|
||||
languages: ["FRENCH"]
|
||||
parse_path: "direct"
|
||||
is_season_pack: true
|
||||
|
||||
tree:
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/"
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E02.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E03.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E02.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E03.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
torrents:
|
||||
- "Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
target: "torrents/Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
- source: "library/Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E02.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
target: "torrents/Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E02.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
- source: "library/Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E03.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
target: "torrents/Buffy.contre.les.Vampires.S01.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD/Buffy.contre.les.Vampires.S01E03.FRENCH.1080p.WEB-DL.x264-FRENCHWORLD.mkv"
|
||||
@@ -0,0 +1,33 @@
|
||||
release_name: "Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL"
|
||||
|
||||
# Real title contains apostrophes ("Chérie, j'ai agrandi le bébé") stripped
|
||||
# down to ASCII at release-name time. Parser handles it cleanly — title stays
|
||||
# joined by dots, year and tech detected normally.
|
||||
parsed:
|
||||
title: "Cherie.Jai.Agrandi.Le.Bebe"
|
||||
year: 1992
|
||||
season: null
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "BluRay"
|
||||
codec: "x264"
|
||||
group: "FUTiL"
|
||||
tech_string: "1080p.BluRay.x264"
|
||||
media_type: "movie"
|
||||
languages: ["FRENCH"]
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL/"
|
||||
- "Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL/Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL.mkv"
|
||||
- "Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL/Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL.nfo"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL/Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL.mkv"
|
||||
torrents:
|
||||
- "Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL/Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL.mkv"
|
||||
target: "torrents/Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL/Cherie.Jai.Agrandi.Le.Bebe.1992.FRENCH.1080p.BluRay.x264-FUTiL.mkv"
|
||||
@@ -0,0 +1,35 @@
|
||||
release_name: "Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb"
|
||||
|
||||
# Show name appears twice in the release. Parser correctly resolves to a
|
||||
# single title 'Derry.Girls' and season 3 — the duplication is harmless
|
||||
# because the second S03 is just absorbed before tech tokens.
|
||||
parsed:
|
||||
title: "Derry.Girls"
|
||||
year: null
|
||||
season: 3
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "WEBRip"
|
||||
codec: "x264"
|
||||
group: "NTb"
|
||||
tech_string: "1080p.WEBRip.x264"
|
||||
media_type: "tv_show"
|
||||
parse_path: "direct"
|
||||
is_season_pack: true
|
||||
|
||||
tree:
|
||||
- "Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/"
|
||||
- "Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E01.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
- "Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E02.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E01.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
- "Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E02.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
torrents:
|
||||
- "Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E01.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
target: "torrents/Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E01.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
- source: "library/Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E02.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
target: "torrents/Derry.Girls.S03.Derry.Girls.S03.1080p.NF.WEBRip.DDP5.1.x264-NTb/Derry.Girls.S03E02.1080p.NF.WEBRip.DDP5.1.x264-NTb.mkv"
|
||||
@@ -0,0 +1,40 @@
|
||||
release_name: "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD"
|
||||
|
||||
# Show title carries a year-like suffix that is *part of the title*, not the
|
||||
# release year. Parser correctly keeps "Deutschland.83" intact (no year
|
||||
# stripped) because '83' is too short for the YYYY heuristic.
|
||||
parsed:
|
||||
title: "Deutschland.83"
|
||||
year: null
|
||||
season: 1
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "BluRay"
|
||||
codec: "x264"
|
||||
group: "SHORTBREHD"
|
||||
tech_string: "1080p.BluRay.x264"
|
||||
media_type: "tv_show"
|
||||
parse_path: "direct"
|
||||
is_season_pack: true
|
||||
|
||||
# Real-world note: the franchise rebrands as Deutschland.86 / Deutschland.89
|
||||
# in later seasons — same downloads folder mixes the variants. Organiser
|
||||
# will likely want a "show alias" layer eventually.
|
||||
tree:
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/"
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E01.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E02.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Sample/"
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Sample/sample.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E01.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E02.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
torrents:
|
||||
- "Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E01.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
target: "torrents/Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E01.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
- source: "library/Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E02.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
target: "torrents/Deutschland.83.S01.1080p.BluRay.x264-SHORTBREHD/Deutschland.83.S01E02.1080p.BluRay.x264-SHORTBREHD.mkv"
|
||||
@@ -0,0 +1,33 @@
|
||||
release_name: "Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen"
|
||||
|
||||
# Tech debt: the unescaped apostrophe in "Don't" pushes the whole release
|
||||
# through the AI fallback path (parse_path="ai") and the parse degenerates to
|
||||
# UNKNOWN across the board. Anti-regression here — once the tokenizer learns
|
||||
# to handle apostrophes, this fixture should be revisited.
|
||||
parsed:
|
||||
title: "Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen"
|
||||
year: null
|
||||
season: null
|
||||
episode: null
|
||||
quality: null
|
||||
source: null
|
||||
codec: null
|
||||
group: "UNKNOWN"
|
||||
tech_string: ""
|
||||
media_type: "unknown"
|
||||
parse_path: "ai"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen/"
|
||||
- "Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen/Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen.mkv"
|
||||
- "Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen/RARBG_DO_NOT_MIRROR.exe"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen/Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen.mkv"
|
||||
torrents:
|
||||
- "Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen/Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen.mkv"
|
||||
target: "torrents/Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen/Honey.Don't.2025.2160p.WEBRip.DSNP.DV.HDR.x265.EAC3.5.1-Amen.mkv"
|
||||
@@ -0,0 +1,42 @@
|
||||
release_name: "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA"
|
||||
|
||||
# The 'SUBS' marker advertises included subtitles in the release name itself
|
||||
# but otherwise doesn't change the parse. Treat it like any other tag —
|
||||
# don't drop it from raw, don't try to translate it into anything.
|
||||
parsed:
|
||||
title: "Hook"
|
||||
year: 1991
|
||||
season: null
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "BluRay"
|
||||
codec: "x264"
|
||||
group: "MELBA"
|
||||
tech_string: "1080p.BluRay.x264"
|
||||
media_type: "movie"
|
||||
languages: ["MULTI"]
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/"
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA.mkv"
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/"
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/fre.srt"
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/eng.srt"
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/spa.srt"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA.mkv"
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/fre.srt"
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/eng.srt"
|
||||
torrents:
|
||||
- "Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA.mkv"
|
||||
target: "torrents/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA.mkv"
|
||||
- source: "library/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/fre.srt"
|
||||
target: "torrents/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/fre.srt"
|
||||
- source: "library/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/eng.srt"
|
||||
target: "torrents/Hook.1991.MULTi.SUBS.1080p.BluRay.x264-MELBA/Subs/eng.srt"
|
||||
@@ -0,0 +1,31 @@
|
||||
release_name: "Jurassic Park"
|
||||
|
||||
# Stripped-bare folder name — no year, no tech, no group. media_type=unknown
|
||||
# is the right answer: the parser refuses to guess. Organiser will need
|
||||
# user input (or TMDB lookup) to disambiguate.
|
||||
parsed:
|
||||
title: "Jurassic.Park"
|
||||
year: null
|
||||
season: null
|
||||
episode: null
|
||||
quality: null
|
||||
source: null
|
||||
codec: null
|
||||
group: "UNKNOWN"
|
||||
tech_string: ""
|
||||
media_type: "unknown"
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Jurassic Park/"
|
||||
- "Jurassic Park/Jurassic.Park.1993.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Jurassic Park/Jurassic.Park.1993.mkv"
|
||||
torrents:
|
||||
- "Jurassic Park/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Jurassic Park/Jurassic.Park.1993.mkv"
|
||||
target: "torrents/Jurassic Park/Jurassic.Park.1993.mkv"
|
||||
@@ -0,0 +1,30 @@
|
||||
release_name: "Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb"
|
||||
|
||||
# Lowercase 's01e01' and lowercased title word ('planete') correctly parsed.
|
||||
# NF (Netflix) source tag is not in the source KB — drops; WEB-DL wins.
|
||||
parsed:
|
||||
title: "Notre.planete"
|
||||
year: null
|
||||
season: 1
|
||||
episode: 1
|
||||
quality: "1080p"
|
||||
source: "WEB-DL"
|
||||
codec: "x264"
|
||||
group: "NTb"
|
||||
tech_string: "1080p.WEB-DL.x264"
|
||||
media_type: "tv_show"
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb/"
|
||||
- "Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb/Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb/Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb.mkv"
|
||||
torrents:
|
||||
- "Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb/Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb.mkv"
|
||||
target: "torrents/Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb/Notre.planete.s01e01.1080p.NF.WEB-DL.DDP5.1.x264-NTb.mkv"
|
||||
@@ -0,0 +1,40 @@
|
||||
release_name: "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST"
|
||||
|
||||
# French title with MULTI audio. No year. Article 'La' preserved as part of
|
||||
# the title — no smart article handling, which is the right call (cross-locale
|
||||
# article stripping is fraught).
|
||||
parsed:
|
||||
title: "La.Nuit.au.Musee"
|
||||
year: null
|
||||
season: null
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "BluRay"
|
||||
codec: "x265"
|
||||
group: "LOST"
|
||||
tech_string: "1080p.BluRay.x265"
|
||||
media_type: "movie"
|
||||
languages: ["MULTI"]
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/"
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.mkv"
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.fre.srt"
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.eng.srt"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.mkv"
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.fre.srt"
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.eng.srt"
|
||||
torrents:
|
||||
- "La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/"
|
||||
seed_hardlinks:
|
||||
- source: "library/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.mkv"
|
||||
target: "torrents/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.mkv"
|
||||
- source: "library/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.fre.srt"
|
||||
target: "torrents/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.fre.srt"
|
||||
- source: "library/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.eng.srt"
|
||||
target: "torrents/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST/La.Nuit.au.Musee.MULTi.1080p.BluRay.x265-LOST.eng.srt"
|
||||
@@ -0,0 +1,31 @@
|
||||
release_name: "Predator Badlands 2025 1080p HDRip HEVC x265 BONE"
|
||||
|
||||
# Space-separated release: tokenizer correctly splits and identifies year +
|
||||
# tech, but the dash-before-group convention is absent so 'BONE' is not
|
||||
# recognized as the group — falls to UNKNOWN. Anti-regression baseline.
|
||||
parsed:
|
||||
title: "Predator.Badlands"
|
||||
year: 2025
|
||||
season: null
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "HDRip"
|
||||
codec: "x265"
|
||||
group: "UNKNOWN"
|
||||
tech_string: "1080p.HDRip.x265"
|
||||
media_type: "movie"
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Predator Badlands 2025 1080p HDRip HEVC x265 BONE/"
|
||||
- "Predator Badlands 2025 1080p HDRip HEVC x265 BONE/Predator Badlands 2025 1080p HDRip HEVC x265 BONE.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Predator Badlands 2025 1080p HDRip HEVC x265 BONE/Predator Badlands 2025 1080p HDRip HEVC x265 BONE.mkv"
|
||||
torrents:
|
||||
- "Predator Badlands 2025 1080p HDRip HEVC x265 BONE/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Predator Badlands 2025 1080p HDRip HEVC x265 BONE/Predator Badlands 2025 1080p HDRip HEVC x265 BONE.mkv"
|
||||
target: "torrents/Predator Badlands 2025 1080p HDRip HEVC x265 BONE/Predator Badlands 2025 1080p HDRip HEVC x265 BONE.mkv"
|
||||
@@ -0,0 +1,44 @@
|
||||
release_name: "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE"
|
||||
|
||||
# Tech debt: range syntax 'S01-06' is not recognized as TV — falls through
|
||||
# to media_type=movie with the range glued onto the title. Captured here so a
|
||||
# future ranger-aware parser change is intentional.
|
||||
parsed:
|
||||
title: "Der.Tatortreiniger.S01-06"
|
||||
year: null
|
||||
season: null
|
||||
episode: null
|
||||
quality: "1080p"
|
||||
source: "WEB"
|
||||
codec: "x264"
|
||||
group: "WAYNE"
|
||||
tech_string: "1080p.WEB.x264"
|
||||
media_type: "movie"
|
||||
languages: ["GERMAN"]
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/"
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E02.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S02E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S06E08.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E02.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S02E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S06E08.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
torrents:
|
||||
- "Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
target: "torrents/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- source: "library/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E02.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
target: "torrents/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S01E02.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- source: "library/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S02E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
target: "torrents/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S02E01.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
- source: "library/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S06E08.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
target: "torrents/Der.Tatortreiniger.S01-06.GERMAN.1080p.WEB.x264-WAYNE/Der.Tatortreiniger.S06E08.GERMAN.1080p.WEB.x264-WAYNE.mkv"
|
||||
@@ -0,0 +1,32 @@
|
||||
release_name: "Vinyl - 1x01 - FHD"
|
||||
|
||||
# Tech debt: surrounding ' - ' separators leave a stray '-' token attached
|
||||
# to the title ("Vinyl.-"). NxNN form correctly identifies S01E01; everything
|
||||
# tech-side empty (no quality token in KB — "FHD" not yet known). Anti-regression
|
||||
# the current degenerate title so a future fix is intentional.
|
||||
parsed:
|
||||
title: "Vinyl.-"
|
||||
year: null
|
||||
season: 1
|
||||
episode: 1
|
||||
quality: null
|
||||
source: null
|
||||
codec: null
|
||||
group: "UNKNOWN"
|
||||
tech_string: ""
|
||||
media_type: "tv_show"
|
||||
parse_path: "direct"
|
||||
is_season_pack: false
|
||||
|
||||
tree:
|
||||
- "Vinyl - 1x01 - FHD/"
|
||||
- "Vinyl - 1x01 - FHD/Vinyl - 1x01 - FHD.mkv"
|
||||
|
||||
routing:
|
||||
library:
|
||||
- "Vinyl - 1x01 - FHD/Vinyl - 1x01 - FHD.mkv"
|
||||
torrents:
|
||||
- "Vinyl - 1x01 - FHD/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Vinyl - 1x01 - FHD/Vinyl - 1x01 - FHD.mkv"
|
||||
target: "torrents/Vinyl - 1x01 - FHD/Vinyl - 1x01 - FHD.mkv"
|
||||
@@ -0,0 +1,46 @@
|
||||
release_name: "Westworld.S04.Subs.Only"
|
||||
|
||||
# Subtitle-only release (no video). Parser still classifies as TV S04 from
|
||||
# the S04 marker. Organiser will need to detect "no video file" and route
|
||||
# everything subtitle-side — this fixture's tree captures that shape.
|
||||
parsed:
|
||||
title: "Westworld"
|
||||
year: null
|
||||
season: 4
|
||||
episode: null
|
||||
quality: null
|
||||
source: null
|
||||
codec: null
|
||||
group: "UNKNOWN"
|
||||
tech_string: ""
|
||||
media_type: "tv_show"
|
||||
parse_path: "direct"
|
||||
is_season_pack: true
|
||||
|
||||
tree:
|
||||
- "Westworld.S04.Subs.Only/"
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E01.fre.srt"
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E02.fre.srt"
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E03.fre.srt"
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E04.fre.srt"
|
||||
|
||||
# No video to library — all sidecars travel together. Will likely require a
|
||||
# distinct flow in organize_media: subs join an *existing* show in library
|
||||
# without dragging a video.
|
||||
routing:
|
||||
library:
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E01.fre.srt"
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E02.fre.srt"
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E03.fre.srt"
|
||||
- "Westworld.S04.Subs.Only/Westworld.S04E04.fre.srt"
|
||||
torrents:
|
||||
- "Westworld.S04.Subs.Only/"
|
||||
seed_hardlinks:
|
||||
- source: "library/Westworld.S04.Subs.Only/Westworld.S04E01.fre.srt"
|
||||
target: "torrents/Westworld.S04.Subs.Only/Westworld.S04E01.fre.srt"
|
||||
- source: "library/Westworld.S04.Subs.Only/Westworld.S04E02.fre.srt"
|
||||
target: "torrents/Westworld.S04.Subs.Only/Westworld.S04E02.fre.srt"
|
||||
- source: "library/Westworld.S04.Subs.Only/Westworld.S04E03.fre.srt"
|
||||
target: "torrents/Westworld.S04.Subs.Only/Westworld.S04E03.fre.srt"
|
||||
- source: "library/Westworld.S04.Subs.Only/Westworld.S04E04.fre.srt"
|
||||
target: "torrents/Westworld.S04.Subs.Only/Westworld.S04E04.fre.srt"
|
||||
Reference in New Issue
Block a user