From 5682c46233472db53bf961ce5cee991fba4f4f99 Mon Sep 17 00:00:00 2001 From: santiagosayshey Date: Sat, 18 Jan 2025 17:27:44 +1030 Subject: [PATCH] New Profile: 2160p Quality (#19) create(script): Add tierCreator script for generating group tier custom formats + release group regex patterns fix(tierCreator): Update YAML handling and improve template processing for group tiers remove(template): release group condition placeholder create(format): 2160p Quality Tiers - 69 new release group regex patterns - 6 new tiers for 2160p Quality create(data): Add 2160p Quality Tiers JSON file with detailed statistics and scoring docs(README): Update README to include utility scripts and tier creator usage instructions fix(tierCreator): Improve output message to indicate whether a file is being created or overwritten feat(tierCreator): Add show_preview option for dry run mode to display regex patterns and custom formats add(tier): more data for 2160p Quality add(tiers): new regex patterns for various groups, tweaks to 2160p quality tiers tweak(format): add WOU and MALUS to unwanted x265 tweak(format): Seperate streaming services into 1080p / 2160p - Existing ones still exist, there are just needed for the 2160p Quality profile since it needs different scores based on the resolution create(format): Standard Dynamic Range create(format): Match x265 only for 1080p - Used to get rid of 1080p x265 encodes for 2160p Quality (since x265 is needed for 2160p Encodes) tweak(regex): DTS & X can now be seperated by a colon tweak(format): Add STRiKE to missing HDR Groups create(profile): Initialise 2160p Quality tweak(tier): adjustments to scoring algorithm - hard limits on efficiency delta / num releases for tier 3+ tweaks(tier): new groups / tier adjustments for 2160p quality add(format): x264 (1080p) - Match x264 2160p encodes tweak(profile): Various improvements - Remove UHD Bluray scores, they bloat the scoring logic - Reduce SDR WEBs to below tier ~4 - Add some notes on scoring logic to description fix(tier): Remove bad data fix(tier): remove groups added via bad data tweak(tier): target 55% efficiency, new data for SA89, Mainframe add(profile): x265 (Missing 2160p) - Append x265 to 2160 Blu-ray encodes that are not explicitly labelled x264 tweak(profile): Various improvements / tweaks - Remove required groups for HDR missing CF - New CF for unknown lossless audio - New 2160p Balanced tiers - Normalise lossless audio / quality tier scores tweak(profile): Adjust fallbacks / improve descriptions - Removed HDTV for 1080p profiles - Renamed 'fallbacks' to 'SD' tweak(profile): Finalise 2160p Quality v1 - Set upgrade until to 2160p Transparent, score = 800, min score increment = 5 - Add comprehensive description --- README.md | 35 +- custom_formats/2160p Balanced Tier 1.yml | 95 +++ custom_formats/2160p Balanced Tier 2.yml | 100 +++ custom_formats/2160p Quality Tier 1.yml | 56 ++ custom_formats/2160p Quality Tier 2.yml | 36 + custom_formats/2160p Quality Tier 3.yml | 56 ++ custom_formats/2160p Quality Tier 4.yml | 51 ++ custom_formats/2160p Quality Tier 5.yml | 236 ++++++ custom_formats/2160p Quality Tier 6.yml | 91 +++ custom_formats/Amazon Prime (1080p).yml | 64 ++ custom_formats/Amazon Prime (UHD).yml | 64 ++ custom_formats/Apple TV+ (1080p).yml | 45 ++ custom_formats/Apple TV+ (2160p).yml | 45 ++ custom_formats/Disney+ (1080p).yml | 46 ++ custom_formats/Disney+ (2160p).yml | 46 ++ custom_formats/HBO Max (1080p).yml | 45 ++ custom_formats/HBO Max (2160p).yml | 45 ++ custom_formats/HDR10 (Missing).yml | 10 +- custom_formats/Hulu (1080p).yml | 45 ++ custom_formats/Hulu (2160p).yml | 45 ++ custom_formats/Max (1080p).yml | 46 ++ custom_formats/Max (2160p).yml | 46 ++ custom_formats/Movies Anywhere (1080p).yml | 27 + custom_formats/Movies Anywhere (2160p).yml | 27 + custom_formats/Netflix (1080p).yml | 45 ++ custom_formats/Netflix (2160p).yml | 45 ++ custom_formats/Paramount+ (1080p).yml | 45 ++ custom_formats/Paramount+ (2160p).yml | 45 ++ custom_formats/Peacock (1080p).yml | 45 ++ custom_formats/Peacock (2160p).yml | 45 ++ custom_formats/Roku (1080p).yml | 45 ++ custom_formats/Roku (2160p).yml | 45 ++ custom_formats/SDR.yml | 32 + custom_formats/Unknown Lossless Audio.yml | 63 ++ custom_formats/Unwanted x265 Groups.yml | 72 +- custom_formats/iTunes (1080p).yml | 46 ++ custom_formats/iTunes (2160p).yml | 46 ++ custom_formats/x264 (2160p).yml | 17 + custom_formats/x265 (1080p).yml | 17 + custom_formats/x265 (Missing 2160p).yml | 50 ++ group_tiers/2160p Quality.json | 829 +++++++++++++++++++++ profiles/1080p Balanced.yml | 21 +- profiles/1080p Quality (HDR).yml | 20 +- profiles/1080p Quality.yml | 19 +- profiles/2160p Quality.yml | 242 ++++++ profiles/2160p Remux.yml | 20 +- regex_patterns/10bit-HDS.yml | 6 + regex_patterns/4K4U.yml | 6 + regex_patterns/4KDVS.yml | 6 + regex_patterns/AAAUHD.yml | 6 + regex_patterns/ADE.yml | 6 + regex_patterns/AViATOR.yml | 6 + regex_patterns/Absinth.yml | 6 + regex_patterns/BLUEBIRD.yml | 6 + regex_patterns/BOREDOR.yml | 6 + regex_patterns/BSTD.yml | 6 + regex_patterns/BeiTa.yml | 6 + regex_patterns/BeiTai.yml | 6 + regex_patterns/BiTOR.yml | 6 + regex_patterns/BlzT.yml | 6 + regex_patterns/Blzt.yml | 6 + regex_patterns/CHAOS.yml | 6 + regex_patterns/CHD.yml | 6 + regex_patterns/CMCT.yml | 6 + regex_patterns/ChopperHitler.yml | 6 + regex_patterns/DEFLATE.yml | 6 + regex_patterns/DEPTH.yml | 6 + regex_patterns/DESPACiTO.yml | 6 + regex_patterns/DTS-X.yml | 26 +- regex_patterns/DiNAMiC.yml | 6 + regex_patterns/EMERALD.yml | 6 + regex_patterns/ENDSTATiON.yml | 6 + regex_patterns/EX-R.yml | 6 + regex_patterns/FLAME.yml | 6 + regex_patterns/FRDS.yml | 6 + regex_patterns/FZHD.yml | 6 + regex_patterns/GUHZER.yml | 6 + regex_patterns/HD77.yml | 6 + regex_patterns/HDC.yml | 6 + regex_patterns/HDChina.yml | 6 + regex_patterns/HDH.yml | 6 + regex_patterns/HDR10 (Missing Groups).yml | 2 +- regex_patterns/HDS.yml | 6 + regex_patterns/HDmux.yml | 6 + regex_patterns/HOA.yml | 6 + regex_patterns/HONE.yml | 6 + regex_patterns/HQMUX.yml | 6 + regex_patterns/HUNTJR.yml | 6 + regex_patterns/Hares.yml | 6 + regex_patterns/HypStu.yml | 6 + regex_patterns/IAMABLE.yml | 6 + regex_patterns/JustWatch.yml | 6 + regex_patterns/KAN3D2M.yml | 6 + regex_patterns/KNiVES.yml | 6 + regex_patterns/Kitsune.yml | 6 + regex_patterns/LAMA.yml | 6 + regex_patterns/LAZARUS.yml | 6 + regex_patterns/LSt.yml | 6 + regex_patterns/LYS.yml | 6 + regex_patterns/LittleBakas.yml | 6 + regex_patterns/Lucifer.yml | 6 + regex_patterns/MALUS.yml | 6 + regex_patterns/MainFrame.yml | 6 + regex_patterns/MiMiC.yml | 6 + regex_patterns/NorTekst.yml | 6 + regex_patterns/PHOCiS.yml | 6 + regex_patterns/PRiSTiNE.yml | 6 + regex_patterns/PTH.yml | 6 + regex_patterns/PussyFoot.yml | 6 + regex_patterns/R.yml | 6 + regex_patterns/REBORN.yml | 6 + regex_patterns/RandH.yml | 6 + regex_patterns/ReQuEsT.yml | 6 + regex_patterns/ReaLHD.yml | 6 + regex_patterns/SESKAPiLE.yml | 6 + regex_patterns/SMAHAWUG.yml | 6 + regex_patterns/SP4K.yml | 6 + regex_patterns/SPECTACLE.yml | 6 + regex_patterns/SPHD.yml | 6 + regex_patterns/STRiKES.yml | 6 + regex_patterns/SURCODE.yml | 6 + regex_patterns/SWAGGERUHD.yml | 6 + regex_patterns/SWTYBLZ.yml | 6 + regex_patterns/SoLaR.yml | 6 + regex_patterns/SumVision.yml | 6 + regex_patterns/TERMiNAL.yml | 6 + regex_patterns/THREESOME.yml | 6 + regex_patterns/TOMBCRUISE.yml | 6 + regex_patterns/TUSAHD.yml | 6 + regex_patterns/Tigole.yml | 6 + regex_patterns/TnP.yml | 6 + regex_patterns/Tron.yml | 6 + regex_patterns/UHDCLUBREMUX.yml | 6 + regex_patterns/ULTRAHDCLUB.yml | 6 + regex_patterns/UNK.yml | 6 + regex_patterns/VALiS.yml | 6 + regex_patterns/Verus.yml | 6 + regex_patterns/WATCHABLE.yml | 6 + regex_patterns/WOU.yml | 6 + regex_patterns/WhiteRhino.yml | 6 + regex_patterns/WiKi.yml | 6 + regex_patterns/aviator.yml | 6 + regex_patterns/b0mbardiers.yml | 6 + regex_patterns/beAst.yml | 6 + regex_patterns/c0kE.yml | 6 + regex_patterns/d3g-d3g.yml | 6 + regex_patterns/d3g.yml | 6 + regex_patterns/dkore.yml | 6 + regex_patterns/edge2020.yml | 6 + regex_patterns/guhzer.yml | 6 + regex_patterns/iCandy.yml | 6 + regex_patterns/iNVANDRAREN.yml | 6 + regex_patterns/invandraren.yml | 6 + regex_patterns/k00kie.yml | 6 + regex_patterns/micius.yml | 6 + regex_patterns/spectacle.yml | 6 + regex_patterns/threesome.yml | 6 + regex_patterns/whiterhino.yml | 6 + scripts/tierCreator.py | 210 ++++++ templates/groupTier.yml | 16 + templates/releaseGroup.yml | 6 + 161 files changed, 4121 insertions(+), 55 deletions(-) create mode 100644 custom_formats/2160p Balanced Tier 1.yml create mode 100644 custom_formats/2160p Balanced Tier 2.yml create mode 100644 custom_formats/2160p Quality Tier 1.yml create mode 100644 custom_formats/2160p Quality Tier 2.yml create mode 100644 custom_formats/2160p Quality Tier 3.yml create mode 100644 custom_formats/2160p Quality Tier 4.yml create mode 100644 custom_formats/2160p Quality Tier 5.yml create mode 100644 custom_formats/2160p Quality Tier 6.yml create mode 100644 custom_formats/Amazon Prime (1080p).yml create mode 100644 custom_formats/Amazon Prime (UHD).yml create mode 100644 custom_formats/Apple TV+ (1080p).yml create mode 100644 custom_formats/Apple TV+ (2160p).yml create mode 100644 custom_formats/Disney+ (1080p).yml create mode 100644 custom_formats/Disney+ (2160p).yml create mode 100644 custom_formats/HBO Max (1080p).yml create mode 100644 custom_formats/HBO Max (2160p).yml create mode 100644 custom_formats/Hulu (1080p).yml create mode 100644 custom_formats/Hulu (2160p).yml create mode 100644 custom_formats/Max (1080p).yml create mode 100644 custom_formats/Max (2160p).yml create mode 100644 custom_formats/Movies Anywhere (1080p).yml create mode 100644 custom_formats/Movies Anywhere (2160p).yml create mode 100644 custom_formats/Netflix (1080p).yml create mode 100644 custom_formats/Netflix (2160p).yml create mode 100644 custom_formats/Paramount+ (1080p).yml create mode 100644 custom_formats/Paramount+ (2160p).yml create mode 100644 custom_formats/Peacock (1080p).yml create mode 100644 custom_formats/Peacock (2160p).yml create mode 100644 custom_formats/Roku (1080p).yml create mode 100644 custom_formats/Roku (2160p).yml create mode 100644 custom_formats/SDR.yml create mode 100644 custom_formats/Unknown Lossless Audio.yml create mode 100644 custom_formats/iTunes (1080p).yml create mode 100644 custom_formats/iTunes (2160p).yml create mode 100644 custom_formats/x264 (2160p).yml create mode 100644 custom_formats/x265 (1080p).yml create mode 100644 custom_formats/x265 (Missing 2160p).yml create mode 100644 group_tiers/2160p Quality.json create mode 100644 profiles/2160p Quality.yml create mode 100644 regex_patterns/10bit-HDS.yml create mode 100644 regex_patterns/4K4U.yml create mode 100644 regex_patterns/4KDVS.yml create mode 100644 regex_patterns/AAAUHD.yml create mode 100644 regex_patterns/ADE.yml create mode 100644 regex_patterns/AViATOR.yml create mode 100644 regex_patterns/Absinth.yml create mode 100644 regex_patterns/BLUEBIRD.yml create mode 100644 regex_patterns/BOREDOR.yml create mode 100644 regex_patterns/BSTD.yml create mode 100644 regex_patterns/BeiTa.yml create mode 100644 regex_patterns/BeiTai.yml create mode 100644 regex_patterns/BiTOR.yml create mode 100644 regex_patterns/BlzT.yml create mode 100644 regex_patterns/Blzt.yml create mode 100644 regex_patterns/CHAOS.yml create mode 100644 regex_patterns/CHD.yml create mode 100644 regex_patterns/CMCT.yml create mode 100644 regex_patterns/ChopperHitler.yml create mode 100644 regex_patterns/DEFLATE.yml create mode 100644 regex_patterns/DEPTH.yml create mode 100644 regex_patterns/DESPACiTO.yml create mode 100644 regex_patterns/DiNAMiC.yml create mode 100644 regex_patterns/EMERALD.yml create mode 100644 regex_patterns/ENDSTATiON.yml create mode 100644 regex_patterns/EX-R.yml create mode 100644 regex_patterns/FLAME.yml create mode 100644 regex_patterns/FRDS.yml create mode 100644 regex_patterns/FZHD.yml create mode 100644 regex_patterns/GUHZER.yml create mode 100644 regex_patterns/HD77.yml create mode 100644 regex_patterns/HDC.yml create mode 100644 regex_patterns/HDChina.yml create mode 100644 regex_patterns/HDH.yml create mode 100644 regex_patterns/HDS.yml create mode 100644 regex_patterns/HDmux.yml create mode 100644 regex_patterns/HOA.yml create mode 100644 regex_patterns/HONE.yml create mode 100644 regex_patterns/HQMUX.yml create mode 100644 regex_patterns/HUNTJR.yml create mode 100644 regex_patterns/Hares.yml create mode 100644 regex_patterns/HypStu.yml create mode 100644 regex_patterns/IAMABLE.yml create mode 100644 regex_patterns/JustWatch.yml create mode 100644 regex_patterns/KAN3D2M.yml create mode 100644 regex_patterns/KNiVES.yml create mode 100644 regex_patterns/Kitsune.yml create mode 100644 regex_patterns/LAMA.yml create mode 100644 regex_patterns/LAZARUS.yml create mode 100644 regex_patterns/LSt.yml create mode 100644 regex_patterns/LYS.yml create mode 100644 regex_patterns/LittleBakas.yml create mode 100644 regex_patterns/Lucifer.yml create mode 100644 regex_patterns/MALUS.yml create mode 100644 regex_patterns/MainFrame.yml create mode 100644 regex_patterns/MiMiC.yml create mode 100644 regex_patterns/NorTekst.yml create mode 100644 regex_patterns/PHOCiS.yml create mode 100644 regex_patterns/PRiSTiNE.yml create mode 100644 regex_patterns/PTH.yml create mode 100644 regex_patterns/PussyFoot.yml create mode 100644 regex_patterns/R.yml create mode 100644 regex_patterns/REBORN.yml create mode 100644 regex_patterns/RandH.yml create mode 100644 regex_patterns/ReQuEsT.yml create mode 100644 regex_patterns/ReaLHD.yml create mode 100644 regex_patterns/SESKAPiLE.yml create mode 100644 regex_patterns/SMAHAWUG.yml create mode 100644 regex_patterns/SP4K.yml create mode 100644 regex_patterns/SPECTACLE.yml create mode 100644 regex_patterns/SPHD.yml create mode 100644 regex_patterns/STRiKES.yml create mode 100644 regex_patterns/SURCODE.yml create mode 100644 regex_patterns/SWAGGERUHD.yml create mode 100644 regex_patterns/SWTYBLZ.yml create mode 100644 regex_patterns/SoLaR.yml create mode 100644 regex_patterns/SumVision.yml create mode 100644 regex_patterns/TERMiNAL.yml create mode 100644 regex_patterns/THREESOME.yml create mode 100644 regex_patterns/TOMBCRUISE.yml create mode 100644 regex_patterns/TUSAHD.yml create mode 100644 regex_patterns/Tigole.yml create mode 100644 regex_patterns/TnP.yml create mode 100644 regex_patterns/Tron.yml create mode 100644 regex_patterns/UHDCLUBREMUX.yml create mode 100644 regex_patterns/ULTRAHDCLUB.yml create mode 100644 regex_patterns/UNK.yml create mode 100644 regex_patterns/VALiS.yml create mode 100644 regex_patterns/Verus.yml create mode 100644 regex_patterns/WATCHABLE.yml create mode 100644 regex_patterns/WOU.yml create mode 100644 regex_patterns/WhiteRhino.yml create mode 100644 regex_patterns/WiKi.yml create mode 100644 regex_patterns/aviator.yml create mode 100644 regex_patterns/b0mbardiers.yml create mode 100644 regex_patterns/beAst.yml create mode 100644 regex_patterns/c0kE.yml create mode 100644 regex_patterns/d3g-d3g.yml create mode 100644 regex_patterns/d3g.yml create mode 100644 regex_patterns/dkore.yml create mode 100644 regex_patterns/edge2020.yml create mode 100644 regex_patterns/guhzer.yml create mode 100644 regex_patterns/iCandy.yml create mode 100644 regex_patterns/iNVANDRAREN.yml create mode 100644 regex_patterns/invandraren.yml create mode 100644 regex_patterns/k00kie.yml create mode 100644 regex_patterns/micius.yml create mode 100644 regex_patterns/spectacle.yml create mode 100644 regex_patterns/threesome.yml create mode 100644 regex_patterns/whiterhino.yml create mode 100644 scripts/tierCreator.py create mode 100644 templates/groupTier.yml create mode 100644 templates/releaseGroup.yml diff --git a/README.md b/README.md index 1cd62fc..5f08065 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,37 @@ Contains thoroughly tested and verified database entries ready for production us Contains the latest updates and additions that are pending formal verification. May include experimental patterns and profiles that require further testing. -### Feature Branches +## Scripts -Used for developing and testing new database entries, patterns, or major changes before merging into dev. These branches follow the naming convention: `feature/description-of-change` +The repository includes utility scripts to help maintain and generate database entries. + +### Tier Creator + +A Python script that generates Custom Formats and Regex Patterns from tier data files. + +**Location**: `/scripts/tierCreator.py` + +**Usage**: + +```bash +python tierCreator.py --resolution --type [--dry-run] +``` + +**Arguments**: + +- `json_file`: Path to a JSON file in `/tiers` containing release group tier data +- `--resolution`: One of: SD, 720p, 1080p, 2160p +- `--type`: One of: Quality, Balanced +- `--dry-run`: Optional flag to preview changes without writing files + +**Example**: + +```bash +python tierCreator.py ../tiers/2160p_quality.json --resolution 2160p --type Quality +``` + +The script will: + +1. Read the tier data from the specified JSON file +2. Create regex patterns in `/regex_patterns` for any release groups that don't have one +3. Generate custom formats in `/custom_formats` for each tier diff --git a/custom_formats/2160p Balanced Tier 1.yml b/custom_formats/2160p Balanced Tier 1.yml new file mode 100644 index 0000000..b7eb64a --- /dev/null +++ b/custom_formats/2160p Balanced Tier 1.yml @@ -0,0 +1,95 @@ +name: 2160p Balanced Tier 1 +description: Matches release groups who fall under 2160p Balanced Tier 1 +tags: +- Release Group +- Tier +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: HONE + type: release_title + required: false + negate: false + pattern: HONE +tests: +- conditionResults: + - matches: true + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: false + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 1 + input: Contact.1997.BluRay.1080p.DDP.5.1.x264-hallowed + lastRun: '2025-01-13T02:53:37.357699' + passes: true +- conditionResults: + - matches: true + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: false + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 2 + input: Gladiator.2000.Extended.Cut.UHD.BluRay.2160p.DDP.7.1.DV.HDR.x265-hallowed + lastRun: '2025-01-13T02:53:37.357699' + passes: true +- conditionResults: + - matches: false + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: true + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 3 + input: Yi Yi 2000 BluRay 720p DD 2 0 x264-BHDStudio + lastRun: '2025-01-13T02:53:37.357699' + passes: true +- conditionResults: + - matches: false + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: true + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 4 + input: Winnie the Pooh - Blood and Honey (2023) 2160p UHD BluRay x265 DV HDR DD + 5.1 English-BHDStudio + lastRun: '2025-01-13T02:53:37.357699' + passes: true diff --git a/custom_formats/2160p Balanced Tier 2.yml b/custom_formats/2160p Balanced Tier 2.yml new file mode 100644 index 0000000..234deec --- /dev/null +++ b/custom_formats/2160p Balanced Tier 2.yml @@ -0,0 +1,100 @@ +name: 2160p Balanced Tier 2 +description: Matches release groups who fall under 2160p Balanced Tier 2 +tags: +- Release Group +- Tier +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: hallowed + type: release_group + required: false + negate: false + pattern: hallowed +- name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group +tests: +- conditionResults: + - matches: true + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: false + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 1 + input: Contact.1997.BluRay.1080p.DDP.5.1.x264-hallowed + lastRun: '2025-01-13T02:53:37.357699' + passes: true +- conditionResults: + - matches: true + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: false + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 2 + input: Gladiator.2000.Extended.Cut.UHD.BluRay.2160p.DDP.7.1.DV.HDR.x265-hallowed + lastRun: '2025-01-13T02:53:37.357699' + passes: true +- conditionResults: + - matches: false + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: true + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 3 + input: Yi Yi 2000 BluRay 720p DD 2 0 x264-BHDStudio + lastRun: '2025-01-13T02:53:37.357699' + passes: true +- conditionResults: + - matches: false + name: hallowed + negate: false + pattern: hallowed + required: false + type: release_group + - matches: true + name: BHDStudio + negate: false + pattern: BHDStudio + required: false + type: release_group + expected: true + id: 4 + input: Winnie the Pooh - Blood and Honey (2023) 2160p UHD BluRay x265 DV HDR DD + 5.1 English-BHDStudio + lastRun: '2025-01-13T02:53:37.357699' + passes: true diff --git a/custom_formats/2160p Quality Tier 1.yml b/custom_formats/2160p Quality Tier 1.yml new file mode 100644 index 0000000..083e51a --- /dev/null +++ b/custom_formats/2160p Quality Tier 1.yml @@ -0,0 +1,56 @@ +name: 2160p Quality Tier 1 +description: Matches release groups who fall under 2160p Quality Tier 1 +tags: +- Release Group +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: DON + negate: false + pattern: DON + required: false + type: release_group +- name: DEPTH + negate: false + pattern: DEPTH + required: false + type: release_group +- name: HQMUX + negate: false + pattern: HQMUX + required: false + type: release_group +- name: b0mbardiers + negate: false + pattern: b0mbardiers + required: false + type: release_group +- name: CtrlHD + negate: false + pattern: CtrlHD + required: false + type: release_group +- name: PTer + negate: false + pattern: PTer + required: false + type: release_group +- name: SA89 + negate: false + pattern: SA89 + required: false + type: release_group +- name: W4NK3R + negate: false + pattern: W4NK3R + required: false + type: release_group +tests: [] diff --git a/custom_formats/2160p Quality Tier 2.yml b/custom_formats/2160p Quality Tier 2.yml new file mode 100644 index 0000000..566fb27 --- /dev/null +++ b/custom_formats/2160p Quality Tier 2.yml @@ -0,0 +1,36 @@ +name: 2160p Quality Tier 2 +description: Matches release groups who fall under 2160p Quality Tier 2 +tags: +- Release Group +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: BSTD + negate: false + pattern: BSTD + required: false + type: release_group +- name: c0kE + negate: false + pattern: c0kE + required: false + type: release_group +- name: D-Z0N3 + negate: false + pattern: D-Z0N3 + required: false + type: release_group +- name: MainFrame + negate: false + pattern: MainFrame + required: false + type: release_group +tests: [] diff --git a/custom_formats/2160p Quality Tier 3.yml b/custom_formats/2160p Quality Tier 3.yml new file mode 100644 index 0000000..f743bd8 --- /dev/null +++ b/custom_formats/2160p Quality Tier 3.yml @@ -0,0 +1,56 @@ +name: 2160p Quality Tier 3 +description: Matches release groups who fall under 2160p Quality Tier 3 +tags: +- Release Group +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: JustWatch + negate: false + pattern: JustWatch + required: false + type: release_group +- name: DEFLATE + negate: false + pattern: DEFLATE + required: false + type: release_group +- name: REBORN + negate: false + pattern: REBORN + required: false + type: release_group +- name: SURCODE + negate: false + pattern: SURCODE + required: false + type: release_group +- name: Chotab + negate: false + pattern: Chotab + required: false + type: release_group +- name: SPHD + negate: false + pattern: SPHD + required: false + type: release_group +- name: Kitsune + negate: false + pattern: Kitsune + required: false + type: release_group +- name: TnP + negate: false + pattern: TnP + required: false + type: release_group +tests: [] diff --git a/custom_formats/2160p Quality Tier 4.yml b/custom_formats/2160p Quality Tier 4.yml new file mode 100644 index 0000000..d9da59a --- /dev/null +++ b/custom_formats/2160p Quality Tier 4.yml @@ -0,0 +1,51 @@ +name: 2160p Quality Tier 4 +description: Matches release groups who fall under 2160p Quality Tier 4 +tags: +- Release Group +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: 4KDVS + negate: false + pattern: 4KDVS + required: false + type: release_group +- name: TDD + negate: false + pattern: TDD + required: false + type: release_group +- name: NCmt + negate: false + pattern: NCmt + required: false + type: release_group +- name: IAMABLE + negate: false + pattern: IAMABLE + required: false + type: release_group +- name: BlzT + negate: false + pattern: BlzT + required: false + type: release_group +- name: WATCHABLE + negate: false + pattern: WATCHABLE + required: false + type: release_group +- name: iFT + negate: false + pattern: iFT + required: false + type: release_group +tests: [] diff --git a/custom_formats/2160p Quality Tier 5.yml b/custom_formats/2160p Quality Tier 5.yml new file mode 100644 index 0000000..775f121 --- /dev/null +++ b/custom_formats/2160p Quality Tier 5.yml @@ -0,0 +1,236 @@ +name: 2160p Quality Tier 5 +description: Matches release groups who fall under 2160p Quality Tier 5 +tags: +- Release Group +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: SoLaR + negate: false + pattern: SoLaR + required: false + type: release_group +- name: SMAHAWUG + negate: false + pattern: SMAHAWUG + required: false + type: release_group +- name: MiMiC + negate: false + pattern: MiMiC + required: false + type: release_group +- name: HypStu + negate: false + pattern: HypStu + required: false + type: release_group +- name: KAN3D2M + negate: false + pattern: KAN3D2M + required: false + type: release_group +- name: FRDS + negate: false + pattern: FRDS + required: false + type: release_group +- name: EDPH + negate: false + pattern: EDPH + required: false + type: release_group +- name: PussyFoot + negate: false + pattern: PussyFoot + required: false + type: release_group +- name: KNiVES + negate: false + pattern: KNiVES + required: false + type: release_group +- name: STRiKES + negate: false + pattern: STRiKES + required: false + type: release_group +- name: TOMBCRUISE + negate: false + pattern: TOMBCRUISE + required: false + type: release_group +- name: CMCT + negate: false + pattern: CMCT + required: false + type: release_group +- name: TERMiNAL + negate: false + pattern: TERMiNAL + required: false + type: release_group +- name: whiterhino + negate: false + pattern: whiterhino + required: false + type: release_group +- name: ReaLHD + negate: false + pattern: ReaLHD + required: false + type: release_group +- name: EMERALD + negate: false + pattern: EMERALD + required: false + type: release_group +- name: ULTRAHDCLUB + negate: false + pattern: ULTRAHDCLUB + required: false + type: release_group +- name: CHD + negate: false + pattern: CHD + required: false + type: release_group +- name: SWTYBLZ + negate: false + pattern: SWTYBLZ + required: false + type: release_group +- name: LAZARUS + negate: false + pattern: LAZARUS + required: false + type: release_group +- name: ESiR + negate: false + pattern: ESiR + required: false + type: release_group +- name: beAst + negate: false + pattern: beAst + required: false + type: release_group +- name: WiKi + negate: false + pattern: WiKi + required: false + type: release_group +- name: SPECTACLE + negate: false + pattern: SPECTACLE + required: false + type: release_group +- name: spectacle + negate: false + pattern: spectacle + required: false + type: release_group +- name: HD77 + negate: false + pattern: HD77 + required: false + type: release_group +- name: k00kie + negate: false + pattern: k00kie + required: false + type: release_group +- name: HDS + negate: false + pattern: HDS + required: false + type: release_group +- name: ADE + negate: false + pattern: ADE + required: false + type: release_group +- name: VALiS + negate: false + pattern: VALiS + required: false + type: release_group +- name: iNVANDRAREN + negate: false + pattern: iNVANDRAREN + required: false + type: release_group +- name: BiTOR + negate: false + pattern: BiTOR + required: false + type: release_group +- name: HDmux + negate: false + pattern: HDmux + required: false + type: release_group +- name: ReQuEsT + negate: false + pattern: ReQuEsT + required: false + type: release_group +- name: Absinth + negate: false + pattern: Absinth + required: false + type: release_group +- name: AViATOR + negate: false + pattern: AViATOR + required: false + type: release_group +- name: Tron + negate: false + pattern: Tron + required: false + type: release_group +- name: HDChina + negate: false + pattern: HDChina + required: false + type: release_group +- name: SWAGGERUHD + negate: false + pattern: SWAGGERUHD + required: false + type: release_group +- name: AAAUHD + negate: false + pattern: AAAUHD + required: false + type: release_group +- name: guhzer + negate: false + pattern: guhzer + required: false + type: release_group +- name: GUHZER + negate: false + pattern: GUHZER + required: false + type: release_group +- name: HUNTJR + negate: false + pattern: HUNTJR + required: false + type: release_group +- name: iCandy + negate: false + pattern: iCandy + required: false + type: release_group +tests: [] diff --git a/custom_formats/2160p Quality Tier 6.yml b/custom_formats/2160p Quality Tier 6.yml new file mode 100644 index 0000000..0cfb17c --- /dev/null +++ b/custom_formats/2160p Quality Tier 6.yml @@ -0,0 +1,91 @@ +name: 2160p Quality Tier 6 +description: Matches release groups who fall under 2160p Quality Tier 6 +tags: +- Release Group +conditions: +- name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: micius + negate: false + pattern: micius + required: false + type: release_group +- name: BOREDOR + negate: false + pattern: BOREDOR + required: false + type: release_group +- name: threesome + negate: false + pattern: threesome + required: false + type: release_group +- name: Blzt + negate: false + pattern: Blzt + required: false + type: release_group +- name: LittleBakas + negate: false + pattern: LittleBakas + required: false + type: release_group +- name: PTH + negate: false + pattern: PTH + required: false + type: release_group +- name: CHAOS + negate: false + pattern: CHAOS + required: false + type: release_group +- name: Hares + negate: false + pattern: Hares + required: false + type: release_group +- name: BLUEBIRD + negate: false + pattern: BLUEBIRD + required: false + type: release_group +- name: BeiTai + negate: false + pattern: BeiTai + required: false + type: release_group +- name: FLAME + negate: false + pattern: FLAME + required: false + type: release_group +- name: UHDCLUBREMUX + negate: false + pattern: UHDCLUBREMUX + required: false + type: release_group +- name: invandraren + negate: false + pattern: invandraren + required: false + type: release_group +- name: dkore + negate: false + pattern: dkore + required: false + type: release_group +- name: Lucifer + negate: false + pattern: Lucifer + required: false + type: release_group +tests: [] diff --git a/custom_formats/Amazon Prime (1080p).yml b/custom_formats/Amazon Prime (1080p).yml new file mode 100644 index 0000000..602fa0b --- /dev/null +++ b/custom_formats/Amazon Prime (1080p).yml @@ -0,0 +1,64 @@ +name: Amazon Prime [1080p] +description: Matches 1080p 'Amazon Prime' WEB-DLs, unique to the 2160p Quality profile +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + negate: false + required: true + resolution: 1080p + type: resolution +- name: AMZN Regex + negate: false + pattern: Amazon Prime + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: AMZN Regex + negate: false + pattern: Amazon Prime + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: The Bad Guys (2022) (1080p AMZN Webrip x265 10bit EAC3 5 1 - ArcX)[TAoE] + lastRun: '2025-01-14T09:45:16.007149' + passes: true +- conditionResults: + - matches: true + name: AMZN Regex + negate: false + pattern: Amazon Prime + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Top Gun Maverick (2022) IMAX (1080p AMZN WEB-DL x265 SDR DDP Atmos 5.1 English + - Goki TAoE) + lastRun: '2025-01-14T09:45:16.007149' + passes: true diff --git a/custom_formats/Amazon Prime (UHD).yml b/custom_formats/Amazon Prime (UHD).yml new file mode 100644 index 0000000..7ab8103 --- /dev/null +++ b/custom_formats/Amazon Prime (UHD).yml @@ -0,0 +1,64 @@ +name: Amazon Prime [UHD] +description: Matches 4k 'Amazon Prime' WEB-DLs, unique to the 2160p Quality profile +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + type: resolution + required: true + negate: false + resolution: 2160p +- name: AMZN Regex + negate: false + pattern: Amazon Prime + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: AMZN Regex + negate: false + pattern: Amazon Prime + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: The Bad Guys (2022) (1080p AMZN Webrip x265 10bit EAC3 5 1 - ArcX)[TAoE] + lastRun: '2025-01-14T09:45:16.007149' + passes: true +- conditionResults: + - matches: true + name: AMZN Regex + negate: false + pattern: Amazon Prime + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Top Gun Maverick (2022) IMAX (1080p AMZN WEB-DL x265 SDR DDP Atmos 5.1 English + - Goki TAoE) + lastRun: '2025-01-14T09:45:16.007149' + passes: true diff --git a/custom_formats/Apple TV+ (1080p).yml b/custom_formats/Apple TV+ (1080p).yml new file mode 100644 index 0000000..a25aa7a --- /dev/null +++ b/custom_formats/Apple TV+ (1080p).yml @@ -0,0 +1,45 @@ +name: Apple TV+ [1080p] +description: Matches 1080p 'Apple TV+' WEB-DLs, unique to the 2160p Quality profile +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: APTV Regex + negate: false + pattern: Apple TV+ + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: APTV Regex + negate: false + pattern: Apple TV+ + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Little America 2020 S01 1080p APTV Webrip x265 10bit EAC3 5 1 - Ainz + lastRun: '2024-12-03T02:27:03.531343' + passes: true diff --git a/custom_formats/Apple TV+ (2160p).yml b/custom_formats/Apple TV+ (2160p).yml new file mode 100644 index 0000000..dd443a1 --- /dev/null +++ b/custom_formats/Apple TV+ (2160p).yml @@ -0,0 +1,45 @@ +name: Apple TV+ [2160p] +description: Matches 2160p 'Apple TV+' WEB-DLs, unique to the 2160p Quality profile +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: APTV Regex + negate: false + pattern: Apple TV+ + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: APTV Regex + negate: false + pattern: Apple TV+ + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Little America 2020 S01 1080p APTV Webrip x265 10bit EAC3 5 1 - Ainz + lastRun: '2024-12-03T02:27:03.531343' + passes: true diff --git a/custom_formats/Disney+ (1080p).yml b/custom_formats/Disney+ (1080p).yml new file mode 100644 index 0000000..720895b --- /dev/null +++ b/custom_formats/Disney+ (1080p).yml @@ -0,0 +1,46 @@ +name: Disney+ [1080p] +description: Matches 1080p 'Disney+' WEB-DLs, unique to the 2160p Quality profile +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + negate: false + required: true + resolution: 1080p + type: resolution +- name: DNSP Regex + negate: false + pattern: Disney+ + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: DNSP Regex + negate: false + pattern: Disney+ + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: The Simpsons (1989) S36E05 Treehouse of Horror XXXV (1080p DSNP Webrip x265 + 10bit EAC3 5 1 - Goki)[TAoE] + lastRun: '2024-12-03T16:31:38.572151' + passes: true diff --git a/custom_formats/Disney+ (2160p).yml b/custom_formats/Disney+ (2160p).yml new file mode 100644 index 0000000..f862f9e --- /dev/null +++ b/custom_formats/Disney+ (2160p).yml @@ -0,0 +1,46 @@ +name: Disney+ [2160p] +description: Matches 1080p 'Disney+' WEB-DLs, unique to the 2160p Quality profile +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: DNSP Regex + negate: false + pattern: Disney+ + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: DNSP Regex + negate: false + pattern: Disney+ + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: The Simpsons (1989) S36E05 Treehouse of Horror XXXV (1080p DSNP Webrip x265 + 10bit EAC3 5 1 - Goki)[TAoE] + lastRun: '2024-12-03T16:31:38.572151' + passes: true diff --git a/custom_formats/HBO Max (1080p).yml b/custom_formats/HBO Max (1080p).yml new file mode 100644 index 0000000..f54c26b --- /dev/null +++ b/custom_formats/HBO Max (1080p).yml @@ -0,0 +1,45 @@ +name: HBO Max [1080p] +description: Matches 1080p 'HBO Max' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: HMAX Regex + negate: false + pattern: HBO Max + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: HMAX Regex + negate: false + pattern: HBO Max + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Young Justice S04 1080p HMAX WEBRip DD 5 1 x265-edge2020 + lastRun: '2024-12-06T04:51:30.887518' + passes: true diff --git a/custom_formats/HBO Max (2160p).yml b/custom_formats/HBO Max (2160p).yml new file mode 100644 index 0000000..c9c563c --- /dev/null +++ b/custom_formats/HBO Max (2160p).yml @@ -0,0 +1,45 @@ +name: HBO Max [2160p] +description: Matches 2160p 'HBO Max' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: HMAX Regex + negate: false + pattern: HBO Max + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: HMAX Regex + negate: false + pattern: HBO Max + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Young Justice S04 1080p HMAX WEBRip DD 5 1 x265-edge2020 + lastRun: '2024-12-06T04:51:30.887518' + passes: true diff --git a/custom_formats/HDR10 (Missing).yml b/custom_formats/HDR10 (Missing).yml index f4b81fc..a1dcea3 100644 --- a/custom_formats/HDR10 (Missing).yml +++ b/custom_formats/HDR10 (Missing).yml @@ -4,6 +4,11 @@ tags: - Colour Grade - HDR conditions: +- name: Blu-ray + type: source + required: true + negate: false + source: bluray - name: Not HDR10 negate: true pattern: HDR10 @@ -19,11 +24,6 @@ conditions: required: true resolution: 2160p type: resolution -- name: Missing Groups - negate: false - pattern: HDR10 (Missing Groups) - required: true - type: release_title - name: Not SDR negate: true pattern: SDR diff --git a/custom_formats/Hulu (1080p).yml b/custom_formats/Hulu (1080p).yml new file mode 100644 index 0000000..75d06dd --- /dev/null +++ b/custom_formats/Hulu (1080p).yml @@ -0,0 +1,45 @@ +name: Hulu [1080p] +description: Matches 1080p 'Hulu' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: Hulu Regex + negate: false + pattern: Hulu + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: Hulu Regex + negate: false + pattern: Hulu + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Beverly Hills Ninja (1996) 1080p HULU WEB-DL x265 HEVC DDP 5.1-PHOCiS + lastRun: '2024-12-06T05:29:49.598013' + passes: true diff --git a/custom_formats/Hulu (2160p).yml b/custom_formats/Hulu (2160p).yml new file mode 100644 index 0000000..26741c8 --- /dev/null +++ b/custom_formats/Hulu (2160p).yml @@ -0,0 +1,45 @@ +name: Hulu [2160p] +description: Matches 2160p 'Hulu' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: Hulu Regex + negate: false + pattern: Hulu + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: Hulu Regex + negate: false + pattern: Hulu + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Beverly Hills Ninja (1996) 1080p HULU WEB-DL x265 HEVC DDP 5.1-PHOCiS + lastRun: '2024-12-06T05:29:49.598013' + passes: true diff --git a/custom_formats/Max (1080p).yml b/custom_formats/Max (1080p).yml new file mode 100644 index 0000000..cef09e5 --- /dev/null +++ b/custom_formats/Max (1080p).yml @@ -0,0 +1,46 @@ +name: Max [1080p] +description: Matches 1080p 'Max' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: MAX Regex + negate: false + pattern: Max + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: MAX Regex + negate: false + pattern: Max + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Dune Prophecy (2024) S01E02 Two Wolves (2160p HDR10 DV Hybrid MAX Webrip + x265 10bit EAC3 5 1 Atmos - Goki)[TAoE] + lastRun: '2024-12-06T02:59:11.931629' + passes: true diff --git a/custom_formats/Max (2160p).yml b/custom_formats/Max (2160p).yml new file mode 100644 index 0000000..43250ed --- /dev/null +++ b/custom_formats/Max (2160p).yml @@ -0,0 +1,46 @@ +name: Max [2160p] +description: Matches 2160p 'Max' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: MAX Regex + negate: false + pattern: Max + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: MAX Regex + negate: false + pattern: Max + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Dune Prophecy (2024) S01E02 Two Wolves (2160p HDR10 DV Hybrid MAX Webrip + x265 10bit EAC3 5 1 Atmos - Goki)[TAoE] + lastRun: '2024-12-06T02:59:11.931629' + passes: true diff --git a/custom_formats/Movies Anywhere (1080p).yml b/custom_formats/Movies Anywhere (1080p).yml new file mode 100644 index 0000000..ff7a3cc --- /dev/null +++ b/custom_formats/Movies Anywhere (1080p).yml @@ -0,0 +1,27 @@ +name: Movies Anywhere [1080p] +description: Matches 1080p 'Movies Anywhere' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: MA Regex + negate: false + pattern: Movies Anywhere + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: [] diff --git a/custom_formats/Movies Anywhere (2160p).yml b/custom_formats/Movies Anywhere (2160p).yml new file mode 100644 index 0000000..7a0a52a --- /dev/null +++ b/custom_formats/Movies Anywhere (2160p).yml @@ -0,0 +1,27 @@ +name: Movies Anywhere [2160p] +description: Matches 1080p 'Movies Anywhere' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: MA Regex + negate: false + pattern: Movies Anywhere + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: [] diff --git a/custom_formats/Netflix (1080p).yml b/custom_formats/Netflix (1080p).yml new file mode 100644 index 0000000..2121e64 --- /dev/null +++ b/custom_formats/Netflix (1080p).yml @@ -0,0 +1,45 @@ +name: Netflix [1080p] +description: Matches 1080p 'Netflix' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: NF Regex + negate: false + pattern: Netflix + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: NF Regex + negate: false + pattern: Netflix + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Arcane (2021) S02 (1080p NF WEB-DL x265 HEVC 10bit DDP 5 1 Vyndros) + lastRun: '2024-12-06T05:05:09.422536' + passes: true diff --git a/custom_formats/Netflix (2160p).yml b/custom_formats/Netflix (2160p).yml new file mode 100644 index 0000000..37514b2 --- /dev/null +++ b/custom_formats/Netflix (2160p).yml @@ -0,0 +1,45 @@ +name: Netflix [2160p] +description: Matches 2160p 'Netflix' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: NF Regex + negate: false + pattern: Netflix + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: NF Regex + negate: false + pattern: Netflix + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Arcane (2021) S02 (1080p NF WEB-DL x265 HEVC 10bit DDP 5 1 Vyndros) + lastRun: '2024-12-06T05:05:09.422536' + passes: true diff --git a/custom_formats/Paramount+ (1080p).yml b/custom_formats/Paramount+ (1080p).yml new file mode 100644 index 0000000..427c0d5 --- /dev/null +++ b/custom_formats/Paramount+ (1080p).yml @@ -0,0 +1,45 @@ +name: Paramount+ [1080p] +description: Matches 1080p 'Paramount+' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: PMTP Regex + negate: false + pattern: Paramount+ + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: PMTP Regex + negate: false + pattern: Paramount+ + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Evil 2019 S04 1080p PMTP WEB-DL DDP 5 1 x265 - YELLO + lastRun: '2024-12-06T05:11:34.055223' + passes: true diff --git a/custom_formats/Paramount+ (2160p).yml b/custom_formats/Paramount+ (2160p).yml new file mode 100644 index 0000000..b82e903 --- /dev/null +++ b/custom_formats/Paramount+ (2160p).yml @@ -0,0 +1,45 @@ +name: Paramount+ [2160p] +description: Matches 2160p 'Paramount+' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: PMTP Regex + negate: false + pattern: Paramount+ + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: PMTP Regex + negate: false + pattern: Paramount+ + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Evil 2019 S04 1080p PMTP WEB-DL DDP 5 1 x265 - YELLO + lastRun: '2024-12-06T05:11:34.055223' + passes: true diff --git a/custom_formats/Peacock (1080p).yml b/custom_formats/Peacock (1080p).yml new file mode 100644 index 0000000..ef8b9c9 --- /dev/null +++ b/custom_formats/Peacock (1080p).yml @@ -0,0 +1,45 @@ +name: Peacock [1080p] +description: Matches 1080p 'Peacock' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + negate: false + required: true + resolution: 1080p + type: resolution +- name: PCOK Regex + negate: false + pattern: Peacock TV + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: PCOK Regex + negate: false + pattern: Peacock TV + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Based On A True Story S02 2160p PCOK WEB-DL DDP5 1 DV HDR x265-NTb + lastRun: '2024-12-06T02:45:41.699916' + passes: true diff --git a/custom_formats/Peacock (2160p).yml b/custom_formats/Peacock (2160p).yml new file mode 100644 index 0000000..45381cb --- /dev/null +++ b/custom_formats/Peacock (2160p).yml @@ -0,0 +1,45 @@ +name: Peacock [2160p] +description: Matches 2160p 'Peacock' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: PCOK Regex + negate: false + pattern: Peacock TV + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: PCOK Regex + negate: false + pattern: Peacock TV + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Based On A True Story S02 2160p PCOK WEB-DL DDP5 1 DV HDR x265-NTb + lastRun: '2024-12-06T02:45:41.699916' + passes: true diff --git a/custom_formats/Roku (1080p).yml b/custom_formats/Roku (1080p).yml new file mode 100644 index 0000000..d4f2858 --- /dev/null +++ b/custom_formats/Roku (1080p).yml @@ -0,0 +1,45 @@ +name: Roku [1080p] +description: Matches 1080p 'Roku' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: Roku Regex + negate: false + pattern: Roku + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: Roku Regex + negate: false + pattern: Roku + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Almost Heroes (1998) 1080p ROKU WEB-DL x265 HEVC AAC 2.0-PHOCiS + lastRun: '2024-12-06T05:41:18.535555' + passes: true diff --git a/custom_formats/Roku (2160p).yml b/custom_formats/Roku (2160p).yml new file mode 100644 index 0000000..20eb19b --- /dev/null +++ b/custom_formats/Roku (2160p).yml @@ -0,0 +1,45 @@ +name: Roku [2160p] +description: Matches 2160p 'Roku' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: Roku Regex + negate: false + pattern: Roku + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: Roku Regex + negate: false + pattern: Roku + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 2 + input: Almost Heroes (1998) 1080p ROKU WEB-DL x265 HEVC AAC 2.0-PHOCiS + lastRun: '2024-12-06T05:41:18.535555' + passes: true diff --git a/custom_formats/SDR.yml b/custom_formats/SDR.yml new file mode 100644 index 0000000..5e8498d --- /dev/null +++ b/custom_formats/SDR.yml @@ -0,0 +1,32 @@ +name: SDR +description: Attempts to match Standard Dynamic Range by negating any known HDR formats +tags: +- Colour Grade +- HDR +conditions: +- name: WEB-DL + type: source + required: true + negate: false + source: web_dl +- name: 2160p + type: resolution + required: true + negate: false + resolution: 2160p +- name: Not HDR10+ + type: release_title + required: true + negate: true + pattern: HDR10+ +- name: Not Dolby Vision + type: release_title + required: true + negate: true + pattern: Dolby Vision +- name: Not HDR10 + negate: true + pattern: HDR10 + required: true + type: release_title +tests: [] diff --git a/custom_formats/Unknown Lossless Audio.yml b/custom_formats/Unknown Lossless Audio.yml new file mode 100644 index 0000000..3bd7339 --- /dev/null +++ b/custom_formats/Unknown Lossless Audio.yml @@ -0,0 +1,63 @@ +name: Unknown Lossless Audio +description: 'Matches UHD Blu-rays (remux / encode) that don''t include a named audio + track. Since all UHD Blu-rays include lossless audio, it''s safe to assume that + some lossless audio track does exist, and just isn''t labelled. ' +tags: +- Audio +conditions: +- name: Blu-ray + type: source + required: true + negate: false + source: bluray +- name: 2160p + type: resolution + required: true + negate: false + resolution: 2160p +- name: Not DTS-HD MA + type: release_title + required: true + negate: true + pattern: DTS-HD MA +- name: Not DTS-X + type: release_title + required: true + negate: true + pattern: DTS-X +- name: Not FLAC + negate: true + pattern: FLAC + required: true + type: release_title +- name: Not PCM + negate: true + pattern: PCM + required: true + type: release_title +- name: Not AAC + negate: true + pattern: AAC + required: true + type: release_title +- name: Not DTS + negate: true + pattern: DTS + required: true + type: release_title +- name: Not TrueHD + Atmos + negate: true + pattern: TrueHD + Atmos + required: true + type: release_title +- name: Not Dolby Digital + negate: true + pattern: Dolby Digital + required: true + type: release_title +- name: Not Dolby Digital + + negate: true + pattern: Dolby Digital + + required: true + type: release_title +tests: [] diff --git a/custom_formats/Unwanted x265 Groups.yml b/custom_formats/Unwanted x265 Groups.yml index 1788034..e7b1817 100644 --- a/custom_formats/Unwanted x265 Groups.yml +++ b/custom_formats/Unwanted x265 Groups.yml @@ -5,11 +5,21 @@ tags: - x265 - Release Group conditions: -- name: MovieMan - type: release_title +- name: MALUS + negate: false + pattern: MALUS required: false + type: release_title +- name: WOU + negate: false + pattern: WOU + required: false + type: release_title +- name: MovieMan negate: false pattern: MovieMan + required: false + type: release_title - name: SM737 negate: false pattern: SM737 @@ -17,6 +27,18 @@ conditions: type: release_title tests: - conditionResults: + - matches: false + name: MALUS + negate: false + pattern: MALUS + required: false + type: release_title + - matches: false + name: WOU + negate: false + pattern: WOU + required: false + type: release_title - matches: true name: MovieMan negate: false @@ -32,9 +54,21 @@ tests: expected: true id: 1 input: Blade.Runner.2049.2017.1080p.UHD.BluRay.HDR.x265.DDP.5.1-MovieMan - lastRun: '2025-01-14T10:06:40.600924' + lastRun: '2025-01-16T12:17:41.743774' passes: true - conditionResults: + - matches: false + name: MALUS + negate: false + pattern: MALUS + required: false + type: release_title + - matches: false + name: WOU + negate: false + pattern: WOU + required: false + type: release_title - matches: false name: MovieMan negate: false @@ -51,5 +85,35 @@ tests: id: 2 input: Blade Runner 2049 (2017) (1080p UHD BluRay x265 DV HDR DDP Atmos 5.1 English - SM737) [REPACK] - lastRun: '2025-01-14T10:06:40.600924' + lastRun: '2025-01-16T12:17:41.743774' + passes: true +- conditionResults: + - matches: false + name: MALUS + negate: false + pattern: MALUS + required: false + type: release_title + - matches: true + name: WOU + negate: false + pattern: WOU + required: false + type: release_title + - matches: false + name: MovieMan + negate: false + pattern: MovieMan + required: false + type: release_title + - matches: false + name: SM737 + negate: false + pattern: SM737 + required: false + type: release_title + expected: true + id: 3 + input: 2 Fast 2 Furious 2003 2160p UHD BluRay H265-WOU + lastRun: '2025-01-16T12:17:41.743774' passes: true diff --git a/custom_formats/iTunes (1080p).yml b/custom_formats/iTunes (1080p).yml new file mode 100644 index 0000000..6495a73 --- /dev/null +++ b/custom_formats/iTunes (1080p).yml @@ -0,0 +1,46 @@ +name: iTunes [1080p] +description: Matches 1080p 'iTunes' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: iTunes Regex + negate: false + pattern: iTunes + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: iTunes Regex + negate: false + pattern: iTunes + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Alien Romulus (2024) (1080p DS4K iT WEBRip x265 HEVC 10bit DDP Atmos 5 1 + English - KaLLuKaLia) + lastRun: '2024-12-06T05:49:21.811162' + passes: true diff --git a/custom_formats/iTunes (2160p).yml b/custom_formats/iTunes (2160p).yml new file mode 100644 index 0000000..a6dde83 --- /dev/null +++ b/custom_formats/iTunes (2160p).yml @@ -0,0 +1,46 @@ +name: iTunes [2160p] +description: Matches 2160p 'iTunes' WEB-DLs. Negates any encodes. +tags: +- Streaming Service +- WEB-DL +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: iTunes Regex + negate: false + pattern: iTunes + required: true + type: release_title +- name: WEBRip + negate: true + required: true + source: webrip + type: source +- name: x265 + negate: true + pattern: x265 + required: true + type: release_title +tests: +- conditionResults: + - matches: true + name: iTunes Regex + negate: false + pattern: iTunes + required: true + type: release_title + - matches: true + name: x265 + negate: true + pattern: x265 + required: false + type: release_title + expected: false + id: 1 + input: Alien Romulus (2024) (1080p DS4K iT WEBRip x265 HEVC 10bit DDP Atmos 5 1 + English - KaLLuKaLia) + lastRun: '2024-12-06T05:49:21.811162' + passes: true diff --git a/custom_formats/x264 (2160p).yml b/custom_formats/x264 (2160p).yml new file mode 100644 index 0000000..0db5c44 --- /dev/null +++ b/custom_formats/x264 (2160p).yml @@ -0,0 +1,17 @@ +name: x264 (2160p) +description: 'Matches ''x264'' regex pattern only when 2160p is also found. ' +tags: +- Codec +- Resolution +conditions: +- name: 1080p + negate: false + required: true + resolution: 2160p + type: resolution +- name: x264 + negate: false + pattern: x264 + required: true + type: release_title +tests: [] diff --git a/custom_formats/x265 (1080p).yml b/custom_formats/x265 (1080p).yml new file mode 100644 index 0000000..4c294bc --- /dev/null +++ b/custom_formats/x265 (1080p).yml @@ -0,0 +1,17 @@ +name: x265 (1080p) +description: 'Matches ''x265'' regex pattern only when 1080p is also found. ' +tags: +- Codec +- Resolution +conditions: +- name: 1080p + type: resolution + required: true + negate: false + resolution: 1080p +- name: x265 + negate: false + pattern: x265 + required: true + type: release_title +tests: [] diff --git a/custom_formats/x265 (Missing 2160p).yml b/custom_formats/x265 (Missing 2160p).yml new file mode 100644 index 0000000..f8f1ace --- /dev/null +++ b/custom_formats/x265 (Missing 2160p).yml @@ -0,0 +1,50 @@ +name: x265 (Missing 2160p) +description: 'Attempts to match 2160p x265 encodes that aren''t labelled with any + codec. ' +tags: +- x265 +conditions: +- name: 2160p + negate: false + required: true + resolution: 2160p + type: resolution +- name: Bluray + negate: false + required: true + source: bluray + type: source +- name: Not REMUX + type: release_title + required: true + negate: true + pattern: Remux +- name: Not x265 + negate: true + pattern: x265 + required: true + type: release_title +- name: Not x264 + type: release_title + required: true + negate: true + pattern: x264 +tests: +- conditionResults: + - matches: false + name: Not x265 + negate: true + pattern: x265 + required: true + type: release_title + - matches: true + name: h265 + negate: false + pattern: h265 + required: true + type: release_title + expected: true + id: 1 + input: Training Day 2001 BluRay 10Bit 1080p DD5 1 H265-d3g + lastRun: '2025-01-14T09:03:52.278761' + passes: true diff --git a/group_tiers/2160p Quality.json b/group_tiers/2160p Quality.json new file mode 100644 index 0000000..7227fe6 --- /dev/null +++ b/group_tiers/2160p Quality.json @@ -0,0 +1,829 @@ +{ + "metadata": { + "total_movies_processed": 688, + "movies_with_2160p": 675, + "target_efficiency": 0.55, + "total_tiers": 6 + }, + "tier_statistics": { + "1": { + "groups": 8, + "total_releases": 701, + "avg_score": 91.04, + "avg_efficiency": 56.62, + "avg_std_dev": 0.118 + }, + "2": { + "groups": 4, + "total_releases": 81, + "avg_score": 81.73, + "avg_efficiency": 52.5, + "avg_std_dev": 0.125 + }, + "3": { + "groups": 8, + "total_releases": 125, + "avg_score": 73.37, + "avg_efficiency": 55.0, + "avg_std_dev": 0.115 + }, + "4": { + "groups": 7, + "total_releases": 298, + "avg_score": 62.16, + "avg_efficiency": 52.14, + "avg_std_dev": 0.086 + }, + "5": { + "groups": 44, + "total_releases": 415, + "avg_score": 34.15, + "avg_efficiency": 45.98, + "avg_std_dev": 0.051 + }, + "6": { + "groups": 15, + "total_releases": 15, + "avg_score": 2.06, + "avg_efficiency": 36.8, + "avg_std_dev": 0.0 + } + }, + "tiered_groups": [ + { + "tier": 1, + "name": "DON", + "score": 97.28, + "efficiency": 55.0, + "releases": 30, + "std_dev": 0.097, + "efficiency_delta": 0.0 + }, + { + "tier": 1, + "name": "DEPTH", + "score": 94.93, + "efficiency": 54.0, + "releases": 37, + "std_dev": 0.119, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 1, + "name": "HQMUX", + "score": 91.4, + "efficiency": 52.0, + "releases": 48, + "std_dev": 0.099, + "efficiency_delta": 3.0000000000000027 + }, + { + "tier": 1, + "name": "b0mbardiers", + "score": 91.14, + "efficiency": 58.0, + "releases": 31, + "std_dev": 0.111, + "efficiency_delta": 2.9999999999999916 + }, + { + "tier": 1, + "name": "CtrlHD", + "score": 90.47, + "efficiency": 58.0, + "releases": 369, + "std_dev": 0.144, + "efficiency_delta": 2.9999999999999916 + }, + { + "tier": 1, + "name": "PTer", + "score": 88.65, + "efficiency": 57.0, + "releases": 16, + "std_dev": 0.15, + "efficiency_delta": 1.9999999999999907 + }, + { + "tier": 1, + "name": "SA89", + "score": 87.4, + "efficiency": 59.0, + "releases": 21, + "std_dev": 0.097, + "efficiency_delta": 3.9999999999999925 + }, + { + "tier": 1, + "name": "W4NK3R", + "score": 87.02, + "efficiency": 60.0, + "releases": 149, + "std_dev": 0.13, + "efficiency_delta": 4.999999999999993 + }, + { + "tier": 2, + "name": "BSTD", + "score": 85, + "efficiency": 54.0, + "releases": 11, + "std_dev": 0.102, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 2, + "name": "c0kE", + "score": 85, + "efficiency": 55.0, + "releases": 11, + "std_dev": 0.108, + "efficiency_delta": 0.0 + }, + { + "tier": 2, + "name": "D-Z0N3", + "score": 81.94, + "efficiency": 51.0, + "releases": 10, + "std_dev": 0.169, + "efficiency_delta": 4.0000000000000036 + }, + { + "tier": 2, + "name": "MainFrame", + "score": 75, + "efficiency": 50.0, + "releases": 49, + "std_dev": 0.12, + "efficiency_delta": 5.000000000000004 + }, + { + "tier": 3, + "name": "JustWatch", + "score": 75, + "efficiency": 54.0, + "releases": 7, + "std_dev": 0.086, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 3, + "name": "DEFLATE", + "score": 75, + "efficiency": 57.0, + "releases": 9, + "std_dev": 0.069, + "efficiency_delta": 1.9999999999999907 + }, + { + "tier": 3, + "name": "REBORN", + "score": 74.91, + "efficiency": 56.0, + "releases": 5, + "std_dev": 0.136, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 3, + "name": "SURCODE", + "score": 73.14, + "efficiency": 50.0, + "releases": 14, + "std_dev": 0.106, + "efficiency_delta": 5.000000000000004 + }, + { + "tier": 3, + "name": "Chotab", + "score": 72.9, + "efficiency": 51.0, + "releases": 9, + "std_dev": 0.095, + "efficiency_delta": 4.0000000000000036 + }, + { + "tier": 3, + "name": "SPHD", + "score": 72.48, + "efficiency": 63.0, + "releases": 65, + "std_dev": 0.099, + "efficiency_delta": 7.9999999999999964 + }, + { + "tier": 3, + "name": "Kitsune", + "score": 71.83, + "efficiency": 51.0, + "releases": 9, + "std_dev": 0.146, + "efficiency_delta": 4.0000000000000036 + }, + { + "tier": 3, + "name": "TnP", + "score": 71.7, + "efficiency": 58.0, + "releases": 7, + "std_dev": 0.186, + "efficiency_delta": 2.9999999999999916 + }, + { + "tier": 4, + "name": "4KDVS", + "score": 65, + "efficiency": 58.0, + "releases": 4, + "std_dev": 0.097, + "efficiency_delta": 2.9999999999999916 + }, + { + "tier": 4, + "name": "TDD", + "score": 65, + "efficiency": 54.0, + "releases": 2, + "std_dev": 0.0, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 4, + "name": "NCmt", + "score": 65, + "efficiency": 54.0, + "releases": 3, + "std_dev": 0.029, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 4, + "name": "IAMABLE", + "score": 63.31, + "efficiency": 45.0, + "releases": 261, + "std_dev": 0.146, + "efficiency_delta": 10.000000000000004 + }, + { + "tier": 4, + "name": "BlzT", + "score": 60.85, + "efficiency": 45.0, + "releases": 17, + "std_dev": 0.105, + "efficiency_delta": 10.000000000000004 + }, + { + "tier": 4, + "name": "WATCHABLE", + "score": 58.39, + "efficiency": 60.0, + "releases": 2, + "std_dev": 0.042, + "efficiency_delta": 4.999999999999993 + }, + { + "tier": 4, + "name": "iFT", + "score": 57.58, + "efficiency": 49.0, + "releases": 9, + "std_dev": 0.18, + "efficiency_delta": 6.000000000000005 + }, + { + "tier": 5, + "name": "SoLaR", + "score": 54.84, + "efficiency": 63.0, + "releases": 8, + "std_dev": 0.114, + "efficiency_delta": 7.9999999999999964 + }, + { + "tier": 5, + "name": "SMAHAWUG", + "score": 53.0, + "efficiency": 55.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 0.0 + }, + { + "tier": 5, + "name": "MiMiC", + "score": 53.0, + "efficiency": 55.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 0.0 + }, + { + "tier": 5, + "name": "HypStu", + "score": 51.57, + "efficiency": 48.0, + "releases": 3, + "std_dev": 0.006, + "efficiency_delta": 7.000000000000006 + }, + { + "tier": 5, + "name": "KAN3D2M", + "score": 50.93, + "efficiency": 56.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 5, + "name": "FRDS", + "score": 50.93, + "efficiency": 56.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 1.0000000000000009 + }, + { + "tier": 5, + "name": "EDPH", + "score": 50.6, + "efficiency": 48.0, + "releases": 3, + "std_dev": 0.04, + "efficiency_delta": 7.000000000000006 + }, + { + "tier": 5, + "name": "PussyFoot", + "score": 48.92, + "efficiency": 53.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 2.0000000000000018 + }, + { + "tier": 5, + "name": "KNiVES", + "score": 48.92, + "efficiency": 53.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 2.0000000000000018 + }, + { + "tier": 5, + "name": "STRiKES", + "score": 45.92, + "efficiency": 45.0, + "releases": 7, + "std_dev": 0.116, + "efficiency_delta": 10.000000000000004 + }, + { + "tier": 5, + "name": "TOMBCRUISE", + "score": 45.08, + "efficiency": 51.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 4.0000000000000036 + }, + { + "tier": 5, + "name": "CMCT", + "score": 45.08, + "efficiency": 51.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 4.0000000000000036 + }, + { + "tier": 5, + "name": "TERMiNAL", + "score": 45, + "efficiency": 42.0, + "releases": 209, + "std_dev": 0.146, + "efficiency_delta": 13.000000000000005 + }, + { + "tier": 5, + "name": "whiterhino", + "score": 45, + "efficiency": 41.0, + "releases": 74, + "std_dev": 0.153, + "efficiency_delta": 14.000000000000007 + }, + { + "tier": 5, + "name": "ReaLHD", + "score": 45, + "efficiency": 38.0, + "releases": 14, + "std_dev": 0.069, + "efficiency_delta": 17.000000000000004 + }, + { + "tier": 5, + "name": "EMERALD", + "score": 43.65, + "efficiency": 38.0, + "releases": 11, + "std_dev": 0.106, + "efficiency_delta": 17.000000000000004 + }, + { + "tier": 5, + "name": "ULTRAHDCLUB", + "score": 41.27, + "efficiency": 64.0, + "releases": 3, + "std_dev": 0.081, + "efficiency_delta": 8.999999999999996 + }, + { + "tier": 5, + "name": "CHD", + "score": 40.83, + "efficiency": 47.0, + "releases": 3, + "std_dev": 0.184, + "efficiency_delta": 8.000000000000007 + }, + { + "tier": 5, + "name": "SWTYBLZ", + "score": 40.61, + "efficiency": 36.0, + "releases": 11, + "std_dev": 0.134, + "efficiency_delta": 19.000000000000007 + }, + { + "tier": 5, + "name": "LAZARUS", + "score": 39.6, + "efficiency": 66.0, + "releases": 3, + "std_dev": 0.025, + "efficiency_delta": 10.999999999999998 + }, + { + "tier": 5, + "name": "ESiR", + "score": 37.78, + "efficiency": 64.0, + "releases": 2, + "std_dev": 0.0, + "efficiency_delta": 8.999999999999996 + }, + { + "tier": 5, + "name": "beAst", + "score": 35.08, + "efficiency": 42.0, + "releases": 6, + "std_dev": 0.146, + "efficiency_delta": 13.000000000000005 + }, + { + "tier": 5, + "name": "WiKi", + "score": 34.32, + "efficiency": 46.0, + "releases": 2, + "std_dev": 0.141, + "efficiency_delta": 9.000000000000002 + }, + { + "tier": 5, + "name": "SPECTACLE", + "score": 31.47, + "efficiency": 49.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 6.000000000000005 + }, + { + "tier": 5, + "name": "spectacle", + "score": 31.47, + "efficiency": 49.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 6.000000000000005 + }, + { + "tier": 5, + "name": "HD77", + "score": 31.47, + "efficiency": 49.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 6.000000000000005 + }, + { + "tier": 5, + "name": "k00kie", + "score": 31.47, + "efficiency": 61.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 5.999999999999995 + }, + { + "tier": 5, + "name": "HDS", + "score": 30.34, + "efficiency": 37.0, + "releases": 9, + "std_dev": 0.156, + "efficiency_delta": 18.000000000000004 + }, + { + "tier": 5, + "name": "ADE", + "score": 29.8, + "efficiency": 37.0, + "releases": 5, + "std_dev": 0.048, + "efficiency_delta": 18.000000000000004 + }, + { + "tier": 5, + "name": "VALiS", + "score": 29.74, + "efficiency": 48.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 7.000000000000006 + }, + { + "tier": 5, + "name": "iNVANDRAREN", + "score": 28.77, + "efficiency": 38.0, + "releases": 5, + "std_dev": 0.149, + "efficiency_delta": 17.000000000000004 + }, + { + "tier": 5, + "name": "BiTOR", + "score": 25.73, + "efficiency": 42.0, + "releases": 2, + "std_dev": 0.035, + "efficiency_delta": 13.000000000000005 + }, + { + "tier": 5, + "name": "HDmux", + "score": 25.45, + "efficiency": 43.0, + "releases": 2, + "std_dev": 0.106, + "efficiency_delta": 12.000000000000005 + }, + { + "tier": 5, + "name": "ReQuEsT", + "score": 24.14, + "efficiency": 41.0, + "releases": 2, + "std_dev": 0.042, + "efficiency_delta": 14.000000000000007 + }, + { + "tier": 5, + "name": "Absinth", + "score": 21.76, + "efficiency": 32.0, + "releases": 5, + "std_dev": 0.154, + "efficiency_delta": 23.000000000000004 + }, + { + "tier": 5, + "name": "AViATOR", + "score": 21.37, + "efficiency": 38.0, + "releases": 2, + "std_dev": 0.0, + "efficiency_delta": 17.000000000000004 + }, + { + "tier": 5, + "name": "Tron", + "score": 19.86, + "efficiency": 45.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 10.000000000000004 + }, + { + "tier": 5, + "name": "HDChina", + "score": 17.76, + "efficiency": 35.0, + "releases": 2, + "std_dev": 0.0, + "efficiency_delta": 20.000000000000007 + }, + { + "tier": 5, + "name": "SWAGGERUHD", + "score": 11.84, + "efficiency": 43.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 12.000000000000005 + }, + { + "tier": 5, + "name": "AAAUHD", + "score": 10.48, + "efficiency": 28.0, + "releases": 2, + "std_dev": 0.0, + "efficiency_delta": 27.0 + }, + { + "tier": 5, + "name": "guhzer", + "score": 8.99, + "efficiency": 41.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 14.000000000000007 + }, + { + "tier": 5, + "name": "GUHZER", + "score": 8.7, + "efficiency": 29.0, + "releases": 2, + "std_dev": 0.106, + "efficiency_delta": 26.000000000000007 + }, + { + "tier": 5, + "name": "HUNTJR", + "score": 7.63, + "efficiency": 40.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 15.000000000000002 + }, + { + "tier": 5, + "name": "iCandy", + "score": 7.63, + "efficiency": 40.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 15.000000000000002 + }, + { + "tier": 6, + "name": "micius", + "score": 6.31, + "efficiency": 39.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 16.000000000000004 + }, + { + "tier": 6, + "name": "BOREDOR", + "score": 6.31, + "efficiency": 39.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 16.000000000000004 + }, + { + "tier": 6, + "name": "threesome", + "score": 5.03, + "efficiency": 38.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 17.000000000000004 + }, + { + "tier": 6, + "name": "Blzt", + "score": 3.79, + "efficiency": 37.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 18.000000000000004 + }, + { + "tier": 6, + "name": "LittleBakas", + "score": 3.79, + "efficiency": 37.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 18.000000000000004 + }, + { + "tier": 6, + "name": "PTH", + "score": 2.59, + "efficiency": 36.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 19.000000000000007 + }, + { + "tier": 6, + "name": "CHAOS", + "score": 1.42, + "efficiency": 35.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 20.000000000000007 + }, + { + "tier": 6, + "name": "Hares", + "score": 1.42, + "efficiency": 35.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 20.000000000000007 + }, + { + "tier": 6, + "name": "BLUEBIRD", + "score": 0.28, + "efficiency": 34.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 21.000000000000004 + }, + { + "tier": 6, + "name": "BeiTai", + "score": 0, + "efficiency": 30.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 25.000000000000007 + }, + { + "tier": 6, + "name": "FLAME", + "score": 0, + "efficiency": 31.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 24.000000000000004 + }, + { + "tier": 6, + "name": "UHDCLUBREMUX", + "score": 0, + "efficiency": 82.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 26.99999999999999 + }, + { + "tier": 6, + "name": "invandraren", + "score": 0, + "efficiency": 26.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 29.000000000000004 + }, + { + "tier": 6, + "name": "dkore", + "score": 0, + "efficiency": 22.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 33.00000000000001 + }, + { + "tier": 6, + "name": "Lucifer", + "score": 0, + "efficiency": 31.0, + "releases": 1, + "std_dev": 0, + "efficiency_delta": 24.000000000000004 + } + ], + "tier_boundaries": [85, 75, 65, 55, 6.52999999999999] +} diff --git a/profiles/1080p Balanced.yml b/profiles/1080p Balanced.yml index 0d1cf54..1c35e9f 100644 --- a/profiles/1080p Balanced.yml +++ b/profiles/1080p Balanced.yml @@ -1,10 +1,15 @@ name: 1080p Balanced -description: "This profile aims to balance quality, size and compatibility by prioritising\ - \ WEB-DLs and falling back to transparent encodes, with special consideration for\ - \ 'streaming optimised' release groups. WEB-DLs are preferred because they often\ - \ give 'enough' quality at sizes smaller than transparent encodes, are plentiful,\ - \ and are much easier to rank. \n\nIn the case that a 1080p WEB-DL or encode is\ - \ not available, the profile falls back to DVD remuxes & encodes." +description: '1080p Balanced targets consistent & immutable 1080p **WEB-DLs** with + fallback to transparent x264 encodes, prioritised using the **Golden Popcorn Performance + Index**. + + + - Special considerations are given to **Balanced** groups who prioritize **streaming + optimisation** over quality, falling somewhere around a tier 2 WEB-DL. This includes + groups like **BHDStudio** and **hallowed**. + + - If no 1080p release can be found, the profile will fall back to SD releases - + DVD remuxes / encodes. ' tags: - 1080p - x264 @@ -136,10 +141,8 @@ qualities: name: WEBRip-1080p - id: 9 name: WEBDL-1080p -- id: 12 - name: HDTV-1080p - id: -2 - name: Fallbacks + name: SD description: SD Fallbacks qualities: - id: 19 diff --git a/profiles/1080p Quality (HDR).yml b/profiles/1080p Quality (HDR).yml index cda2bd6..d5c5465 100644 --- a/profiles/1080p Quality (HDR).yml +++ b/profiles/1080p Quality (HDR).yml @@ -1,11 +1,12 @@ name: 1080p Quality (HDR) -description: "This profile prioritises 'Transparent' encodes through a special metric\ - \ known as the Golden Popcorn Performance Index. This is a data-driven metric that\ - \ identifies and ranks release groups based on their propensity to release a 'Golden\ - \ Pocorn' - a very high quality encode. In addition to the transparent ranking.\ - \ special considerations for UHD encoded HDR releases has been implemented. \n\n\ - \nIn the case that a 1080p encode or WEB-DL is not available, the profile falls\ - \ back to DVD remuxes & encodes." +description: "1080p Quality (HDR) utilizes the [**Golden Popcorn Performance Index**](https://dictionarry.pages.dev/)\ + \ to target **transparent x265 HDR** 1080p encodes. \n- 5 Quality tiers prioritise\ + \ encodes with high 1080p GPPi scores, with fallback to regular 1080p Quality profile\ + \ (non HDR), then 1080p WEB-DLs and streaming optimised encodes (**BHDStudio & hallowed**).\n\ + - **x265 is negated** but allowed, if and only if a reputable GPPi group has encoded\ + \ it from a UHD Bluray source.\n- Non HDR encodes are strictly forbidden in this\ + \ profile\n- If no 1080p release can be found, the profile will fall back to SD\ + \ releases - **DVD remuxes / encodes**" tags: - 1080p - Transparent @@ -13,7 +14,6 @@ tags: - x264 - x265 - HDR -- Dolby Vision upgradesAllowed: true minCustomFormatScore: 0 upgradeUntilScore: 320 @@ -149,10 +149,8 @@ qualities: name: WEBDL-1080p - id: 11 name: WEBRip-1080p -- id: 12 - name: HDTV-1080p - id: -2 - name: Fallbacks + name: SD description: SD Fallbacks qualities: - id: 19 diff --git a/profiles/1080p Quality.yml b/profiles/1080p Quality.yml index b085d47..59e68c5 100644 --- a/profiles/1080p Quality.yml +++ b/profiles/1080p Quality.yml @@ -1,14 +1,9 @@ name: 1080p Quality -description: 'This profile prioritises ''Transparent'' encodes through a special metric - known as the Golden Popcorn Performance Index. This is a data-driven metric that - identifies and ranks release groups based on their propensity to release a ''Golden - Pocorn'' - a very high quality encode. Special considerations for audio, sources, - extras and flags are also used to help rank releases. - - - - In the case that a 1080p encode or WEB-DL is not available, the profile falls back - to DVD remuxes & encodes.' +description: "1080p Quality utilizes the [**Golden Popcorn Performance Index**](https://dictionarry.pages.dev/)\ + \ to target **transparent** x264 1080p encodes. \n- 5 Quality tiers prioritise encodes\ + \ with high 1080p GPPi scores, with fallback to 1080p WEB-DLs and streaming optimised\ + \ encodes (**BHDStudio & hallowed**).\n- If no 1080p release can be found, the profile\ + \ will fall back to SD releases - **DVD remuxes / encodes**" tags: - 1080p - Transparent @@ -139,10 +134,8 @@ qualities: name: WEBDL-1080p - id: 11 name: WEBRip-1080p -- id: 12 - name: HDTV-1080p - id: -2 - name: Fallbacks + name: SD description: SD Fallbacks qualities: - id: 19 diff --git a/profiles/2160p Quality.yml b/profiles/2160p Quality.yml new file mode 100644 index 0000000..ccf0dad --- /dev/null +++ b/profiles/2160p Quality.yml @@ -0,0 +1,242 @@ +name: 2160p Quality +description: "2160p Quality utilizes the [**Encode Efficiency Index**](https://dictionarry.pages.dev/)\ + \ metric at a 55% target ratio to prioritize **transparent** x265 4k encodes. \n\ + \n- 4 quality tiers prioritize encodes from reputable groups, with fallback to high-quality\ + \ WEB-DLs and balanced tier groups. 2 additional quality tiers are placed below\ + \ for further fallback. \n\n- Special considerations for both **HDR** and **Lossless\ + \ Audio** formats help to push lower tiered encodes over higher tier ones in cases\ + \ where better sources are used.\n\n- If no 2160p release can be found, the profile\ + \ will fall back to the 1080p Quality Profile. " +tags: +- 2160p +- HDR +- x265 +- Encode +- Lossless Audio +upgradesAllowed: true +minCustomFormatScore: 0 +upgradeUntilScore: 600 +minScoreIncrement: 5 +custom_formats: +- name: 2160p Quality Tier 1 + score: 320 +- name: 2160p Quality Tier 2 + score: 310 +- name: 2160p + score: 300 +- name: 2160p Quality Tier 3 + score: 300 +- name: 2160p Quality Tier 4 + score: 290 +- name: 2160p Balanced Tier 1 + score: 250 +- name: 2160p Balanced Tier 2 + score: 240 +- name: 2160p Quality Tier 5 + score: 190 +- name: 2160p Quality Tier 6 + score: 180 +- name: Amazon Prime [UHD] + score: 160 +- name: Disney+ [2160p] + score: 160 +- name: HBO Max [2160p] + score: 160 +- name: Movies Anywhere [2160p] + score: 160 +- name: Apple TV+ [2160p] + score: 150 +- name: Hulu [2160p] + score: 150 +- name: iTunes [2160p] + score: 150 +- name: Max [2160p] + score: 150 +- name: Netflix [2160p] + score: 150 +- name: Paramount+ [2160p] + score: 150 +- name: Peacock [2160p] + score: 150 +- name: Roku [2160p] + score: 150 +- name: 1080p + score: 60 +- name: 1080p Quality Tier 1 + score: 60 +- name: Blu-ray + score: 60 +- name: 1080p Quality Tier 2 + score: 50 +- name: 1080p Quality Tier 3 + score: 40 +- name: DVD Remux + score: 40 +- name: 1080p Quality Tier 4 + score: 30 +- name: Amazon Prime [1080p] + score: 30 +- name: Apple TV+ [1080p] + score: 30 +- name: Disney+ [1080p] + score: 30 +- name: Dolby Vision + score: 30 +- name: Movies Anywhere [1080p] + score: 30 +- name: SD Quality Tier 1 + score: 30 +- name: 1080p Balanced Tier 1 + score: 20 +- name: 1080p Quality Tier 5 + score: 20 +- name: HBO Max [1080p] + score: 20 +- name: HDR10+ + score: 20 +- name: Max [1080p] + score: 20 +- name: Netflix [1080p] + score: 20 +- name: SD Quality Tier 2 + score: 20 +- name: DTS-X + score: 15 +- name: 1080p Balanced Tier 2 + score: 10 +- name: HDR10 + score: 10 +- name: HDR10 (Missing) + score: 10 +- name: Hulu [1080p] + score: 10 +- name: iTunes [1080p] + score: 10 +- name: Paramount+ [1080p] + score: 10 +- name: Peacock [1080p] + score: 10 +- name: Roku [1080p] + score: 10 +- name: TrueHD + score: 10 +- name: TrueHD (Missing) + score: 10 +- name: x264 + score: 10 +- name: Atmos + score: 5 +- name: Atmos (Missing) + score: 5 +- name: DTS-HD MA + score: 5 +- name: FLAC + score: 5 +- name: Unknown Lossless Audio + score: 5 +- name: SDR + score: -80 +- name: x265 + score: -150 +- name: x265 (Missing 2160p) + score: -150 +- name: 3D + score: -9999 +- name: 720p + score: -9999 +- name: AV1 + score: -9999 +- name: B&W + score: -9999 +- name: Blu-ray Remux + score: -9999 +- name: Dolby Vision (Without Fallback) + score: -9999 +- name: Extras + score: -9999 +- name: Full Disc + score: -9999 +- name: Full Disc (Quality Match) + score: -9999 +- name: h265 + score: -9999 +- name: h265 (Missing) + score: -9999 +- name: HDR10 (Missing) (1080p) + score: -9999 +- name: Non Retail HDR + score: -9999 +- name: Remux + score: -9999 +- name: SD Bluray Encodes + score: -9999 +- name: UHDBits + score: -9999 +- name: Unwanted x265 Groups + score: -9999 +- name: Upscaled + score: -9999 +- name: VVC + score: -9999 +- name: WEBRip + score: -9999 +- name: x264 (2160p) + score: -9999 +- name: x265 (1080p) + score: -9999 +- name: x265 (Missing) + score: -9999 +qualities: +- id: -2 + name: 2160p Transparent + description: Indistinguishable from source + qualities: + - id: 5 + name: WEBDL-2160p + - id: 4 + name: Bluray-2160p +- id: -3 + name: 1080p Transparent + description: Indistinguishable from source + qualities: + - id: 10 + name: Bluray-1080p + - id: 11 + name: WEBRip-1080p + - id: 9 + name: WEBDL-1080p +- id: -1 + name: SD + description: Standard Definition Fallbacks + qualities: + - id: 22 + name: DVD + - id: 19 + name: WEBDL-480p + - id: 20 + name: WEBRip-480p + - id: 24 + name: SDTV +- id: -4 + name: Prereleases + description: Low Quality releases that come out before VODs / Physical Media + qualities: + - id: 29 + name: CAM + - id: 26 + name: Telesync + - id: 25 + name: Telecine + - id: 23 + name: DVDSCR +upgrade_until: + id: -2 + name: 2160p Transparent + description: Indistinguishable from source +language: must_original +tweaks: + preferFreeleech: false + allowLosslessAudio: true + allowDVNoFallback: false + allowBleedingEdgeCodecs: false + allowPrereleases: false diff --git a/profiles/2160p Remux.yml b/profiles/2160p Remux.yml index 48ddfbd..6edbdd4 100644 --- a/profiles/2160p Remux.yml +++ b/profiles/2160p Remux.yml @@ -1,12 +1,16 @@ name: 2160p Remux -description: "This profile prioritizes quality above all else. It will attempt to\ - \ grab 2160p Remuxes, which are direct copies of 4K Blu-rays. These files include\ - \ very high bitrate video, lossless, often spatial, audio as well as the various\ - \ HDR formats - HDR10(+) and Dolby Vision. Instead of relying on a release group\ - \ metric to find the best remuxes, it uses the various video + audio formats introduced\ - \ prior, to find the best release. For example, Dolby Vision is preferred over HDR10\ - \ & TrueHD + Atmos is preferred over DTS-HD MA. \n\nThis profile does not fit into\ - \ the typical \"Quality -> Balanced -> Efficient\" triarchy since it's lossless. " +description: "2160p Remux utilizes **audio / video tags** to prioritise high quality\ + \ lossless copies of UHD Blu-rays.\n\n- Unlike the encode profiles, which target\ + \ releases based on a release group metric, 2160p avoids this to stop *circular\ + \ downloads* where no discernable upgrade is found. \n- Instead, audio / video metrics\ + \ such Dolby Vision, TrueHD, Atmos, HDR10+, etc are used to indicate when a remux\ + \ should be upgraded.\n- For instance, if a hybrid remux that includes some WEB\ + \ DoVi layer is released, it will be upgraded over the standard non hybrid release,\ + \ regardless of release group.\n- This also helps to grab non group tagged remuxes,\ + \ which are fairly common on quite a few trackers who often have the best remux\ + \ available. \n- If no 2160p Remux cannot be found, the profile falls back to **2160p\ + \ WEB-DLs**.\n- If a 2160p WEB-DL cannot be found, the profile falls back to **1080p\ + \ Remux**. " tags: - 2160p - Lossless diff --git a/regex_patterns/10bit-HDS.yml b/regex_patterns/10bit-HDS.yml new file mode 100644 index 0000000..fcdc18c --- /dev/null +++ b/regex_patterns/10bit-HDS.yml @@ -0,0 +1,6 @@ +name: 10bit-HDS +pattern: (?<=^|[\s.-])10bit-HDS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/4K4U.yml b/regex_patterns/4K4U.yml new file mode 100644 index 0000000..9c6565b --- /dev/null +++ b/regex_patterns/4K4U.yml @@ -0,0 +1,6 @@ +name: 4K4U +pattern: (?<=^|[\s.-])4K4U\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/4KDVS.yml b/regex_patterns/4KDVS.yml new file mode 100644 index 0000000..cc4a4d3 --- /dev/null +++ b/regex_patterns/4KDVS.yml @@ -0,0 +1,6 @@ +name: 4KDVS +pattern: (?<=^|[\s.-])4KDVS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/AAAUHD.yml b/regex_patterns/AAAUHD.yml new file mode 100644 index 0000000..5543fd1 --- /dev/null +++ b/regex_patterns/AAAUHD.yml @@ -0,0 +1,6 @@ +name: AAAUHD +pattern: (?<=^|[\s.-])AAAUHD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/ADE.yml b/regex_patterns/ADE.yml new file mode 100644 index 0000000..503af31 --- /dev/null +++ b/regex_patterns/ADE.yml @@ -0,0 +1,6 @@ +name: ADE +pattern: (?<=^|[\s.-])ADE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/AViATOR.yml b/regex_patterns/AViATOR.yml new file mode 100644 index 0000000..768bad5 --- /dev/null +++ b/regex_patterns/AViATOR.yml @@ -0,0 +1,6 @@ +name: AViATOR +pattern: (?<=^|[\s.-])AViATOR\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Absinth.yml b/regex_patterns/Absinth.yml new file mode 100644 index 0000000..ad54497 --- /dev/null +++ b/regex_patterns/Absinth.yml @@ -0,0 +1,6 @@ +name: Absinth +pattern: (?<=^|[\s.-])Absinth\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/BLUEBIRD.yml b/regex_patterns/BLUEBIRD.yml new file mode 100644 index 0000000..2b0eccc --- /dev/null +++ b/regex_patterns/BLUEBIRD.yml @@ -0,0 +1,6 @@ +name: BLUEBIRD +pattern: (?<=^|[\s.-])BLUEBIRD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/BOREDOR.yml b/regex_patterns/BOREDOR.yml new file mode 100644 index 0000000..4f06d0c --- /dev/null +++ b/regex_patterns/BOREDOR.yml @@ -0,0 +1,6 @@ +name: BOREDOR +pattern: (?<=^|[\s.-])BOREDOR\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/BSTD.yml b/regex_patterns/BSTD.yml new file mode 100644 index 0000000..684b25b --- /dev/null +++ b/regex_patterns/BSTD.yml @@ -0,0 +1,6 @@ +name: BSTD +pattern: (?<=^|[\s.-])BSTD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/BeiTa.yml b/regex_patterns/BeiTa.yml new file mode 100644 index 0000000..3cef482 --- /dev/null +++ b/regex_patterns/BeiTa.yml @@ -0,0 +1,6 @@ +name: BeiTa +pattern: (?<=^|[\s.-])BeiTa\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/BeiTai.yml b/regex_patterns/BeiTai.yml new file mode 100644 index 0000000..c358a0e --- /dev/null +++ b/regex_patterns/BeiTai.yml @@ -0,0 +1,6 @@ +name: BeiTai +pattern: (?<=^|[\s.-])BeiTai\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/BiTOR.yml b/regex_patterns/BiTOR.yml new file mode 100644 index 0000000..8c89bab --- /dev/null +++ b/regex_patterns/BiTOR.yml @@ -0,0 +1,6 @@ +name: BiTOR +pattern: (?<=^|[\s.-])BiTOR\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/BlzT.yml b/regex_patterns/BlzT.yml new file mode 100644 index 0000000..9636482 --- /dev/null +++ b/regex_patterns/BlzT.yml @@ -0,0 +1,6 @@ +name: BlzT +pattern: (?<=^|[\s.-])BlzT\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Blzt.yml b/regex_patterns/Blzt.yml new file mode 100644 index 0000000..5cd5f6b --- /dev/null +++ b/regex_patterns/Blzt.yml @@ -0,0 +1,6 @@ +name: Blzt +pattern: (?<=^|[\s.-])Blzt\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/CHAOS.yml b/regex_patterns/CHAOS.yml new file mode 100644 index 0000000..c730afe --- /dev/null +++ b/regex_patterns/CHAOS.yml @@ -0,0 +1,6 @@ +name: CHAOS +pattern: (?<=^|[\s.-])CHAOS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/CHD.yml b/regex_patterns/CHD.yml new file mode 100644 index 0000000..ba5747f --- /dev/null +++ b/regex_patterns/CHD.yml @@ -0,0 +1,6 @@ +name: CHD +pattern: (?<=^|[\s.-])CHD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/CMCT.yml b/regex_patterns/CMCT.yml new file mode 100644 index 0000000..a7cfd5c --- /dev/null +++ b/regex_patterns/CMCT.yml @@ -0,0 +1,6 @@ +name: CMCT +pattern: (?<=^|[\s.-])CMCT\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/ChopperHitler.yml b/regex_patterns/ChopperHitler.yml new file mode 100644 index 0000000..e7a40f3 --- /dev/null +++ b/regex_patterns/ChopperHitler.yml @@ -0,0 +1,6 @@ +name: ChopperHitler +pattern: (?<=^|[\s.-])ChopperHitler\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/DEFLATE.yml b/regex_patterns/DEFLATE.yml new file mode 100644 index 0000000..99a7888 --- /dev/null +++ b/regex_patterns/DEFLATE.yml @@ -0,0 +1,6 @@ +name: DEFLATE +pattern: (?<=^|[\s.-])DEFLATE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/DEPTH.yml b/regex_patterns/DEPTH.yml new file mode 100644 index 0000000..b636958 --- /dev/null +++ b/regex_patterns/DEPTH.yml @@ -0,0 +1,6 @@ +name: DEPTH +pattern: (?<=^|[\s.-])DEPTH\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/DESPACiTO.yml b/regex_patterns/DESPACiTO.yml new file mode 100644 index 0000000..4ad7b5d --- /dev/null +++ b/regex_patterns/DESPACiTO.yml @@ -0,0 +1,6 @@ +name: DESPACiTO +pattern: (?<=^|[\s.-])DESPACiTO\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/DTS-X.yml b/regex_patterns/DTS-X.yml index fe6a4db..5fd1875 100644 --- a/regex_patterns/DTS-X.yml +++ b/regex_patterns/DTS-X.yml @@ -1,5 +1,27 @@ name: DTS-X -pattern: \b(dts[-_. ]?x)\b(?!\d) +pattern: \b(dts[-_. :]?x)\b(?!\d) description: '' tags: [] -tests: [] +tests: +- expected: true + id: 1 + input: 2 Fast 2 Furious (2003) 2160p MA WEB-DL H265 HDR DTS:X 7.1 English-FLUX + lastRun: '2025-01-16T15:29:55.783259' + matchSpan: + end: 54 + start: 49 + matchedContent: DTS:X + matchedGroups: + - DTS:X + passes: true +- expected: true + id: 2 + input: 2.Fast.2.Furious.2003.2160p.MA.WEB-DL.DTS-X.7.1.H.265-FLUX.mkv + lastRun: '2025-01-16T15:29:55.783259' + matchSpan: + end: 43 + start: 38 + matchedContent: DTS-X + matchedGroups: + - DTS-X + passes: true diff --git a/regex_patterns/DiNAMiC.yml b/regex_patterns/DiNAMiC.yml new file mode 100644 index 0000000..c5b13fd --- /dev/null +++ b/regex_patterns/DiNAMiC.yml @@ -0,0 +1,6 @@ +name: DiNAMiC +pattern: (?<=^|[\s.-])DiNAMiC\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/EMERALD.yml b/regex_patterns/EMERALD.yml new file mode 100644 index 0000000..cc3bc33 --- /dev/null +++ b/regex_patterns/EMERALD.yml @@ -0,0 +1,6 @@ +name: EMERALD +pattern: (?<=^|[\s.-])EMERALD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/ENDSTATiON.yml b/regex_patterns/ENDSTATiON.yml new file mode 100644 index 0000000..19b41c9 --- /dev/null +++ b/regex_patterns/ENDSTATiON.yml @@ -0,0 +1,6 @@ +name: ENDSTATiON +pattern: (?<=^|[\s.-])ENDSTATiON\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/EX-R.yml b/regex_patterns/EX-R.yml new file mode 100644 index 0000000..0b0f26c --- /dev/null +++ b/regex_patterns/EX-R.yml @@ -0,0 +1,6 @@ +name: EX-R +pattern: (?<=^|[\s.-])EX-R\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/FLAME.yml b/regex_patterns/FLAME.yml new file mode 100644 index 0000000..46577e9 --- /dev/null +++ b/regex_patterns/FLAME.yml @@ -0,0 +1,6 @@ +name: FLAME +pattern: (?<=^|[\s.-])FLAME\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/FRDS.yml b/regex_patterns/FRDS.yml new file mode 100644 index 0000000..456918c --- /dev/null +++ b/regex_patterns/FRDS.yml @@ -0,0 +1,6 @@ +name: FRDS +pattern: (?<=^|[\s.-])FRDS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/FZHD.yml b/regex_patterns/FZHD.yml new file mode 100644 index 0000000..588bba5 --- /dev/null +++ b/regex_patterns/FZHD.yml @@ -0,0 +1,6 @@ +name: FZHD +pattern: (?<=^|[\s.-])FZHD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/GUHZER.yml b/regex_patterns/GUHZER.yml new file mode 100644 index 0000000..b9a3cd6 --- /dev/null +++ b/regex_patterns/GUHZER.yml @@ -0,0 +1,6 @@ +name: GUHZER +pattern: (?<=^|[\s.-])GUHZER\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HD77.yml b/regex_patterns/HD77.yml new file mode 100644 index 0000000..cc7234a --- /dev/null +++ b/regex_patterns/HD77.yml @@ -0,0 +1,6 @@ +name: HD77 +pattern: (?<=^|[\s.-])HD77\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HDC.yml b/regex_patterns/HDC.yml new file mode 100644 index 0000000..cba1ab9 --- /dev/null +++ b/regex_patterns/HDC.yml @@ -0,0 +1,6 @@ +name: HDC +pattern: (?<=^|[\s.-])HDC\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HDChina.yml b/regex_patterns/HDChina.yml new file mode 100644 index 0000000..15d2f31 --- /dev/null +++ b/regex_patterns/HDChina.yml @@ -0,0 +1,6 @@ +name: HDChina +pattern: (?<=^|[\s.-])HDChina\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HDH.yml b/regex_patterns/HDH.yml new file mode 100644 index 0000000..4ffdff1 --- /dev/null +++ b/regex_patterns/HDH.yml @@ -0,0 +1,6 @@ +name: HDH +pattern: (?<=^|[\s.-])HDH\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HDR10 (Missing Groups).yml b/regex_patterns/HDR10 (Missing Groups).yml index 2254309..5e5b381 100644 --- a/regex_patterns/HDR10 (Missing Groups).yml +++ b/regex_patterns/HDR10 (Missing Groups).yml @@ -1,5 +1,5 @@ name: HDR10 (Missing Groups) -pattern: \b(FraMeSToR|HQMUX|SiCFoI|playBD|RYU|ElNeekster|CiNEPHiLES|3L|EDV|Kenobi|TRiToN|HDH|NTb|Flights|TekMUX|HDS|Aisha(@RFX)?)\b +pattern: \b(FraMeSToR|HQMUX|SiCFoI|playBD|RYU|ElNeekster|CiNEPHiLES|3L|EDV|Kenobi|TRiToN|HDH|NTb|Flights|TekMUX|HDS|Aisha(@RFX)?|STRiKES|c0kE|mimic)\b description: Matches groups who mislabel HDR10 tags: - Release Group diff --git a/regex_patterns/HDS.yml b/regex_patterns/HDS.yml new file mode 100644 index 0000000..7e1eb8d --- /dev/null +++ b/regex_patterns/HDS.yml @@ -0,0 +1,6 @@ +name: HDS +pattern: (?<=^|[\s.-])HDS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HDmux.yml b/regex_patterns/HDmux.yml new file mode 100644 index 0000000..4cff57b --- /dev/null +++ b/regex_patterns/HDmux.yml @@ -0,0 +1,6 @@ +name: HDmux +pattern: (?<=^|[\s.-])HDmux\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HOA.yml b/regex_patterns/HOA.yml new file mode 100644 index 0000000..1788ef6 --- /dev/null +++ b/regex_patterns/HOA.yml @@ -0,0 +1,6 @@ +name: HOA +pattern: (?<=^|[\s.-])HOA\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HONE.yml b/regex_patterns/HONE.yml new file mode 100644 index 0000000..839c742 --- /dev/null +++ b/regex_patterns/HONE.yml @@ -0,0 +1,6 @@ +name: HONE +pattern: (?<=^|[\s.-])HONE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HQMUX.yml b/regex_patterns/HQMUX.yml new file mode 100644 index 0000000..22ad9d9 --- /dev/null +++ b/regex_patterns/HQMUX.yml @@ -0,0 +1,6 @@ +name: HQMUX +pattern: (?<=^|[\s.-])HQMUX\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HUNTJR.yml b/regex_patterns/HUNTJR.yml new file mode 100644 index 0000000..711c087 --- /dev/null +++ b/regex_patterns/HUNTJR.yml @@ -0,0 +1,6 @@ +name: HUNTJR +pattern: (?<=^|[\s.-])HUNTJR\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Hares.yml b/regex_patterns/Hares.yml new file mode 100644 index 0000000..4f2e80a --- /dev/null +++ b/regex_patterns/Hares.yml @@ -0,0 +1,6 @@ +name: Hares +pattern: (?<=^|[\s.-])Hares\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/HypStu.yml b/regex_patterns/HypStu.yml new file mode 100644 index 0000000..881f89a --- /dev/null +++ b/regex_patterns/HypStu.yml @@ -0,0 +1,6 @@ +name: HypStu +pattern: (?<=^|[\s.-])HypStu\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/IAMABLE.yml b/regex_patterns/IAMABLE.yml new file mode 100644 index 0000000..03acfb0 --- /dev/null +++ b/regex_patterns/IAMABLE.yml @@ -0,0 +1,6 @@ +name: IAMABLE +pattern: (?<=^|[\s.-])IAMABLE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/JustWatch.yml b/regex_patterns/JustWatch.yml new file mode 100644 index 0000000..f4eb90c --- /dev/null +++ b/regex_patterns/JustWatch.yml @@ -0,0 +1,6 @@ +name: JustWatch +pattern: (?<=^|[\s.-])JustWatch\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/KAN3D2M.yml b/regex_patterns/KAN3D2M.yml new file mode 100644 index 0000000..323e5ba --- /dev/null +++ b/regex_patterns/KAN3D2M.yml @@ -0,0 +1,6 @@ +name: KAN3D2M +pattern: (?<=^|[\s.-])KAN3D2M\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/KNiVES.yml b/regex_patterns/KNiVES.yml new file mode 100644 index 0000000..07714dc --- /dev/null +++ b/regex_patterns/KNiVES.yml @@ -0,0 +1,6 @@ +name: KNiVES +pattern: (?<=^|[\s.-])KNiVES\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Kitsune.yml b/regex_patterns/Kitsune.yml new file mode 100644 index 0000000..b754a87 --- /dev/null +++ b/regex_patterns/Kitsune.yml @@ -0,0 +1,6 @@ +name: Kitsune +pattern: (?<=^|[\s.-])Kitsune\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/LAMA.yml b/regex_patterns/LAMA.yml new file mode 100644 index 0000000..0653255 --- /dev/null +++ b/regex_patterns/LAMA.yml @@ -0,0 +1,6 @@ +name: LAMA +pattern: (?<=^|[\s.-])LAMA\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/LAZARUS.yml b/regex_patterns/LAZARUS.yml new file mode 100644 index 0000000..9cc751f --- /dev/null +++ b/regex_patterns/LAZARUS.yml @@ -0,0 +1,6 @@ +name: LAZARUS +pattern: (?<=^|[\s.-])LAZARUS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/LSt.yml b/regex_patterns/LSt.yml new file mode 100644 index 0000000..534091a --- /dev/null +++ b/regex_patterns/LSt.yml @@ -0,0 +1,6 @@ +name: LSt +pattern: (?<=^|[\s.-])LSt\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/LYS.yml b/regex_patterns/LYS.yml new file mode 100644 index 0000000..e481008 --- /dev/null +++ b/regex_patterns/LYS.yml @@ -0,0 +1,6 @@ +name: LYS +pattern: (?<=^|[\s.-])LYS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/LittleBakas.yml b/regex_patterns/LittleBakas.yml new file mode 100644 index 0000000..7677113 --- /dev/null +++ b/regex_patterns/LittleBakas.yml @@ -0,0 +1,6 @@ +name: LittleBakas +pattern: (?<=^|[\s.-])LittleBakas\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Lucifer.yml b/regex_patterns/Lucifer.yml new file mode 100644 index 0000000..0bcf247 --- /dev/null +++ b/regex_patterns/Lucifer.yml @@ -0,0 +1,6 @@ +name: Lucifer +pattern: (?<=^|[\s.-])Lucifer\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/MALUS.yml b/regex_patterns/MALUS.yml new file mode 100644 index 0000000..6b10273 --- /dev/null +++ b/regex_patterns/MALUS.yml @@ -0,0 +1,6 @@ +name: MALUS +pattern: (?<=^|[\s.-])MALUS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/MainFrame.yml b/regex_patterns/MainFrame.yml new file mode 100644 index 0000000..be804ac --- /dev/null +++ b/regex_patterns/MainFrame.yml @@ -0,0 +1,6 @@ +name: MainFrame +pattern: (?<=^|[\s.-])MainFrame\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/MiMiC.yml b/regex_patterns/MiMiC.yml new file mode 100644 index 0000000..13f2fab --- /dev/null +++ b/regex_patterns/MiMiC.yml @@ -0,0 +1,6 @@ +name: MiMiC +pattern: (?<=^|[\s.-])MiMiC\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/NorTekst.yml b/regex_patterns/NorTekst.yml new file mode 100644 index 0000000..e59a15c --- /dev/null +++ b/regex_patterns/NorTekst.yml @@ -0,0 +1,6 @@ +name: NorTekst +pattern: (?<=^|[\s.-])NorTekst\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/PHOCiS.yml b/regex_patterns/PHOCiS.yml new file mode 100644 index 0000000..2c91a80 --- /dev/null +++ b/regex_patterns/PHOCiS.yml @@ -0,0 +1,6 @@ +name: PHOCiS +pattern: (?<=^|[\s.-])PHOCiS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/PRiSTiNE.yml b/regex_patterns/PRiSTiNE.yml new file mode 100644 index 0000000..cbbb18b --- /dev/null +++ b/regex_patterns/PRiSTiNE.yml @@ -0,0 +1,6 @@ +name: PRiSTiNE +pattern: (?<=^|[\s.-])PRiSTiNE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/PTH.yml b/regex_patterns/PTH.yml new file mode 100644 index 0000000..b83a645 --- /dev/null +++ b/regex_patterns/PTH.yml @@ -0,0 +1,6 @@ +name: PTH +pattern: (?<=^|[\s.-])PTH\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/PussyFoot.yml b/regex_patterns/PussyFoot.yml new file mode 100644 index 0000000..f10fd54 --- /dev/null +++ b/regex_patterns/PussyFoot.yml @@ -0,0 +1,6 @@ +name: PussyFoot +pattern: (?<=^|[\s.-])PussyFoot\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/R.yml b/regex_patterns/R.yml new file mode 100644 index 0000000..c585d5b --- /dev/null +++ b/regex_patterns/R.yml @@ -0,0 +1,6 @@ +name: R +pattern: (?<=^|[\s.-])R\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/REBORN.yml b/regex_patterns/REBORN.yml new file mode 100644 index 0000000..00e0694 --- /dev/null +++ b/regex_patterns/REBORN.yml @@ -0,0 +1,6 @@ +name: REBORN +pattern: (?<=^|[\s.-])REBORN\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/RandH.yml b/regex_patterns/RandH.yml new file mode 100644 index 0000000..66cd3da --- /dev/null +++ b/regex_patterns/RandH.yml @@ -0,0 +1,6 @@ +name: RandH +pattern: (?<=^|[\s.-])RandH\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/ReQuEsT.yml b/regex_patterns/ReQuEsT.yml new file mode 100644 index 0000000..476d074 --- /dev/null +++ b/regex_patterns/ReQuEsT.yml @@ -0,0 +1,6 @@ +name: ReQuEsT +pattern: (?<=^|[\s.-])ReQuEsT\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/ReaLHD.yml b/regex_patterns/ReaLHD.yml new file mode 100644 index 0000000..21b227e --- /dev/null +++ b/regex_patterns/ReaLHD.yml @@ -0,0 +1,6 @@ +name: ReaLHD +pattern: (?<=^|[\s.-])ReaLHD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SESKAPiLE.yml b/regex_patterns/SESKAPiLE.yml new file mode 100644 index 0000000..cfc6039 --- /dev/null +++ b/regex_patterns/SESKAPiLE.yml @@ -0,0 +1,6 @@ +name: SESKAPiLE +pattern: (?<=^|[\s.-])SESKAPiLE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SMAHAWUG.yml b/regex_patterns/SMAHAWUG.yml new file mode 100644 index 0000000..ee94578 --- /dev/null +++ b/regex_patterns/SMAHAWUG.yml @@ -0,0 +1,6 @@ +name: SMAHAWUG +pattern: (?<=^|[\s.-])SMAHAWUG\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SP4K.yml b/regex_patterns/SP4K.yml new file mode 100644 index 0000000..9968ad1 --- /dev/null +++ b/regex_patterns/SP4K.yml @@ -0,0 +1,6 @@ +name: SP4K +pattern: (?<=^|[\s.-])SP4K\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SPECTACLE.yml b/regex_patterns/SPECTACLE.yml new file mode 100644 index 0000000..14ae83c --- /dev/null +++ b/regex_patterns/SPECTACLE.yml @@ -0,0 +1,6 @@ +name: SPECTACLE +pattern: (?<=^|[\s.-])SPECTACLE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SPHD.yml b/regex_patterns/SPHD.yml new file mode 100644 index 0000000..71b41e8 --- /dev/null +++ b/regex_patterns/SPHD.yml @@ -0,0 +1,6 @@ +name: SPHD +pattern: (?<=^|[\s.-])SPHD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/STRiKES.yml b/regex_patterns/STRiKES.yml new file mode 100644 index 0000000..30665c8 --- /dev/null +++ b/regex_patterns/STRiKES.yml @@ -0,0 +1,6 @@ +name: STRiKES +pattern: (?<=^|[\s.-])STRiKES\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SURCODE.yml b/regex_patterns/SURCODE.yml new file mode 100644 index 0000000..7c8179f --- /dev/null +++ b/regex_patterns/SURCODE.yml @@ -0,0 +1,6 @@ +name: SURCODE +pattern: (?<=^|[\s.-])SURCODE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SWAGGERUHD.yml b/regex_patterns/SWAGGERUHD.yml new file mode 100644 index 0000000..66c9c80 --- /dev/null +++ b/regex_patterns/SWAGGERUHD.yml @@ -0,0 +1,6 @@ +name: SWAGGERUHD +pattern: (?<=^|[\s.-])SWAGGERUHD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SWTYBLZ.yml b/regex_patterns/SWTYBLZ.yml new file mode 100644 index 0000000..c2aa887 --- /dev/null +++ b/regex_patterns/SWTYBLZ.yml @@ -0,0 +1,6 @@ +name: SWTYBLZ +pattern: (?<=^|[\s.-])SWTYBLZ\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SoLaR.yml b/regex_patterns/SoLaR.yml new file mode 100644 index 0000000..d6ef46f --- /dev/null +++ b/regex_patterns/SoLaR.yml @@ -0,0 +1,6 @@ +name: SoLaR +pattern: (?<=^|[\s.-])SoLaR\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/SumVision.yml b/regex_patterns/SumVision.yml new file mode 100644 index 0000000..639785a --- /dev/null +++ b/regex_patterns/SumVision.yml @@ -0,0 +1,6 @@ +name: SumVision +pattern: (?<=^|[\s.-])SumVision\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/TERMiNAL.yml b/regex_patterns/TERMiNAL.yml new file mode 100644 index 0000000..57244e6 --- /dev/null +++ b/regex_patterns/TERMiNAL.yml @@ -0,0 +1,6 @@ +name: TERMiNAL +pattern: (?<=^|[\s.-])TERMiNAL\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/THREESOME.yml b/regex_patterns/THREESOME.yml new file mode 100644 index 0000000..c2f47be --- /dev/null +++ b/regex_patterns/THREESOME.yml @@ -0,0 +1,6 @@ +name: THREESOME +pattern: (?<=^|[\s.-])THREESOME\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/TOMBCRUISE.yml b/regex_patterns/TOMBCRUISE.yml new file mode 100644 index 0000000..39253ea --- /dev/null +++ b/regex_patterns/TOMBCRUISE.yml @@ -0,0 +1,6 @@ +name: TOMBCRUISE +pattern: (?<=^|[\s.-])TOMBCRUISE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/TUSAHD.yml b/regex_patterns/TUSAHD.yml new file mode 100644 index 0000000..5a1cd6f --- /dev/null +++ b/regex_patterns/TUSAHD.yml @@ -0,0 +1,6 @@ +name: TUSAHD +pattern: (?<=^|[\s.-])TUSAHD\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Tigole.yml b/regex_patterns/Tigole.yml new file mode 100644 index 0000000..d45771e --- /dev/null +++ b/regex_patterns/Tigole.yml @@ -0,0 +1,6 @@ +name: Tigole +pattern: (?<=^|[\s.-])Tigole\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/TnP.yml b/regex_patterns/TnP.yml new file mode 100644 index 0000000..62c2d05 --- /dev/null +++ b/regex_patterns/TnP.yml @@ -0,0 +1,6 @@ +name: TnP +pattern: (?<=^|[\s.-])TnP\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Tron.yml b/regex_patterns/Tron.yml new file mode 100644 index 0000000..9640e6b --- /dev/null +++ b/regex_patterns/Tron.yml @@ -0,0 +1,6 @@ +name: Tron +pattern: (?<=^|[\s.-])Tron\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/UHDCLUBREMUX.yml b/regex_patterns/UHDCLUBREMUX.yml new file mode 100644 index 0000000..10bfa83 --- /dev/null +++ b/regex_patterns/UHDCLUBREMUX.yml @@ -0,0 +1,6 @@ +name: UHDCLUBREMUX +pattern: (?<=^|[\s.-])UHDCLUBREMUX\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/ULTRAHDCLUB.yml b/regex_patterns/ULTRAHDCLUB.yml new file mode 100644 index 0000000..cdcc9d2 --- /dev/null +++ b/regex_patterns/ULTRAHDCLUB.yml @@ -0,0 +1,6 @@ +name: ULTRAHDCLUB +pattern: (?<=^|[\s.-])ULTRAHDCLUB\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/UNK.yml b/regex_patterns/UNK.yml new file mode 100644 index 0000000..a4573c2 --- /dev/null +++ b/regex_patterns/UNK.yml @@ -0,0 +1,6 @@ +name: UNK +pattern: (?<=^|[\s.-])UNK\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/VALiS.yml b/regex_patterns/VALiS.yml new file mode 100644 index 0000000..43168d9 --- /dev/null +++ b/regex_patterns/VALiS.yml @@ -0,0 +1,6 @@ +name: VALiS +pattern: (?<=^|[\s.-])VALiS\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/Verus.yml b/regex_patterns/Verus.yml new file mode 100644 index 0000000..ee839e3 --- /dev/null +++ b/regex_patterns/Verus.yml @@ -0,0 +1,6 @@ +name: Verus +pattern: (?<=^|[\s.-])Verus\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/WATCHABLE.yml b/regex_patterns/WATCHABLE.yml new file mode 100644 index 0000000..f35cd2a --- /dev/null +++ b/regex_patterns/WATCHABLE.yml @@ -0,0 +1,6 @@ +name: WATCHABLE +pattern: (?<=^|[\s.-])WATCHABLE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/WOU.yml b/regex_patterns/WOU.yml new file mode 100644 index 0000000..132c891 --- /dev/null +++ b/regex_patterns/WOU.yml @@ -0,0 +1,6 @@ +name: WOU +pattern: (?<=^|[\s.-])WOU\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/WhiteRhino.yml b/regex_patterns/WhiteRhino.yml new file mode 100644 index 0000000..05a81fb --- /dev/null +++ b/regex_patterns/WhiteRhino.yml @@ -0,0 +1,6 @@ +name: WhiteRhino +pattern: (?<=^|[\s.-])WhiteRhino\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/WiKi.yml b/regex_patterns/WiKi.yml new file mode 100644 index 0000000..9c37efb --- /dev/null +++ b/regex_patterns/WiKi.yml @@ -0,0 +1,6 @@ +name: WiKi +pattern: (?<=^|[\s.-])WiKi\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/aviator.yml b/regex_patterns/aviator.yml new file mode 100644 index 0000000..b277731 --- /dev/null +++ b/regex_patterns/aviator.yml @@ -0,0 +1,6 @@ +name: aviator +pattern: (?<=^|[\s.-])aviator\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/b0mbardiers.yml b/regex_patterns/b0mbardiers.yml new file mode 100644 index 0000000..96299fd --- /dev/null +++ b/regex_patterns/b0mbardiers.yml @@ -0,0 +1,6 @@ +name: b0mbardiers +pattern: (?<=^|[\s.-])b0mbardiers\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/beAst.yml b/regex_patterns/beAst.yml new file mode 100644 index 0000000..afbfad3 --- /dev/null +++ b/regex_patterns/beAst.yml @@ -0,0 +1,6 @@ +name: beAst +pattern: (?<=^|[\s.-])beAst\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/c0kE.yml b/regex_patterns/c0kE.yml new file mode 100644 index 0000000..c5e1e81 --- /dev/null +++ b/regex_patterns/c0kE.yml @@ -0,0 +1,6 @@ +name: c0kE +pattern: (?<=^|[\s.-])c0kE\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/d3g-d3g.yml b/regex_patterns/d3g-d3g.yml new file mode 100644 index 0000000..247b364 --- /dev/null +++ b/regex_patterns/d3g-d3g.yml @@ -0,0 +1,6 @@ +name: d3g-d3g +pattern: (?<=^|[\s.-])d3g-d3g\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/d3g.yml b/regex_patterns/d3g.yml new file mode 100644 index 0000000..6b4dccb --- /dev/null +++ b/regex_patterns/d3g.yml @@ -0,0 +1,6 @@ +name: d3g +pattern: (?<=^|[\s.-])d3g\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/dkore.yml b/regex_patterns/dkore.yml new file mode 100644 index 0000000..b3c2d9e --- /dev/null +++ b/regex_patterns/dkore.yml @@ -0,0 +1,6 @@ +name: dkore +pattern: (?<=^|[\s.-])dkore\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/edge2020.yml b/regex_patterns/edge2020.yml new file mode 100644 index 0000000..cf76b26 --- /dev/null +++ b/regex_patterns/edge2020.yml @@ -0,0 +1,6 @@ +name: edge2020 +pattern: (?<=^|[\s.-])edge2020\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/guhzer.yml b/regex_patterns/guhzer.yml new file mode 100644 index 0000000..cfdabca --- /dev/null +++ b/regex_patterns/guhzer.yml @@ -0,0 +1,6 @@ +name: guhzer +pattern: (?<=^|[\s.-])guhzer\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/iCandy.yml b/regex_patterns/iCandy.yml new file mode 100644 index 0000000..77e91ab --- /dev/null +++ b/regex_patterns/iCandy.yml @@ -0,0 +1,6 @@ +name: iCandy +pattern: (?<=^|[\s.-])iCandy\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/iNVANDRAREN.yml b/regex_patterns/iNVANDRAREN.yml new file mode 100644 index 0000000..ac5a21a --- /dev/null +++ b/regex_patterns/iNVANDRAREN.yml @@ -0,0 +1,6 @@ +name: iNVANDRAREN +pattern: (?<=^|[\s.-])iNVANDRAREN\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/invandraren.yml b/regex_patterns/invandraren.yml new file mode 100644 index 0000000..8c9a655 --- /dev/null +++ b/regex_patterns/invandraren.yml @@ -0,0 +1,6 @@ +name: invandraren +pattern: (?<=^|[\s.-])invandraren\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/k00kie.yml b/regex_patterns/k00kie.yml new file mode 100644 index 0000000..55c3688 --- /dev/null +++ b/regex_patterns/k00kie.yml @@ -0,0 +1,6 @@ +name: k00kie +pattern: (?<=^|[\s.-])k00kie\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/micius.yml b/regex_patterns/micius.yml new file mode 100644 index 0000000..fc98a70 --- /dev/null +++ b/regex_patterns/micius.yml @@ -0,0 +1,6 @@ +name: micius +pattern: (?<=^|[\s.-])micius\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/spectacle.yml b/regex_patterns/spectacle.yml new file mode 100644 index 0000000..27e23a3 --- /dev/null +++ b/regex_patterns/spectacle.yml @@ -0,0 +1,6 @@ +name: spectacle +pattern: (?<=^|[\s.-])spectacle\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/threesome.yml b/regex_patterns/threesome.yml new file mode 100644 index 0000000..0a874a8 --- /dev/null +++ b/regex_patterns/threesome.yml @@ -0,0 +1,6 @@ +name: threesome +pattern: (?<=^|[\s.-])threesome\b +description: '' +tags: +- Release Group +tests: null diff --git a/regex_patterns/whiterhino.yml b/regex_patterns/whiterhino.yml new file mode 100644 index 0000000..7867a62 --- /dev/null +++ b/regex_patterns/whiterhino.yml @@ -0,0 +1,6 @@ +name: whiterhino +pattern: (?<=^|[\s.-])whiterhino\b +description: '' +tags: +- Release Group +tests: null diff --git a/scripts/tierCreator.py b/scripts/tierCreator.py new file mode 100644 index 0000000..1075011 --- /dev/null +++ b/scripts/tierCreator.py @@ -0,0 +1,210 @@ +#!/usr/bin/env python3 + +import argparse +import json +import os +import sys +from pathlib import Path +import yaml + + +def load_template(template_path): + """Load a YAML template file.""" + try: + with open(template_path, 'r') as f: + return yaml.safe_load(f) + except FileNotFoundError: + print(f"Error: Template file not found: {template_path}") + sys.exit(1) + + +def create_regex_pattern(group_name, + template_dir, + output_dir, + dry_run=False, + show_preview=False): + """Create a regex pattern file for a release group if it doesn't exist.""" + output_path = output_dir / f"{group_name}.yml" + + # Skip if pattern already exists + if output_path.exists(): + print(f"Skipping existing regex pattern: {output_path}") + return + + print( + f"{'Would create' if dry_run else 'Creating'} regex pattern: {output_path}" + ) + + # Load and fill template + template = load_template(template_dir / "releaseGroup.yml") + template['name'] = group_name + template['pattern'] = f"(?<=^|[\\s.-]){group_name}\\b" + + # Show preview in dry run mode if this is the first pattern + if dry_run and show_preview: + print("\nPreview of first regex pattern:") + print("---") + print( + yaml.dump(template, + sort_keys=False, + default_flow_style=False, + indent=2)) + print("---\n") + + # Create output directory if it doesn't exist + output_dir.mkdir(parents=True, exist_ok=True) + + # Write pattern file if not dry run + if not dry_run: + with open(output_path, 'w') as f: + yaml.dump(template, f, sort_keys=False) + + +def create_tier_format(tier, + resolution, + type_name, + groups, + template_dir, + output_dir, + dry_run=False, + show_preview=False): + """Create a custom format file for a specific tier.""" + # Get groups for this tier + tier_groups = [group["name"] for group in groups if group["tier"] == tier] + if not tier_groups: + return + + # Load and fill template + template = load_template(template_dir / "groupTier.yml") + + # Replace template variables + template['name'] = f"{resolution} {type_name} Tier {tier}" + template[ + 'description'] = f"Matches release groups who fall under {resolution} {type_name} Tier {tier}" + + # Find and update resolution condition + for condition in template['conditions']: + if condition.get('resolution'): + condition['name'] = resolution + condition['resolution'] = resolution + + # Add release group conditions + for group_name in tier_groups: + release_group_condition = { + 'name': group_name, + 'negate': False, + 'pattern': group_name, + 'required': False, + 'type': 'release_group' + } + template['conditions'].append(release_group_condition) + + # Ensure tests is an empty list, not null + template['tests'] = [] + + # Create output directory if it doesn't exist + output_dir.mkdir(parents=True, exist_ok=True) + + # Write custom format file + output_path = output_dir / f"{resolution} {type_name} Tier {tier}.yml" + existing = "Overwriting" if output_path.exists() else "Creating" + print( + f"{'Would ' + existing.lower() if dry_run else existing} custom format: {output_path} (includes {len(tier_groups)} groups)" + ) + + # Show preview in dry run mode if this is the first format + if dry_run and show_preview: + print("\nPreview of first custom format:") + print("---") + print( + yaml.dump(template, + sort_keys=False, + default_flow_style=False, + indent=2)) + print("---\n") + + if not dry_run: + with open(output_path, 'w') as f: + yaml.dump(template, + f, + sort_keys=False, + default_flow_style=False, + indent=2) + + +def main(): + parser = argparse.ArgumentParser( + description='Create Radarr custom formats for release group tiers') + parser.add_argument('json_file', + help='Input JSON file containing tier data') + parser.add_argument('--resolution', + choices=['SD', '720p', '1080p', '2160p'], + required=True, + help='Resolution for custom formats') + parser.add_argument('--type', + choices=['Quality', 'Balanced'], + required=True, + help='Type of custom format') + parser.add_argument( + '--dry-run', + action='store_true', + help='Show what would be done without making any changes') + + args = parser.parse_args() + + # Setup paths + script_dir = Path(__file__).parent + template_dir = script_dir.parent / "templates" + regex_dir = script_dir.parent / "regex_patterns" + format_dir = script_dir.parent / "custom_formats" + + # Load and parse input JSON + try: + with open(args.json_file, 'r') as f: + data = json.load(f) + except FileNotFoundError: + print(f"Error: Input JSON file not found: {args.json_file}") + sys.exit(1) + except json.JSONDecodeError: + print(f"Error: Invalid JSON file: {args.json_file}") + sys.exit(1) + + # Print summary of what we found + print(f"\nAnalyzing input file: {args.json_file}") + print( + f"Found {len(data['tiered_groups'])} release groups across {len(set(group['tier'] for group in data['tiered_groups']))} tiers" + ) + + if args.dry_run: + print("\nDRY RUN - No files will be created or modified\n") + + # Create regex patterns for all groups + print("\nProcessing regex patterns:") + for i, group in enumerate(data["tiered_groups"]): + create_regex_pattern(group["name"], + template_dir, + regex_dir, + args.dry_run, + show_preview=(i == 0)) + + # Create tier formats + print("\nProcessing custom formats:") + unique_tiers = sorted(set(group["tier"] + for group in data["tiered_groups"])) + for i, tier in enumerate(unique_tiers): + create_tier_format(tier, + args.resolution, + args.type, + data["tiered_groups"], + template_dir, + format_dir, + args.dry_run, + show_preview=(i == 0)) + + print( + f"\nSuccessfully {'simulated' if args.dry_run else 'created'} custom formats for {args.resolution} {args.type}" + ) + + +if __name__ == "__main__": + main() diff --git a/templates/groupTier.yml b/templates/groupTier.yml new file mode 100644 index 0000000..0d68212 --- /dev/null +++ b/templates/groupTier.yml @@ -0,0 +1,16 @@ +name: Tier +description: Matches release groups who fall under Tier +tags: + - Release Group +conditions: + - name: Not WEB-DL + negate: true + required: true + source: web_dl + type: source + - name: + negate: false + required: true + resolution: + type: resolution +tests: diff --git a/templates/releaseGroup.yml b/templates/releaseGroup.yml new file mode 100644 index 0000000..c2139ab --- /dev/null +++ b/templates/releaseGroup.yml @@ -0,0 +1,6 @@ +name: +pattern: (?<=^|[\s.-])\b +description: "" +tags: + - Release Group +tests: