Vue normale

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

Par : Aerya
14 septembre 2025 à 16:05

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

Jellyfin : collections automatiques personnalisées

Par : Aerya
14 septembre 2025 à 14:50

Si Jellyfin peut créer en standard des collections de films et qu’on peut en constituer d’autres via des listes, je voulais un outil pour en faire selon mes goûts, avec mon contenu disponible, voire qu’elles rassemblent films et séries.

J’ai d’abord trouvé et testé Smart Collections de johnpc et je suis tombé sur son évolution Auto Collections par KeksBomb.

C’est une tuerie !

Ce que faisait le plugin original

Le plugin original de johnpc permettait aux utilisateurs de :

  • Créer des collections basées sur les tags appliqués aux films et séries
  • Mettre à jour automatiquement les collections lorsque des éléments étaient tagués ou détagués
  • Configurer des noms de collections personnalisés pour chaque tag

Ce que fait cette version améliorée

Ce fork étend les fonctionnalités originales avec :

  • Deux modes de collections :
    • Collections simples : mise en place rapide avec un filtrage par critère unique
    • Collections avancées : filtrage complexe avec des expressions logiques booléennes
  • Multiples méthodes de correspondance : associer du contenu par titre, studio, genre, acteur, réalisateur, tags, et plus encore
  • Filtrage par type de média : limiter les collections aux films uniquement, aux séries uniquement, ou aux deux
  • Support des expressions avancées : créer des collections complexes avec des expressions booléennes (AND, OR, NOT)
  • Options de filtrage enrichies :
    • Filtrer par métadonnées du contenu (titre, genre, studio, acteur, réalisateur, tags)
    • Filtrer par évaluations (contrôle parental, notes de la communauté, notes de la critique)
    • Filtrer par lieux/pays de production
    • Filtrer par langue audio et langue des sous-titres
    • Filtrer par note personnalisée définie par l’utilisateur (champ CustomRating de Jellyfin)
  • Logique booléenne : combiner plusieurs critères avec les opérateurs AND, OR, NOT et des regroupements par parenthèses
  • Import/Export : sauvegarder et restaurer facilement les configurations de collections au format JSON
  • Contrôle de la casse : choisir si la correspondance doit être sensible à la casse ou non
  • Synchronisation planifiée : les collections se mettent automatiquement à jour selon un calendrier

Je passe sur l’installation du plugin, un B-A-BA de Jellyfin.

La configuration, en anglais, n’est pas compliqué. Y’a quelques exemples par défaut donc attendez-vous à devoir supprimer des collections si vous cliquez sur Sync avant de modifier la configuration.

Exemple concret : en me créant une collection de contenus dont le titre ou le studio est « Marvel », ça me liste bien films et séries disponibles dans la même collection.

collections2
collections3
collections4

On peut laisser libre cours à ses envies et préférences

collections5
collections6
collections7
collections8

Petit aparté : si vous n’avez pas peur d’ajouter plein de téléchargements à vos *arrs, vous pouvez jeter un œil à Auto Collections de ghomasHudson qui permet de créer des collections à partir de listes IMDB, TMDB, Trakt, MDBlist, Criterion, StevenLu etc. Testé, 987 films ajoutés à Radarr d’un coup. S’il pouvait communiquer, je suis certain qu’il aurait crié !

Loading

Plugins de IAmParadox27, une expérience Jellyfin augmentée

Par : Aerya
14 septembre 2025 à 09:41


Pour une page d’accueil Web (pas ATV) Jellyfin revisitée :

  • Proposition de contenu aléatoire en lecture directe
  • Découverte de films et séries et ajout en 1 clic à Jellyseerr
  • À suivre (prochain épisode de série à lire)
  • Derniers films et séries « parues » (aired ou released)
  • Continuer de regarder (épisode ou film en cours)
    Parce que j’ai regardé XXX, suggestion de contenus (disponibles)
  • Derniers films et séries ajoutés à Jellyfin

Il n’est malheureusement pas possible de modder l’application AndroidTV mais pour avoir testé depuis un PC sur vidéoprojecteur, ça claque !

enhanced1
enhanced2
enhanced3
enhanced4

ça s’installe très simplement avec les plugins de IAmParadox27, plus précisément
https://github.com/IAmParadox27/jellyfin-plugin-file-transformation
https://github.com/IAmParadox27/jellyfin-plugin-home-sections
https://github.com/IAmParadox27/jellyfin-plugin-media-bar

Pour HomeSection il faut ensuite aller configurer Jellyseerr et ses bibliothèques

enhanced5

Un + apparait en mouse overlay sur les affiches des sections Discover et permet d’ajouter le contenu à Jellyseerr

enhanced6
enhanced7
enhanced8

Aphrodite ne tournant que toutes les heures, les overlays viendront après.

Loading

JellyStat : statistiques de lecture et contenus

Par : Aerya
14 septembre 2025 à 09:02

Petit utilitaire sympathique, même quand le serveur est personnel.

JellyStat de CyferShepard permet d’obtenir diverses statistiques de son serveur Jellyfin : taille des bibliothèques, contenus ajoutés, contenus lus, activité des utilisateurs…
Mon serveur étant tout récent, mes screens révèlent très peu de stats pour l’instant ^^

jellystat1
jellystat2
jellystat3
jellystat4

Le compose officiel est sur GitHub.
Je me suis fait une version modifiée avec .env et healthcheck notamment.

services:
  jellystat-db:
    image: postgres:15.2
    container_name: jellystat-db
    restart: always
    shm_size: 1gb
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mypassword}
      POSTGRES_DB: ${POSTGRES_DB:-jellystat}
      TZ: ${TZ:-Europe/Paris}
    volumes:
      - /mnt/user/appdata/jellystat/postgres-data:/var/lib/postgresql/data
    logging:
      driver: json-file
      options:
        max-file: "5"
        max-size: 10m
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-jellystat}
          -h 127.0.0.1
      interval: 10s
      timeout: 5s
      retries: 5
  jellystat:
    image: cyfershepard/jellystat:latest
    container_name: jellystat
    restart: always
    depends_on:
      jellystat-db:
        condition: service_healthy
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mypassword}
      POSTGRES_IP: jellystat-db
      POSTGRES_PORT: ${POSTGRES_PORT:-5432}
      POSTGRES_DB: ${POSTGRES_DB:-jellystat}
      JWT_SECRET: ${JWT_SECRET:-change-me-please}
      TZ: ${TZ:-Europe/Paris}
    volumes:
      - /mnt/user/appdata/jellystat/data:/app/backend/backup-data
    ports:
      - 3167:3000
    labels:
      - com.centurylinklabs.watchtower.enable=true
    logging:
      driver: json-file
      options:
        max-file: "5"
        max-size: 10m

POSTGRES_USER=postgres
POSTGRES_PASSWORD=GqQlcX8pt0vdq84fbguHSyQHKUp4Qs
POSTGRES_DB=jellystat
POSTGRES_PORT=5432
JWT_SECRET=f019bc29232cdbde0664c44394dd4ee8e88df133081e76a7f520767f8ac29c95
TZ=Europe/Paris


Le JWT_SECRET s’obtient avec

openssl rand -hex 32


On le configure ensuite via la WebUI

jellystat5
jellystat6
jellystat7

Loading

Booster la recherche sous Jellyfin avec Meilisearch

Par : Aerya
14 septembre 2025 à 08:17

La recherche de Jellyfin fonctionne bien mais on peut la booster en termes de vitesse et de precision. Par exemple utile quand on commence à indexer des 100aines de To de contenus ou qu’on fait des fautes dans les noms de contenus, acteurs etc.

Meilisearch est un moteur de recherche ultra-rapide qui s’intègre sans effort dans des applications, sites Web et flux de travail.

Pour le coupler à Jellyfin il existe le projet JellySearch mais là je présente l’installation séparée de Meilisearch et l’utilisation du plugin d’arnesacnussem.


Pour commencer il faut installer Meilisearch. La master_key est une clé à définir soi-même.

services:
  meilisearch:
    image: getmeili/meilisearch:latest
    container_name: jellyfin-meilisearch 
    restart: always
    stdin_open: true
    tty: true
    ports:
      - 7700:7700
    environment:
      - MEILI_MASTER_KEY=xpQvJwcLTxsdnx0P7oJMZ1f3LwIUcF
    volumes:
      - /home/aerya/docker/jellyfin-meilisearch:/meili_data
    labels:
      - com.centurylinklabs.watchtower.enable=true

On se rend ensuite sur la WebUI pour y entre la master_key en confirmation d’installation

jellyfin meilisearch1

Puis on installe le plugin sous Jellyfin

https://raw.githubusercontent.com/arnesacnussem/jellyfin-plugin-meilisearch/refs/heads/master/manifest.json

Après reboot on peut le configurer avec l’URL de Meilisearch, la master_key. Tout en haut, cliquer sur Connect et s’assurer que meilisearchOk passe bien en true, ce qui confirme la bonne connexion.

jellyfin meilisearch2

Et on utilise la recherche classique de Jellyfin, qui est plus complète et rapide.

Loading

❌