Vue lecture

Checkrr : Contrôle et réparation de bibliothèque

Decypharr intègre une option de réparation automatique mais quand on agrège plusieurs sources locales et/ou distantes, il est pratique d’avoir un outil de contrôle de ses bibliothèques.

Checkrr d’aetaric permet de contrôler à intervalles réguliers le contenu des bibliothèques liées à des instances Radarr, Sonarr, Lidarr. Si un fichier manque, l’info est relayé au bon outil qui remet dans la boucle du téléchargement.

Le genre d’outil qui ne consomme rien, ne fait pas de bruit mais peut s’avérer très pratique.

Pour l’installer en Docker il faut auparavant créer la base de données et le fichier de configuration, dans le dossier de son choix. Chez moi c’est /home/aerya/docker/checkrr

touch checkrr.db
touch checkrr.yaml


On peut maintenant remplir le fichier de configuration. Y’a une version longue et une version courte, j’ai fait mon mix avec :

Mes bibliothèques

Les extensions ignorées. C’est là qu’il faut bien regarder ce qu’on, prévoir large, sous peine d’avoir beaucoup de fichier non pris en compte, ça change rien mais ça fait des erreurs et du log pour Checkrr

Mes instances de Radarr et Sonarr

Des notifications Discord en cas de problème/réparation
L’activation de la WebUI

lang: "fr-FR"
checkrr:
  checkpath: 
    - "/media/Films/"
    - "/media/Séries/"
  database: ./checkrr.db
  debug: true
  cron: "@daily"
  ignorehidden: true
  ignorepaths:
    - 'media/ignored'
  ignoreexts:
    - .txt
    - .nfo
    - .nzb
    - .url
    - .xml
    - .jpg
    - .jpeg
    - .mp3
arr:
  radarr:
    process: true
    service: radarr
    address: "https://radarr.domaine.tld"
    apikey: "xxx"
    baseurl: /
    port: 443
    ssl: true
    mappings:
      "/mnt/Bibliothèques/Films/": "/media/Films/"
  sonarr:
    process: true
    service: sonarr
    address: "https://sonarr.domaine.tld"
    apikey: "xxx"
    baseurl: /
    port: 443
    ssl: true
    mappings:
      "/mnt/Bibliothèques/Séries/": "/media/Séries/"
logs:
  stdout:
    out: stdout
    formatter: default
notifications:
  discord:
    url: "https://canary.discord.com/api/webhooks/xxx"
    notificationtypes: 
      - reacquire
      - unknowndetected
      - startrun
      - endrun
webserver:
  port: 8585
  baseurl: "/"


Et le compose qui va avec

services:
  checkrr:
    container_name: checkrr
    image: aetaric/checkrr:latest
    restart: always
    volumes:
      - /home/aerya/docker/checkrr/checkrr.yaml:/etc/checkrr.yaml
      - /home/aerya/docker/checkrr/checkrr.db:/checkrr.db
      - /mnt/Bibliothèques:/media
    ports:
      - 8585:8585
    environment:
      - TZ=Europe/Paris
    labels:
      - com.centurylinklabs.watchtower.enable=true


De cette manière Checkrr tourne 1 fois par jour (minuit) mais on peut également le lancer manuellement via l’interface.

checkrr1

Les logs

+---------------------+---------------+
| Files Checked       |         10503 |
| Hash Matches        |             0 |
| Hashes Mismatched   |             0 |
| Submitted to Sonarr |             0 |
| Submitted to Radarr |             0 |
| Submitted to Lidarr |             0 |
| Video Files         |             0 |
| Audio Files         |           167 |
| Text or Other Files |           214 |
| Unknown Files       |             3 |
| Elapsed Time        | 23.253042916s |


J’ai malheureusement, ou heureusement, aucun cas de réparation à montrer en exemple. Je ne manquerai pas d’éditer l’article si ça arrivait.
Pour Heimdall ou autre dashboard, cxtal propose une icône.

Loading

  •  

Swaparr : dégager les Torrents bloqués des *arrs (stalled)


Utilisateurs de qBittorrent, combien de fois avons-nous vu un .torrent marqué « stalled » ? Un téléchargement bloqué pour X raison et Sonarr ou Radarr qui attend… attend… encore et toujours…

Les *arrs n’ont pas d’outil de détection des téléchargements bloqués.

Swaparr comble cette lacune, très simplement.


Pour lancer le Docker, on met les instances qu’on souhaite, je teste avec les 2 que j’ai. J’ai mis les IP:port mais on peut mettre une URL sans le backslash de fin

services:
  radarr:
    image: ghcr.io/thijmengthn/swaparr:latest
    container_name: swaparr-radarr
    restart: unless-stopped
    environment:
      - BASEURL=http://192.168.0.163:7878
      - APIKEY=xxx        
      - PLATFORM=radarr
      - MAX_STRIKES=3
      - SCAN_INTERVAL=10m
      - MAX_DOWNLOAD_TIME=
      - IGNORE_ABOVE_SIZE=25GB
      - REMOVE_FROM_CLIENT=true
      - DRY_RUN=false
  sonarr:
    image: ghcr.io/thijmengthn/swaparr:latest
    container_name: swaparr-sonarr
    restart: unless-stopped
    environment:
      - BASEURL=http://192.168.0.163:8989
      - APIKEY=xxx         
      - PLATFORM=sonarr
      - MAX_STRIKES=3
      - SCAN_INTERVAL=10m  
      - MAX_DOWNLOAD_TIME=2h  
      - IGNORE_ABOVE_SIZE=25GB
      - REMOVE_FROM_CLIENT=true
      - DRY_RUN=false

J’ai tout laissé par défaut mais on peut régler les variables

NameDefaultDescription
BASEURLhttp://127.0.0.1:7878The URL of a radarr, sonarr or other starr instance.
APIKEY7f3a8..cbc07The API key of a radarr, sonarr or other starr instance.
PLATFORMradarrIndicates the type of starr platform, either radarr, sonarr, lidarr, readarr or whisparr.
MAX_STRIKES3Maximum number of strikes a download can accumulate before it is removed.
SCAN_INTERVAL10mHow often Swaparr checks for stalled downloads.
MAX_DOWNLOAD_TIME2hMaximum allowed download time before it’s considered stalled.
IGNORE_ABOVE_SIZE25GBFiles larger than this size will be ignored and not monitored.
REMOVE_FROM_CLIENTtrueRemove from both queue and download client (default) OR false only the queue of a starr instance.
DRY_RUNfalseSandbox mode; try Swaparr without it performing destructive actions on your instances.

Swaparr gère les clients de téléchargement BitTorrent liés aux *arrs, toute les 10 minutes avec cette configuration.
Et l’instance *arr pourra donc aller chercher un autre .torrent

aerya@StreamBox:~$ sudo docker logs swaparr-radarr

 ── Swaparr ───── 

╭─╮ Platform: radarr
│ │ Max strikes: 3
│ │ Scan interval: 10m
│ │ Max download time: 2h
│ │ Ignore above size: 25GB
╰─╯ Remove from client: true

╭─╮ Be part of Swaparr's journey ⭐ Star us on GitHub!
╰─╯ Your support strengthens the open-source community.

 ──────────────── 


╭──────────────────────────────────────────────────────────────────────────╮
│                            No downloads found                            │
╰──────────────────────────────────────────────────────────────────────────╯

 ─ Checking again in 10m..


╭──────────────────────────────────────────────────────────────────────────╮
│                            No downloads found                            │
╰──────────────────────────────────────────────────────────────────────────╯

 ─ Checking again in 10m..


╭──────────────────────────────────────────────────────────────────────────╮
│                            No downloads found                            │
╰──────────────────────────────────────────────────────────────────────────╯

 ─ Checking again in 10m..

Loading

  •  

SeasonArr : remplacer des épisodes manquants dans Sonarr par des packs de saisons

Sonarr est conçu pour chercher automatiquement des épisodes et non des packs. Il peut arriver qu’il manque au moins 1 épisode de saison et c’est… pénible de devoir aller chercher ça à la main.
d3v1l1989 a créé SeasonArr qui règle ce problème en permettant de chercher un pack de saison puis remplacer les épisodes déjà télécharger. Cet outil, en 1 clic, remplace la recherche interactive de Sonarr.

Mon setup *arrs/Plex étant tout frais, pour ces séries d’articles, il ne me manque rien en dehors d’épisodes non parus en MULTi/VF donc mes screen ne seront pas révélateurs. « pas de bol »

Il faut préalablement créer une clé JWT soit en console si nodejs est installé (sudo apt install nodejs) soit via ce site par exemple.

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Le Docker

services:
  seasonarr:
    image: ghcr.io/d3v1l1989/seasonarr:latest
    container_name: seasonarr
    restart: unless-stopped
    hostname: seasonarr
    ports:
      - 3027:8000
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - DATABASE_URL=sqlite:///./data/seasonarr.db
      - JWT_SECRET_KEY=032cb57bd9a0ed97c62a46518aaa3cf2ba9d256da92e17e75e75d282ad5cda87
    volumes:
      - /home/aerya/docker/seasonarr:/app/data
      - /etc/localtime:/etc/localtime:ro


Une fois le compte créé on peut lier une ou plusieurs instances Sonarr


seasonarr1

Seasonarr indexe alors les séries et on peut lister celles où il manque des épisodes. Comme indiqué plus haut, mon exemple n’est pas révélateur puisqu’il me manque seulement ces 2 épisodes qui existent en VOSTFR mais non en MULTi/VF comme je les veux.

seasonarr2

Mais si pour une série il manque des épisodes dans des saisons « parues », on peut alors cliquer sur Season It! et Seasonarr se servira des indexeurs de l’instance Sonarr pour aller chercher des packs complets et remplacer tous les épisodes individuels complétés et manquant pour les saisons sélectionnées.
On peut le faire par saison ou pour la série complète.

seasonarr3

Il n’y a pas d’automatisation du process vu que ce n’est à faire qu’une fois de temps en temps, en théorie.
Les options sont sommaires mais suffisantes.

seasonarr4

Je viens de faire le test avec Got, je n’ai pas demandé à Sonarr de chercher les épisodes pour passer directement par Seasonarr

seasonarr11

Après avoir cliqué sur Season It! (global, pas apr saison), Sonarr s’est bien mis en recherche

seasonarr12

Et ça a suivi

seasonarr13

Loading

  •