feat(guide-sync): add profile groups (#2561)

* chore(backend): Add profile-groups schema and metadata

Add JSON schema for quality profile groups - a simplified structure
to organize quality profiles into logical categories. Update
metadata.schema.json and metadata.json with quality_profile_groups path.

* chore(backend): Add Radarr profile groups

Add groups.json to organize Radarr quality profiles into categories:
Standard, Anime, French, German, and SQP.

* chore(backend): Add Sonarr profile groups

Add groups.json to organize Sonarr quality profiles into categories:
Standard, Anime, French, and German.

* docs: Add profile-groups section to CONTRIBUTING

Document the simplified quality-profile-groups structure with
example JSON format.

---------

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
bakerboy448
2025-12-13 14:43:20 -06:00
committed by GitHub
parent 01e92edbd9
commit 33ab63d853
6 changed files with 154 additions and 4 deletions

View File

@@ -30,6 +30,7 @@ Here you will find guidelines for contributing to [TRaSH Guides](https://trash-g
- [cf-groups](#cf-groups)
- [Group Specific settings](#group-specific-settings)
- [Group Custom Format specific settings](#group-custom-format-specific-settings)
- [quality-profile-groups](#quality-profile-groups)
- [Recommendations](#recommendations)
- [Preview Docs Locally](#preview-docs-locally)
- [Preview after Pull Request](#preview-after-pull-request)
@@ -308,6 +309,34 @@ The cf-group.json exists of two properties.
- `quality_profiles`
- `exclude` - Add the Quality Profiles you want to exclude from this group, using the quality-profiles `name` and `trash_id`.
### quality-profile-groups
Quality profile groups organize quality profiles into logical categories for easier discovery and selection.
- Radarr: `docs/json/radarr/quality-profile-groups/groups.json`
- Sonarr: `docs/json/sonarr/quality-profile-groups/groups.json`
The `groups.json` file contains an array of groups. The order of groups determines display order, and profiles within each group are sorted alphabetically by their name.
```json
[
{
"name": "Standard",
"profiles": ["trash_id_1", "trash_id_2"]
},
{
"name": "Anime",
"profiles": ["trash_id_3"]
}
]
```
- `name` - Display name for the profile group
- `profiles` - Array of quality profile `trash_id` values belonging to this group
> [!IMPORTANT]
> All `trash_id` values in the `profiles` array must correspond to existing quality profiles in the `quality-profiles` directory. Each quality profile should belong to exactly one group.
---
## Recommendations

View File

@@ -0,0 +1,52 @@
[
{
"name": "Standard",
"profiles": {
"hd-bluray-web": "d1d67249d3890e49bc12e275d989a7e9",
"remux-web-1080p": "9ca12ea80aa55ef916e3751f4b874151",
"remux-2160p-combined": "d1d310673359205736b4b84acd5ea8c8",
"remux-2160p-alternative": "dd3cd75deb9645bae838d1c5da6388d5",
"remux-web-2160p": "fd161a61e3ab826d3a22d53f935696dd",
"uhd-bluray-web": "64fb5f9858489bdac2af690e27c8f42f"
}
},
{
"name": "Anime",
"profiles": {
"anime-remux-1080p": "722b624f9af1e492284c4bc842153a38"
}
},
{
"name": "French",
"profiles": {
"french-multi-vo-hd-bluray-web": "2572ce3ea4eef1c19d59e0e20ed1cea7",
"french-multi-vo-hd-remux-web": "c6460a102b312200c095a2d0982e0461",
"french-multi-vo-uhd-bluray-web": "92ead7022d13a7858d54e328e6a2f8f9",
"french-multi-vo-uhd-remux-web": "1fef28c8c919f31cd86283b1baf527d4"
}
},
{
"name": "German",
"profiles": {
"german-hd-bluray-web": "2b90e905c99490edc7c7a5787443748b",
"german-hd-remux-web": "c13c33fdd2c306266b34cb9946de5919",
"german-uhd-bluray-web": "27cc3d153c0a799fd139ef1ff4c4cc42",
"german-uhd-bluray-web-alternative": "425da1ba30711b55d2eb371437ec98d7",
"german-uhd-remux-web": "79faa9943cef2f510b997b1f2a9f3ea6"
}
},
{
"name": "SQP",
"profiles": {
"sqp-1-1080p": "0896c29d74de619df168d23b98104b22",
"sqp-1-2160p": "5128baeb2b081b72126bc8482b2a86a0",
"sqp-1-web-1080p": "90a3370d2d30cbaf08d9c23b856a12c8",
"sqp-1-web-2160p": "e91c9adaca0231493f4af0d571b907f9",
"sqp-2": "c3933358ba2356bafc41524f81471069",
"sqp-3": "2cf36c1f0106ffac993be003ade51865",
"sqp-3-audio": "0ada8e60cc3ddf2733b65de10f4a6c72",
"sqp-4": "013f89e6da27519fe56cf482702a2db9",
"sqp-5": "a7bb1539fd147256b21b1098f3dc2016"
}
}
]

View File

@@ -0,0 +1,35 @@
[
{
"name": "Standard",
"profiles": {
"web-1080p": "72dae194fc92bf828f32cde7744e51a1",
"web-1080p-alternative": "9d142234e45d6143785ac55f5a9e8dc9",
"web-2160p-combined": "c4cadd6b35b95f62c3d47a408e53e2f7",
"web-2160p": "d1498e7d189fbe6c7110ceaabb7473e6",
"web-2160p-alternative": "dfa5eaae7894077ad6449169b6eb03e0"
}
},
{
"name": "Anime",
"profiles": {
"anime-remux-1080p": "20e0fc959f1f1704bed501f23bdae76f"
}
},
{
"name": "French",
"profiles": {
"french-multi-vo-bluray-web-1080p": "4c48f506c1116a3a57ae33f12346bd15",
"french-multi-vo-bluray-web-2160p": "6fa7364373e8f06206871d9c20a4fb3e"
}
},
{
"name": "German",
"profiles": {
"german-hd-bluray-web": "dca7e5e9e99c703bcbdaaa471dd40e98",
"german-hd-remux-web": "0dd5f085ed61a1e01f6d347779dfa1bc",
"german-uhd-bluray-web": "3b0fa37fddaaefc931b75f2889d4b4f5",
"german-uhd-bluray-web-alternative": "7324309a7d1e10dc0dc2cea6c70ed852",
"german-uhd-remux-web": "08cececf1840290f6fd490b7d79e8642"
}
}
]

View File

@@ -6,14 +6,16 @@
"qualities": ["docs/json/radarr/quality-size"],
"naming": ["docs/json/radarr/naming"],
"quality_profiles": ["docs/json/radarr/quality-profiles"],
"custom_format_groups": ["docs/json/radarr/cf-groups"]
"custom_format_groups": ["docs/json/radarr/cf-groups"],
"quality_profile_groups": ["docs/json/radarr/quality-profile-groups"]
},
"sonarr": {
"custom_formats": ["docs/json/sonarr/cf"],
"qualities": ["docs/json/sonarr/quality-size"],
"naming": ["docs/json/sonarr/naming"],
"quality_profiles": ["docs/json/sonarr/quality-profiles"],
"custom_format_groups": ["docs/json/sonarr/cf-groups"]
"custom_format_groups": ["docs/json/sonarr/cf-groups"],
"quality_profile_groups": ["docs/json/sonarr/quality-profile-groups"]
}
}
}

View File

@@ -27,7 +27,8 @@
"qualities": { "$ref": "#/$defs/paths_object" },
"naming": { "$ref": "#/$defs/paths_object" },
"quality_profiles": { "$ref": "#/$defs/paths_object" },
"custom_format_groups": { "$ref": "#/$defs/paths_object" }
"custom_format_groups": { "$ref": "#/$defs/paths_object" },
"quality_profile_groups": { "$ref": "#/$defs/paths_object" }
}
},
"sonarr": {
@@ -38,7 +39,8 @@
"qualities": { "$ref": "#/$defs/paths_object" },
"naming": { "$ref": "#/$defs/paths_object" },
"quality_profiles": { "$ref": "#/$defs/paths_object" },
"custom_format_groups": { "$ref": "#/$defs/paths_object" }
"custom_format_groups": { "$ref": "#/$defs/paths_object" },
"quality_profile_groups": { "$ref": "#/$defs/paths_object" }
}
}
}

View File

@@ -0,0 +1,30 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://raw.githubusercontent.com/TRaSH-/Guides/master/schemas/profile-groups.schema.json",
"title": "Quality Profile Groups Schema",
"description": "Schema for grouping quality profiles into logical categories. Order of groups determines display order.",
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["name", "profiles"],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Display name for the profile group"
},
"profiles": {
"type": "array",
"description": "List of quality profile trash_ids that belong to this group",
"items": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}$"
},
"minItems": 1,
"uniqueItems": true
}
}
},
"minItems": 1
}