81 Commits

Author SHA1 Message Date
Sam Chau
8be921cab9 fix: add support for "minUpgradeFormatScore" to sonarr profiles 2024-09-23 22:23:24 +09:30
Sam Chau
4364d940ec fix: add support for "minUpgradeFormatScore" to radarr profiles 2024-09-23 22:21:38 +09:30
santiagosayshey
d4dc3b6c2d workflow: added back workflow to add to testing 2024-06-28 09:48:08 +09:30
santiagosayshey
3c88841cb0 Merge branch 'main' of https://github.com/Dictionarry-Hub/profilarr 2024-06-28 09:38:43 +09:30
santiagosayshey
c081d7d7a4 removed: testing and complete workflows 2024-06-28 09:38:35 +09:30
Sam Chau
48e72bd55d test: test (#92) 2024-06-28 09:31:28 +09:30
santiagosayshey
3acc743b98 bugfix: Correct handling of environment variables for updating issue status 2024-06-28 09:29:48 +09:30
Sam Chau
fe49baf402 test: test (#91) 2024-06-28 09:26:31 +09:30
Sam Chau
4090e5e3b9 bugfix: remove test line from README (#90) 2024-06-28 09:24:03 +09:30
santiagosayshey
0ec65299ef workflow: Set issues status to "Complete" on merge to main 2024-06-28 09:20:43 +09:30
santiagosayshey
3edeb14f14 Merge branch 'main' of https://github.com/Dictionarry-Hub/profilarr 2024-06-28 09:19:52 +09:30
santiagosayshey
a4160941af workflow: changed to dev for real development 2024-06-28 09:19:45 +09:30
Sam Chau
cafc0ed796 Update README.md (#89) 2024-06-28 09:14:37 +09:30
santiagosayshey
14d2c288d4 workflow: adjusted to main for testing 2024-06-28 09:10:02 +09:30
santiagosayshey
515e52dcfa workflow: Set issue status to "Testing" on merge to dev 2024-06-28 09:09:06 +09:30
santiagosayshey
e471edd96f bugfix: Correct dynamic retrieval of field and option IDs for setting issue status 2024-06-28 09:01:10 +09:30
santiagosayshey
17f623a805 bugfix: Correct environment variable usage and syntax in workflow 2024-06-28 08:56:59 +09:30
santiagosayshey
7badb36616 bugfix: Correct environment variable usage and syntax in workflow 2024-06-28 08:54:18 +09:30
santiagosayshey
22602f24e9 bugfix: Correct environment variable usage and syntax in workflow 2024-06-28 08:50:53 +09:30
santiagosayshey
fdc4edbf90 bugfix: Adjusted the GitHub Actions workflow to trigger on branch creation and corrected the GraphQL query. 2024-06-28 08:43:48 +09:30
santiagosayshey
175459139a bugfix: Enhanced debugging for the GitHub Actions workflow to identify issues in fetching project item IDs. 2024-06-28 08:41:30 +09:30
santiagosayshey
b4522aeefa bugfix: Fixed the GraphQL query in GitHub Actions workflow to properly use the declared variable for fetching the project item ID. 2024-06-28 08:39:59 +09:30
santiagosayshey
61a363ff93 workflow: Added workflow to update issue status to 'In Development' when branches are created from issues 2024-06-28 08:38:10 +09:30
santiagosayshey
527e415d18 bugfix: Correct issue number extraction and project item status update 2024-06-28 08:29:33 +09:30
santiagosayshey
757a7522e3 bugfix: Correct issue number extraction and project item status update 2024-06-28 08:28:01 +09:30
santiagosayshey
4b67031e78 bigfix: tab syntax fixed 2024-06-28 08:21:58 +09:30
santiagosayshey
0e772ecf38 bugfix: Correct issue number handling and status update 2024-06-28 08:19:24 +09:30
santiagosayshey
5f58fc63b0 bugfix: Correct issue number handling and status update 2024-06-28 08:17:16 +09:30
santiagosayshey
1f0247dd78 feature: Set issue status to "In Development" on branch creation 2024-06-28 08:14:44 +09:30
santiagosayshey
b9079a5f3d bugfix: remove timer 2024-06-28 08:03:41 +09:30
santiagosayshey
72fb763c17 bugfix: Fix issue type assignment based on issue label case sensitivity 2024-06-28 08:00:26 +09:30
santiagosayshey
f66f2a160a bugfix: fixed jq 2024-06-28 07:57:25 +09:30
santiagosayshey
ca32c2cc89 bugfix: debug output to see where issue lies 2024-06-28 07:54:55 +09:30
santiagosayshey
1b58c1e0aa bugfix: add sleep before finding ID number 2024-06-28 07:51:01 +09:30
santiagosayshey
0ad40005b4 bugfix: Correct project item ID retrieval in GitHub Actions workflow 2024-06-28 07:48:26 +09:30
santiagosayshey
da1be0ef36 bugfix: Resolve project item ID retrieval in GitHub Actions workflow 2024-06-28 07:46:15 +09:30
santiagosayshey
e9d62a9b4a bugfix: get issue ID after item creation 2024-06-28 07:43:07 +09:30
santiagosayshey
bd21eef647 workflows: project PAT added 2024-06-28 07:39:35 +09:30
Sam Chau
7bb2e255dd workflow: add issue to project (#77) 2024-06-28 07:35:43 +09:30
Sam Chau
bd89fd9126 Update README.md (#74) 2024-06-21 04:52:04 +09:30
santiagosayshey
3c110fee42 Add CODEOWNERS file to require code review 2024-05-07 03:57:03 +09:30
santiagosayshey
015553205a Update README.md to be user friendly 2024-03-10 03:45:50 +10:30
santiagosayshey
1b038711f4 Update README.md 2024-03-10 03:36:40 +10:30
santiagosayshey
e221004add Update README.md 2024-03-10 03:35:06 +10:30
santiagosayshey
1dab721756 Update README.md 2024-03-10 03:34:54 +10:30
santiagosayshey
08a95035c5 Update README.md 2024-03-09 09:55:21 +10:30
santiagosayshey
840861b24c Update README.md 2024-03-08 09:26:13 +10:30
santiagosayshey
9ff99d556b Update setup.py
Closes #33
2024-02-13 17:44:36 +10:30
santiagosayshey
a82e8d31fe ANSI Escape colors not being printed properly (#34)
* Added config setting to allow ansi coloring
* Adjusted README for configuring ansi support
2024-02-08 08:44:01 +10:30
santiagosayshey
63aeded8b6 Update README.md 2024-02-06 14:46:29 +10:30
santiagosayshey
895adc9f25 Fixed Unix Path Import Issues (#32)
Fixed an issue whereby files could not be imported on a unix operating system due to inconsistencies with path capitalisation.

Closes #30, #31

Also fixed issue where added / updated counts were swapped
2024-02-06 14:42:46 +10:30
santiagosayshey
ff79de7724 v0.3 (#29)
* added AMiABLE and PiGNUS to scene groups (#25)

* Major Code Refactor (#27)

Description
Reimplemented Profilarr from the ground up to be more reusable, in addition to implemented a few improvements. Works almost identically to before, but will be much easier to develop for going forward.

Improvements
Implements feature mentioned in Issue #11.
- Custom Formats are now automatically imported before quality profiles are imported.

* fixed 2160 remux bug (#28)

Fixed bug that was incorrectly prioritising WEBs in 2160p optimal profiles.
2024-02-05 17:20:59 +10:30
santiagosayshey
2e5cabe7ab v0.2.4
## Features
- Implemented #12 
- Enhanced message formatting and user prompts for deletions.

## Additions
- ETHEL SCENE release group added.
- FLiGHTS group to missing HDR10.
- Overhauled h265 custom formats and added new h265 4k format.
- MAX WEB source added to custom formats.

## Improvements
- Script to generate initial config file.
- Removed tracking of config.yml for security.
- Updated README for install process and new delete feature.
2024-02-03 11:32:04 +10:30
santiagosayshey
2c764f993c updated readme 2024-01-27 15:16:54 +10:30
santiagosayshey
fc8196dc10 v0.2.3
- changed from json to yaml for config
- added export_path setting to set where exported files go : fixes https://github.com/santiagosayshey/Profilarr/issues/5
- exports now save to {export_path}/{app_type}/{app_name}
- can choose which instance to manually import to
- sync automatically chooses correct custom formats / quality profiles for the app type
- updated readme with usage examples
- added install requirements

Closes #4, #5
2024-01-27 15:14:04 +10:30
santiagosayshey
c39d477deb Update README.md
temp fix for issue #4
2024-01-27 09:10:36 +10:30
santiagosayshey
cbdc4a0c8e v0.2.2.2
- allowed SD fallback in 1080p optimal quality settings
2024-01-26 22:19:50 +10:30
santiagosayshey
972d3bc1fc v0.2.2.1
- added immutable 2160p optimal profiles
2024-01-26 22:04:49 +10:30
santiagosayshey
9232859a9d Merge branch 'main' of https://github.com/santiagosayshey/Profilarr 2024-01-26 21:58:41 +10:30
santiagosayshey
e41d74e4d1 v0.2.2
- added 1080p optimal
- removed HDR from h265 balanced
- removed x265 from h265 balanced
- changed 3D custom format
- added HDR, DV, Atmos missing groups
- added PCM audio
- added bluray source specific to remuxes (removes encodes from optimal profiles)
2024-01-26 21:58:31 +10:30
santiagosayshey
b9bb39732e Update README.md
removed dev guide from readme
2024-01-26 04:32:46 +10:30
santiagosayshey
601e630ca2 Merge branch 'main' of https://github.com/santiagosayshey/Profilarr 2024-01-26 04:21:48 +10:30
santiagosayshey
76d7509e86 v0.2.1
- added immutable transparent profiles
- added 1080p h265 balanced
- added 1080p balanced
2024-01-26 04:21:38 +10:30
santiagosayshey
47aa3df44c Update README.md 2024-01-24 22:44:43 +10:30
santiagosayshey
37eb633760 clarify readme 2024-01-23 14:34:10 +10:30
santiagosayshey
246e4d2d74 updated credit for trash fguides in readme 2024-01-23 13:51:40 +10:30
santiagosayshey
78bc2afcff Update README.md to reflect sync capability 2024-01-20 20:08:16 +10:30
santiagosayshey
68c76872ae v0.2
- Implemented multiple instance syncing
- Improved reusability of import / export functions
- Changed format of config file
2024-01-20 18:51:42 +10:30
santiagosayshey
bae4d0c45c Implemented syncing functionality for Radarr and Sonarr instances
- config changes to allow for single app sync
- new command to sync
- some code reformatting in import/export to allow for temp files
- updated readme to reflect syncing capability
2024-01-20 12:54:49 +10:30
santiagosayshey
da2d76fc2c v0.1.3.5
- release clarification in readme
2024-01-19 19:22:42 +10:30
santiagosayshey
f6698516af v0.1.3.4
- improved descriptions
2024-01-19 19:20:34 +10:30
santiagosayshey
a015fd1ccb v0.1.3.3
- grammar
2024-01-19 19:18:59 +10:30
santiagosayshey
6b09e4e297 v0.1.3.2
- fixed description
2024-01-19 19:17:33 +10:30
santiagosayshey
47cf31ab10 v0.1.3.1
- updated readme to reflect changes in usage
2024-01-19 19:15:38 +10:30
santiagosayshey
827efd6633 v0.1.3
- improved debugging info for exports
- improved user control while exporting
- added config file to add paths / api keys
- added master setup for radarr / sonarr to sync from (not implemented yet)
- adjusted custom format file names to be consistent with qp's
- combined import functionality into a single script
- improved debugging info for imports (functionality is still the same)
- error messages for profile naming conflicts, bad auth and missing app
- up to date set of profiles / custom formats as of 19/01/24
2024-01-19 19:00:59 +10:30
Samuel Chau
aba057a8c9 v0.1.2
- option to choose what app export is "using". Allows similar profiles, custom formats for both apps to exist at the same time.
- added many release groups. Mostly TV related
- fixed some outlier issues with Radarr profiles
- added v0.1 Transparent and Optimal profiles for Sonarr
- updated custom formats to work with either / radarr sonarr
2024-01-19 13:39:04 +10:30
Samuel Chau
eacb063164 v0.1.1
- included guidance on importing into sonarr
- added transparent profile for sonarr
2024-01-18 12:31:19 +10:30
Samuel Chau
d928c1f769 Merge branch 'main' of https://github.com/santiagosayshey/Profilarr 2023-10-07 20:16:00 +10:30
Samuel Chau
520af41f5f - updated some custom formats
- two new transparent profile variants
2023-10-07 20:15:50 +10:30
santiagosayshey
5615f6251a Update README.md 2023-09-29 17:35:19 +09:30
santiagosayshey
018e570199 Update README.md 2023-09-29 17:34:37 +09:30
44 changed files with 47860 additions and 14182 deletions

1
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1 @@
* @santiagosayshey

View File

@@ -0,0 +1,133 @@
name: Add Issue to Project
on:
issues:
types: [opened]
jobs:
add-to-project:
name: Add issue to project
runs-on: ubuntu-latest
steps:
- name: Add to Project
id: add-to-project
uses: actions/add-to-project@v0.5.0
with:
project-url: https://github.com/orgs/Dictionarry-Hub/projects/1
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
- name: Get project item ID
id: get-project-item-id
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh"
ISSUE_NUMBER: ${{ github.event.issue.number }}
run: |
echo "Fetching project item ID for issue number: $ISSUE_NUMBER"
item_id=$(gh api graphql -f query='
query($project:ID!) {
node(id: $project) {
... on ProjectV2 {
items(first: 100) {
nodes {
id
content {
... on Issue {
number
}
}
}
}
}
}
}' -f project=$PROJECT_ID --jq ".data.node.items.nodes[] | select(.content.number == $ISSUE_NUMBER) | .id" -F number=$ISSUE_NUMBER)
if [ -z "$item_id" ]; then
echo "Error: Project item ID not found for issue number $ISSUE_NUMBER"
exit 1
else
echo "Project item ID found: $item_id"
echo "PROJECT_ITEM_ID=$item_id" >> $GITHUB_OUTPUT
fi
- name: Set component, type, and status
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ITEM_ID: ${{ steps.get-project-item-id.outputs.PROJECT_ITEM_ID }}
run: |
echo "Setting fields for Project Item ID: ${PROJECT_ITEM_ID}"
# Set component to "Profilarr"
result=$(gh api graphql -f query='
mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $fieldId
value: {
singleSelectOptionId: $value
}
}) {
projectV2Item {
id
}
}
}' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="PVTSSF_lADOCjbMFM4AjuUhzgcCr_E" -f value="48fc49c7")
echo "Set component result: $result"
# Set status to "Backlog"
result=$(gh api graphql -f query='
mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $fieldId
value: {
singleSelectOptionId: $value
}
}) {
projectV2Item {
id
}
}
}' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="PVTSSF_lADOCjbMFM4AjuUhzgcCn8s" -f value="f75ad846")
echo "Set status result: $result"
# Get the label of the issue
LABEL=$(gh api repos/${{ github.repository }}/issues/${{ github.event.issue.number }} --jq '.labels[0].name')
echo "Issue label: $LABEL"
# Convert label to lowercase for comparison
LABEL_LOWER=$(echo "$LABEL" | tr '[:upper:]' '[:lower:]')
# Set issue type based on label
ISSUE_TYPE_ID=$(case $LABEL_LOWER in
"bug") echo "b760225f" ;;
"feature request") echo "1341bde2" ;;
"improvement") echo "cb34d96f" ;;
"documentation") echo "269885d0" ;;
"refactor") echo "4996f537" ;;
"infrastructure") echo "45a91bfe" ;;
*) echo "" ;;
esac)
if [ -z "$ISSUE_TYPE_ID" ]; then
echo "No matching issue type for label: $LABEL"
else
echo "Setting issue type to ID: $ISSUE_TYPE_ID"
result=$(gh api graphql -f query='
mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $fieldId
value: {
singleSelectOptionId: $value
}
}) {
projectV2Item {
id
}
}
}' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="PVTSSF_lADOCjbMFM4AjuUhzgcCswQ" -f value="$ISSUE_TYPE_ID")
echo "Set issue type result: $result"
fi

117
.github/workflows/add-to-testing.yml vendored Normal file
View File

@@ -0,0 +1,117 @@
name: Set Issue Status to Testing on Merge to Dev
on:
pull_request:
branches:
- dev
types:
- closed
jobs:
update-status:
if: ${{ github.event.pull_request.merged }}
runs-on: ubuntu-latest
steps:
- name: Extract Issue Number from Branch Name
id: extract-issue-number
run: |
ISSUE_NUMBER=$(echo ${{ github.event.pull_request.head.ref }} | cut -d'-' -f1)
echo "Issue Number extracted: $ISSUE_NUMBER"
echo "ISSUE_NUMBER=$ISSUE_NUMBER" >> $GITHUB_ENV
- name: Get project item ID
id: get-project-item-id
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh"
run: |
echo "Fetching project item ID for issue number: $ISSUE_NUMBER"
QUERY='
query fetchProjectItem($project: ID!) {
node(id: $project) {
... on ProjectV2 {
items(first: 100) {
nodes {
id
content {
... on Issue {
number
}
}
}
}
}
}
}'
item_id=$(gh api graphql -f query="$QUERY" -f project=$PROJECT_ID --jq '.data.node.items.nodes[] | select(.content.number == '"$ISSUE_NUMBER"') | .id')
if [ -z "$item_id" ]; then
echo "Error: Project item ID not found for issue number $ISSUE_NUMBER"
exit 1
else
echo "Project item ID found: $item_id"
echo "PROJECT_ITEM_ID=$item_id" >> $GITHUB_ENV
fi
- name: Get single select field ID and options
id: get-field-options
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh"
run: |
echo "Fetching field ID and options for status"
QUERY='
query($project:ID!) {
node(id: $project) {
... on ProjectV2 {
fields(first: 100) {
nodes {
... on ProjectV2SingleSelectField {
id
name
options {
id
name
}
}
}
}
}
}
}'
field_data=$(gh api graphql -f query="$QUERY" -f project=$PROJECT_ID --jq '.data.node.fields.nodes[] | select(.name == "Status")')
field_id=$(echo $field_data | jq -r '.id')
testing_option_id=$(echo $field_data | jq -r '.options[] | select(.name == "Testing") | .id')
if [ -z "$field_id" ] || [ -z "$testing_option_id" ]; then
echo "Error: Field ID or Testing option ID not found"
exit 1
else
echo "Field ID: $field_id"
echo "Testing option ID: $testing_option_id"
echo "FIELD_ID=$field_id" >> $GITHUB_ENV
echo "TESTING_OPTION_ID=$testing_option_id" >> $GITHUB_ENV
fi
- name: Set status to Testing
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ITEM_ID: ${{ env.PROJECT_ITEM_ID }}
FIELD_ID: ${{ env.FIELD_ID }}
TESTING_OPTION_ID: ${{ env.TESTING_OPTION_ID }}
run: |
echo "Setting status for Project Item ID: ${PROJECT_ITEM_ID}"
result=$(gh api graphql -f query='
mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $fieldId
value: {
singleSelectOptionId: $value
}
}) {
projectV2Item {
id
}
}
}' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="${FIELD_ID}" -f value="${TESTING_OPTION_ID}")
echo "Set status result: $result"

114
.github/workflows/new-branch-created.yml vendored Normal file
View File

@@ -0,0 +1,114 @@
name: Update Issue Status to In Development
on:
create:
branches:
- '*-*'
jobs:
update-status:
runs-on: ubuntu-latest
steps:
- name: Extract Issue Number from Branch Name
id: extract-issue-number
run: |
ISSUE_NUMBER=$(echo $GITHUB_REF_NAME | cut -d'-' -f1)
echo "Issue Number extracted: $ISSUE_NUMBER"
echo "ISSUE_NUMBER=$ISSUE_NUMBER" >> $GITHUB_ENV
- name: Get project item ID
id: get-project-item-id
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh"
run: |
echo "Fetching project item ID for issue number: $ISSUE_NUMBER"
QUERY='
query fetchProjectItem($project: ID!) {
node(id: $project) {
... on ProjectV2 {
items(first: 100) {
nodes {
id
content {
... on Issue {
number
}
}
}
}
}
}
}'
item_id=$(gh api graphql -f query="$QUERY" -f project=$PROJECT_ID --jq '.data.node.items.nodes[] | select(.content.number == '"$ISSUE_NUMBER"') | .id')
if [ -z "$item_id" ]; then
echo "Error: Project item ID not found for issue number $ISSUE_NUMBER"
exit 1
else
echo "Project item ID found: $item_id"
echo "PROJECT_ITEM_ID=$item_id" >> $GITHUB_ENV
fi
- name: Get single select field ID and options
id: get-field-options
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh"
run: |
echo "Fetching field ID and options for status"
QUERY='
query($project:ID!) {
node(id: $project) {
... on ProjectV2 {
fields(first: 100) {
nodes {
... on ProjectV2SingleSelectField {
id
name
options {
id
name
}
}
}
}
}
}
}'
field_data=$(gh api graphql -f query="$QUERY" -f project=$PROJECT_ID --jq '.data.node.fields.nodes[] | select(.name == "Status")')
field_id=$(echo $field_data | jq -r '.id')
in_development_option_id=$(echo $field_data | jq -r '.options[] | select(.name == "In Development") | .id')
if [ -z "$field_id" ] || [ -z "$in_development_option_id" ]; then
echo "Error: Field ID or In Development option ID not found"
exit 1
else
echo "Field ID: $field_id"
echo "In Development option ID: $in_development_option_id"
echo "FIELD_ID=$field_id" >> $GITHUB_ENV
echo "IN_DEVELOPMENT_OPTION_ID=$in_development_option_id" >> $GITHUB_ENV
fi
- name: Set status to In Development
env:
GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }}
PROJECT_ITEM_ID: ${{ env.PROJECT_ITEM_ID }}
FIELD_ID: ${{ env.FIELD_ID }}
IN_DEVELOPMENT_OPTION_ID: ${{ env.IN_DEVELOPMENT_OPTION_ID }}
run: |
echo "Setting status for Project Item ID: ${PROJECT_ITEM_ID}"
result=$(gh api graphql -f query='
mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $fieldId
value: {
singleSelectOptionId: $value
}
}) {
projectV2Item {
id
}
}
}' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="${FIELD_ID}" -f value="${IN_DEVELOPMENT_OPTION_ID}")
echo "Set status result: $result"

4
.gitignore vendored
View File

@@ -158,3 +158,7 @@ cython_debug/
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
config.yml
exports/

324
README.md
View File

@@ -1,41 +1,325 @@
# Profilarr
Profilarr is a Python-based tool that enables seamless synchronization of custom formats and quality profiles in Radarr / Sonarr. It's designed to aid users in sharing / importing custom formats & quality profiles seamlessly.
Profilarr is a Python-based tool designed to add import/export/sync/delete functionality to the \*arr suite. It offers a user-friendly way to:
- Export existing custom formats / profiles
- Import new custom formats / profiles
- Sync a master instance of Radarr / Sonarr with other instances
- Delete existing custom formats / quality profiles
## Discord
Come join us at https://discord.gg/ZxywYBGRB9 if you need any help or want to talk!
## ⚠️ Before Continuing
- **This tool will overwrite any custom formats in your Radarr installation that have the same name.**
- **Custom Formats MUST be imported before syncing any premade profile.**
- **This tool will overwrite any custom formats in your \*arr installation that have the same name.**
- **Always back up your Radarr and Sonarr configurations before using Profilarr to avoid unintended data loss.** (Seriously, do it. Even I've lost data to this tool because I forgot to back up my configs.)
## 🛠️ Installation
### Prerequisites
- Python 3.x installed. You can download it from [python.org](https://www.python.org/downloads/).
- Radarr / Sonarr
### Steps
### Initial Setup
1. Download the Profilarr zip file from the release section.
2. Extract its contents into a folder.
3. Open `import.py` in a text editor of your choice.
- Add your Radarr API key to the designated section.
- Modify the Base URL if needed
4. Save the changes and close the text editor.
#### Step 1: Download Profilarr
1. **Download Profilarr:**
- Go to the Profilarr GitHub page and find the "Releases" [section](https://github.com/santiagosayshey/Profilarr/releases).
- Download the latest release package.
2. **Extract Files:**
- Once downloaded, extract the zip file to a folder of your choice.
#### Step 2: Install Profilarr
1. **Open Your Terminal:**
- **Windows:** Search for `Command Prompt` or `PowerShell` in your start menu.
- **MacOS:** Search for `Terminal`.
- **Linux:** Use your desktop environment's application launcher to find `Terminal`, or press `Ctrl+Alt+T` if that's a shortcut in your Linux distro.
2. **Navigate to Profilarr Folder:**
- Type `cd path/to/your/folder` and press Enter. Replace `path/to/your/folder` with the actual path to where you extracted Profilarr. This command works the same on Windows, MacOS, and Linux.
3. **Install Dependencies:**
- Type `pip install -r requirements.txt` and press Enter. This command tells Python to install the necessary software components Profilarr needs to run. The command is the same across all platforms.
4. **Setup Configuration:**
- Type `python setup.py` and press Enter. This will run a setup script that prepares Profilarr for use by generating a `config.yml` file, essentially Profilarr's settings book.
#### Step 3: Configure Profilarr
1. **Edit `config.yml`:**
- Open the `config.yml` file in a text editor. Windows users might use Notepad, MacOS users might use TextEdit, and Linux users can use any text editor like Gedit, Nano, or Vim.
- This file contains different settings that you can adjust to tell Profilarr how to operate.
2. **Add Master Instance Details:**
- Look for the section related to Radarr/Sonarr.
- Here, enter the URL and API key for your Radarr/Sonarr instances to link Profilarr with your movie/TV series managers.
3. **Configure Syncing or Exporting (if needed):**
- **Syncing:** For syncing additional Radarr/Sonarr instances, add their URL, API key, and a name for each.
- **Exporting:** To set where Profilarr saves files it creates, adjust the `export_path`.
- **Importing:** If you have settings or lists from other sources, set `import_path` to their location.
4. **Configure ANSI Color Support (Optional):**
- Profilarr can show colorful text in the terminal. If it's not displaying correctly (like showing `←[94m` instead of colors), you can fix this:
- In the `settings` section, find `ansi_colors: true`.
- Change it to `ansi_colors: false`. This disables colorful output for better compatibility with your terminal's capabilities.
5. **Save Your Changes:**
- After adjusting these settings, save and close the `config.yml` file.
#### You're All Set!
## 🚀 Usage
1. Open a terminal or command prompt.
2. Navigate to the directory where you extracted Profilarr.
3. Run the command `python import_cf.py` to import the necessary custom formats.
4. Run the command `python import_qf.py` and follow the prompts to choose and import your desired profile.
- If using Windows, use `python <script>` or `py <script>`. If on Linux, use `python3 <script>`.
## 📦 Dependencies
### Importing
- `requests` (Install using `pip install requests`)
Note: For users who start using Profilarr before v0.3, you no longer need to manually import custom formats. They will be imported automatically. Quality Profiles still require manual selection.
## ⚙️ Configuration
1. If importing Dictionarry files, make sure the import path is `./imports` (This is the default path).
2. If importing non Dictionarry files, make sure the import path is set to your desired import location.
3. Run `python importarr.py` in your command line interface.
4. Follow the on-screen prompts to select your desired app and which instance(s) to import to.
5. Choose your desired quality profile(s) to import.
### Radarr API Key and Base URL
#### Example: Importing 1080p Transparent and 2160p Optimal Quality Profiles
- Your Radarr API Key and Base URL can be configured in the `import.py` file.
- The Base URL should be in the format `http://localhost:7878` unless you have a different host or port.
```
Select your app of choice
1. Radarr
2. Sonarr
Enter your choice:
1
Select your Radarr instance
1. Radarr (Master)
2. Radarr (4k-radarr)
Choose an instance by number, multiple numbers separated by commas or type 'all' for all instances:
2
Importing custom formats to Radarr : 4k-radarr
Adding custom format 'D-Z0N3' : SUCCESS
Adding custom format 'DON' : SUCCESS
Adding custom format 'EbP' : SUCCESS
Adding custom format 'Geek' : SUCCESS
Adding custom format 'TayTo' : SUCCESS
... and 129 more.
Successfully added 0 custom formats, updated 134 custom formats.
Available profiles:
1. 1080p Balanced (Radarr).json
2. 1080p Balanced (Single Grab) (Radarr).json
3. 1080p h265 Balanced (Radarr).json
4. 1080p h265 Balanced (Single Grab) (Radarr).json
5. 1080p Optimal (Radarr).json
6. 1080p Optimal (Single Grab) (Radarr).json
7. 1080p Transparent (Double Grab) (Radarr).json
8. 1080p Transparent (Radarr).json
9. 1080p Transparent (Single Grab) (Radarr).json
10. 2160p Optimal (Radarr).json
11. 2160p Optimal (Single Grab) (Radarr).json
Enter the numbers of the profiles you want to import separated by commas, or type 'all' to import all profiles:
8,10
Importing Quality Profiles to Radarr : 4k-radarr
Adding '1080p Transparent' quality profile : SUCCESS
Adding '2160p Optimal' quality profile : SUCCESS
```
### Exporting
1. Make sure the export path is set to your desired export location. The default is `./exports`.
2. Run `python exportarr.py` in your command line interface.
3. Follow the on-screen prompts to select your desired app and which instance(s) to export from.
4. Choose the data you want to export.
5. The data will be exported to `exports/{data_type}/{app}/`.
#### Example
```bash
Select your app of choice
1. Radarr
2. Sonarr
Enter your choice:
1
Select your Radarr instance
1. Radarr (Master)
2. Radarr (4k-radarr)
Choose an instance by number, multiple numbers separated by commas or type 'all' for all instances:
2
Exporting Custom Formats for Radarr : 4k-radarr
Exported 134 custom formats to ./exports/custom_formats/Radarr for 4k-radarr
Exporting Quality Profiles for Radarr : 4k-radarr...
Exported 2 quality profiles to ./exports/quality_profiles/Radarr for 4k-radarr
```
### Syncing
1. Make sure the import path is set to whatever your export path is. This is important, as the script will look for the exported files in this location.
1. Run `python syncarr.py` in your command line interface.
1. The script will automatically export data from the master instance and import it to all other instances specified in `config.json`.
#### Example
```bash
PS Z:\Profilarr> py syncarr.py
Select your app of choice
1. Radarr
2. Sonarr
Enter your choice:
1
Exporting Custom Formats for radarr : Master
Exported 134 custom formats to ./exports\custom_formats\radarr for Master
Exporting Quality Profiles for radarr : Master...
Exported 14 quality profiles to ./exports\quality_profiles\radarr for Master
Importing custom formats to radarr : 4k-radarr
...
Updating custom format 'Blu-Ray (Remux)' : SUCCESS
Updating custom format 'MAX' : SUCCESS
Updating custom format 'h265 (4k)' : SUCCESS
Updating custom format 'TEST FLAC' : SUCCESS
Successfully added 134 custom formats, updated 0 custom formats.
Available profiles:
1. 1080p Balanced (Radarr).json
2. 1080p Balanced (Single Grab) (Radarr).json
3. 1080p h265 Balanced (Radarr).json
4. 1080p h265 Balanced (Single Grab) (Radarr).json
5. 1080p Optimal (Radarr).json
6. 1080p Optimal (Single Grab) (Radarr).json
7. 1080p Transparent (Double Grab) (Radarr).json
8. 1080p Transparent (Radarr).json
9. 1080p Transparent (Single Grab) (Radarr).json
10. 2160p Optimal (Radarr).json
11. 2160p Optimal (Single Grab) (Radarr).json
Enter the numbers of the profiles you want to import separated by commas, or type 'all' to import all profiles:
all
Importing Quality Profiles to radarr : 4k-radarr
Adding '1080p Balanced' quality profile : SUCCESS
Adding '1080p Balanced (Single Grab)' quality profile : SUCCESS
Adding '1080p h265 Balanced' quality profile : SUCCESS
Adding '1080p h265 Balanced (Single Grab)' quality profile : SUCCESS
Adding '1080p Optimal' quality profile : SUCCESS
Adding '1080p Optimal (Single Grab)' quality profile : SUCCESS
Adding '1080p Transparent (Double Grab)' quality profile : SUCCESS
Updating '1080p Transparent' quality profile : SUCCESS
Adding '1080p Transparent (Single Grab)' quality profile : SUCCESS
Updating '2160p Optimal' quality profile : SUCCESS
Adding '2160p Optimal (Single Grab)' quality profile : SUCCESS
```
### Deleting
1. Run `python deletarr.py` in your command line interface.
2. Select the instance(s) from which you wish to delete data.
3. Choose between deleting Custom Formats, Quality Profiles or both
4. Select specific items by typing their numbers separated by commas, or type 'all' to delete everything.
#### Example
```plaintext
Select your app of choice
1. Radarr
2. Sonarr
Enter your choice:
1
Select your Radarr instance
1. Radarr (Master)
2. Radarr (4k-radarr)
Choose an instance by number, multiple numbers separated by commas or type 'all' for all instances:
2
Please select what you want to delete:
1. Custom Formats
2. Quality Profiles
3. Both
Enter your choice: 3
Available items to delete:
1. D-Z0N3
2. DON
3. EbP
4. Geek
5. TayTo
6. ZQ
...
Enter the number(s) of the items you wish to delete, separated by commas, or type 'all' for all:
Your choice: all
Deleting Custom Format (D-Z0N3) : SUCCESS
Deleting Custom Format (DON) : SUCCESS
Deleting Custom Format (EbP) : SUCCESS
Deleting Custom Format (Geek) : SUCCESS
Deleting Custom Format (TayTo) : SUCCESS
Deleting Custom Format (ZQ) : SUCCESS
Available items to delete:
1. 1080p Transparent
2. 2160p Optimal
3. 1080p Balanced
4. 1080p Balanced (Single Grab)
5. 1080p h265 Balanced
6. 1080p h265 Balanced (Single Grab)
7. 1080p Optimal
8. 1080p Optimal (Single Grab)
9. 1080p Transparent (Double Grab)
10. 1080p Transparent (Single Grab)
11. 2160p Optimal (Single Grab)
Enter the number(s) of the items you wish to delete, separated by commas, or type 'all' for all:
Your choice: all
Deleting Quality Profile (1080p Transparent) : SUCCESS
Deleting Quality Profile (2160p Optimal) : SUCCESS
Deleting Quality Profile (1080p Balanced) : SUCCESS
Deleting Quality Profile (1080p Balanced (Single Grab)) : SUCCESS
Deleting Quality Profile (1080p h265 Balanced) : SUCCESS
Deleting Quality Profile (1080p h265 Balanced (Single Grab)) : SUCCESS
Deleting Quality Profile (1080p Optimal) : SUCCESS
Deleting Quality Profile (1080p Optimal (Single Grab)) : SUCCESS
Deleting Quality Profile (1080p Transparent (Double Grab)) : SUCCESS
Deleting Quality Profile (1080p Transparent (Single Grab)) : SUCCESS
Deleting Quality Profile (2160p Optimal (Single Grab)) : SUCCESS
PS Z:\Profilarr>
```
### Radarr and Sonarr Compatibility
- You are only able to import / sync files to the app that is included in the file name (e.g. `Radarr` or `Sonarr`).
- It is possible to manually rename the files to import them to the other app, but this is not recommended.
- Custom Formats will succesfully import, but will require manual editing to work with the other app, i.e. you must adjust the quality sources to match the other app's naming scheme.
- Quality Profiles will not import at all, as they are not compatible with the other app. It is possible to import them manually by editing the json directly, but this is not recommended.
- In future, I may add a feature to automatically convert profiles between the two apps, but this is not currently a priority.
## 🌟 Upcoming Features
- **Lidarr Support:** Expand functionality to include Lidarr, allowing users to manage music quality profiles and custom formats.
- **User Interface (UI):** Development of a graphical user interface (GUI) for easier and more intuitive interaction with Profilarr. This UI will cater to users who prefer graphical over command-line interactions.
- **Automatic Updates:** Implement an auto-update mechanism for Profilarr, ensuring users always have access to the latest features, improvements, and bug fixes without manual intervention.
## Contributing
- I've added a docker compose file for testing custom formats / quality profiles. Run `docker-compose up -d` to start the Radarr/ Sonarr test containers. Add your API keys to the `config.yml` file and begin testing!
# TRaSH Guides
Some custom formats found here have been interated on from the trash guides. Credit for these goes entirely to trash, and can be found on their site here. It is not my intention to steal their work, but rather to build on it and make it more accessible to the average user through my quality profiles. Please check out their site for more information on their work.
https://trash-guides.info/
test

File diff suppressed because it is too large Load Diff

101
deletarr.py Normal file
View File

@@ -0,0 +1,101 @@
from helpers import *
def user_select_items_to_delete(items):
"""
Prompts the user to select items to delete from a given list of items.
Each item in the list is expected to be a dictionary with at least an 'id' and 'name' key.
"""
print_message("Available items to delete:", "purple")
for index, item in enumerate(items, start=1):
print_message(f"{index}. {item['name']}", "green")
print_message("Enter the number(s) of the items you wish to delete, separated by commas, or type 'all' for all:", "yellow")
user_input = input("Your choice: ").strip().lower()
selected_items = []
if user_input == 'all':
return items
else:
indices = user_input.split(',')
for index in indices:
try:
index = int(index.strip()) - 1
if 0 <= index < len(items):
selected_items.append(items[index])
else:
print_message("Invalid selection, ignoring.", "red")
except ValueError:
print_message("Invalid input, please enter numbers only.", "red")
return selected_items
def prompt_export_choice():
"""
Prompt user to choose between exporting Custom Formats, Quality Profiles, or both.
Returns a list of choices.
"""
print_message("Please select what you want to delete:", "blue")
options = {"1": "Custom Formats", "2": "Quality Profiles", "3": "Both"}
for key, value in options.items():
print_message(f"{key}. {value}", "green")
choice = input("Enter your choice: ").strip()
# Validate choice
while choice not in options:
print_message("Invalid choice, please select a valid option:", "red")
choice = input("Enter your choice: ").strip()
if choice == "3":
return ["Custom Formats", "Quality Profiles"]
else:
return [options[choice]]
def delete_custom_formats_or_profiles(app, instance, item_type, config):
"""
Deletes either custom formats or quality profiles based on the item_type.
"""
api_key = instance['api_key']
base_url = instance['base_url']
resource_type = item_type # 'customformat' or 'qualityprofile'
if item_type == 'customformat':
type = 'Custom Format'
elif item_type == 'qualityprofile':
type = 'Quality Profile'
# Fetch items to delete
items = make_request('get', base_url, api_key, resource_type)
if items is None or not isinstance(items, list):
return
# Assuming a function to select items to delete. It could list items and ask the user which to delete.
items_to_delete = user_select_items_to_delete(items) # This needs to be implemented or adapted
# Proceed to delete selected items
for item in items_to_delete:
item_id = item['id']
item_name = item['name']
print_message(f"Deleting {type} ({item_name})", "blue", newline=False)
response = make_request('delete', base_url, api_key, f"{resource_type}/{item_id}")
if response in [200, 202, 204]:
print_message(" : SUCCESS", "green")
else:
print_message(" : FAIL", "red")
def main():
app = get_app_choice()
instances = get_instance_choice(app)
config = load_config()
choices = prompt_export_choice()
for instance in instances:
for choice in choices:
if choice == "Custom Formats":
delete_custom_formats_or_profiles(app, instance, 'customformat', config)
elif choice == "Quality Profiles":
delete_custom_formats_or_profiles(app, instance, 'qualityprofile', config)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,37 @@
version: "3.3"
x-common-settings: &common-settings
environment:
PUID: 1000 # user id, change as necessary
PGID: 1000 # group id, change as necessary
TZ: Europe/London # timezone, change as necessary
restart: unless-stopped
services:
radarr:
<<: *common-settings
image: linuxserver/radarr
container_name: radarr
ports:
- "7887:7878" # change the left value to the desired host port for Radarr
radarr2:
<<: *common-settings
image: linuxserver/radarr
container_name: radarr2
ports:
- "7888:7878" # change the left value to the desired host port for Radarr
sonarr:
<<: *common-settings
image: linuxserver/sonarr
container_name: sonarr
ports:
- "8998:8989" # change the left value to the desired host port for Sonarr
sonarr2:
<<: *common-settings
image: linuxserver/sonarr
container_name: sonarr2
ports:
- "8999:8989" # change the left value to the desired host port for Sonarr

View File

@@ -1,85 +0,0 @@
import json
import requests
import os
import re
# Define constants
base_url = "http://localhost:7878"
api_key = "API_GOES_HERE"
# Define parameters and headers
params = {"apikey": api_key}
headers = {"X-Api-Key": api_key}
files = {'file': ('', '')} # Empty file to force multipart/form-data
# Login
login_url = f"{base_url}/login"
response = requests.get(login_url, params=params, headers=headers, files=files)
if response.status_code != 200:
print(f"Login Failed! (HTTP {response.status_code})")
print("Response Content: ", response.content)
exit()
def export_cf():
custom_format_url = f"{base_url}/api/v3/customformat"
response = requests.get(custom_format_url, params=params, headers=headers)
if response.status_code == 200:
data = response.json()
# Remove 'id' from each custom format
for custom_format in data:
custom_format.pop('id', None)
# Ensure the ./custom_formats directory exists
if not os.path.exists('./custom_formats'):
os.makedirs('./custom_formats')
# Save to JSON file
with open('./custom_formats/cf.json', 'w') as f:
json.dump(data, f, indent=4)
print("Custom Formats have been saved to './custom_formats/cf.json'")
else:
print(f"Failed to retrieve custom formats! (HTTP {response.status_code})")
print("Response Content: ", response.content)
def sanitize_filename(filename):
# Replace any characters not allowed in filenames with _
sanitized_filename = re.sub(r'[\\/*?:"<>|]', '_', filename)
return sanitized_filename
def export_qf():
response = requests.get(f"{base_url}/api/v3/qualityprofile", params=params, headers=headers)
if response.status_code == 200:
quality_profiles = response.json()
# Ensure the ./profiles directory exists
if not os.path.exists('./profiles'):
os.makedirs('./profiles')
# Process each profile separately
for profile in quality_profiles:
profile.pop('id', None) # Remove the 'id' field
# Use the name of the profile to create a filename
profile_name = profile.get('name', 'unnamed_profile') # Use a default name if the profile has no name
profile_name = sanitize_filename(profile_name) # Sanitize the filename
profile_filename = f"{profile_name}.json"
profile_filepath = os.path.join('./profiles', profile_filename)
# Save the individual profile to a file as a single-element array
with open(profile_filepath, 'w') as file:
json.dump([profile], file, indent=4) # Note the [profile], it will make it an array with a single element
print("Quality profiles have been successfully saved to the ./profiles directory")
else:
print("Failed to retrieve quality profiles!")
print("Response Content: ", response.content.decode('utf-8'))
if __name__ == "__main__":
export_cf()
export_qf()

134
exportarr.py Normal file
View File

@@ -0,0 +1,134 @@
from helpers import *
import os
import re
def prompt_export_choice():
options = { "1": "Custom Formats", "2": "Quality Profiles" }
print_message("Please select what you want to export:", "blue")
for number, option in options.items():
print_message(f"{number}. {option}", "green")
print_message("Enter the number(s) of your choice, multiple separated by commas, or type 'all' for all options", "yellow")
user_choice = input("Your choice: ")
if user_choice.lower() == 'all':
return list(options.values())
else:
return [options[choice] for choice in user_choice.split(',') if choice in options]
def create_export_path(export_path, app):
# Convert app to lowercase
app = app.lower() # Ensure app is in lowercase
# Create a directory path for the export in lowercase
dir_path = os.path.join(export_path, 'custom_formats', app).lower() # Convert entire path to lowercase
# Create the directory if it doesn't exist
os.makedirs(dir_path, exist_ok=True)
return dir_path
def export_custom_formats(app, instances, config):
for instance in instances:
print_message(f"Exporting Custom Formats for {app.capitalize()} : {instance['name']}", 'blue')
url = instance['base_url']
api_key = instance['api_key']
# Get the export path from the config
export_path = config['settings']['export_path']
# Create the export directory
dir_path = create_export_path(export_path, app)
# Assuming 'export' is a valid resource_type for the API
response = make_request('get', url, api_key, 'customformat')
successful_exports = 0 # Counter for successful exports
# Scrub the JSON data and save each custom format in its own file
all_custom_formats = []
for custom_format in response:
# Remove the 'id' field
custom_format.pop('id', None)
all_custom_formats.append(custom_format)
successful_exports += 1 # Increment the counter if the export was successful
file_name = f"custom formats ({app.lower()} - {instance['name'].lower()}).json"
# Save all custom formats to a single file in the export directory
try:
with open(os.path.join(dir_path, file_name), 'w') as f:
json.dump(all_custom_formats, f, indent=4)
status = 'SUCCESS'
status_color = 'green'
except Exception as e:
status = 'FAILED'
status_color = 'red'
print_message(f"Exported {successful_exports} custom formats to {dir_path} for {instance['name']}", 'yellow')
print()
def create_quality_profiles_export_path(app, config):
# Get the export path from the config
export_path = config['settings']['export_path']
# Create a directory path for the export
dir_path = os.path.join(export_path, 'quality_profiles', app)
# Create the directory if it doesn't exist
os.makedirs(dir_path, exist_ok=True)
return dir_path
def export_quality_profiles(app, instances, config):
for instance in instances:
print_message(f"Exporting Quality Profiles for {app.capitalize()} : {instance['name']}", 'blue')
url = instance['base_url']
api_key = instance['api_key']
# Create the export directory
dir_path = create_quality_profiles_export_path(app, config)
# Assuming 'qualityprofile' is the valid resource_type for the API
response = make_request('get', url, api_key, 'qualityprofile')
successful_exports = 0 # Counter for successful exports
# Scrub the JSON data and save each quality profile in its own file
for quality_profile in response:
# Remove the 'id' field
quality_profile.pop('id', None)
# Create a file name from the quality profile name and app
file_name = f"{quality_profile['name']} ({app.lower()} - {instance['name'].lower()}).json"
file_name = re.sub(r'[\\/*?:"<>|]', '', file_name) # Remove invalid characters
# Save the quality profile to a file in the export directory
try:
with open(os.path.join(dir_path, file_name), 'w') as f:
json.dump([quality_profile], f, indent=4) # Wrap quality_profile in a list
status = 'SUCCESS'
status_color = 'green'
except Exception as e:
status = 'FAILED'
status_color = 'red'
if status == 'SUCCESS':
successful_exports += 1 # Increment the counter if the export was successful
print_message(f"Exported {successful_exports} quality profiles to {dir_path} for {instance['name']}", 'yellow')
print()
def main():
app = get_app_choice()
instances = get_instance_choice(app)
config = load_config()
export_custom_formats(app, instances, config)
export_quality_profiles(app, instances, config)
if __name__ == "__main__":
main()

151
helpers.py Normal file
View File

@@ -0,0 +1,151 @@
import yaml
import json
import requests
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
import json
import sys
class Colors:
GREEN = '\033[92m'
RED = '\033[91m'
YELLOW = '\033[93m'
BLUE = '\033[94m'
PURPLE = '\033[95m'
ENDC = '\033[0m'
class Apps:
APP_CHOICES = {
"1": "radarr",
"2": "sonarr",
# Add more apps here as needed
}
def print_message(message, message_type='', newline=True):
config = load_config()
ansi_colors = config['settings']['ansi_colors']
if ansi_colors:
# Initialize color as default.
color = Colors.ENDC
message_type = message_type.lower()
# Assign color based on message type.
if message_type == 'green':
color = Colors.GREEN
elif message_type == 'red':
color = Colors.RED
elif message_type == 'yellow':
color = Colors.YELLOW
elif message_type == 'blue':
color = Colors.BLUE
elif message_type == 'purple':
color = Colors.PURPLE
# Prepare the end color reset code.
end_color = Colors.ENDC
# Print the colored message.
if newline:
print(color + message + end_color)
else:
print(color + message + end_color, end='')
else:
# Print the message without color if ANSI colors are disabled.
if newline:
print(message)
else:
print(message, end='')
def load_config():
with open('config.yml', 'r') as config_file:
config = yaml.safe_load(config_file)
return config
def get_app_choice():
print_message("Select your app of choice", "blue")
# Dynamically generate the app selection menu
app_menu = "\n".join([f"{key}. {value}" for key, value in Apps.APP_CHOICES.items()])
print_message(app_menu)
print_message("Enter your choice: ", "blue")
app_choice = input().strip()
while app_choice not in Apps.APP_CHOICES.keys():
print_message("Invalid input. Please enter a valid choice.", "red")
app_choice = input().strip()
app = Apps.APP_CHOICES[app_choice]
return app
def get_instance_choice(app):
config = load_config()
app_instances = config['instances'].get(app.lower(), [])
print_message(f"Select your {app.capitalize()} instance", "blue")
# Display instances and prompt for choice
for i, instance in enumerate(app_instances, start=1):
print_message(f"{i}. {app.capitalize()} ({instance['name']})")
print_message("Choose an instance by number, multiple numbers separated by commas or type 'all' for all instances: ", "blue")
choice = input().strip()
print()
selected_instances = []
if choice.lower() == 'all':
selected_instances = app_instances
else:
choices = choice.split(',')
for choice in choices:
choice = choice.strip() # remove any leading/trailing whitespace
while not choice.isdigit() or int(choice) < 1 or int(choice) > len(app_instances):
print_message("Invalid input. Please select a valid number.", "warning")
choice = input().strip()
selected_instance = app_instances[int(choice) - 1]
selected_instances.append(selected_instance)
return selected_instances
def make_request(request_type, url, api_key, resource_type, json_payload=None):
full_url = f"{url}/api/v3/{resource_type}"
headers = {"X-Api-Key": api_key}
try:
# Make the appropriate request based on the request_type
if request_type.lower() == 'get':
response = requests.get(full_url, headers=headers, json=json_payload)
elif request_type.lower() == 'post':
response = requests.post(full_url, headers=headers, json=json_payload)
elif request_type.lower() == 'put':
response = requests.put(full_url, headers=headers, json=json_payload)
elif request_type.lower() == 'delete':
response = requests.delete(full_url, headers=headers)
return response.status_code
elif request_type.lower() == 'patch':
response = requests.patch(full_url, headers=headers, json=json_payload)
else:
raise ValueError("Unsupported request type provided.")
# Process response
if response.status_code in [200, 201, 202]:
try:
return response.json()
except json.JSONDecodeError:
print_message("Failed to decode JSON response.", "red")
return None
elif response.status_code == 401:
print_message("Unauthorized. Check your API key.", "red")
sys.exit()
elif response.status_code == 409:
print_message("Conflict detected. The requested action could not be completed.", "red")
else:
print_message(f"HTTP Error {response.status_code}.", "red")
except (ConnectionError, Timeout, TooManyRedirects) as e:
# Update the message here to suggest checking the application's accessibility
print_message("Network error. Make sure the application is running and accessible.", "red")
sys.exit()
return None

View File

@@ -1,60 +0,0 @@
import json
import requests
# Define constants
base_url = "http://localhost:7878" # Update to your Radarr URL
api_key = "API_GOES_HERE" # Update to your Radarr API Key
# Define headers
headers = {"X-Api-Key": api_key}
def get_existing_formats():
get_url = f"{base_url}/api/v3/customformat"
print(f"Getting existing formats from {get_url}")
response = requests.get(get_url, headers=headers)
if response.status_code == 200:
with open('temp_cf.json', 'w') as temp_file:
json.dump(response.json(), temp_file)
else:
print(f"Failed to retrieve existing custom formats from {get_url}! (HTTP {response.status_code})")
print("Response Content: \n", response.content.decode())
exit(1)
def import_custom_formats():
with open('temp_cf.json', 'r') as temp_file:
existing_formats = json.load(temp_file)
existing_names_to_id = {format['name']: format['id'] for format in existing_formats}
with open('custom_formats/cf.json', 'r') as import_file:
import_formats = json.load(import_file)
for format in import_formats:
format_name = format['name']
if format_name in existing_names_to_id:
format_id = existing_names_to_id[format_name]
put_url = f"{base_url}/api/v3/customformat/{format_id}"
print(f"Updating existing format {format_name} using PUT at {put_url}")
format['id'] = format_id # Include the id in the request body
response = requests.put(put_url, json=format, headers=headers)
if response.status_code in [200, 201, 202]:
print(f"Successfully updated custom format {format_name}! (HTTP {response.status_code})")
else:
print(f"Failed to update custom format {format_name} at {put_url}! (HTTP {response.status_code})")
print("Response Content: \n", response.content.decode())
else:
post_url = f"{base_url}/api/v3/customformat"
print(f"Creating new format {format_name} using POST at {post_url}")
response = requests.post(post_url, json=format, headers=headers)
if response.status_code in [200, 201]:
print(f"Successfully created custom format {format_name}! (HTTP {response.status_code})")
else:
print(f"Failed to create custom format {format_name} at {post_url}! (HTTP {response.status_code})")
print("Response Content: \n", response.content.decode())
if __name__ == "__main__":
get_existing_formats()
import_custom_formats()

View File

@@ -1,115 +0,0 @@
import json
import requests
import os # For deleting the temporary file
# Define constants
base_url = "http://localhost:7878" # Update to your Radarr URL
api_key = "API_GOES_HERE" # Update to your Radarr API Key
# Define headers
params = {"apikey": api_key}
headers = {"X-Api-Key": api_key}
def cf_import_sync():
custom_format_url = f"{base_url}/api/v3/customformat"
response = requests.get(custom_format_url, headers=headers)
if response.status_code == 200:
data = response.json()
with open('custom_formats.json', 'w') as file:
json.dump(data, file, indent=4)
print("Custom Formats have been saved to 'custom_formats.json'")
return True
else:
print(f"Failed to retrieve custom formats! (HTTP {response.status_code})")
print("Response Content: ", response.content.decode('utf-8'))
return False
def import_qf():
# Call cf_import_sync first
cf_import_sync()
profile_dir = './profiles'
profiles = [f for f in os.listdir(profile_dir) if f.endswith('.json')]
# Prompt user to select a profile
print("Available Profiles:")
for i, profile in enumerate(profiles, 1):
print(f"{i}. {profile}")
selection = input("Please enter the number of the profile you want to import: ")
try:
selected_file = profiles[int(selection) - 1]
except (ValueError, IndexError):
print("Invalid selection, please enter a valid number.")
return
# Load the selected profile
with open(os.path.join(profile_dir, selected_file), 'r') as file:
try:
quality_profiles = json.load(file)
except json.JSONDecodeError as e:
print(f"Error loading selected profile: {e}")
return
# Load custom formats
try:
with open('custom_formats.json', 'r') as file:
custom_formats_data = json.load(file)
custom_formats = {format['name']: format['id'] for format in custom_formats_data}
except Exception as e:
print(f"Failed to load custom formats! Error: {e}")
return
# Process each profile and send requests
for profile in quality_profiles:
existing_format_names = set()
if 'formatItems' in profile:
for format_item in profile['formatItems']:
format_name = format_item.get('name')
if format_name:
existing_format_names.add(format_name)
if format_name in custom_formats:
format_item['format'] = custom_formats[format_name]
for format_name, format_id in custom_formats.items():
if format_name not in existing_format_names:
profile.setdefault('formatItems', []).append({
"format": format_id,
"name": format_name,
"score": 0
})
post_url = f"{base_url}/api/v3/qualityprofile"
response = requests.post(post_url, json=profile, params=params, headers=headers)
if response.status_code in [200, 201]:
print(f"Successfully added Quality Profile {profile['name']}! (HTTP {response.status_code})")
else:
try:
# Assuming the response is JSON, parse it
errors = response.json()
# Extract relevant information from the error message
message = errors.get("message", "No Message Provided")
description = errors.get("description", "No Description Provided")
# Format and print the error message
print(f"Failed to add Quality Profile {profile['name']}! (HTTP {response.status_code})")
print(f"Error Message: {message}")
except json.JSONDecodeError:
# If response is not JSON, print the whole response
print("Failed to parse error message:")
print(response.text)
try:
os.remove('custom_formats.json')
except FileNotFoundError:
pass # File already deleted or does not exist
if __name__ == "__main__":
import_qf()

211
importarr.py Normal file
View File

@@ -0,0 +1,211 @@
from helpers import *
import os
import fnmatch
import json
def get_custom_formats(app):
config = load_config()
import_path = f"{config['settings']['import_path']}/custom_formats/{app.lower()}" # Adjusted path
for file in os.listdir(import_path):
if fnmatch.fnmatch(file, f'*{app}*'):
return file
return None
def process_format(format, existing_names_to_id, base_url, api_key):
format_name = format['name']
if format_name in existing_names_to_id:
format_id = existing_names_to_id[format_name]
response = make_request('put', base_url, api_key, f'customformat/{format_id}', format)
if response is not None:
print_message(f"Updating custom format '{format_name}'", "yellow", newline=False)
print_message(" : SUCCESS", "green")
return 0, 1
else:
print_message(f"Updating custom format '{format_name}'", "yellow", newline=False)
print_message(" : FAIL", "red", newline=False)
else:
response = make_request('post', base_url, api_key, 'customformat', format)
if response is not None:
print_message(f"Adding custom format '{format_name}'", "blue", newline=False)
print_message(" : SUCCESS", "green")
return 1, 0
else:
print_message(f"Adding custom format '{format_name}'", "blue", newline=False)
print_message(" : FAIL", "red", newline=False)
return 0, 0
def import_custom_formats(app, instances):
config = load_config()
for instance in instances:
api_key = instance['api_key']
base_url = instance['base_url']
existing_formats = make_request('get', base_url, api_key, 'customformat')
existing_names_to_id = {format['name']: format['id'] for format in existing_formats}
app_file = get_custom_formats(app)
if app_file is None:
print_message(f"No file found for app: {app}", "red")
continue
added_count, updated_count = 0, 0
with open(f"{config['settings']['import_path']}/custom_formats/{app.lower()}/{app_file}", 'r') as import_file:
import_formats = json.load(import_file)
print_message(f"Importing custom formats to {app.capitalize()} : {instance['name']}", "purple")
print()
for format in import_formats:
added, updated = process_format(format, existing_names_to_id, base_url, api_key)
added_count += added
updated_count += updated
print()
print_message(
f"Successfully added {added_count} custom formats, "
f"updated {updated_count} custom formats.",
"purple"
)
print()
def get_profiles(app):
config = load_config()
import_path = f"{config['settings']['import_path']}/quality_profiles/{app.lower()}" # Adjusted path
matching_files = [] # Create an empty list to hold matching files
for file in os.listdir(import_path):
if fnmatch.fnmatch(file, f'*{app}*'):
matching_files.append(file) # Add matching file to the list
return matching_files # Return the list of matching files
def get_existing_profiles(base_url, api_key):
resource_type = 'qualityprofile'
existing_profiles = make_request('get', base_url, api_key, resource_type)
return {profile['name']: profile for profile in existing_profiles} if existing_profiles else {}
def cf_import_sync(instances):
for instance in instances:
api_key = instance['api_key']
base_url = instance['base_url']
resource_type = 'customformat'
response = make_request('get', base_url, api_key, resource_type)
if response:
instance['custom_formats'] = {format['name']: format['id'] for format in response}
else:
print_message("No custom formats found for this instance.", "purple")
print()
def user_select_profiles(profiles):
print_message("Available profiles:", "purple")
for idx, profile in enumerate(profiles, start=1):
print(f"{idx}. {profile}")
print()
while True:
# Display prompt message
print_message("Enter the numbers of the profiles you want to import separated by commas, or type 'all' to import all profiles: ", "blue", newline=False)
print()
user_input = input().strip()
if user_input.lower() == 'all':
return profiles # Return all profiles if 'all' is selected
selected_profiles = []
try:
selected_indices = [int(index.strip()) for index in user_input.split(',')]
for index in selected_indices:
if 1 <= index <= len(profiles):
selected_profiles.append(profiles[index - 1])
else:
raise ValueError(f"Invalid selection: {index}. Please enter valid numbers.") # Raise an error to trigger except block
return selected_profiles # Return the selected profiles if all inputs are valid
except ValueError as e:
print_message(str(e), "red") # Display error message in red
def process_profile(profile, base_url, api_key, custom_formats, existing_profiles):
profile_name = profile.get('name')
existing_profile = existing_profiles.get(profile_name)
# Update or add custom format items as needed
if 'formatItems' in profile:
for format_item in profile['formatItems']:
format_name = format_item.get('name')
if format_name and format_name in custom_formats:
format_item['format'] = custom_formats[format_name]
for format_name, format_id in custom_formats.items():
if format_name not in {item.get('name') for item in profile.get('formatItems', [])}:
profile.setdefault('formatItems', []).append({
"format": format_id,
"name": format_name,
"score": 0
})
if existing_profile:
profile['id'] = existing_profile['id']
action = "Updating"
action_color = "yellow"
resource_type = f"qualityprofile/{profile['id']}"
else:
action = "Adding"
action_color = "blue"
resource_type = "qualityprofile"
response = make_request('put' if existing_profile else 'post', base_url, api_key, resource_type, profile)
# Print the action statement in blue for Adding and yellow for Updating
print_message(f"{action} '{profile_name}' quality profile", action_color, newline=False)
# Determine the status and print the status in green (OK) or red (FAIL)
if response:
print_message(" : SUCCESS", "green")
else:
print_message(" : FAIL", "red")
def import_quality_profiles(app, instances):
config = load_config()
cf_import_sync(instances)
all_profiles = get_profiles(app)
selected_profiles_names = user_select_profiles(all_profiles)
for instance in instances:
base_url = instance['base_url']
api_key = instance['api_key']
custom_formats = instance.get('custom_formats', {})
existing_profiles = get_existing_profiles(base_url, api_key) # Retrieve existing profiles
print_message(f"Importing Quality Profiles to {app} : {instance['name']}", "purple")
print()
for profile_file in selected_profiles_names:
with open(f"{config['settings']['import_path']}/quality_profiles/{app.lower()}/{profile_file}", 'r') as file:
try:
quality_profiles = json.load(file)
except json.JSONDecodeError as e:
print_message(f"Error loading selected profile: {e}", "red")
continue
for profile in quality_profiles:
process_profile(profile, base_url, api_key, custom_formats, existing_profiles)
print()
def main():
app = get_app_choice()
instances = get_instance_choice(app)
import_custom_formats(app, instances)
import_quality_profiles(app, instances)
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,928 @@
[
{
"name": "1080p Balanced (Single Grab)",
"upgradeAllowed": true,
"cutoff": 1001,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Else",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1002
},
{
"name": "Balanced Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 0,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 30
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 0
},
{
"format": 224,
"name": "h265",
"score": -9999
},
{
"format": 214,
"name": "LQ",
"score": 0
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": 0
},
{
"format": 205,
"name": "UHDBits",
"score": 0
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 0
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 0
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": 0
},
{
"format": 201,
"name": "HDR10",
"score": 0
},
{
"format": 200,
"name": "Dolby Vision",
"score": 0
},
{
"format": 199,
"name": "HDR10+",
"score": 0
},
{
"format": 198,
"name": "Stream Optimised",
"score": 80
},
{
"format": 197,
"name": "LoRD",
"score": 30
},
{
"format": 196,
"name": "Scene",
"score": 20
},
{
"format": 195,
"name": "mHD",
"score": -99999
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 30
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 90
},
{
"format": 183,
"name": "ROKU",
"score": 190
},
{
"format": 182,
"name": "BeyondHD",
"score": -9999
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 30
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": -9999
},
{
"format": 175,
"name": "DTS-X",
"score": -9999
},
{
"format": 174,
"name": "FLAC",
"score": 0
},
{
"format": 173,
"name": "DTS-HD MA",
"score": -9999
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 90
},
{
"format": 165,
"name": "Paramount+",
"score": 190
},
{
"format": 164,
"name": "Peacock TV",
"score": 190
},
{
"format": 163,
"name": "Hulu",
"score": 190
},
{
"format": 162,
"name": "Netflix",
"score": 200
},
{
"format": 161,
"name": "HBO Max",
"score": 200
},
{
"format": 160,
"name": "Disney+",
"score": 200
},
{
"format": 159,
"name": "Apple TV+",
"score": 210
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 220
},
{
"format": 157,
"name": "Amazon Prime",
"score": 210
},
{
"format": 156,
"name": "REMUX",
"score": -9999
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": 10
},
{
"format": 153,
"name": "Blu-Ray",
"score": 10
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": 220
},
{
"format": 149,
"name": "BHDStudio",
"score": 90
},
{
"format": 148,
"name": "LEGi0N",
"score": 20
},
{
"format": 147,
"name": "FraMeSToR",
"score": 20
},
{
"format": 146,
"name": "iFT",
"score": 30
},
{
"format": 145,
"name": "MTeam",
"score": -9999
},
{
"format": 144,
"name": "EDPH",
"score": 20
},
{
"format": 143,
"name": "HANDJOB",
"score": 20
},
{
"format": 142,
"name": "c0ke",
"score": 70
},
{
"format": 141,
"name": "KASHMiR",
"score": 30
},
{
"format": 140,
"name": "WMING",
"score": 30
},
{
"format": 139,
"name": "playHD",
"score": 30
},
{
"format": 138,
"name": "E.N.D",
"score": 30
},
{
"format": 137,
"name": "GutS",
"score": 30
},
{
"format": 136,
"name": "BV",
"score": 30
},
{
"format": 135,
"name": "SiMPLE",
"score": 30
},
{
"format": 134,
"name": "W4NK3R",
"score": 30
},
{
"format": 133,
"name": "GS88",
"score": 30
},
{
"format": 132,
"name": "HiP",
"score": 40
},
{
"format": 131,
"name": "GALAXY",
"score": 30
},
{
"format": 130,
"name": "luvBB",
"score": 30
},
{
"format": 129,
"name": "NyHD",
"score": 30
},
{
"format": 128,
"name": "ZIMBO",
"score": 30
},
{
"format": 127,
"name": "ThD",
"score": 30
},
{
"format": 126,
"name": "SaNcTi",
"score": 30
},
{
"format": 125,
"name": "ORiGEN",
"score": 30
},
{
"format": 124,
"name": "Positive",
"score": 30
},
{
"format": 123,
"name": "ESiR",
"score": 30
},
{
"format": 122,
"name": "Chotab",
"score": 30
},
{
"format": 121,
"name": "xander",
"score": 30
},
{
"format": 120,
"name": "FTW-HD",
"score": 30
},
{
"format": 119,
"name": "Penumbra",
"score": 30
},
{
"format": 118,
"name": "TDD",
"score": 30
},
{
"format": 117,
"name": "Dariush SD",
"score": 30
},
{
"format": 116,
"name": "PTer",
"score": 30
},
{
"format": 115,
"name": "SbR",
"score": 30
},
{
"format": 114,
"name": "nmd",
"score": 30
},
{
"format": 113,
"name": "TBB",
"score": 30
},
{
"format": 112,
"name": "EA",
"score": 40
},
{
"format": 111,
"name": "BMF",
"score": 40
},
{
"format": 110,
"name": "LolHD",
"score": 40
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 40
},
{
"format": 108,
"name": "IDE",
"score": 40
},
{
"format": 107,
"name": "de[42]",
"score": 50
},
{
"format": 106,
"name": "NCmt",
"score": 60
},
{
"format": 105,
"name": "decibeL",
"score": 50
},
{
"format": 104,
"name": "NTb",
"score": 40
},
{
"format": 103,
"name": "CRiSC",
"score": 50
},
{
"format": 102,
"name": "SA89",
"score": 60
},
{
"format": 101,
"name": "HiDt",
"score": 60
},
{
"format": 100,
"name": "FoRM",
"score": 60
},
{
"format": 99,
"name": "HiFi",
"score": 60
},
{
"format": 98,
"name": "CtrlHD",
"score": 60
},
{
"format": 97,
"name": "VietHD",
"score": 70
},
{
"format": 96,
"name": "ZQ",
"score": 70
},
{
"format": 95,
"name": "TayTo",
"score": 70
},
{
"format": 94,
"name": "Geek",
"score": 70
},
{
"format": 93,
"name": "EbP",
"score": 80
},
{
"format": 92,
"name": "DON",
"score": 80
},
{
"format": 91,
"name": "D-Z0N3",
"score": 80
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
}
]
}
]

View File

@@ -0,0 +1,928 @@
[
{
"name": "1080p Balanced",
"upgradeAllowed": true,
"cutoff": 1001,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Else",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1002
},
{
"name": "Balanced Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 500,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 30
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 0
},
{
"format": 224,
"name": "h265",
"score": -9999
},
{
"format": 214,
"name": "LQ",
"score": 0
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": 0
},
{
"format": 205,
"name": "UHDBits",
"score": 0
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 0
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 0
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": 0
},
{
"format": 201,
"name": "HDR10",
"score": 0
},
{
"format": 200,
"name": "Dolby Vision",
"score": 0
},
{
"format": 199,
"name": "HDR10+",
"score": 0
},
{
"format": 198,
"name": "Stream Optimised",
"score": 80
},
{
"format": 197,
"name": "LoRD",
"score": 30
},
{
"format": 196,
"name": "Scene",
"score": 20
},
{
"format": 195,
"name": "mHD",
"score": -99999
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 30
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 90
},
{
"format": 183,
"name": "ROKU",
"score": 190
},
{
"format": 182,
"name": "BeyondHD",
"score": -9999
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 30
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": -9999
},
{
"format": 175,
"name": "DTS-X",
"score": -9999
},
{
"format": 174,
"name": "FLAC",
"score": 0
},
{
"format": 173,
"name": "DTS-HD MA",
"score": -9999
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 90
},
{
"format": 165,
"name": "Paramount+",
"score": 190
},
{
"format": 164,
"name": "Peacock TV",
"score": 190
},
{
"format": 163,
"name": "Hulu",
"score": 190
},
{
"format": 162,
"name": "Netflix",
"score": 200
},
{
"format": 161,
"name": "HBO Max",
"score": 200
},
{
"format": 160,
"name": "Disney+",
"score": 200
},
{
"format": 159,
"name": "Apple TV+",
"score": 210
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 220
},
{
"format": 157,
"name": "Amazon Prime",
"score": 210
},
{
"format": 156,
"name": "REMUX",
"score": -9999
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": 10
},
{
"format": 153,
"name": "Blu-Ray",
"score": 10
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": 220
},
{
"format": 149,
"name": "BHDStudio",
"score": 90
},
{
"format": 148,
"name": "LEGi0N",
"score": 20
},
{
"format": 147,
"name": "FraMeSToR",
"score": 20
},
{
"format": 146,
"name": "iFT",
"score": 30
},
{
"format": 145,
"name": "MTeam",
"score": -9999
},
{
"format": 144,
"name": "EDPH",
"score": 20
},
{
"format": 143,
"name": "HANDJOB",
"score": 20
},
{
"format": 142,
"name": "c0ke",
"score": 70
},
{
"format": 141,
"name": "KASHMiR",
"score": 30
},
{
"format": 140,
"name": "WMING",
"score": 30
},
{
"format": 139,
"name": "playHD",
"score": 30
},
{
"format": 138,
"name": "E.N.D",
"score": 30
},
{
"format": 137,
"name": "GutS",
"score": 30
},
{
"format": 136,
"name": "BV",
"score": 30
},
{
"format": 135,
"name": "SiMPLE",
"score": 30
},
{
"format": 134,
"name": "W4NK3R",
"score": 30
},
{
"format": 133,
"name": "GS88",
"score": 30
},
{
"format": 132,
"name": "HiP",
"score": 40
},
{
"format": 131,
"name": "GALAXY",
"score": 30
},
{
"format": 130,
"name": "luvBB",
"score": 30
},
{
"format": 129,
"name": "NyHD",
"score": 30
},
{
"format": 128,
"name": "ZIMBO",
"score": 30
},
{
"format": 127,
"name": "ThD",
"score": 30
},
{
"format": 126,
"name": "SaNcTi",
"score": 30
},
{
"format": 125,
"name": "ORiGEN",
"score": 30
},
{
"format": 124,
"name": "Positive",
"score": 30
},
{
"format": 123,
"name": "ESiR",
"score": 30
},
{
"format": 122,
"name": "Chotab",
"score": 30
},
{
"format": 121,
"name": "xander",
"score": 30
},
{
"format": 120,
"name": "FTW-HD",
"score": 30
},
{
"format": 119,
"name": "Penumbra",
"score": 30
},
{
"format": 118,
"name": "TDD",
"score": 30
},
{
"format": 117,
"name": "Dariush SD",
"score": 30
},
{
"format": 116,
"name": "PTer",
"score": 30
},
{
"format": 115,
"name": "SbR",
"score": 30
},
{
"format": 114,
"name": "nmd",
"score": 30
},
{
"format": 113,
"name": "TBB",
"score": 30
},
{
"format": 112,
"name": "EA",
"score": 40
},
{
"format": 111,
"name": "BMF",
"score": 40
},
{
"format": 110,
"name": "LolHD",
"score": 40
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 40
},
{
"format": 108,
"name": "IDE",
"score": 40
},
{
"format": 107,
"name": "de[42]",
"score": 50
},
{
"format": 106,
"name": "NCmt",
"score": 60
},
{
"format": 105,
"name": "decibeL",
"score": 50
},
{
"format": 104,
"name": "NTb",
"score": 40
},
{
"format": 103,
"name": "CRiSC",
"score": 50
},
{
"format": 102,
"name": "SA89",
"score": 60
},
{
"format": 101,
"name": "HiDt",
"score": 60
},
{
"format": 100,
"name": "FoRM",
"score": 60
},
{
"format": 99,
"name": "HiFi",
"score": 60
},
{
"format": 98,
"name": "CtrlHD",
"score": 60
},
{
"format": 97,
"name": "VietHD",
"score": 70
},
{
"format": 96,
"name": "ZQ",
"score": 70
},
{
"format": 95,
"name": "TayTo",
"score": 70
},
{
"format": 94,
"name": "Geek",
"score": 70
},
{
"format": 93,
"name": "EbP",
"score": 80
},
{
"format": 92,
"name": "DON",
"score": 80
},
{
"format": 91,
"name": "D-Z0N3",
"score": 80
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
}
]
}
]

View File

@@ -0,0 +1,914 @@
[
{
"name": "1080p Optimal (Single Grab)",
"upgradeAllowed": true,
"cutoff": 20,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 0,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 0
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 30
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 60
},
{
"format": 224,
"name": "h265",
"score": -9999
},
{
"format": 214,
"name": "LQ",
"score": -9999
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": -9999
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 10
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 50
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": -9999
},
{
"format": 201,
"name": "HDR10",
"score": -9999
},
{
"format": 200,
"name": "Dolby Vision",
"score": -9999
},
{
"format": 199,
"name": "HDR10+",
"score": -9999
},
{
"format": 198,
"name": "Stream Optimised",
"score": 0
},
{
"format": 197,
"name": "LoRD",
"score": 0
},
{
"format": 196,
"name": "Scene",
"score": 0
},
{
"format": 195,
"name": "mHD",
"score": 0
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 0
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 10
},
{
"format": 183,
"name": "ROKU",
"score": 20
},
{
"format": 182,
"name": "BeyondHD",
"score": 0
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 0
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": 50
},
{
"format": 175,
"name": "DTS-X",
"score": 60
},
{
"format": 174,
"name": "FLAC",
"score": 30
},
{
"format": 173,
"name": "DTS-HD MA",
"score": 50
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 10
},
{
"format": 165,
"name": "Paramount+",
"score": 20
},
{
"format": 164,
"name": "Peacock TV",
"score": 20
},
{
"format": 163,
"name": "Hulu",
"score": 20
},
{
"format": 162,
"name": "Netflix",
"score": 30
},
{
"format": 161,
"name": "HBO Max",
"score": 30
},
{
"format": 160,
"name": "Disney+",
"score": 30
},
{
"format": 159,
"name": "Apple TV+",
"score": 40
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 50
},
{
"format": 157,
"name": "Amazon Prime",
"score": 40
},
{
"format": 156,
"name": "REMUX",
"score": 60
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": -9999
},
{
"format": 153,
"name": "Blu-Ray",
"score": -9999
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": 60
},
{
"format": 149,
"name": "BHDStudio",
"score": 0
},
{
"format": 148,
"name": "LEGi0N",
"score": 0
},
{
"format": 147,
"name": "FraMeSToR",
"score": 0
},
{
"format": 146,
"name": "iFT",
"score": 0
},
{
"format": 145,
"name": "MTeam",
"score": 0
},
{
"format": 144,
"name": "EDPH",
"score": 0
},
{
"format": 143,
"name": "HANDJOB",
"score": 0
},
{
"format": 142,
"name": "c0ke",
"score": 0
},
{
"format": 141,
"name": "KASHMiR",
"score": 0
},
{
"format": 140,
"name": "WMING",
"score": 0
},
{
"format": 139,
"name": "playHD",
"score": 0
},
{
"format": 138,
"name": "E.N.D",
"score": 0
},
{
"format": 137,
"name": "GutS",
"score": 0
},
{
"format": 136,
"name": "BV",
"score": 0
},
{
"format": 135,
"name": "SiMPLE",
"score": 0
},
{
"format": 134,
"name": "W4NK3R",
"score": 0
},
{
"format": 133,
"name": "GS88",
"score": 0
},
{
"format": 132,
"name": "HiP",
"score": 0
},
{
"format": 131,
"name": "GALAXY",
"score": 0
},
{
"format": 130,
"name": "luvBB",
"score": 0
},
{
"format": 129,
"name": "NyHD",
"score": 0
},
{
"format": 128,
"name": "ZIMBO",
"score": 0
},
{
"format": 127,
"name": "ThD",
"score": 0
},
{
"format": 126,
"name": "SaNcTi",
"score": 0
},
{
"format": 125,
"name": "ORiGEN",
"score": 0
},
{
"format": 124,
"name": "Positive",
"score": 0
},
{
"format": 123,
"name": "ESiR",
"score": 0
},
{
"format": 122,
"name": "Chotab",
"score": 0
},
{
"format": 121,
"name": "xander",
"score": 0
},
{
"format": 120,
"name": "FTW-HD",
"score": 0
},
{
"format": 119,
"name": "Penumbra",
"score": 0
},
{
"format": 118,
"name": "TDD",
"score": 0
},
{
"format": 117,
"name": "Dariush SD",
"score": 30
},
{
"format": 116,
"name": "PTer",
"score": 0
},
{
"format": 115,
"name": "SbR",
"score": 0
},
{
"format": 114,
"name": "nmd",
"score": 0
},
{
"format": 113,
"name": "TBB",
"score": 0
},
{
"format": 112,
"name": "EA",
"score": 0
},
{
"format": 111,
"name": "BMF",
"score": 0
},
{
"format": 110,
"name": "LolHD",
"score": 0
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 0
},
{
"format": 108,
"name": "IDE",
"score": 0
},
{
"format": 107,
"name": "de[42]",
"score": 0
},
{
"format": 106,
"name": "NCmt",
"score": 0
},
{
"format": 105,
"name": "decibeL",
"score": 0
},
{
"format": 104,
"name": "NTb",
"score": 0
},
{
"format": 103,
"name": "CRiSC",
"score": 0
},
{
"format": 102,
"name": "SA89",
"score": 0
},
{
"format": 101,
"name": "HiDt",
"score": 0
},
{
"format": 100,
"name": "FoRM",
"score": 0
},
{
"format": 99,
"name": "HiFi",
"score": 0
},
{
"format": 98,
"name": "CtrlHD",
"score": 0
},
{
"format": 97,
"name": "VietHD",
"score": 0
},
{
"format": 96,
"name": "ZQ",
"score": 0
},
{
"format": 95,
"name": "TayTo",
"score": 0
},
{
"format": 94,
"name": "Geek",
"score": 0
},
{
"format": 93,
"name": "EbP",
"score": 0
},
{
"format": 92,
"name": "DON",
"score": 0
},
{
"format": 91,
"name": "D-Z0N3",
"score": 0
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
}
]
}
]

View File

@@ -0,0 +1,914 @@
[
{
"name": "1080p Optimal",
"upgradeAllowed": true,
"cutoff": 20,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 1000,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 0
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 30
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 60
},
{
"format": 224,
"name": "h265",
"score": -9999
},
{
"format": 214,
"name": "LQ",
"score": -9999
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": -9999
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 10
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 50
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": -9999
},
{
"format": 201,
"name": "HDR10",
"score": -9999
},
{
"format": 200,
"name": "Dolby Vision",
"score": -9999
},
{
"format": 199,
"name": "HDR10+",
"score": -9999
},
{
"format": 198,
"name": "Stream Optimised",
"score": 0
},
{
"format": 197,
"name": "LoRD",
"score": 0
},
{
"format": 196,
"name": "Scene",
"score": 0
},
{
"format": 195,
"name": "mHD",
"score": 0
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 0
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 10
},
{
"format": 183,
"name": "ROKU",
"score": 20
},
{
"format": 182,
"name": "BeyondHD",
"score": 0
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 0
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": 50
},
{
"format": 175,
"name": "DTS-X",
"score": 60
},
{
"format": 174,
"name": "FLAC",
"score": 30
},
{
"format": 173,
"name": "DTS-HD MA",
"score": 50
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 10
},
{
"format": 165,
"name": "Paramount+",
"score": 20
},
{
"format": 164,
"name": "Peacock TV",
"score": 20
},
{
"format": 163,
"name": "Hulu",
"score": 20
},
{
"format": 162,
"name": "Netflix",
"score": 30
},
{
"format": 161,
"name": "HBO Max",
"score": 30
},
{
"format": 160,
"name": "Disney+",
"score": 30
},
{
"format": 159,
"name": "Apple TV+",
"score": 40
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 50
},
{
"format": 157,
"name": "Amazon Prime",
"score": 40
},
{
"format": 156,
"name": "REMUX",
"score": 60
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": -9999
},
{
"format": 153,
"name": "Blu-Ray",
"score": -9999
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": 60
},
{
"format": 149,
"name": "BHDStudio",
"score": 0
},
{
"format": 148,
"name": "LEGi0N",
"score": 0
},
{
"format": 147,
"name": "FraMeSToR",
"score": 0
},
{
"format": 146,
"name": "iFT",
"score": 0
},
{
"format": 145,
"name": "MTeam",
"score": 0
},
{
"format": 144,
"name": "EDPH",
"score": 0
},
{
"format": 143,
"name": "HANDJOB",
"score": 0
},
{
"format": 142,
"name": "c0ke",
"score": 0
},
{
"format": 141,
"name": "KASHMiR",
"score": 0
},
{
"format": 140,
"name": "WMING",
"score": 0
},
{
"format": 139,
"name": "playHD",
"score": 0
},
{
"format": 138,
"name": "E.N.D",
"score": 0
},
{
"format": 137,
"name": "GutS",
"score": 0
},
{
"format": 136,
"name": "BV",
"score": 0
},
{
"format": 135,
"name": "SiMPLE",
"score": 0
},
{
"format": 134,
"name": "W4NK3R",
"score": 0
},
{
"format": 133,
"name": "GS88",
"score": 0
},
{
"format": 132,
"name": "HiP",
"score": 0
},
{
"format": 131,
"name": "GALAXY",
"score": 0
},
{
"format": 130,
"name": "luvBB",
"score": 0
},
{
"format": 129,
"name": "NyHD",
"score": 0
},
{
"format": 128,
"name": "ZIMBO",
"score": 0
},
{
"format": 127,
"name": "ThD",
"score": 0
},
{
"format": 126,
"name": "SaNcTi",
"score": 0
},
{
"format": 125,
"name": "ORiGEN",
"score": 0
},
{
"format": 124,
"name": "Positive",
"score": 0
},
{
"format": 123,
"name": "ESiR",
"score": 0
},
{
"format": 122,
"name": "Chotab",
"score": 0
},
{
"format": 121,
"name": "xander",
"score": 0
},
{
"format": 120,
"name": "FTW-HD",
"score": 0
},
{
"format": 119,
"name": "Penumbra",
"score": 0
},
{
"format": 118,
"name": "TDD",
"score": 0
},
{
"format": 117,
"name": "Dariush SD",
"score": 30
},
{
"format": 116,
"name": "PTer",
"score": 0
},
{
"format": 115,
"name": "SbR",
"score": 0
},
{
"format": 114,
"name": "nmd",
"score": 0
},
{
"format": 113,
"name": "TBB",
"score": 0
},
{
"format": 112,
"name": "EA",
"score": 0
},
{
"format": 111,
"name": "BMF",
"score": 0
},
{
"format": 110,
"name": "LolHD",
"score": 0
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 0
},
{
"format": 108,
"name": "IDE",
"score": 0
},
{
"format": 107,
"name": "de[42]",
"score": 0
},
{
"format": 106,
"name": "NCmt",
"score": 0
},
{
"format": 105,
"name": "decibeL",
"score": 0
},
{
"format": 104,
"name": "NTb",
"score": 0
},
{
"format": 103,
"name": "CRiSC",
"score": 0
},
{
"format": 102,
"name": "SA89",
"score": 0
},
{
"format": 101,
"name": "HiDt",
"score": 0
},
{
"format": 100,
"name": "FoRM",
"score": 0
},
{
"format": 99,
"name": "HiFi",
"score": 0
},
{
"format": 98,
"name": "CtrlHD",
"score": 0
},
{
"format": 97,
"name": "VietHD",
"score": 0
},
{
"format": 96,
"name": "ZQ",
"score": 0
},
{
"format": 95,
"name": "TayTo",
"score": 0
},
{
"format": 94,
"name": "Geek",
"score": 0
},
{
"format": 93,
"name": "EbP",
"score": 0
},
{
"format": 92,
"name": "DON",
"score": 0
},
{
"format": 91,
"name": "D-Z0N3",
"score": 0
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
}
]
}
]

View File

@@ -0,0 +1,935 @@
[
{
"name": "1080p Transparent (Double Grab)",
"upgradeAllowed": true,
"cutoff": 1001,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Fallback SD",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1003
},
{
"name": "Fallback 1080p",
"items": [
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1002
},
{
"name": "Transparent Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 140,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 30
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 0
},
{
"format": 224,
"name": "h265",
"score": -9999
},
{
"format": 223,
"name": "LiNG",
"score": 80
},
{
"format": 221,
"name": "hdalx",
"score": 80
},
{
"format": 220,
"name": "VLAD",
"score": 80
},
{
"format": 219,
"name": "AJP69",
"score": 80
},
{
"format": 218,
"name": "iON",
"score": 80
},
{
"format": 217,
"name": "BTN",
"score": 30
},
{
"format": 216,
"name": "pcroland",
"score": 80
},
{
"format": 215,
"name": "CJ",
"score": 80
},
{
"format": 214,
"name": "LQ",
"score": -9999
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": 0
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 0
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": -9999
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": -9999
},
{
"format": 201,
"name": "HDR10",
"score": -9999
},
{
"format": 200,
"name": "Dolby Vision",
"score": -9999
},
{
"format": 199,
"name": "HDR10+",
"score": -9999
},
{
"format": 198,
"name": "Stream Optimised",
"score": 0
},
{
"format": 197,
"name": "LoRD",
"score": 70
},
{
"format": 196,
"name": "Scene",
"score": 30
},
{
"format": 195,
"name": "mHD",
"score": -999999
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 20
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 60
},
{
"format": 183,
"name": "ROKU",
"score": 60
},
{
"format": 182,
"name": "BeyondHD",
"score": -10000
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 70
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": -9999
},
{
"format": 175,
"name": "DTS-X",
"score": -9999
},
{
"format": 174,
"name": "FLAC",
"score": 0
},
{
"format": 173,
"name": "DTS-HD MA",
"score": -9999
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 0
},
{
"format": 170,
"name": "ATMOS",
"score": 0
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 60
},
{
"format": 165,
"name": "Paramount+",
"score": 60
},
{
"format": 164,
"name": "Peacock TV",
"score": 60
},
{
"format": 163,
"name": "Hulu",
"score": 60
},
{
"format": 162,
"name": "Netflix",
"score": 60
},
{
"format": 161,
"name": "HBO Max",
"score": 60
},
{
"format": 160,
"name": "Disney+",
"score": 60
},
{
"format": 159,
"name": "Apple TV+",
"score": 60
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 60
},
{
"format": 157,
"name": "Amazon Prime",
"score": 60
},
{
"format": 156,
"name": "REMUX",
"score": -9999
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": 0
},
{
"format": 153,
"name": "Blu-Ray",
"score": 0
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -10000
},
{
"format": 150,
"name": "1080p",
"score": 60
},
{
"format": 149,
"name": "BHDStudio",
"score": 50
},
{
"format": 148,
"name": "LEGi0N",
"score": 30
},
{
"format": 147,
"name": "FraMeSToR",
"score": 30
},
{
"format": 146,
"name": "iFT",
"score": 70
},
{
"format": 145,
"name": "MTeam",
"score": -9999
},
{
"format": 144,
"name": "EDPH",
"score": 30
},
{
"format": 143,
"name": "HANDJOB",
"score": 30
},
{
"format": 142,
"name": "c0ke",
"score": 110
},
{
"format": 141,
"name": "KASHMiR",
"score": 70
},
{
"format": 140,
"name": "WMING",
"score": 70
},
{
"format": 139,
"name": "playHD",
"score": 70
},
{
"format": 138,
"name": "E.N.D",
"score": 70
},
{
"format": 137,
"name": "GutS",
"score": 70
},
{
"format": 136,
"name": "BV",
"score": 70
},
{
"format": 135,
"name": "SiMPLE",
"score": 70
},
{
"format": 134,
"name": "W4NK3R",
"score": 70
},
{
"format": 133,
"name": "GS88",
"score": 70
},
{
"format": 132,
"name": "HiP",
"score": 80
},
{
"format": 131,
"name": "GALAXY",
"score": 70
},
{
"format": 130,
"name": "luvBB",
"score": 70
},
{
"format": 129,
"name": "NyHD",
"score": 70
},
{
"format": 128,
"name": "ZIMBO",
"score": 70
},
{
"format": 127,
"name": "ThD",
"score": 70
},
{
"format": 126,
"name": "SaNcTi",
"score": 70
},
{
"format": 125,
"name": "ORiGEN",
"score": 70
},
{
"format": 124,
"name": "Positive",
"score": 70
},
{
"format": 123,
"name": "ESiR",
"score": 70
},
{
"format": 122,
"name": "Chotab",
"score": 70
},
{
"format": 121,
"name": "xander",
"score": 70
},
{
"format": 120,
"name": "FTW-HD",
"score": 70
},
{
"format": 119,
"name": "Penumbra",
"score": 70
},
{
"format": 118,
"name": "TDD",
"score": 70
},
{
"format": 117,
"name": "Dariush SD",
"score": 70
},
{
"format": 116,
"name": "PTer",
"score": 70
},
{
"format": 115,
"name": "SbR",
"score": 70
},
{
"format": 114,
"name": "nmd",
"score": 70
},
{
"format": 113,
"name": "TBB",
"score": 70
},
{
"format": 112,
"name": "EA",
"score": 80
},
{
"format": 111,
"name": "BMF",
"score": 80
},
{
"format": 110,
"name": "LolHD",
"score": 80
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 80
},
{
"format": 108,
"name": "IDE",
"score": 80
},
{
"format": 107,
"name": "de[42]",
"score": 90
},
{
"format": 106,
"name": "NCmt",
"score": 100
},
{
"format": 105,
"name": "decibeL",
"score": 90
},
{
"format": 104,
"name": "NTb",
"score": 80
},
{
"format": 103,
"name": "CRiSC",
"score": 90
},
{
"format": 102,
"name": "SA89",
"score": 100
},
{
"format": 101,
"name": "HiDt",
"score": 100
},
{
"format": 100,
"name": "FoRM",
"score": 100
},
{
"format": 99,
"name": "HiFi",
"score": 100
},
{
"format": 98,
"name": "CtrlHD",
"score": 100
},
{
"format": 97,
"name": "VietHD",
"score": 110
},
{
"format": 96,
"name": "ZQ",
"score": 110
},
{
"format": 95,
"name": "TayTo",
"score": 110
},
{
"format": 94,
"name": "Geek",
"score": 110
},
{
"format": 93,
"name": "EbP",
"score": 120
},
{
"format": 92,
"name": "DON",
"score": 120
},
{
"format": 91,
"name": "D-Z0N3",
"score": 120
}
]
}
]

View File

@@ -0,0 +1,935 @@
[
{
"name": "1080p Transparent (Single Grab)",
"upgradeAllowed": true,
"cutoff": 1001,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Fallback SD",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1003
},
{
"name": "Fallback 1080p",
"items": [
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1002
},
{
"name": "Transparent Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 0,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 30
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 0
},
{
"format": 224,
"name": "h265",
"score": -9999
},
{
"format": 223,
"name": "LiNG",
"score": 80
},
{
"format": 221,
"name": "hdalx",
"score": 80
},
{
"format": 220,
"name": "VLAD",
"score": 80
},
{
"format": 219,
"name": "AJP69",
"score": 80
},
{
"format": 218,
"name": "iON",
"score": 80
},
{
"format": 217,
"name": "BTN",
"score": 30
},
{
"format": 216,
"name": "pcroland",
"score": 80
},
{
"format": 215,
"name": "CJ",
"score": 80
},
{
"format": 214,
"name": "LQ",
"score": -9999
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": 0
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 0
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": -9999
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": -9999
},
{
"format": 201,
"name": "HDR10",
"score": -9999
},
{
"format": 200,
"name": "Dolby Vision",
"score": -9999
},
{
"format": 199,
"name": "HDR10+",
"score": -9999
},
{
"format": 198,
"name": "Stream Optimised",
"score": 0
},
{
"format": 197,
"name": "LoRD",
"score": 70
},
{
"format": 196,
"name": "Scene",
"score": 30
},
{
"format": 195,
"name": "mHD",
"score": -999999
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 20
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 20
},
{
"format": 183,
"name": "ROKU",
"score": 30
},
{
"format": 182,
"name": "BeyondHD",
"score": -10000
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 70
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": -9999
},
{
"format": 175,
"name": "DTS-X",
"score": -9999
},
{
"format": 174,
"name": "FLAC",
"score": 0
},
{
"format": 173,
"name": "DTS-HD MA",
"score": -9999
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 5
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 20
},
{
"format": 165,
"name": "Paramount+",
"score": 30
},
{
"format": 164,
"name": "Peacock TV",
"score": 30
},
{
"format": 163,
"name": "Hulu",
"score": 30
},
{
"format": 162,
"name": "Netflix",
"score": 40
},
{
"format": 161,
"name": "HBO Max",
"score": 40
},
{
"format": 160,
"name": "Disney+",
"score": 40
},
{
"format": 159,
"name": "Apple TV+",
"score": 50
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 60
},
{
"format": 157,
"name": "Amazon Prime",
"score": 50
},
{
"format": 156,
"name": "REMUX",
"score": -9999
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": 0
},
{
"format": 153,
"name": "Blu-Ray",
"score": 0
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -10000
},
{
"format": 150,
"name": "1080p",
"score": 60
},
{
"format": 149,
"name": "BHDStudio",
"score": 30
},
{
"format": 148,
"name": "LEGi0N",
"score": 30
},
{
"format": 147,
"name": "FraMeSToR",
"score": 30
},
{
"format": 146,
"name": "iFT",
"score": 70
},
{
"format": 145,
"name": "MTeam",
"score": -9999
},
{
"format": 144,
"name": "EDPH",
"score": 30
},
{
"format": 143,
"name": "HANDJOB",
"score": 30
},
{
"format": 142,
"name": "c0ke",
"score": 110
},
{
"format": 141,
"name": "KASHMiR",
"score": 70
},
{
"format": 140,
"name": "WMING",
"score": 70
},
{
"format": 139,
"name": "playHD",
"score": 70
},
{
"format": 138,
"name": "E.N.D",
"score": 70
},
{
"format": 137,
"name": "GutS",
"score": 70
},
{
"format": 136,
"name": "BV",
"score": 70
},
{
"format": 135,
"name": "SiMPLE",
"score": 70
},
{
"format": 134,
"name": "W4NK3R",
"score": 70
},
{
"format": 133,
"name": "GS88",
"score": 70
},
{
"format": 132,
"name": "HiP",
"score": 80
},
{
"format": 131,
"name": "GALAXY",
"score": 70
},
{
"format": 130,
"name": "luvBB",
"score": 70
},
{
"format": 129,
"name": "NyHD",
"score": 70
},
{
"format": 128,
"name": "ZIMBO",
"score": 70
},
{
"format": 127,
"name": "ThD",
"score": 70
},
{
"format": 126,
"name": "SaNcTi",
"score": 70
},
{
"format": 125,
"name": "ORiGEN",
"score": 70
},
{
"format": 124,
"name": "Positive",
"score": 70
},
{
"format": 123,
"name": "ESiR",
"score": 70
},
{
"format": 122,
"name": "Chotab",
"score": 70
},
{
"format": 121,
"name": "xander",
"score": 70
},
{
"format": 120,
"name": "FTW-HD",
"score": 70
},
{
"format": 119,
"name": "Penumbra",
"score": 70
},
{
"format": 118,
"name": "TDD",
"score": 70
},
{
"format": 117,
"name": "Dariush SD",
"score": 70
},
{
"format": 116,
"name": "PTer",
"score": 70
},
{
"format": 115,
"name": "SbR",
"score": 70
},
{
"format": 114,
"name": "nmd",
"score": 70
},
{
"format": 113,
"name": "TBB",
"score": 70
},
{
"format": 112,
"name": "EA",
"score": 80
},
{
"format": 111,
"name": "BMF",
"score": 80
},
{
"format": 110,
"name": "LolHD",
"score": 80
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 80
},
{
"format": 108,
"name": "IDE",
"score": 80
},
{
"format": 107,
"name": "de[42]",
"score": 90
},
{
"format": 106,
"name": "NCmt",
"score": 100
},
{
"format": 105,
"name": "decibeL",
"score": 90
},
{
"format": 104,
"name": "NTb",
"score": 80
},
{
"format": 103,
"name": "CRiSC",
"score": 90
},
{
"format": 102,
"name": "SA89",
"score": 100
},
{
"format": 101,
"name": "HiDt",
"score": 100
},
{
"format": 100,
"name": "FoRM",
"score": 100
},
{
"format": 99,
"name": "HiFi",
"score": 100
},
{
"format": 98,
"name": "CtrlHD",
"score": 100
},
{
"format": 97,
"name": "VietHD",
"score": 110
},
{
"format": 96,
"name": "ZQ",
"score": 110
},
{
"format": 95,
"name": "TayTo",
"score": 110
},
{
"format": 94,
"name": "Geek",
"score": 110
},
{
"format": 93,
"name": "EbP",
"score": 120
},
{
"format": 92,
"name": "DON",
"score": 120
},
{
"format": 91,
"name": "D-Z0N3",
"score": 120
}
]
}
]

View File

@@ -0,0 +1,935 @@
[
{
"name": "1080p Transparent",
"upgradeAllowed": true,
"cutoff": 1001,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Fallback SD",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1003
},
{
"name": "Fallback 1080p",
"items": [
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1002
},
{
"name": "Transparent Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 500,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 30
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 0
},
{
"format": 224,
"name": "h265",
"score": -9999
},
{
"format": 223,
"name": "LiNG",
"score": 80
},
{
"format": 221,
"name": "hdalx",
"score": 80
},
{
"format": 220,
"name": "VLAD",
"score": 80
},
{
"format": 219,
"name": "AJP69",
"score": 80
},
{
"format": 218,
"name": "iON",
"score": 80
},
{
"format": 217,
"name": "BTN",
"score": 30
},
{
"format": 216,
"name": "pcroland",
"score": 80
},
{
"format": 215,
"name": "CJ",
"score": 80
},
{
"format": 214,
"name": "LQ",
"score": -9999
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": 0
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 0
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": -9999
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": -9999
},
{
"format": 201,
"name": "HDR10",
"score": -9999
},
{
"format": 200,
"name": "Dolby Vision",
"score": -9999
},
{
"format": 199,
"name": "HDR10+",
"score": -9999
},
{
"format": 198,
"name": "Stream Optimised",
"score": 0
},
{
"format": 197,
"name": "LoRD",
"score": 70
},
{
"format": 196,
"name": "Scene",
"score": 30
},
{
"format": 195,
"name": "mHD",
"score": -999999
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 20
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 20
},
{
"format": 183,
"name": "ROKU",
"score": 30
},
{
"format": 182,
"name": "BeyondHD",
"score": -10000
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 70
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": -9999
},
{
"format": 175,
"name": "DTS-X",
"score": -9999
},
{
"format": 174,
"name": "FLAC",
"score": 0
},
{
"format": 173,
"name": "DTS-HD MA",
"score": -9999
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 5
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 20
},
{
"format": 165,
"name": "Paramount+",
"score": 30
},
{
"format": 164,
"name": "Peacock TV",
"score": 30
},
{
"format": 163,
"name": "Hulu",
"score": 30
},
{
"format": 162,
"name": "Netflix",
"score": 40
},
{
"format": 161,
"name": "HBO Max",
"score": 40
},
{
"format": 160,
"name": "Disney+",
"score": 40
},
{
"format": 159,
"name": "Apple TV+",
"score": 50
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 60
},
{
"format": 157,
"name": "Amazon Prime",
"score": 50
},
{
"format": 156,
"name": "REMUX",
"score": -9999
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": 0
},
{
"format": 153,
"name": "Blu-Ray",
"score": 0
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -10000
},
{
"format": 150,
"name": "1080p",
"score": 60
},
{
"format": 149,
"name": "BHDStudio",
"score": 30
},
{
"format": 148,
"name": "LEGi0N",
"score": 30
},
{
"format": 147,
"name": "FraMeSToR",
"score": 30
},
{
"format": 146,
"name": "iFT",
"score": 70
},
{
"format": 145,
"name": "MTeam",
"score": -9999
},
{
"format": 144,
"name": "EDPH",
"score": 30
},
{
"format": 143,
"name": "HANDJOB",
"score": 30
},
{
"format": 142,
"name": "c0ke",
"score": 110
},
{
"format": 141,
"name": "KASHMiR",
"score": 70
},
{
"format": 140,
"name": "WMING",
"score": 70
},
{
"format": 139,
"name": "playHD",
"score": 70
},
{
"format": 138,
"name": "E.N.D",
"score": 70
},
{
"format": 137,
"name": "GutS",
"score": 70
},
{
"format": 136,
"name": "BV",
"score": 70
},
{
"format": 135,
"name": "SiMPLE",
"score": 70
},
{
"format": 134,
"name": "W4NK3R",
"score": 70
},
{
"format": 133,
"name": "GS88",
"score": 70
},
{
"format": 132,
"name": "HiP",
"score": 80
},
{
"format": 131,
"name": "GALAXY",
"score": 70
},
{
"format": 130,
"name": "luvBB",
"score": 70
},
{
"format": 129,
"name": "NyHD",
"score": 70
},
{
"format": 128,
"name": "ZIMBO",
"score": 70
},
{
"format": 127,
"name": "ThD",
"score": 70
},
{
"format": 126,
"name": "SaNcTi",
"score": 70
},
{
"format": 125,
"name": "ORiGEN",
"score": 70
},
{
"format": 124,
"name": "Positive",
"score": 70
},
{
"format": 123,
"name": "ESiR",
"score": 70
},
{
"format": 122,
"name": "Chotab",
"score": 70
},
{
"format": 121,
"name": "xander",
"score": 70
},
{
"format": 120,
"name": "FTW-HD",
"score": 70
},
{
"format": 119,
"name": "Penumbra",
"score": 70
},
{
"format": 118,
"name": "TDD",
"score": 70
},
{
"format": 117,
"name": "Dariush SD",
"score": 70
},
{
"format": 116,
"name": "PTer",
"score": 70
},
{
"format": 115,
"name": "SbR",
"score": 70
},
{
"format": 114,
"name": "nmd",
"score": 70
},
{
"format": 113,
"name": "TBB",
"score": 70
},
{
"format": 112,
"name": "EA",
"score": 80
},
{
"format": 111,
"name": "BMF",
"score": 80
},
{
"format": 110,
"name": "LolHD",
"score": 80
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 80
},
{
"format": 108,
"name": "IDE",
"score": 80
},
{
"format": 107,
"name": "de[42]",
"score": 90
},
{
"format": 106,
"name": "NCmt",
"score": 100
},
{
"format": 105,
"name": "decibeL",
"score": 90
},
{
"format": 104,
"name": "NTb",
"score": 80
},
{
"format": 103,
"name": "CRiSC",
"score": 90
},
{
"format": 102,
"name": "SA89",
"score": 100
},
{
"format": 101,
"name": "HiDt",
"score": 100
},
{
"format": 100,
"name": "FoRM",
"score": 100
},
{
"format": 99,
"name": "HiFi",
"score": 100
},
{
"format": 98,
"name": "CtrlHD",
"score": 100
},
{
"format": 97,
"name": "VietHD",
"score": 110
},
{
"format": 96,
"name": "ZQ",
"score": 110
},
{
"format": 95,
"name": "TayTo",
"score": 110
},
{
"format": 94,
"name": "Geek",
"score": 110
},
{
"format": 93,
"name": "EbP",
"score": 120
},
{
"format": 92,
"name": "DON",
"score": 120
},
{
"format": 91,
"name": "D-Z0N3",
"score": 120
}
]
}
]

View File

@@ -0,0 +1,928 @@
[
{
"name": "1080p h265 Balanced ",
"upgradeAllowed": true,
"cutoff": 1001,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Else",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1002
},
{
"name": "Balanced Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 500,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 30
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 0
},
{
"format": 224,
"name": "h265",
"score": 60
},
{
"format": 214,
"name": "LQ",
"score": 0
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": 0
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 0
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 0
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": -9999
},
{
"format": 201,
"name": "HDR10",
"score": -9999
},
{
"format": 200,
"name": "Dolby Vision",
"score": -9999
},
{
"format": 199,
"name": "HDR10+",
"score": -9999
},
{
"format": 198,
"name": "Stream Optimised",
"score": 80
},
{
"format": 197,
"name": "LoRD",
"score": 30
},
{
"format": 196,
"name": "Scene",
"score": 20
},
{
"format": 195,
"name": "mHD",
"score": -99999
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 30
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 90
},
{
"format": 183,
"name": "ROKU",
"score": 190
},
{
"format": 182,
"name": "BeyondHD",
"score": -9999
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 30
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": -9999
},
{
"format": 175,
"name": "DTS-X",
"score": -9999
},
{
"format": 174,
"name": "FLAC",
"score": 0
},
{
"format": 173,
"name": "DTS-HD MA",
"score": -9999
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 90
},
{
"format": 165,
"name": "Paramount+",
"score": 190
},
{
"format": 164,
"name": "Peacock TV",
"score": 190
},
{
"format": 163,
"name": "Hulu",
"score": 190
},
{
"format": 162,
"name": "Netflix",
"score": 200
},
{
"format": 161,
"name": "HBO Max",
"score": 200
},
{
"format": 160,
"name": "Disney+",
"score": 200
},
{
"format": 159,
"name": "Apple TV+",
"score": 210
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 220
},
{
"format": 157,
"name": "Amazon Prime",
"score": 210
},
{
"format": 156,
"name": "REMUX",
"score": -9999
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": 10
},
{
"format": 153,
"name": "Blu-Ray",
"score": 10
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": 220
},
{
"format": 149,
"name": "BHDStudio",
"score": 90
},
{
"format": 148,
"name": "LEGi0N",
"score": 20
},
{
"format": 147,
"name": "FraMeSToR",
"score": 20
},
{
"format": 146,
"name": "iFT",
"score": 30
},
{
"format": 145,
"name": "MTeam",
"score": -9999
},
{
"format": 144,
"name": "EDPH",
"score": 20
},
{
"format": 143,
"name": "HANDJOB",
"score": 20
},
{
"format": 142,
"name": "c0ke",
"score": 70
},
{
"format": 141,
"name": "KASHMiR",
"score": 30
},
{
"format": 140,
"name": "WMING",
"score": 30
},
{
"format": 139,
"name": "playHD",
"score": 30
},
{
"format": 138,
"name": "E.N.D",
"score": 30
},
{
"format": 137,
"name": "GutS",
"score": 30
},
{
"format": 136,
"name": "BV",
"score": 30
},
{
"format": 135,
"name": "SiMPLE",
"score": 30
},
{
"format": 134,
"name": "W4NK3R",
"score": 30
},
{
"format": 133,
"name": "GS88",
"score": 30
},
{
"format": 132,
"name": "HiP",
"score": 40
},
{
"format": 131,
"name": "GALAXY",
"score": 30
},
{
"format": 130,
"name": "luvBB",
"score": 30
},
{
"format": 129,
"name": "NyHD",
"score": 30
},
{
"format": 128,
"name": "ZIMBO",
"score": 30
},
{
"format": 127,
"name": "ThD",
"score": 30
},
{
"format": 126,
"name": "SaNcTi",
"score": 30
},
{
"format": 125,
"name": "ORiGEN",
"score": 30
},
{
"format": 124,
"name": "Positive",
"score": 30
},
{
"format": 123,
"name": "ESiR",
"score": 30
},
{
"format": 122,
"name": "Chotab",
"score": 30
},
{
"format": 121,
"name": "xander",
"score": 30
},
{
"format": 120,
"name": "FTW-HD",
"score": 30
},
{
"format": 119,
"name": "Penumbra",
"score": 30
},
{
"format": 118,
"name": "TDD",
"score": 30
},
{
"format": 117,
"name": "Dariush SD",
"score": 30
},
{
"format": 116,
"name": "PTer",
"score": 30
},
{
"format": 115,
"name": "SbR",
"score": 30
},
{
"format": 114,
"name": "nmd",
"score": 30
},
{
"format": 113,
"name": "TBB",
"score": 30
},
{
"format": 112,
"name": "EA",
"score": 40
},
{
"format": 111,
"name": "BMF",
"score": 40
},
{
"format": 110,
"name": "LolHD",
"score": 40
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 40
},
{
"format": 108,
"name": "IDE",
"score": 40
},
{
"format": 107,
"name": "de[42]",
"score": 50
},
{
"format": 106,
"name": "NCmt",
"score": 60
},
{
"format": 105,
"name": "decibeL",
"score": 50
},
{
"format": 104,
"name": "NTb",
"score": 40
},
{
"format": 103,
"name": "CRiSC",
"score": 50
},
{
"format": 102,
"name": "SA89",
"score": 60
},
{
"format": 101,
"name": "HiDt",
"score": 60
},
{
"format": 100,
"name": "FoRM",
"score": 60
},
{
"format": 99,
"name": "HiFi",
"score": 60
},
{
"format": 98,
"name": "CtrlHD",
"score": 60
},
{
"format": 97,
"name": "VietHD",
"score": 70
},
{
"format": 96,
"name": "ZQ",
"score": 70
},
{
"format": 95,
"name": "TayTo",
"score": 70
},
{
"format": 94,
"name": "Geek",
"score": 70
},
{
"format": 93,
"name": "EbP",
"score": 80
},
{
"format": 92,
"name": "DON",
"score": 80
},
{
"format": 91,
"name": "D-Z0N3",
"score": 80
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
}
]
}
]

View File

@@ -0,0 +1,928 @@
[
{
"name": "1080p h265 Balanced (Single Grab)",
"upgradeAllowed": true,
"cutoff": 1001,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Else",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1002
},
{
"name": "Balanced Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": true
}
],
"allowed": true,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": false
}
],
"minFormatScore": 0,
"cutoffFormatScore": 0,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 30
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 0
},
{
"format": 224,
"name": "h265",
"score": 60
},
{
"format": 214,
"name": "LQ",
"score": 0
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": 0
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 0
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 0
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": -9999
},
{
"format": 201,
"name": "HDR10",
"score": -9999
},
{
"format": 200,
"name": "Dolby Vision",
"score": -9999
},
{
"format": 199,
"name": "HDR10+",
"score": -9999
},
{
"format": 198,
"name": "Stream Optimised",
"score": 80
},
{
"format": 197,
"name": "LoRD",
"score": 30
},
{
"format": 196,
"name": "Scene",
"score": 20
},
{
"format": 195,
"name": "mHD",
"score": -99999
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": 0
},
{
"format": 190,
"name": "Dariush ",
"score": 30
},
{
"format": 189,
"name": "TBB SD",
"score": 30
},
{
"format": 188,
"name": "Xvid",
"score": 0
},
{
"format": 187,
"name": "DVD",
"score": 0
},
{
"format": 186,
"name": "DVD REMUX ",
"score": 40
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 20
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 90
},
{
"format": 183,
"name": "ROKU",
"score": 190
},
{
"format": 182,
"name": "BeyondHD",
"score": -9999
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 30
},
{
"format": 177,
"name": "Black and White",
"score": -9999
},
{
"format": 176,
"name": "TrueHD",
"score": -9999
},
{
"format": 175,
"name": "DTS-X",
"score": -9999
},
{
"format": 174,
"name": "FLAC",
"score": 0
},
{
"format": 173,
"name": "DTS-HD MA",
"score": -9999
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 10
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 90
},
{
"format": 165,
"name": "Paramount+",
"score": 190
},
{
"format": 164,
"name": "Peacock TV",
"score": 190
},
{
"format": 163,
"name": "Hulu",
"score": 190
},
{
"format": 162,
"name": "Netflix",
"score": 200
},
{
"format": 161,
"name": "HBO Max",
"score": 200
},
{
"format": 160,
"name": "Disney+",
"score": 200
},
{
"format": 159,
"name": "Apple TV+",
"score": 210
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 220
},
{
"format": 157,
"name": "Amazon Prime",
"score": 210
},
{
"format": 156,
"name": "REMUX",
"score": -9999
},
{
"format": 155,
"name": "x264",
"score": 10
},
{
"format": 154,
"name": "WEBRip",
"score": 10
},
{
"format": 153,
"name": "Blu-Ray",
"score": 10
},
{
"format": 152,
"name": "2160p",
"score": -9999
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": 220
},
{
"format": 149,
"name": "BHDStudio",
"score": 90
},
{
"format": 148,
"name": "LEGi0N",
"score": 20
},
{
"format": 147,
"name": "FraMeSToR",
"score": 20
},
{
"format": 146,
"name": "iFT",
"score": 30
},
{
"format": 145,
"name": "MTeam",
"score": -9999
},
{
"format": 144,
"name": "EDPH",
"score": 20
},
{
"format": 143,
"name": "HANDJOB",
"score": 20
},
{
"format": 142,
"name": "c0ke",
"score": 70
},
{
"format": 141,
"name": "KASHMiR",
"score": 30
},
{
"format": 140,
"name": "WMING",
"score": 30
},
{
"format": 139,
"name": "playHD",
"score": 30
},
{
"format": 138,
"name": "E.N.D",
"score": 30
},
{
"format": 137,
"name": "GutS",
"score": 30
},
{
"format": 136,
"name": "BV",
"score": 30
},
{
"format": 135,
"name": "SiMPLE",
"score": 30
},
{
"format": 134,
"name": "W4NK3R",
"score": 30
},
{
"format": 133,
"name": "GS88",
"score": 30
},
{
"format": 132,
"name": "HiP",
"score": 40
},
{
"format": 131,
"name": "GALAXY",
"score": 30
},
{
"format": 130,
"name": "luvBB",
"score": 30
},
{
"format": 129,
"name": "NyHD",
"score": 30
},
{
"format": 128,
"name": "ZIMBO",
"score": 30
},
{
"format": 127,
"name": "ThD",
"score": 30
},
{
"format": 126,
"name": "SaNcTi",
"score": 30
},
{
"format": 125,
"name": "ORiGEN",
"score": 30
},
{
"format": 124,
"name": "Positive",
"score": 30
},
{
"format": 123,
"name": "ESiR",
"score": 30
},
{
"format": 122,
"name": "Chotab",
"score": 30
},
{
"format": 121,
"name": "xander",
"score": 30
},
{
"format": 120,
"name": "FTW-HD",
"score": 30
},
{
"format": 119,
"name": "Penumbra",
"score": 30
},
{
"format": 118,
"name": "TDD",
"score": 30
},
{
"format": 117,
"name": "Dariush SD",
"score": 30
},
{
"format": 116,
"name": "PTer",
"score": 30
},
{
"format": 115,
"name": "SbR",
"score": 30
},
{
"format": 114,
"name": "nmd",
"score": 30
},
{
"format": 113,
"name": "TBB",
"score": 30
},
{
"format": 112,
"name": "EA",
"score": 40
},
{
"format": 111,
"name": "BMF",
"score": 40
},
{
"format": 110,
"name": "LolHD",
"score": 40
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 40
},
{
"format": 108,
"name": "IDE",
"score": 40
},
{
"format": 107,
"name": "de[42]",
"score": 50
},
{
"format": 106,
"name": "NCmt",
"score": 60
},
{
"format": 105,
"name": "decibeL",
"score": 50
},
{
"format": 104,
"name": "NTb",
"score": 40
},
{
"format": 103,
"name": "CRiSC",
"score": 50
},
{
"format": 102,
"name": "SA89",
"score": 60
},
{
"format": 101,
"name": "HiDt",
"score": 60
},
{
"format": 100,
"name": "FoRM",
"score": 60
},
{
"format": 99,
"name": "HiFi",
"score": 60
},
{
"format": 98,
"name": "CtrlHD",
"score": 60
},
{
"format": 97,
"name": "VietHD",
"score": 70
},
{
"format": 96,
"name": "ZQ",
"score": 70
},
{
"format": 95,
"name": "TayTo",
"score": 70
},
{
"format": 94,
"name": "Geek",
"score": 70
},
{
"format": 93,
"name": "EbP",
"score": 80
},
{
"format": 92,
"name": "DON",
"score": 80
},
{
"format": 91,
"name": "D-Z0N3",
"score": 80
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
}
]
}
]

View File

@@ -0,0 +1,935 @@
[
{
"name": "2160p Optimal (Single Grab)",
"upgradeAllowed": true,
"cutoff": 21,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Fallback SD",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": false
}
],
"allowed": false,
"id": 1003
},
{
"name": "Fallback 1080p",
"items": [
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": false
}
],
"allowed": false,
"id": 1002
},
{
"name": "Transparent Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": false
}
],
"allowed": false,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": true
}
],
"minFormatScore": 0,
"cutoffFormatScore": 0,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 0
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 60
},
{
"format": 224,
"name": "h265",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
},
{
"format": 214,
"name": "LQ",
"score": -9999
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": -9999
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 10
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 50
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": 10
},
{
"format": 201,
"name": "HDR10",
"score": 10
},
{
"format": 200,
"name": "Dolby Vision",
"score": 30
},
{
"format": 199,
"name": "HDR10+",
"score": 20
},
{
"format": 198,
"name": "Stream Optimised",
"score": 0
},
{
"format": 197,
"name": "LoRD",
"score": 0
},
{
"format": 196,
"name": "Scene",
"score": 0
},
{
"format": 195,
"name": "mHD",
"score": 0
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": -9999
},
{
"format": 190,
"name": "Dariush ",
"score": 0
},
{
"format": 189,
"name": "TBB SD",
"score": 0
},
{
"format": 188,
"name": "Xvid",
"score": -9999
},
{
"format": 187,
"name": "DVD",
"score": -9999
},
{
"format": 186,
"name": "DVD REMUX ",
"score": -9999
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 0
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 10
},
{
"format": 183,
"name": "ROKU",
"score": 20
},
{
"format": 182,
"name": "BeyondHD",
"score": 0
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 0
},
{
"format": 177,
"name": "Black and White",
"score": 0
},
{
"format": 176,
"name": "TrueHD",
"score": 50
},
{
"format": 175,
"name": "DTS-X",
"score": 60
},
{
"format": 174,
"name": "FLAC",
"score": 40
},
{
"format": 173,
"name": "DTS-HD MA",
"score": 40
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 0
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 10
},
{
"format": 165,
"name": "Paramount+",
"score": 20
},
{
"format": 164,
"name": "Peacock TV",
"score": 20
},
{
"format": 163,
"name": "Hulu",
"score": 20
},
{
"format": 162,
"name": "Netflix",
"score": 30
},
{
"format": 161,
"name": "HBO Max",
"score": 30
},
{
"format": 160,
"name": "Disney+",
"score": 30
},
{
"format": 159,
"name": "Apple TV+",
"score": 40
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 50
},
{
"format": 157,
"name": "Amazon Prime",
"score": 40
},
{
"format": 156,
"name": "REMUX",
"score": 60
},
{
"format": 155,
"name": "x264",
"score": -9999
},
{
"format": 154,
"name": "WEBRip",
"score": -9999
},
{
"format": 153,
"name": "Blu-Ray",
"score": 60
},
{
"format": 152,
"name": "2160p",
"score": 60
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": -9999
},
{
"format": 149,
"name": "BHDStudio",
"score": 0
},
{
"format": 148,
"name": "LEGi0N",
"score": 0
},
{
"format": 147,
"name": "FraMeSToR",
"score": 0
},
{
"format": 146,
"name": "iFT",
"score": 0
},
{
"format": 145,
"name": "MTeam",
"score": 0
},
{
"format": 144,
"name": "EDPH",
"score": 0
},
{
"format": 143,
"name": "HANDJOB",
"score": 0
},
{
"format": 142,
"name": "c0ke",
"score": 0
},
{
"format": 141,
"name": "KASHMiR",
"score": 0
},
{
"format": 140,
"name": "WMING",
"score": 0
},
{
"format": 139,
"name": "playHD",
"score": 0
},
{
"format": 138,
"name": "E.N.D",
"score": 0
},
{
"format": 137,
"name": "GutS",
"score": 0
},
{
"format": 136,
"name": "BV",
"score": 0
},
{
"format": 135,
"name": "SiMPLE",
"score": 0
},
{
"format": 134,
"name": "W4NK3R",
"score": 0
},
{
"format": 133,
"name": "GS88",
"score": 0
},
{
"format": 132,
"name": "HiP",
"score": 0
},
{
"format": 131,
"name": "GALAXY",
"score": 0
},
{
"format": 130,
"name": "luvBB",
"score": 0
},
{
"format": 129,
"name": "NyHD",
"score": 0
},
{
"format": 128,
"name": "ZIMBO",
"score": 0
},
{
"format": 127,
"name": "ThD",
"score": 0
},
{
"format": 126,
"name": "SaNcTi",
"score": 0
},
{
"format": 125,
"name": "ORiGEN",
"score": 0
},
{
"format": 124,
"name": "Positive",
"score": 0
},
{
"format": 123,
"name": "ESiR",
"score": 0
},
{
"format": 122,
"name": "Chotab",
"score": 0
},
{
"format": 121,
"name": "xander",
"score": 0
},
{
"format": 120,
"name": "FTW-HD",
"score": 0
},
{
"format": 119,
"name": "Penumbra",
"score": 0
},
{
"format": 118,
"name": "TDD",
"score": 0
},
{
"format": 117,
"name": "Dariush SD",
"score": 0
},
{
"format": 116,
"name": "PTer",
"score": 0
},
{
"format": 115,
"name": "SbR",
"score": 0
},
{
"format": 114,
"name": "nmd",
"score": 0
},
{
"format": 113,
"name": "TBB",
"score": 0
},
{
"format": 112,
"name": "EA",
"score": 0
},
{
"format": 111,
"name": "BMF",
"score": 0
},
{
"format": 110,
"name": "LolHD",
"score": 0
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 0
},
{
"format": 108,
"name": "IDE",
"score": 0
},
{
"format": 107,
"name": "de[42]",
"score": 0
},
{
"format": 106,
"name": "NCmt",
"score": 0
},
{
"format": 105,
"name": "decibeL",
"score": 0
},
{
"format": 104,
"name": "NTb",
"score": 0
},
{
"format": 103,
"name": "CRiSC",
"score": 0
},
{
"format": 102,
"name": "SA89",
"score": 0
},
{
"format": 101,
"name": "HiDt",
"score": 0
},
{
"format": 100,
"name": "FoRM",
"score": 0
},
{
"format": 99,
"name": "HiFi",
"score": 0
},
{
"format": 98,
"name": "CtrlHD",
"score": 0
},
{
"format": 97,
"name": "VietHD",
"score": 0
},
{
"format": 96,
"name": "ZQ",
"score": 0
},
{
"format": 95,
"name": "TayTo",
"score": 0
},
{
"format": 94,
"name": "Geek",
"score": 0
},
{
"format": 93,
"name": "EbP",
"score": 0
},
{
"format": 92,
"name": "DON",
"score": 0
},
{
"format": 91,
"name": "D-Z0N3",
"score": 0
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
}
]
}
]

View File

@@ -0,0 +1,935 @@
[
{
"name": "2160p Optimal",
"upgradeAllowed": true,
"cutoff": 21,
"items": [
{
"quality": {
"id": 0,
"name": "Unknown",
"source": "unknown",
"resolution": 0
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 13,
"name": "Bluray-480p",
"source": "bluray",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 4,
"name": "HDTV-720p",
"source": "television",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 14,
"name": "WEBRip-720p",
"source": "webRip",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 5,
"name": "WEBDL-720p",
"source": "web",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 6,
"name": "Bluray-720p",
"source": "bluray",
"resolution": 720
},
"items": [],
"allowed": false
},
{
"name": "Fallback SD",
"items": [
{
"quality": {
"id": 1,
"name": "SDTV",
"source": "television",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 12,
"name": "WEBRip-480p",
"source": "webRip",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 8,
"name": "WEBDL-480p",
"source": "web",
"resolution": 480
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 2,
"name": "DVD",
"source": "dvd",
"resolution": 480
},
"items": [],
"allowed": false
}
],
"allowed": false,
"id": 1003
},
{
"name": "Fallback 1080p",
"items": [
{
"quality": {
"id": 10,
"name": "Raw-HD",
"source": "televisionRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 9,
"name": "HDTV-1080p",
"source": "television",
"resolution": 1080
},
"items": [],
"allowed": false
}
],
"allowed": false,
"id": 1002
},
{
"name": "Transparent Capable",
"items": [
{
"quality": {
"id": 3,
"name": "WEBDL-1080p",
"source": "web",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 15,
"name": "WEBRip-1080p",
"source": "webRip",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 7,
"name": "Bluray-1080p",
"source": "bluray",
"resolution": 1080
},
"items": [],
"allowed": false
}
],
"allowed": false,
"id": 1001
},
{
"quality": {
"id": 20,
"name": "Bluray-1080p Remux",
"source": "blurayRaw",
"resolution": 1080
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 16,
"name": "HDTV-2160p",
"source": "television",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 17,
"name": "WEBRip-2160p",
"source": "webRip",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 19,
"name": "Bluray-2160p",
"source": "bluray",
"resolution": 2160
},
"items": [],
"allowed": false
},
{
"quality": {
"id": 18,
"name": "WEBDL-2160p",
"source": "web",
"resolution": 2160
},
"items": [],
"allowed": true
},
{
"quality": {
"id": 21,
"name": "Bluray-2160p Remux",
"source": "blurayRaw",
"resolution": 2160
},
"items": [],
"allowed": true
}
],
"minFormatScore": 0,
"cutoffFormatScore": 320,
"minUpgradeFormatScore": 1,
"formatItems": [
{
"format": 229,
"name": "HR",
"score": 0
},
{
"format": 228,
"name": "MAX",
"score": 0
},
{
"format": 227,
"name": "h265 (4k)",
"score": 0
},
{
"format": 226,
"name": "PCM",
"score": 0
},
{
"format": 225,
"name": "Blu-Ray (Remux)",
"score": 60
},
{
"format": 224,
"name": "h265",
"score": 0
},
{
"format": 223,
"name": "LiNG",
"score": 0
},
{
"format": 214,
"name": "LQ",
"score": -9999
},
{
"format": 213,
"name": "EPSiLON",
"score": 0
},
{
"format": 212,
"name": "playBD",
"score": 0
},
{
"format": 211,
"name": "BLURANiUM",
"score": 0
},
{
"format": 210,
"name": "PmP",
"score": 0
},
{
"format": 209,
"name": "WiLDCAT",
"score": 0
},
{
"format": 208,
"name": "TRiToN",
"score": 0
},
{
"format": 207,
"name": "3L",
"score": 0
},
{
"format": 206,
"name": "Dolby Vision w/out Fallback",
"score": -9999
},
{
"format": 205,
"name": "UHDBits",
"score": -9999
},
{
"format": 204,
"name": "ATMOS (Missing)",
"score": 10
},
{
"format": 203,
"name": "TrueHD (Missing)",
"score": 50
},
{
"format": 202,
"name": "HDR10 (Missing)",
"score": 10
},
{
"format": 201,
"name": "HDR10",
"score": 10
},
{
"format": 200,
"name": "Dolby Vision",
"score": 30
},
{
"format": 199,
"name": "HDR10+",
"score": 20
},
{
"format": 198,
"name": "Stream Optimised",
"score": 0
},
{
"format": 197,
"name": "LoRD",
"score": 0
},
{
"format": 196,
"name": "Scene",
"score": 0
},
{
"format": 195,
"name": "mHD",
"score": 0
},
{
"format": 194,
"name": "AV-1",
"score": -9999
},
{
"format": 193,
"name": "VVC",
"score": -9999
},
{
"format": 192,
"name": "Extras",
"score": -9999
},
{
"format": 191,
"name": "480p",
"score": -9999
},
{
"format": 190,
"name": "Dariush ",
"score": 0
},
{
"format": 189,
"name": "TBB SD",
"score": 0
},
{
"format": 188,
"name": "Xvid",
"score": -9999
},
{
"format": 187,
"name": "DVD",
"score": -9999
},
{
"format": 186,
"name": "DVD REMUX ",
"score": -9999
},
{
"format": 185,
"name": "HANDJOB SD",
"score": 0
},
{
"format": 184,
"name": "iTunes (Missing)",
"score": 10
},
{
"format": 183,
"name": "ROKU",
"score": 20
},
{
"format": 182,
"name": "BeyondHD",
"score": 0
},
{
"format": 181,
"name": "Disc ",
"score": -9999
},
{
"format": 180,
"name": "3D",
"score": -9999
},
{
"format": 179,
"name": "Unwanted",
"score": -9999
},
{
"format": 178,
"name": "RightSIZE",
"score": 0
},
{
"format": 177,
"name": "Black and White",
"score": 0
},
{
"format": 176,
"name": "TrueHD",
"score": 50
},
{
"format": 175,
"name": "DTS-X",
"score": 60
},
{
"format": 174,
"name": "FLAC",
"score": 40
},
{
"format": 173,
"name": "DTS-HD MA",
"score": 40
},
{
"format": 172,
"name": "x265",
"score": -9999
},
{
"format": 171,
"name": "IMAX",
"score": 0
},
{
"format": 170,
"name": "ATMOS",
"score": 10
},
{
"format": 169,
"name": "DD",
"score": 0
},
{
"format": 168,
"name": "DTS",
"score": 0
},
{
"format": 167,
"name": "DD+",
"score": 0
},
{
"format": 166,
"name": "iTunes",
"score": 10
},
{
"format": 165,
"name": "Paramount+",
"score": 20
},
{
"format": 164,
"name": "Peacock TV",
"score": 20
},
{
"format": 163,
"name": "Hulu",
"score": 20
},
{
"format": 162,
"name": "Netflix",
"score": 30
},
{
"format": 161,
"name": "HBO Max",
"score": 30
},
{
"format": 160,
"name": "Disney+",
"score": 30
},
{
"format": 159,
"name": "Apple TV+",
"score": 40
},
{
"format": 158,
"name": "Movies Anywhere",
"score": 50
},
{
"format": 157,
"name": "Amazon Prime",
"score": 40
},
{
"format": 156,
"name": "REMUX",
"score": 60
},
{
"format": 155,
"name": "x264",
"score": -9999
},
{
"format": 154,
"name": "WEBRip",
"score": -9999
},
{
"format": 153,
"name": "Blu-Ray",
"score": 60
},
{
"format": 152,
"name": "2160p",
"score": 60
},
{
"format": 151,
"name": "720p",
"score": -9999
},
{
"format": 150,
"name": "1080p",
"score": -9999
},
{
"format": 149,
"name": "BHDStudio",
"score": 0
},
{
"format": 148,
"name": "LEGi0N",
"score": 0
},
{
"format": 147,
"name": "FraMeSToR",
"score": 0
},
{
"format": 146,
"name": "iFT",
"score": 0
},
{
"format": 145,
"name": "MTeam",
"score": 0
},
{
"format": 144,
"name": "EDPH",
"score": 0
},
{
"format": 143,
"name": "HANDJOB",
"score": 0
},
{
"format": 142,
"name": "c0ke",
"score": 0
},
{
"format": 141,
"name": "KASHMiR",
"score": 0
},
{
"format": 140,
"name": "WMING",
"score": 0
},
{
"format": 139,
"name": "playHD",
"score": 0
},
{
"format": 138,
"name": "E.N.D",
"score": 0
},
{
"format": 137,
"name": "GutS",
"score": 0
},
{
"format": 136,
"name": "BV",
"score": 0
},
{
"format": 135,
"name": "SiMPLE",
"score": 0
},
{
"format": 134,
"name": "W4NK3R",
"score": 0
},
{
"format": 133,
"name": "GS88",
"score": 0
},
{
"format": 132,
"name": "HiP",
"score": 0
},
{
"format": 131,
"name": "GALAXY",
"score": 0
},
{
"format": 130,
"name": "luvBB",
"score": 0
},
{
"format": 129,
"name": "NyHD",
"score": 0
},
{
"format": 128,
"name": "ZIMBO",
"score": 0
},
{
"format": 127,
"name": "ThD",
"score": 0
},
{
"format": 126,
"name": "SaNcTi",
"score": 0
},
{
"format": 125,
"name": "ORiGEN",
"score": 0
},
{
"format": 124,
"name": "Positive",
"score": 0
},
{
"format": 123,
"name": "ESiR",
"score": 0
},
{
"format": 122,
"name": "Chotab",
"score": 0
},
{
"format": 121,
"name": "xander",
"score": 0
},
{
"format": 120,
"name": "FTW-HD",
"score": 0
},
{
"format": 119,
"name": "Penumbra",
"score": 0
},
{
"format": 118,
"name": "TDD",
"score": 0
},
{
"format": 117,
"name": "Dariush SD",
"score": 0
},
{
"format": 116,
"name": "PTer",
"score": 0
},
{
"format": 115,
"name": "SbR",
"score": 0
},
{
"format": 114,
"name": "nmd",
"score": 0
},
{
"format": 113,
"name": "TBB",
"score": 0
},
{
"format": 112,
"name": "EA",
"score": 0
},
{
"format": 111,
"name": "BMF",
"score": 0
},
{
"format": 110,
"name": "LolHD",
"score": 0
},
{
"format": 109,
"name": "HDMaNiAcS",
"score": 0
},
{
"format": 108,
"name": "IDE",
"score": 0
},
{
"format": 107,
"name": "de[42]",
"score": 0
},
{
"format": 106,
"name": "NCmt",
"score": 0
},
{
"format": 105,
"name": "decibeL",
"score": 0
},
{
"format": 104,
"name": "NTb",
"score": 0
},
{
"format": 103,
"name": "CRiSC",
"score": 0
},
{
"format": 102,
"name": "SA89",
"score": 0
},
{
"format": 101,
"name": "HiDt",
"score": 0
},
{
"format": 100,
"name": "FoRM",
"score": 0
},
{
"format": 99,
"name": "HiFi",
"score": 0
},
{
"format": 98,
"name": "CtrlHD",
"score": 0
},
{
"format": 97,
"name": "VietHD",
"score": 0
},
{
"format": 96,
"name": "ZQ",
"score": 0
},
{
"format": 95,
"name": "TayTo",
"score": 0
},
{
"format": 94,
"name": "Geek",
"score": 0
},
{
"format": 93,
"name": "EbP",
"score": 0
},
{
"format": 92,
"name": "DON",
"score": 0
},
{
"format": 91,
"name": "D-Z0N3",
"score": 0
},
{
"format": 215,
"name": "CJ",
"score": 0
},
{
"format": 216,
"name": "pcroland",
"score": 0
},
{
"format": 217,
"name": "BTN",
"score": 0
},
{
"format": 218,
"name": "iON",
"score": 0
},
{
"format": 219,
"name": "AJP69",
"score": 0
},
{
"format": 220,
"name": "VLAD",
"score": 0
},
{
"format": 221,
"name": "hdalx",
"score": 0
}
]
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
PyYAML==6.0.1
Requests==2.31.0

25
setup.py Normal file
View File

@@ -0,0 +1,25 @@
config_content = """
instances:
radarr:
- name: "Master"
base_url: "http://localhost:7878"
api_key: "API_KEY"
- name: "4k-radarr"
base_url: "http://localhost:7887"
api_key: "API_KEY"
sonarr:
- name: "Master"
base_url: "http://localhost:8989"
api_key: "API_KEY"
- name: "4k-sonarr"
base_url: "http://localhost:8998"
api_key: "API_KEY"
settings:
export_path: "./exports"
import_path: "./imports"
ansi_colors: true
"""
with open('config.yml', 'w') as file:
file.write(config_content)

22
syncarr.py Normal file
View File

@@ -0,0 +1,22 @@
from exportarr import export_custom_formats, export_quality_profiles
from importarr import import_custom_formats, import_quality_profiles
from helpers import load_config, get_app_choice
def main():
app = get_app_choice().lower() # Convert to lowercase
config = load_config() # Load the entire configuration
# Now app will be 'radarr' or 'sonarr', matching the keys in the config dictionary
master_instance = next((inst for inst in config['instances'][app] if inst['name'] == 'Master'), None)
extra_instances = [inst for inst in config['instances'][app] if inst['name'] != 'Master']
if master_instance:
export_custom_formats(app, [master_instance], config)
export_quality_profiles(app, [master_instance], config)
if extra_instances:
import_custom_formats(app, extra_instances)
import_quality_profiles(app, extra_instances)
if __name__ == "__main__":
main()