1.0.0: the first Depot guide -- 29 custom formats, platform size bands, three profiles
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
# Changelog
|
||||
|
||||
Notable changes (Keep a Changelog format, SemVer).
|
||||
|
||||
## [1.0.0] - 2026-08-04
|
||||
|
||||
### Added
|
||||
- **First release of the guide.** 29 custom formats grounded in the release grammar games
|
||||
trackers actually emit (repacker tiers, scene groups by era, DRM-free/GOG, verified dump sets,
|
||||
disc-image formats, regions, and the junk tier that a profile minimum refuses); a `depot`
|
||||
quality-size definition covering every platform band in GB; three quality profiles — Deck
|
||||
Ready (`default` score set), Archival (`archival`), Console Verified (`console`) — whose
|
||||
`formatItems` carry the full format catalog with them.
|
||||
- `tools/gen.py` — the catalog as one deterministic generator; trash_ids are md5 of stable
|
||||
slugs and never churn.
|
||||
- `metadata.json` in the TRaSH-Guides layout (`json_paths.radarr.*`), so any tool that reads
|
||||
the official guides repo reads this one.
|
||||
@@ -0,0 +1 @@
|
||||
This repository was developed with the assistance of Anthropic's Claude.
|
||||
@@ -0,0 +1,58 @@
|
||||
# depot-guides
|
||||
|
||||
TRaSH-Guides-style guide data for [Depot](https://git.arch.fyi/flan/depot) — custom formats,
|
||||
quality definitions and quality profiles for a *games* pipeline, in the exact repo layout
|
||||
guide-sync tools already speak, so Depot gets its guide synced the same way Radarr and Sonarr
|
||||
get theirs.
|
||||
|
||||
## How it plugs in
|
||||
|
||||
Depot ≥ 0.167.0 answers the Radarr v3 API on its normal port (`customformat`, `qualityprofile`,
|
||||
`qualitydefinition` — the guide-sync surface; Prowlarr's indexer surface lives untouched beside
|
||||
it). Point Recyclarr at this repo and at Depot:
|
||||
|
||||
```yaml
|
||||
# settings.yml — add this repo as a guide source (the official guides stay for your real arrs)
|
||||
resource_providers:
|
||||
- name: depot-guides
|
||||
type: trash-guides
|
||||
clone_url: https://git.arch.fyi/flan/depot-guides.git
|
||||
reference: main
|
||||
```
|
||||
|
||||
```yaml
|
||||
# configs/depot.yml — Depot poses as a Radarr instance
|
||||
radarr:
|
||||
depot:
|
||||
base_url: https://YOUR-DEPOT:8760
|
||||
api_key: YOUR-DEPOT-API-TOKEN
|
||||
quality_definition:
|
||||
type: depot
|
||||
quality_profiles:
|
||||
- trash_id: 5ade0fbd9afd4f1346029d08c55b7029 # Deck Ready
|
||||
- trash_id: af01d5fa4d56625bc1e6fb51579cd8b7 # Archival
|
||||
- trash_id: ab10102c6bdbbec1fc5613f98bb1f0dd # Console Verified
|
||||
```
|
||||
|
||||
That's the whole configuration: each profile's `formatItems` pulls every custom format in this
|
||||
repo along with it, priced by the profile's score set.
|
||||
|
||||
## What the mapping means
|
||||
|
||||
- **Qualities are platform slugs** (`pc`, `switch`, `wii`, …) — platform desirability is a game's
|
||||
quality axis. Size bands ride the Radarr min/max fields as plain **GB** (games have no
|
||||
minutes-of-runtime for Radarr's MB/min to divide over).
|
||||
- **Custom formats** score the *kind* and *provenance* of a release (repacker, scene group,
|
||||
DRM-free, verified dump set, region), grounded in the release grammar games trackers actually
|
||||
emit. Junk (rip portals, online-fix swaps, foreign-only repacks) scores low enough that a
|
||||
profile minimum refuses it.
|
||||
- **Score sets**: `default` (Deck-first), `archival` (clean files; repacks score down),
|
||||
`console` (verified dumps gate entry).
|
||||
- **Regex dialect is Python `re`** (Depot's matcher), not .NET — this guide feeds Depot even
|
||||
though it travels over the Radarr-shaped protocol.
|
||||
|
||||
## Editing
|
||||
|
||||
`tools/gen.py` is the single source of truth — edit the catalog there and run
|
||||
`python3 tools/gen.py` from the repo root; it rewrites `docs/json/depot/**` and `metadata.json`
|
||||
deterministically (trash_ids are md5 of stable slugs and never churn).
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "b623611eb76328d58e4c9db738a23997",
|
||||
"trash_scores": {
|
||||
"default": 100,
|
||||
"archival": -100,
|
||||
"console": 100
|
||||
},
|
||||
"name": "Compressed Disc Image",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Emulator-native compressed format",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\b(RVZ|CHD|CSO|WBFS)\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "02ed63368ae50f5acc639e1fb42b6b4a",
|
||||
"trash_scores": {
|
||||
"default": 2000,
|
||||
"archival": 2000,
|
||||
"console": 0
|
||||
},
|
||||
"name": "DRM-Free",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "DRM-free marker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bDRM[ ._-]?Free\\b|\\bGOG\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "c9ae2bb331b5029498f45fb9d4837abd",
|
||||
"trash_scores": {
|
||||
"default": -1500,
|
||||
"archival": -1500,
|
||||
"console": -100
|
||||
},
|
||||
"name": "Beta / prototype",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Not a release build",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\b(early[ ._-]?access|beta|proto(type)?|alpha|playtest|preload)\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "f58ed17cf1bf7d635e6aab4ae65cf369",
|
||||
"trash_scores": {
|
||||
"default": -5000,
|
||||
"archival": -5000,
|
||||
"console": -5000
|
||||
},
|
||||
"name": "Foreign-Language Only",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Single-foreign-language marker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\b(RUS|CZE|HUN|TUR|POL)[ ._-]?only\\b|\\bRUSSiAN\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "aeb6a7fbde9c2217ee4e590236fc36d4",
|
||||
"trash_scores": {
|
||||
"default": 300,
|
||||
"archival": 800,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Full ISO",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Full ISO marker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bFull[ ._-]?ISO\\b|\\bFULLdvd\\d*\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "6dcfc72e4cc69a337c77bcd10b01f08b",
|
||||
"trash_scores": {
|
||||
"default": 100,
|
||||
"archival": 300,
|
||||
"console": 300
|
||||
},
|
||||
"name": "Verified good dump",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "GoodTools verified-good",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\[!\\]"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "f2aecbde674e20f585744cf601657a9c",
|
||||
"trash_scores": {
|
||||
"default": -1000,
|
||||
"archival": -1000,
|
||||
"console": -1000
|
||||
},
|
||||
"name": "Hacked / trained / cracktro",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Modified dump",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\[[htob]\\]|\\bcracktro\\b|\\btrained\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "3dda59704aed3c058645512bbced87a5",
|
||||
"trash_scores": {
|
||||
"default": 50,
|
||||
"archival": 50,
|
||||
"console": 50
|
||||
},
|
||||
"name": "Multi-Language",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Multi-language marker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "MULTi\\d*|Multi[ ._-]?Language"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "659e09d470345a564680e21b26f68a2b",
|
||||
"trash_scores": {
|
||||
"default": -100,
|
||||
"archival": -300,
|
||||
"console": -100
|
||||
},
|
||||
"name": "NKit",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "NKit image",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bNKit\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "bc35718336211b15597ae8f9e0c4cdae",
|
||||
"trash_scores": {
|
||||
"default": 50,
|
||||
"archival": 100,
|
||||
"console": 100
|
||||
},
|
||||
"name": "No-Intro region tag",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "No-Intro naming convention",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\((USA|Europe|Japan|World)\\)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "ed6dd637e9449629ab737ae8e7d8ba54",
|
||||
"trash_scores": {
|
||||
"default": 800,
|
||||
"archival": 1500,
|
||||
"console": 1500
|
||||
},
|
||||
"name": "No-Intro Verified",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "No-Intro set tag",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\[No-Intro\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "49ffbd882e8eba19f6ab1da94168ee5d",
|
||||
"trash_scores": {
|
||||
"default": -10000,
|
||||
"archival": -10000,
|
||||
"console": -10000
|
||||
},
|
||||
"name": "Online-Fix",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Online-Fix",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "online[ ._-]?fix"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "4f4bf915092671a83b57a9162d5eafdf",
|
||||
"trash_scores": {
|
||||
"default": 150,
|
||||
"archival": -200,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Portable",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Portable / pre-installed",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\b(portable|pre-?installed)\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "1e494e40f52bd3e8e90231e0c05eedfa",
|
||||
"trash_scores": {
|
||||
"default": -8000,
|
||||
"archival": -8000,
|
||||
"console": -8000
|
||||
},
|
||||
"name": "Portal Rip",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Rip-portal branding",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bIGG(-?Games)?\\b|SteamRIP|apunkagames|oceanofgames|\\bFullRip\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "af066b6922d87a9886a21e478cc06d4e",
|
||||
"trash_scores": {
|
||||
"default": 800,
|
||||
"archival": 1500,
|
||||
"console": 1500
|
||||
},
|
||||
"name": "Redump Verified",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Redump set tag",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\[Redump\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"trash_id": "3cc99162d39a95f4115fc2e6148056c2",
|
||||
"trash_scores": {
|
||||
"default": -300,
|
||||
"archival": 0,
|
||||
"console": -300
|
||||
},
|
||||
"name": "Region: Japan Only",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "No western-region marker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": true,
|
||||
"required": true,
|
||||
"fields": {
|
||||
"value": "\\bUSA\\b|\\bEurope\\b|\\bWorld\\b|Region[ ._-]?Free|\\(U\\)|\\(E\\)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Japan / Asia marker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bJapan\\b|\\bJPN\\b|\\bAsia\\b|\\(J\\)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "570ad7513a464acc9fd821fe943522c3",
|
||||
"trash_scores": {
|
||||
"default": 100,
|
||||
"archival": 100,
|
||||
"console": 100
|
||||
},
|
||||
"name": "Region: USA / Region-Free",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "USA / World / region-free marker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bUSA\\b|\\bWorld\\b|Region[ ._-]?Free|\\(U\\)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "955266bf91e651c61cb047da8e7de8ad",
|
||||
"trash_scores": {
|
||||
"default": 1100,
|
||||
"archival": -500,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Repack: DODI",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "DODI",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bDODI\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "70210e336743a877d640566f1995bba2",
|
||||
"trash_scores": {
|
||||
"default": 600,
|
||||
"archival": -500,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Repack: ElAmigos",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "ElAmigos",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bElAmigos\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "67ec0931c3bfdcccebfb40301995a2e9",
|
||||
"trash_scores": {
|
||||
"default": 1200,
|
||||
"archival": -500,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Repack: FitGirl",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "FitGirl",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bFitGirl\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"trash_id": "b7c1c41282ce3e32b3bdc7aae636f66d",
|
||||
"trash_scores": {
|
||||
"default": 100,
|
||||
"archival": -300,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Repack",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Repack word",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\brepack\\b"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Not a named repacker (they carry their own format)",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": true,
|
||||
"required": true,
|
||||
"fields": {
|
||||
"value": "FitGirl|DODI|ElAmigos|KaOsKrew"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "bacaed0e5d8a28bc1f0f8fc57c85cd4d",
|
||||
"trash_scores": {
|
||||
"default": 500,
|
||||
"archival": -500,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Repack: KaOsKrew",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "KaOsKrew",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bKaOsKrew\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "81619404af95cf218ca2217ac68f86d6",
|
||||
"trash_scores": {
|
||||
"default": -3000,
|
||||
"archival": -3000,
|
||||
"console": -3000
|
||||
},
|
||||
"name": "Russian-First Repack",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "RUS-first repacker",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bxatab\\b|\\bigruha\\b|R\\.?G\\.?[ ._-]?(Mechanics|Catalyst|Freedom)|\\bMizantrop\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "d97760ee500bb2f8b5066452c9b4b730",
|
||||
"trash_scores": {
|
||||
"default": 50,
|
||||
"archival": 50,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Scene fix (PROPER)",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "PROPER / RERIP",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\b(proper|re-?rip|rerepack)\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "592b82170b6b863c0d7c51ed35dfb996",
|
||||
"trash_scores": {
|
||||
"default": 300,
|
||||
"archival": 300,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Scene Release (Legacy)",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Legacy scene group suffix",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "-(CODEX|PLAZA|CPY|HOODLUM|RELOADED|PROPHET|FAiRLiGHT|SiMPLEX|DARKSiDERS|TiNYiSO|DOGE)\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "60b850117c9ddf85d548d184a8ecd391",
|
||||
"trash_scores": {
|
||||
"default": 400,
|
||||
"archival": 400,
|
||||
"console": 0
|
||||
},
|
||||
"name": "Scene Release (Modern)",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Modern scene group suffix",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "-(RUNE|TENOKE|EMPRESS|FLT|RAZOR1911|SKIDROW)\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "88f1aa2cc4a9bcaa186bab6a460d7b79",
|
||||
"trash_scores": {
|
||||
"default": 100,
|
||||
"archival": 0,
|
||||
"console": 100
|
||||
},
|
||||
"name": "Scrubbed",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Scrubbed image",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bScrubbed\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "dde856d22ffbbe6cb2bf18d5fb8a6318",
|
||||
"trash_scores": {
|
||||
"default": -2000,
|
||||
"archival": -2000,
|
||||
"console": -2000
|
||||
},
|
||||
"name": "Trainer only",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "Trainer",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\btrainer\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"trash_id": "c840533cab446bc37008cd749fd7bb61",
|
||||
"trash_scores": {
|
||||
"default": 200,
|
||||
"archival": -100,
|
||||
"console": 200
|
||||
},
|
||||
"name": "XISO (Xbox)",
|
||||
"includeCustomFormatWhenRenaming": false,
|
||||
"specifications": [
|
||||
{
|
||||
"name": "XISO-sliced Xbox image",
|
||||
"implementation": "ReleaseTitleSpecification",
|
||||
"negate": false,
|
||||
"required": false,
|
||||
"fields": {
|
||||
"value": "\\bXISO\\b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
{
|
||||
"trash_id": "af01d5fa4d56625bc1e6fb51579cd8b7",
|
||||
"name": "Archival",
|
||||
"trash_score_set": "archival",
|
||||
"upgradeAllowed": true,
|
||||
"cutoff": "pc",
|
||||
"minFormatScore": 0,
|
||||
"cutoffFormatScore": 10000,
|
||||
"minUpgradeFormatScore": 1,
|
||||
"items": [
|
||||
{
|
||||
"name": "pc",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "linux",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "switch",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "wii",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gc",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "ps2",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "psx",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "xbox",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "psp",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "n64",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "dreamcast",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "saturn",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "segacd",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "nds",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "n3ds",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "snes",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "genesis",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gba",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gbc",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gb",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "mastersystem",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gamegear",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "nes",
|
||||
"allowed": true
|
||||
}
|
||||
],
|
||||
"formatItems": {
|
||||
"DRM-Free": "02ed63368ae50f5acc639e1fb42b6b4a",
|
||||
"Full ISO": "aeb6a7fbde9c2217ee4e590236fc36d4",
|
||||
"Portable": "4f4bf915092671a83b57a9162d5eafdf",
|
||||
"Repack: FitGirl": "67ec0931c3bfdcccebfb40301995a2e9",
|
||||
"Repack: DODI": "955266bf91e651c61cb047da8e7de8ad",
|
||||
"Repack: ElAmigos": "70210e336743a877d640566f1995bba2",
|
||||
"Repack: KaOsKrew": "bacaed0e5d8a28bc1f0f8fc57c85cd4d",
|
||||
"Repack": "b7c1c41282ce3e32b3bdc7aae636f66d",
|
||||
"Scene Release (Modern)": "60b850117c9ddf85d548d184a8ecd391",
|
||||
"Scene Release (Legacy)": "592b82170b6b863c0d7c51ed35dfb996",
|
||||
"Scene fix (PROPER)": "d97760ee500bb2f8b5066452c9b4b730",
|
||||
"Russian-First Repack": "81619404af95cf218ca2217ac68f86d6",
|
||||
"Online-Fix": "49ffbd882e8eba19f6ab1da94168ee5d",
|
||||
"Portal Rip": "1e494e40f52bd3e8e90231e0c05eedfa",
|
||||
"Foreign-Language Only": "f58ed17cf1bf7d635e6aab4ae65cf369",
|
||||
"Multi-Language": "3dda59704aed3c058645512bbced87a5",
|
||||
"Beta / prototype": "c9ae2bb331b5029498f45fb9d4837abd",
|
||||
"Trainer only": "dde856d22ffbbe6cb2bf18d5fb8a6318",
|
||||
"Redump Verified": "af066b6922d87a9886a21e478cc06d4e",
|
||||
"No-Intro Verified": "ed6dd637e9449629ab737ae8e7d8ba54",
|
||||
"Verified good dump": "6dcfc72e4cc69a337c77bcd10b01f08b",
|
||||
"No-Intro region tag": "bc35718336211b15597ae8f9e0c4cdae",
|
||||
"Hacked / trained / cracktro": "f2aecbde674e20f585744cf601657a9c",
|
||||
"Scrubbed": "88f1aa2cc4a9bcaa186bab6a460d7b79",
|
||||
"Compressed Disc Image": "b623611eb76328d58e4c9db738a23997",
|
||||
"NKit": "659e09d470345a564680e21b26f68a2b",
|
||||
"XISO (Xbox)": "c840533cab446bc37008cd749fd7bb61",
|
||||
"Region: USA / Region-Free": "570ad7513a464acc9fd821fe943522c3",
|
||||
"Region: Japan Only": "3cc99162d39a95f4115fc2e6148056c2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
{
|
||||
"trash_id": "ab10102c6bdbbec1fc5613f98bb1f0dd",
|
||||
"name": "Console Verified",
|
||||
"trash_score_set": "console",
|
||||
"upgradeAllowed": true,
|
||||
"cutoff": "switch",
|
||||
"minFormatScore": 800,
|
||||
"cutoffFormatScore": 10000,
|
||||
"minUpgradeFormatScore": 1,
|
||||
"items": [
|
||||
{
|
||||
"name": "switch",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "wii",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gc",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "ps2",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "psx",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "xbox",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "psp",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "n64",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "dreamcast",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "saturn",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "segacd",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "nds",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "n3ds",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "snes",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "genesis",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gba",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gbc",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gb",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "mastersystem",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gamegear",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "nes",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "pc",
|
||||
"allowed": false
|
||||
},
|
||||
{
|
||||
"name": "linux",
|
||||
"allowed": false
|
||||
},
|
||||
{
|
||||
"name": "mac",
|
||||
"allowed": false
|
||||
}
|
||||
],
|
||||
"formatItems": {
|
||||
"DRM-Free": "02ed63368ae50f5acc639e1fb42b6b4a",
|
||||
"Full ISO": "aeb6a7fbde9c2217ee4e590236fc36d4",
|
||||
"Portable": "4f4bf915092671a83b57a9162d5eafdf",
|
||||
"Repack: FitGirl": "67ec0931c3bfdcccebfb40301995a2e9",
|
||||
"Repack: DODI": "955266bf91e651c61cb047da8e7de8ad",
|
||||
"Repack: ElAmigos": "70210e336743a877d640566f1995bba2",
|
||||
"Repack: KaOsKrew": "bacaed0e5d8a28bc1f0f8fc57c85cd4d",
|
||||
"Repack": "b7c1c41282ce3e32b3bdc7aae636f66d",
|
||||
"Scene Release (Modern)": "60b850117c9ddf85d548d184a8ecd391",
|
||||
"Scene Release (Legacy)": "592b82170b6b863c0d7c51ed35dfb996",
|
||||
"Scene fix (PROPER)": "d97760ee500bb2f8b5066452c9b4b730",
|
||||
"Russian-First Repack": "81619404af95cf218ca2217ac68f86d6",
|
||||
"Online-Fix": "49ffbd882e8eba19f6ab1da94168ee5d",
|
||||
"Portal Rip": "1e494e40f52bd3e8e90231e0c05eedfa",
|
||||
"Foreign-Language Only": "f58ed17cf1bf7d635e6aab4ae65cf369",
|
||||
"Multi-Language": "3dda59704aed3c058645512bbced87a5",
|
||||
"Beta / prototype": "c9ae2bb331b5029498f45fb9d4837abd",
|
||||
"Trainer only": "dde856d22ffbbe6cb2bf18d5fb8a6318",
|
||||
"Redump Verified": "af066b6922d87a9886a21e478cc06d4e",
|
||||
"No-Intro Verified": "ed6dd637e9449629ab737ae8e7d8ba54",
|
||||
"Verified good dump": "6dcfc72e4cc69a337c77bcd10b01f08b",
|
||||
"No-Intro region tag": "bc35718336211b15597ae8f9e0c4cdae",
|
||||
"Hacked / trained / cracktro": "f2aecbde674e20f585744cf601657a9c",
|
||||
"Scrubbed": "88f1aa2cc4a9bcaa186bab6a460d7b79",
|
||||
"Compressed Disc Image": "b623611eb76328d58e4c9db738a23997",
|
||||
"NKit": "659e09d470345a564680e21b26f68a2b",
|
||||
"XISO (Xbox)": "c840533cab446bc37008cd749fd7bb61",
|
||||
"Region: USA / Region-Free": "570ad7513a464acc9fd821fe943522c3",
|
||||
"Region: Japan Only": "3cc99162d39a95f4115fc2e6148056c2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"trash_id": "5ade0fbd9afd4f1346029d08c55b7029",
|
||||
"name": "Deck Ready",
|
||||
"trash_score_set": "default",
|
||||
"upgradeAllowed": true,
|
||||
"cutoff": "pc",
|
||||
"minFormatScore": -100,
|
||||
"cutoffFormatScore": 10000,
|
||||
"minUpgradeFormatScore": 1,
|
||||
"items": [
|
||||
{
|
||||
"name": "linux",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "pc",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "switch",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gc",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "wii",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "ps2",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "psx",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "xbox",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "psp",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "n64",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "dreamcast",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "nds",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "n3ds",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "snes",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "genesis",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "gba",
|
||||
"allowed": true
|
||||
},
|
||||
{
|
||||
"name": "nes",
|
||||
"allowed": true
|
||||
}
|
||||
],
|
||||
"formatItems": {
|
||||
"DRM-Free": "02ed63368ae50f5acc639e1fb42b6b4a",
|
||||
"Full ISO": "aeb6a7fbde9c2217ee4e590236fc36d4",
|
||||
"Portable": "4f4bf915092671a83b57a9162d5eafdf",
|
||||
"Repack: FitGirl": "67ec0931c3bfdcccebfb40301995a2e9",
|
||||
"Repack: DODI": "955266bf91e651c61cb047da8e7de8ad",
|
||||
"Repack: ElAmigos": "70210e336743a877d640566f1995bba2",
|
||||
"Repack: KaOsKrew": "bacaed0e5d8a28bc1f0f8fc57c85cd4d",
|
||||
"Repack": "b7c1c41282ce3e32b3bdc7aae636f66d",
|
||||
"Scene Release (Modern)": "60b850117c9ddf85d548d184a8ecd391",
|
||||
"Scene Release (Legacy)": "592b82170b6b863c0d7c51ed35dfb996",
|
||||
"Scene fix (PROPER)": "d97760ee500bb2f8b5066452c9b4b730",
|
||||
"Russian-First Repack": "81619404af95cf218ca2217ac68f86d6",
|
||||
"Online-Fix": "49ffbd882e8eba19f6ab1da94168ee5d",
|
||||
"Portal Rip": "1e494e40f52bd3e8e90231e0c05eedfa",
|
||||
"Foreign-Language Only": "f58ed17cf1bf7d635e6aab4ae65cf369",
|
||||
"Multi-Language": "3dda59704aed3c058645512bbced87a5",
|
||||
"Beta / prototype": "c9ae2bb331b5029498f45fb9d4837abd",
|
||||
"Trainer only": "dde856d22ffbbe6cb2bf18d5fb8a6318",
|
||||
"Redump Verified": "af066b6922d87a9886a21e478cc06d4e",
|
||||
"No-Intro Verified": "ed6dd637e9449629ab737ae8e7d8ba54",
|
||||
"Verified good dump": "6dcfc72e4cc69a337c77bcd10b01f08b",
|
||||
"No-Intro region tag": "bc35718336211b15597ae8f9e0c4cdae",
|
||||
"Hacked / trained / cracktro": "f2aecbde674e20f585744cf601657a9c",
|
||||
"Scrubbed": "88f1aa2cc4a9bcaa186bab6a460d7b79",
|
||||
"Compressed Disc Image": "b623611eb76328d58e4c9db738a23997",
|
||||
"NKit": "659e09d470345a564680e21b26f68a2b",
|
||||
"XISO (Xbox)": "c840533cab446bc37008cd749fd7bb61",
|
||||
"Region: USA / Region-Free": "570ad7513a464acc9fd821fe943522c3",
|
||||
"Region: Japan Only": "3cc99162d39a95f4115fc2e6148056c2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"trash_id": "5bce75e0f514f22b1bfa7657db70275a",
|
||||
"type": "depot",
|
||||
"qualities": [
|
||||
{
|
||||
"quality": "pc",
|
||||
"min": 0.005,
|
||||
"preferred": 40,
|
||||
"max": 350
|
||||
},
|
||||
{
|
||||
"quality": "linux",
|
||||
"min": 0.005,
|
||||
"preferred": 40,
|
||||
"max": 350
|
||||
},
|
||||
{
|
||||
"quality": "switch",
|
||||
"min": 0.3,
|
||||
"preferred": 8,
|
||||
"max": 35
|
||||
},
|
||||
{
|
||||
"quality": "wiiu",
|
||||
"min": 2,
|
||||
"preferred": 10,
|
||||
"max": 30
|
||||
},
|
||||
{
|
||||
"quality": "wii",
|
||||
"min": 0.5,
|
||||
"preferred": 4,
|
||||
"max": 9
|
||||
},
|
||||
{
|
||||
"quality": "gc",
|
||||
"min": 0.3,
|
||||
"preferred": 1.4,
|
||||
"max": 2.2
|
||||
},
|
||||
{
|
||||
"quality": "ps3",
|
||||
"min": 1.0,
|
||||
"preferred": 15,
|
||||
"max": 50
|
||||
},
|
||||
{
|
||||
"quality": "ps2",
|
||||
"min": 0.3,
|
||||
"preferred": 4,
|
||||
"max": 9
|
||||
},
|
||||
{
|
||||
"quality": "psx",
|
||||
"min": 0.05,
|
||||
"preferred": 0.6,
|
||||
"max": 3.0
|
||||
},
|
||||
{
|
||||
"quality": "psp",
|
||||
"min": 0.05,
|
||||
"preferred": 1,
|
||||
"max": 3.0
|
||||
},
|
||||
{
|
||||
"quality": "xbox",
|
||||
"min": 0.8,
|
||||
"preferred": 4,
|
||||
"max": 9.0
|
||||
},
|
||||
{
|
||||
"quality": "dreamcast",
|
||||
"min": 0.1,
|
||||
"preferred": 1,
|
||||
"max": 2.5
|
||||
},
|
||||
{
|
||||
"quality": "saturn",
|
||||
"min": 0.05,
|
||||
"preferred": 0.6,
|
||||
"max": 1.6
|
||||
},
|
||||
{
|
||||
"quality": "segacd",
|
||||
"min": 0.05,
|
||||
"preferred": 0.5,
|
||||
"max": 1.2
|
||||
},
|
||||
{
|
||||
"quality": "nds",
|
||||
"min": 0.004,
|
||||
"preferred": 0.1,
|
||||
"max": 0.6
|
||||
},
|
||||
{
|
||||
"quality": "n3ds",
|
||||
"min": 0.02,
|
||||
"preferred": 1,
|
||||
"max": 6.0
|
||||
},
|
||||
{
|
||||
"quality": "n64",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.03,
|
||||
"max": 0.07
|
||||
},
|
||||
{
|
||||
"quality": "snes",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.003,
|
||||
"max": 0.02
|
||||
},
|
||||
{
|
||||
"quality": "genesis",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.002,
|
||||
"max": 0.02
|
||||
},
|
||||
{
|
||||
"quality": "nes",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.0005,
|
||||
"max": 0.01
|
||||
},
|
||||
{
|
||||
"quality": "gba",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.008,
|
||||
"max": 0.05
|
||||
},
|
||||
{
|
||||
"quality": "gbc",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.001,
|
||||
"max": 0.02
|
||||
},
|
||||
{
|
||||
"quality": "gb",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.0005,
|
||||
"max": 0.02
|
||||
},
|
||||
{
|
||||
"quality": "mastersystem",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.0005,
|
||||
"max": 0.02
|
||||
},
|
||||
{
|
||||
"quality": "gamegear",
|
||||
"min": 1e-05,
|
||||
"preferred": 0.0005,
|
||||
"max": 0.02
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/TRaSH-Guides/Guides/master/metadata.schema.json",
|
||||
"json_paths": {
|
||||
"radarr": {
|
||||
"custom_formats": [
|
||||
"docs/json/depot/cf"
|
||||
],
|
||||
"qualities": [
|
||||
"docs/json/depot/quality-size"
|
||||
],
|
||||
"quality_profiles": [
|
||||
"docs/json/depot/quality-profiles"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
+265
@@ -0,0 +1,265 @@
|
||||
#!/usr/bin/env python3
|
||||
"""gen.py -- emit the guide's JSON from the catalog below (the single source of truth).
|
||||
|
||||
Run from the repo root: python3 tools/gen.py
|
||||
Rewrites docs/json/depot/** in place. Deterministic: trash_ids are md5("depot-guides:cf:<slug>"),
|
||||
so re-running never churns ids, and a renamed CF keeps its id only if its slug is kept too.
|
||||
|
||||
Regex dialect is Python `re` with IGNORECASE (Depot's matcher), NOT .NET -- this guide feeds
|
||||
Depot, not Radarr, even though it travels over the Radarr-shaped sync protocol.
|
||||
"""
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
|
||||
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
OUT = os.path.join(ROOT, "docs", "json", "depot")
|
||||
|
||||
|
||||
def tid(kind, slug):
|
||||
return hashlib.md5(("depot-guides:%s:%s" % (kind, slug)).encode()).hexdigest()
|
||||
|
||||
|
||||
def spec(name, value, negate=False, required=False):
|
||||
return {"name": name, "implementation": "ReleaseTitleSpecification",
|
||||
"negate": negate, "required": required, "fields": {"value": value}}
|
||||
|
||||
|
||||
# slug, name, scores {set: score}, specifications
|
||||
# Names that match Depot's seeded defaults are deliberate: the sync adopts the seeded row in
|
||||
# place (same name = same format), upgrading it to the guide's pattern instead of duplicating it.
|
||||
CFS = [
|
||||
# ---- PC: source tiers -------------------------------------------------------------------
|
||||
("drm-free", "DRM-Free",
|
||||
{"default": 2000, "archival": 2000, "console": 0},
|
||||
[spec("DRM-free marker", r"\bDRM[ ._-]?Free\b|\bGOG\b")]),
|
||||
("full-iso", "Full ISO",
|
||||
{"default": 300, "archival": 800, "console": 0},
|
||||
[spec("Full ISO marker", r"\bFull[ ._-]?ISO\b|\bFULLdvd\d*\b")]),
|
||||
("portable", "Portable",
|
||||
{"default": 150, "archival": -200, "console": 0},
|
||||
[spec("Portable / pre-installed", r"\b(portable|pre-?installed)\b")]),
|
||||
("repack-fitgirl", "Repack: FitGirl",
|
||||
{"default": 1200, "archival": -500, "console": 0},
|
||||
[spec("FitGirl", r"\bFitGirl\b")]),
|
||||
("repack-dodi", "Repack: DODI",
|
||||
{"default": 1100, "archival": -500, "console": 0},
|
||||
[spec("DODI", r"\bDODI\b")]),
|
||||
("repack-elamigos", "Repack: ElAmigos",
|
||||
{"default": 600, "archival": -500, "console": 0},
|
||||
[spec("ElAmigos", r"\bElAmigos\b")]),
|
||||
("repack-kaoskrew", "Repack: KaOsKrew",
|
||||
{"default": 500, "archival": -500, "console": 0},
|
||||
[spec("KaOsKrew", r"\bKaOsKrew\b")]),
|
||||
("repack-generic", "Repack",
|
||||
{"default": 100, "archival": -300, "console": 0},
|
||||
[spec("Repack word", r"\brepack\b"),
|
||||
spec("Not a named repacker (they carry their own format)",
|
||||
r"FitGirl|DODI|ElAmigos|KaOsKrew", negate=True, required=True)]),
|
||||
("scene-modern", "Scene Release (Modern)",
|
||||
{"default": 400, "archival": 400, "console": 0},
|
||||
[spec("Modern scene group suffix",
|
||||
r"-(RUNE|TENOKE|EMPRESS|FLT|RAZOR1911|SKIDROW)\b")]),
|
||||
("scene-legacy", "Scene Release (Legacy)",
|
||||
{"default": 300, "archival": 300, "console": 0},
|
||||
[spec("Legacy scene group suffix",
|
||||
r"-(CODEX|PLAZA|CPY|HOODLUM|RELOADED|PROPHET|FAiRLiGHT|SiMPLEX|DARKSiDERS|TiNYiSO|DOGE)\b")]),
|
||||
("scene-fix", "Scene fix (PROPER)",
|
||||
{"default": 50, "archival": 50, "console": 0},
|
||||
[spec("PROPER / RERIP", r"\b(proper|re-?rip|rerepack)\b")]),
|
||||
# ---- PC: junk and hazards ---------------------------------------------------------------
|
||||
("rus-first-repack", "Russian-First Repack",
|
||||
{"default": -3000, "archival": -3000, "console": -3000},
|
||||
[spec("RUS-first repacker",
|
||||
r"\bxatab\b|\bigruha\b|R\.?G\.?[ ._-]?(Mechanics|Catalyst|Freedom)|\bMizantrop\b")]),
|
||||
("online-fix", "Online-Fix",
|
||||
{"default": -10000, "archival": -10000, "console": -10000},
|
||||
[spec("Online-Fix", r"online[ ._-]?fix")]),
|
||||
("portal-rip", "Portal Rip",
|
||||
{"default": -8000, "archival": -8000, "console": -8000},
|
||||
[spec("Rip-portal branding",
|
||||
r"\bIGG(-?Games)?\b|SteamRIP|apunkagames|oceanofgames|\bFullRip\b")]),
|
||||
("foreign-only", "Foreign-Language Only",
|
||||
{"default": -5000, "archival": -5000, "console": -5000},
|
||||
[spec("Single-foreign-language marker",
|
||||
r"\b(RUS|CZE|HUN|TUR|POL)[ ._-]?only\b|\bRUSSiAN\b")]),
|
||||
("multi-language", "Multi-Language",
|
||||
{"default": 50, "archival": 50, "console": 50},
|
||||
[spec("Multi-language marker", r"MULTi\d*|Multi[ ._-]?Language")]),
|
||||
("early-access", "Beta / prototype",
|
||||
{"default": -1500, "archival": -1500, "console": -100},
|
||||
[spec("Not a release build",
|
||||
r"\b(early[ ._-]?access|beta|proto(type)?|alpha|playtest|preload)\b")]),
|
||||
("trainer-only", "Trainer only",
|
||||
{"default": -2000, "archival": -2000, "console": -2000},
|
||||
[spec("Trainer", r"\btrainer\b")]),
|
||||
# ---- Console: dump provenance -----------------------------------------------------------
|
||||
("redump", "Redump Verified",
|
||||
{"default": 800, "archival": 1500, "console": 1500},
|
||||
[spec("Redump set tag", r"\[Redump\b")]),
|
||||
("no-intro", "No-Intro Verified",
|
||||
{"default": 800, "archival": 1500, "console": 1500},
|
||||
[spec("No-Intro set tag", r"\[No-Intro\b")]),
|
||||
("goodtools-verified", "Verified good dump",
|
||||
{"default": 100, "archival": 300, "console": 300},
|
||||
[spec("GoodTools verified-good", r"\[!\]")]),
|
||||
("no-intro-region", "No-Intro region tag",
|
||||
{"default": 50, "archival": 100, "console": 100},
|
||||
[spec("No-Intro naming convention", r"\((USA|Europe|Japan|World)\)")]),
|
||||
("hacked-dump", "Hacked / trained / cracktro",
|
||||
{"default": -1000, "archival": -1000, "console": -1000},
|
||||
[spec("Modified dump", r"\[[htob]\]|\bcracktro\b|\btrained\b")]),
|
||||
("scrubbed", "Scrubbed",
|
||||
{"default": 100, "archival": 0, "console": 100},
|
||||
[spec("Scrubbed image", r"\bScrubbed\b")]),
|
||||
("compressed-image", "Compressed Disc Image",
|
||||
{"default": 100, "archival": -100, "console": 100},
|
||||
[spec("Emulator-native compressed format", r"\b(RVZ|CHD|CSO|WBFS)\b")]),
|
||||
("nkit", "NKit",
|
||||
{"default": -100, "archival": -300, "console": -100},
|
||||
[spec("NKit image", r"\bNKit\b")]),
|
||||
("xiso", "XISO (Xbox)",
|
||||
{"default": 200, "archival": -100, "console": 200},
|
||||
[spec("XISO-sliced Xbox image", r"\bXISO\b")]),
|
||||
("region-usa", "Region: USA / Region-Free",
|
||||
{"default": 100, "archival": 100, "console": 100},
|
||||
[spec("USA / World / region-free marker",
|
||||
r"\bUSA\b|\bWorld\b|Region[ ._-]?Free|\(U\)")]),
|
||||
("region-japan-only", "Region: Japan Only",
|
||||
{"default": -300, "archival": 0, "console": -300},
|
||||
[spec("No western-region marker", r"\bUSA\b|\bEurope\b|\bWorld\b|Region[ ._-]?Free|\(U\)|\(E\)",
|
||||
negate=True, required=True),
|
||||
spec("Japan / Asia marker", r"\bJapan\b|\bJPN\b|\bAsia\b|\(J\)")]),
|
||||
]
|
||||
|
||||
# Platform-slug size bands, GB (Depot's quality axis; min/max ride the Radarr fields as plain GB).
|
||||
# Depot's built-in defaults stand underneath -- the guide states only what it wants to pin, and a
|
||||
# platform absent here keeps Depot's own band (or stays unconstrained, like pc used to be).
|
||||
QUALITY_SIZE = {
|
||||
"trash_id": tid("quality-size", "depot"),
|
||||
"type": "depot",
|
||||
"qualities": [
|
||||
{"quality": "pc", "min": 0.005, "preferred": 40, "max": 350},
|
||||
{"quality": "linux", "min": 0.005, "preferred": 40, "max": 350},
|
||||
{"quality": "switch", "min": 0.3, "preferred": 8, "max": 35},
|
||||
{"quality": "wiiu", "min": 2, "preferred": 10, "max": 30},
|
||||
{"quality": "wii", "min": 0.5, "preferred": 4, "max": 9},
|
||||
{"quality": "gc", "min": 0.3, "preferred": 1.4, "max": 2.2},
|
||||
{"quality": "ps3", "min": 1.0, "preferred": 15, "max": 50},
|
||||
{"quality": "ps2", "min": 0.3, "preferred": 4, "max": 9},
|
||||
{"quality": "psx", "min": 0.05, "preferred": 0.6, "max": 3.0},
|
||||
{"quality": "psp", "min": 0.05, "preferred": 1, "max": 3.0},
|
||||
{"quality": "xbox", "min": 0.8, "preferred": 4, "max": 9.0},
|
||||
{"quality": "dreamcast", "min": 0.1, "preferred": 1, "max": 2.5},
|
||||
{"quality": "saturn", "min": 0.05, "preferred": 0.6, "max": 1.6},
|
||||
{"quality": "segacd", "min": 0.05, "preferred": 0.5, "max": 1.2},
|
||||
{"quality": "nds", "min": 0.004, "preferred": 0.1, "max": 0.6},
|
||||
{"quality": "n3ds", "min": 0.02, "preferred": 1, "max": 6.0},
|
||||
{"quality": "n64", "min": 0.00001, "preferred": 0.03, "max": 0.07},
|
||||
{"quality": "snes", "min": 0.00001, "preferred": 0.003, "max": 0.02},
|
||||
{"quality": "genesis", "min": 0.00001, "preferred": 0.002, "max": 0.02},
|
||||
{"quality": "nes", "min": 0.00001, "preferred": 0.0005, "max": 0.01},
|
||||
{"quality": "gba", "min": 0.00001, "preferred": 0.008, "max": 0.05},
|
||||
{"quality": "gbc", "min": 0.00001, "preferred": 0.001, "max": 0.02},
|
||||
{"quality": "gb", "min": 0.00001, "preferred": 0.0005, "max": 0.02},
|
||||
{"quality": "mastersystem", "min": 0.00001, "preferred": 0.0005, "max": 0.02},
|
||||
{"quality": "gamegear", "min": 0.00001, "preferred": 0.0005, "max": 0.02},
|
||||
],
|
||||
}
|
||||
|
||||
# The platform ladders, best first (guide items are written top=best; the sync tool reverses to
|
||||
# the service's wire order itself). allowed=false platforms are the profile's not-wanted list.
|
||||
_DECK_LADDER = ["linux", "pc", "switch", "gc", "wii", "ps2", "psx", "xbox", "psp", "n64",
|
||||
"dreamcast", "nds", "n3ds", "snes", "genesis", "gba", "nes"]
|
||||
_CONSOLE_LADDER = ["switch", "wii", "gc", "ps2", "psx", "xbox", "psp", "n64", "dreamcast",
|
||||
"saturn", "segacd", "nds", "n3ds", "snes", "genesis", "gba", "gbc", "gb",
|
||||
"mastersystem", "gamegear", "nes"]
|
||||
|
||||
|
||||
def _format_items():
|
||||
"""Every guide CF, name -> trash_id: Recyclarr expands these into implicit CF sync entries
|
||||
assigned to the profile, so listing a profile in recyclarr.yml is ALL the configuration a
|
||||
user needs -- the formats ride in with it."""
|
||||
return {name: tid("cf", slug) for slug, name, _scores, _specs in CFS}
|
||||
|
||||
|
||||
PROFILES = [
|
||||
{
|
||||
"trash_id": tid("quality-profile", "deck-ready"),
|
||||
"name": "Deck Ready",
|
||||
"trash_score_set": "default",
|
||||
"upgradeAllowed": True,
|
||||
"cutoff": "pc",
|
||||
"minFormatScore": -100,
|
||||
"cutoffFormatScore": 10000,
|
||||
"minUpgradeFormatScore": 1,
|
||||
"items": [{"name": q, "allowed": True} for q in _DECK_LADDER],
|
||||
},
|
||||
{
|
||||
"trash_id": tid("quality-profile", "archival"),
|
||||
"name": "Archival",
|
||||
"trash_score_set": "archival",
|
||||
"upgradeAllowed": True,
|
||||
"cutoff": "pc",
|
||||
"minFormatScore": 0,
|
||||
"cutoffFormatScore": 10000,
|
||||
"minUpgradeFormatScore": 1,
|
||||
"items": [{"name": q, "allowed": True} for q in ["pc", "linux"] + _CONSOLE_LADDER],
|
||||
},
|
||||
{
|
||||
"trash_id": tid("quality-profile", "console-verified"),
|
||||
"name": "Console Verified",
|
||||
"trash_score_set": "console",
|
||||
"upgradeAllowed": True,
|
||||
"cutoff": "switch",
|
||||
"minFormatScore": 800,
|
||||
"cutoffFormatScore": 10000,
|
||||
"minUpgradeFormatScore": 1,
|
||||
"items": ([{"name": q, "allowed": True} for q in _CONSOLE_LADDER] +
|
||||
[{"name": q, "allowed": False} for q in ("pc", "linux", "mac")]),
|
||||
},
|
||||
]
|
||||
|
||||
METADATA = {
|
||||
"$schema": "https://raw.githubusercontent.com/TRaSH-Guides/Guides/master/metadata.schema.json",
|
||||
"json_paths": {
|
||||
"radarr": {
|
||||
"custom_formats": ["docs/json/depot/cf"],
|
||||
"qualities": ["docs/json/depot/quality-size"],
|
||||
"quality_profiles": ["docs/json/depot/quality-profiles"],
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def slugfile(name):
|
||||
return "".join(c if c.isalnum() else "-" for c in name.lower()).strip("-") + ".json"
|
||||
|
||||
|
||||
def write(path, obj):
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
with open(path, "w") as f:
|
||||
json.dump(obj, f, indent=2, ensure_ascii=False)
|
||||
f.write("\n")
|
||||
|
||||
|
||||
def main():
|
||||
for slug, name, scores, specs in CFS:
|
||||
write(os.path.join(OUT, "cf", slug + ".json"), {
|
||||
"trash_id": tid("cf", slug),
|
||||
"trash_scores": scores,
|
||||
"name": name,
|
||||
"includeCustomFormatWhenRenaming": False,
|
||||
"specifications": specs,
|
||||
})
|
||||
write(os.path.join(OUT, "quality-size", "depot.json"), QUALITY_SIZE)
|
||||
for p in PROFILES:
|
||||
write(os.path.join(OUT, "quality-profiles", slugfile(p["name"])),
|
||||
dict(p, formatItems=_format_items()))
|
||||
write(os.path.join(ROOT, "metadata.json"), METADATA)
|
||||
print("wrote %d CFs, 1 quality-size, %d profiles + metadata.json under %s"
|
||||
% (len(CFS), len(PROFILES), ROOT))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user