Adaptation des Custom-Formats de Pandaarr (sans problème d’espace, ni de transcodage)
https://github.com/Pandaarr/arr-custom-formats

{
"name": "FR",
"includeCustomFormatWhenRenaming": false,
"specifications": \[
{
"name": "Langue",
"implementation": "LanguageSpecification",
"negate": false,
"required": true,
"fields": {
"value": 2,
"exceptLanguage": false
}
},
{
"name": "480p OUT",
"implementation": "ResolutionSpecification",
"negate": true,
"required": false,
"fields": {
"value": 480
}
},
{
"name": "exclu",
"implementation": "ReleaseTitleSpecification",
"negate": true,
"required": true,
"fields": {
"value": "\\\\bMULTI(?:\[ .\_-\]?(?:VFI|VFF|VFQ|VF2|VFF2|VFI2|\\\\d))?\\\\b|\\\\b(vfq|vfi|vq)\\\\b|\\\\bFR\\\\s\*\\\\+\\\\s\*\[A-Z\]{2}\\\\b|\\\\b\[A-Z\]{2}\\\\s\*\\\\+\\\\s\*FR\\\\b"
}
},
{
"name": "Title FR",
"implementation": "ReleaseTitleSpecification",
"negate": false,
"required": true,
"fields": {
"value": "\\\\b(vf|truefr|french|francais|français|vof|VFF|VF2|VFF2)\\\\b"
}
}
\]
}
{
"name": "FRQ",
"includeCustomFormatWhenRenaming": false,
"specifications": \[
{
"name": "Langue",
"implementation": "LanguageSpecification",
"negate": false,
"required": true,
"fields": {
"value": 2,
"exceptLanguage": false
}
},
{
"name": "480p OUT",
"implementation": "ResolutionSpecification",
"negate": true,
"required": false,
"fields": {
"value": 480
}
},
{
"name": "exclu",
"implementation": "ReleaseTitleSpecification",
"negate": true,
"required": true,
"fields": {
"value": "\\\\bMULTI(?:\[ .\_-\]?(?:VFI|VFF|VFQ|VF2|VFF2|VFI2|\\\\d))?\\\\b|\\\\b(vf|vff|truefr|french|vof)\\\\b|\\\\bFR\\\\s\*\\\\+\\\\s\*\[A-Z\]{2}\\\\b|\\\\b\[A-Z\]{2}\\\\s\*\\\\+\\\\s\*FR\\\\b"
}
},
{
"name": "Title FRQ",
"implementation": "ReleaseTitleSpecification",
"negate": false,
"required": true,
"fields": {
"value": "\\\\b(vfq|vfi|vq)\\\\b"
}
}
\]
}
{
"name": "Multi",
"includeCustomFormatWhenRenaming": false,
"specifications": \[
{
"name": "Original",
"implementation": "LanguageSpecification",
"negate": false,
"required": false,
"fields": {
"value": \-2,
"exceptLanguage": false
}
},
{
"name": "French",
"implementation": "LanguageSpecification",
"negate": false,
"required": false,
"fields": {
"value": 2,
"exceptLanguage": false
}
},
{
"name": "480p OUT",
"implementation": "ResolutionSpecification",
"negate": true,
"required": false,
"fields": {
"value": 480
}
},
{
"name": "Title Multi",
"implementation": "ReleaseTitleSpecification",
"negate": false,
"required": true,
"fields": {
"value": "(?i)\\\\bMULTI(?:\[ .\_-\]?(?:VFI|VFF|VFQ|VF2|VFQ2|VFF2|VFI2|\\\\d))?\\\\b(?\!\[ .\_-\]?subs?)|\\\\bFR\\\\s\*\\\\+\\\\s\*\[A-Z\]{2}\\\\b|\\\\b\[A-Z\]{2}\\\\s\*\\\\+\\\\s\*FR\\\\b"
}
}
\]
}
{
"name": "VOST",
"includeCustomFormatWhenRenaming": false,
"specifications": \[
{
"name": "480p OUT",
"implementation": "ResolutionSpecification",
"negate": true,
"required": false,
"fields": {
"value": 480
}
},
{
"name": "exclu",
"implementation": "ReleaseTitleSpecification",
"negate": true,
"required": true,
"fields": {
"value": "\\\\bMULTI(?:\[ .\_-\]?(?:VFI|VFF|VFQ|VF2|VFF2|VFI2|\\\\d))?\\\\b|\\\\b(vf|vff|vfq|vfi|truefr|french|vof)\\\\b|\\\\bFR\\\\s\*\\\\+\\\\s\*\[A-Z\]{2}\\\\b|\\\\b\[A-Z\]{2}\\\\s\*\\\\+\\\\s\*FR\\\\b"
}
},
{
"name": "Title Sous-titres",
"implementation": "ReleaseTitleSpecification",
"negate": false,
"required": true,
"fields": {
"value": "\\\\b(vost|vostfr|subfr|subfrench)\\\\b"
}
},
{
"name": "FR",
"implementation": "LanguageSpecification",
"negate": true,
"required": false,
"fields": {
"value": 2,
"exceptLanguage": false
}
}
\]
}

Le tag “perma” doit exister dans sonarr / radarr pour garder des contenus permanents.
Films
Séries / Animes
mediaType: MOVIES
rules:
\- "0":
\- firstValue: Plex.seenBy
action: CONTAINS
lastValue: Seerr.addUser
\- operator: AND
firstValue: Seerr.isRequested
action: EQUALS
customValue:
type: boolean
value: "true"
\- operator: AND
firstValue: Seerr.mediaAddedAt
action: BEFORE
customValue:
type: custom\_days
value: "30"
\- operator: AND
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "false"
\- operator: AND
firstValue: Radarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: Perma
\- "1":
\- operator: OR
firstValue: Seerr.mediaAddedAt
action: BEFORE
customValue:
type: custom\_days
value: "90"
\- operator: AND
firstValue: Seerr.isRequested
action: EQUALS
customValue:
type: boolean
value: "true"
\- operator: AND
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "false"
\- operator: AND
firstValue: Radarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: Perma
\- "2":
\- operator: OR
firstValue: Plex.lastViewedAt
action: BEFORE
customValue:
type: custom\_days
value: "60"
\- operator: AND
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "false"
\- operator: AND
firstValue: Radarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: Perma
\- "3":
\- operator: OR
firstValue: Plex.addDate
action: BEFORE
customValue:
type: custom\_days
value: "365"
\- operator: AND
firstValue: Radarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: Perma
\- "4":
\- operator: OR
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "true"
\- operator: AND
firstValue: Plex.addDate
action: BEFORE
customValue:
type: custom\_days
value: "180"
\- operator: AND
firstValue: Radarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: Perma
mediaType: SEASONS
rules:
\- "0":
\- firstValue: Seerr.isRequested
action: EQUALS
customValue:
type: boolean
value: "true"
\- operator: AND
firstValue: Plex.sw\_lastWatched
action: BEFORE
customValue:
type: custom\_days
value: "60"
\- operator: AND
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "false"
\- operator: AND
firstValue: Sonarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: perma
\- "1":
\- operator: OR
firstValue: Seerr.isRequested
action: EQUALS
customValue:
type: boolean
value: "true"
\- operator: AND
firstValue: Plex.sw\_viewedEpisodes
action: EQUALS
customValue:
type: number
value: 0
\- operator: AND
firstValue: Plex.sw\_lastEpisodeAddedAt
action: BEFORE
customValue:
type: custom\_days
value: "90"
\- operator: AND
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "false"
\- operator: AND
firstValue: Sonarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: perma
\- "2":
\- operator: OR
firstValue: Seerr.isRequested
action: EQUALS
customValue:
type: boolean
value: "true"
\- operator: AND
firstValue: Plex.sw\_allEpisodesSeenBy
action: CONTAINS
lastValue: Seerr.addUser
\- operator: AND
firstValue: Plex.lastViewedAt
action: BEFORE
customValue:
type: custom\_days
value: "30"
\- operator: AND
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "false"
\- operator: AND
firstValue: Sonarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: perma
\- "3":
\- operator: OR
firstValue: Plex.addDate
action: BEFORE
customValue:
type: custom\_days
value: "365"
\- operator: AND
firstValue: Sonarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: perma
\- "4":
\- operator: OR
firstValue: Plex.watchlist\_isWatchlisted
action: EQUALS
customValue:
type: boolean
value: "true"
\- operator: AND
firstValue: Plex.addDate
action: BEFORE
customValue:
type: custom\_days
value: "180"
\- operator: AND
firstValue: Sonarr.tags
action: NOT\_CONTAINS\_PARTIAL
customValue:
type: text
value: perma