Vue normale

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

Par : Aerya
14 septembre 2025 à 18: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

[DIY] Fabriquer une matrice LED pour 5€ 🚨

J'ai découvert la chaîne Ypsol au travers d'une vidéo de fabrication d'une jolie matrice LED 7 x 7, imprimée en 3D et utilisant WLED.

Si vous aimez la chaine des Frères Poulain et Abrège alors vous aimerez Ypsol :

Ne vous fiez pas aux moins de 20k abonnés, le contenu est très propre, bien monté et détaillé, rendant le tout très accessible pour les débutants.

Pas convaincu ? voici une autre création :

Sympa non ? 😎

Vous n'aimez pas le RSS : abonnez-vous par email 📥
Vous devriez me suivre sur Twitter : @xhark

Article original écrit par Mr Xhark publié sur Blogmotion le 13/09/2025 | Pas de commentaire |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

Cet article [DIY] Fabriquer une matrice LED pour 5€ 🚨 provient de : on Blogmotion.

Un nouveau souffle pour vos jaquettes : Aura et MediUX au service de Plex, Emby et Jellyfin

Par : Aerya
11 septembre 2025 à 17:48

Je zyeute MediUX depuis très longtemps mais le côté « Faut parcourir le site, télécharger le .zip, l’importer dans mon lecteur, l’appliquer » m’avait clairement rebuté dès les… 52 premières secondes.

L’équipe derrière MediUX propose l’outil Aura, encore en early stage donc on utilise tous une unique clé API de « test », qui permet de parcourir les sets liés à ses bibliothèques via une WebUI.

Ne reste qu’à choisir un set et l’appliquer de suite via un clic ou le prévoir pour une mise à jour automatique en cron. Et on peut en plus lui indiquer de surveiller les MàJ du set sélectionné pour les appliquer.

Si on peut l’intégrer à Kometa, en revanche pour Aphrodite il faut bien veiller à faire mouliner Aura puis ensuite Aphrodite pour les overlays. Comme vous le verrez plus bas, Aura se lance à minuit chaque jour alors qu’Aphrodite est lancé chaque heure. Au pire, il n’y a plus aucun overlay entre minuit et 1h du matin, « pas grave ».

Cet outil se destine aux amateurs de beaux visuels et de personnalisation.
Malgré un maximum d’automatisation, rien ne pourra remplacer l’action de parcourir ses contenus et,
pour chaque, de parcourir à leur tour les embellissements disponibles pour ensuite les appliquer.

Merci TiMac pour la belle découverte !

demo movie

🧩 Compatibilité multi-serveurs : fonctionne avec Plex, Emby et Jellyfin.

🖼 Navigation visuelle : prévisualisez les visuels dans une interface claire et organisée.

🔁 Mises à jour automatiques : enregistrez les ensembles d’images choisis et gardez-les synchronisés automatiquement.

🗄 Stockage local : possibilité d’enregistrer les images à côté de vos fichiers multimédias pour un accès facile.

📦 Support Docker : déploiement simple avec Docker ou docker-compose.

Le docker-compose est à récupérer localement et on peut l’éditer rapidement pour l’adapter

services:
  aura:
    image: ghcr.io/mediux-team/aura:latest
    container_name: aura
    restart: always
    ports:
      - 3064:3000 # Web UI PORT
      - 8888:8888 # API PORT
    volumes:
      - /home/aerya/docker/aura:/config
      - /mnt/Bibliothèques/:/data/media
    labels:
      - com.centurylinklabs.watchtower.enable=true


Avant de le lancer il convient de faire de même avec le fichier de configuration. Son remplissage est déterminant pour le fonctionnement d’Aura. Les paramètres ne sont en effet pour l’instant accessibles qu’en lecture seule via l’interface.
Vous pouvez vous aider de la documentation mais c’est pas compliqué.

Voici le mien pour Jellyfin, avec 2 bibliothèques, SANS authentification (derrière Authelia chez moi), avec notifications Discord. Si vous voulez utiliser un mot de passe, il devra être hashé.
Il faudra une clé API Jellyfin (ou un token Plex) et une clé API (pas le token) TMDB.
Le cron servira pour la MàJ auto (si sélectionnée) des sets, on voit ça plus bas.

# Configuration Sample - aura
# For full documentation, see: https://mediux-team.github.io/AURA/config

# This file should be located in /config on the docker container

# Auth - Configuration for authentication
# This is used to configure the authentication for the application.
#   Enable - Whether to enable authentication or not.
#   Password - The Argon2id hashed password for the user.
Auth:
    Enable: false
    Password: $argon2id$v=19$m=12,t=3,p=1$Z3k1YnkwZzh5OTAwMDAwMA$lJDoyKZy1BMifB1Mb2SWFQ
    
# CacheImages - Whether to cache images or not. Caching images can improve performance but will use more disk space.
CacheImages: true

# SaveImageNextToContent - Whether to save images next to the Media Server content or not.
#   If set to true, images will be saved in the same directory as the Media Server content.
#   If set to false, images will still be updated on the Media Server but will not be saved next to the content.
#   The benefit of this is that you have local images that are not dependent on the Media Server database in case of migration.
#   If you are using Emby or Jellyfin, this option being set does not matter. This is determined by Emby or Jellyfin.
#   If you are using Plex, this option will determine if the images are saved next to the content or not.
SaveImageNextToContent: false

# Logging - Configuration for logging
#   Level - The level of logging. Can be one of: TRACE, DEBUG, INFO, WARNING, ERROR
Logging:
    Level: DEBUG

# AutoDownload - Configuration for auto-downloading images
#   Enabled - Whether to enable auto-downloading of images or not.
#     You have the option when selecting a set to save it to the database.
#     This will look for updates to the set and download them automatically.
#   Cron - The cron schedule for auto-downloading images. This is a standard cron expression.
#     For example, "0 0 * * *" means every day at midnight
AutoDownload:
    Enabled: true
    Cron: "0 0 * * *"

# Notifications - Configuration for notifications
#   Enabled - Whether to enable notifications or not.
#   Providers - A list of notification providers to use. Currently supported providers are:
#     - Discord
#     - Pushover
# You can set multiple providers at the same time. aura will send notifications to all. You also have the option to enable each provider. This gives you flexability to turn off the ones that you don't want to use. 
# When provider is Discord, you must set the Webhook URL
# When provider is Pushover, you must set the Token and UserKey
# Sample: 
#   - Provider: "Pushover"
#     Enabled: true
#     Pushover:
#         Token: your_pushover_token
#         UserKey: your_pushover_user_key
#   - Provider: "Discord"
#     Enabled: true
#     Discord:
#         Webhook: your_discord_webhook_url
Notifications:
    Enabled: true
    Providers: 
      - Provider: "Discord"
        Enabled: true
        Discord:
            Webhook: "https://canary.discord.com/api/webhooks/xxx"
      - Provider: "Pushover"
        Enabled: false
        Pushover:
            Token: your_pushover_api_token
            UserKey: your_pushover_user_key

# MediaServer - Configuration for your Media Server
#   Type - The type of Media Server. This can be one of: Plex, Jellyfin, Emby
#   URL - The URL of the Media Server. This should be the IP:Port of the Media Server or your Media Server reverse proxy domain.
#   Token - The token for the Media Server. This can be found in the Media Server web interface.
#   Libraries - A list of libraries to scan for images. Each library should have the following fields:
#     - Name: The name of the library to scan for content. Please note that this application will only work on Movies and Series libraries.
#   SeasonNamingConvention - The season naming convention for Plex. This is a Plex exclusive requirement. This can be one of: 1 or 2. This will default to 2
#     1 - Season 1  (non-padded)
#     2 - Season 01 (padded)
MediaServer:
    Type: "Jellyfin" # The type of Media Server. This can be one of: Plex, Jellyfin, Emby
    URL: https://jelly.domaine.tld:443
    Token: xxx
    Libraries:
        - Name: "Films"
        - Name: "Séries"
#        - Name: "4K Movies"
#        - Name: "4K Series"
#    SeasonNamingConvention: 1 # This is a Plex exclusive requirement. This is the season naming convention for Plex. This can be one of: 1 or 2

# Kometa - Configuration for Kometa
#   RemoveLabels - Whether to remove labels or not. This will remove all specific labels from the Media Server Item.
#   Labels - A list of labels to add to the Media Server Item. This will be used to identify the item in the Media Server.
#   This is also a Plex exclusive requirement. This will only work on Plex.
Kometa:
    RemoveLabels: false
    Labels:
        - "Overlay"


# TMDB - Configuration for TMDB (The Movie Database) This is not used yet.
#   ApiKey - The API key for TMDB. This can be obtained by creating an account on TMDB and generating an API key.
TMDB:
    ApiKey: xxx

# Mediux - Configuration for Mediux
#   Token - The token for Mediux. This can be obtained by creating an account on Mediux and generating a static token.
# !!!! NOTE: This is not yet available to the public. It is currently in development and will be available in the future.
#       If you would like to test this app, you will need a MedUX. You can contact us on Discord to get access.
#   DownloadQuality: The quality of the images to download. Options are: "original" or "optimized"
Mediux:
    Token: N_l1upAQrVJ05J6Fwjz89HEoo348l1u-
    DownloadQuality: "optimized"

Une fois lancé ça indexe nos contenus globaux ou par bibliothèque, avec un minimum de tri. Et ça ffiche les posters actuels. Aphrodite n’est pas encore passé mettre des overlays.

aura2

De là on peut sélectionner 1 film ou 1 série et parcourir les sets MediUX tout en visualisant le poster actuel. En l’occurrence, pour Carnivàle j’ai le choix entre 3 sets. C’est pas foufou MAIS des gens ont pris le temps de les réaliser et partager sur MediUX alors merci à eux.

aura3
aura4

Aura indique si c’est ou non déjà en base de données

aura5

Tout est expliqué et détaillé dans la documentation (en anglais, mais on est en 2025, donc go les d’jeuns ! – je suis de 73- ).

La sélection d’un set de série offre plusieurs choix :
– Poster : l’affiche de la série
– Backdrop : l’image d’arrière plan si vous avez activé l’option dans Plex/.Jellyfin
– Season poster : les affiches des saisons
– Auto DL : vérifiera périodiquement les nouvelles mises à jour de cet ensemble. C’est utile si vous souhaitez télécharger et appliquer automatiquement les nouvelles titlecards ajoutées lors de futures mises à jour de cet ensemble. C’est à ça que cert le cron entré dans la configuration.

  • – Future updates ONLY : ne téléchargera rien pour le moment. C’est utile si vous avez déjà téléchargé l’ensemble et que vous souhaitez uniquement appliquer les mises à jour futures. Par exemple uniquement 1x par jour.

    Notez qu’il n’y a pas toujours de backdrop de proposé.
aura6
aura7

Et je constate la mise à jour dans la foulée sur Jellyfin

aura8

On peut parcourir les sets proposés par un utilisateur par rapport à nos contenus indexés par Aura, pratique si on apprécie son travail et qu’on veut en profiter pour d’autres séries ou films.

aura9

Il y a une option Kometa, pour conserver ou non les overlays après la MàJ d’une affiche. Je n’ai pas testé.
On peut déjà utiliser des sets MediUX via Kometa mais ça semble vraiment fastidieux. Aura est encore tout jeune mais il y a fort à parier qu’il y aura une bonne intégration à/de Kometa dans le futur.

Loading

Aphrodite – Sublimez vos affiches pour Jellyfin (et Emby ?)

Par : Aerya
10 septembre 2025 à 13:04

Ok, pour Emby je pose la question vu qu’ils ont la même origine.

J’utilise Kometa sur Plex et j’ai trouvé son pendant pour Jellyfin avec Aphrodite de jackkerouac. Enfin en mieux, selon moi, plus configurable et en WebUI.

Pour nos bibliothèques Jellyfin on peut tout simplement changer les affiches (bases), configurer et ajouter tout ou au choix la résolution, l’audio, les notes et les récompenses.

Avec la totale, ça peut donner ceci.

aphrodite20
aphrodite preview 1757492972706
aphrodite preview 1757493205061


Ça ne fonctionne évidemment pas sur les affiches des collections vu que ces badges concernent une vidéo donnée.

aphrodite21

Pour répondre à nos besoins, sommaires vu que je connais mes règles Radarr/Sonarr, je n’affiche que les notes et récompenses.

aphrodite23


Via la WebUI on peut planifier des opérations (cron) pour appliquer tout ou partie des badges sur les bibliothèques sélectionnées. En reprenant ou non les éléments déjà traités.
En revanche, pour la modification des affiches, c’est à faire manuellement, par grappes de 50 (ouais, léger…).

L’installation est relativement simple, j’ai cependant rencontré pas mal de soucis en ne configurant que via la WebUI pour Jellyfin. J’ai tout décommenté/renseigné dans le .env et ça roule.

Comme indiqué sur le GitHub, il faut télécharger le compose et son .env. Je mets ça dans /home/aerya/docker/aphrodite

# Créer le dossier entrer dedans
mkdir /home/aerya/docker/aphrodite && cd /home/aerya/docker/aphrodite

# Télécharger le docker-compose et le .env
curl -L https://github.com/jackkerouac/aphrodite/releases/latest/download/docker-compose.yml -o docker-compose.yml
curl -L https://github.com/jackkerouac/aphrodite/releases/latest/download/default.env.example -o .env


Et on passe à l’édition du compose.
Par rapport au compose de base, j’ai juste modifié les volumes sur la base de /home/aerya/docker/aphrodite/…

Mis en always pour « restart » et ajouté la MàJ auto d’Aphrodite avec watchtower. Pas la peine pour Postgre et Redis vu que ça va chercher des versions précises.
Tout le reste se modifie dans .env qui suit

services:
  postgres:
    image: postgres:15-alpine
    container_name: aphrodite-postgres
    restart: always
    ports:
      - ${POSTGRES_PORT:-5433}:5432
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-aphrodite}
      POSTGRES_USER: ${POSTGRES_USER:-aphrodite}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-aphrodite123}
    volumes:
      - /home/aerya/docker/aphrodite/postgres_data:/var/lib/postgresql/data
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U ${POSTGRES_USER:-aphrodite}
      interval: 10s
      timeout: 10s
      retries: 5
  redis:
    image: redis:7-alpine
    container_name: aphrodite-redis
    restart: always
    ports:
      - ${REDIS_PORT:-6379}:6379
    volumes:
      - /home/aerya/docker/aphrodite/redis_data:/data
    healthcheck:
      test:
        - CMD
        - redis-cli
        - ping
      interval: 10s
      timeout: 10s
      retries: 5
  aphrodite:
    image: ${APHRODITE_IMAGE:-ghcr.io/jackkerouac/aphrodite:latest}
    container_name: aphrodite
    pull_policy: always
    restart: always
    environment:
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB:-aphrodite}
      POSTGRES_USER: ${POSTGRES_USER:-aphrodite}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-aphrodite123}
      DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://aphrodite:aphrodite123@postgres:5432/aphrodite}
      REDIS_URL: ${REDIS_URL:-redis://redis:6379/0}
      API_HOST: ${API_HOST:-0.0.0.0}
      API_PORT: ${API_PORT:-8000}
      ENVIRONMENT: ${ENVIRONMENT:-production}
      SECRET_KEY: ${SECRET_KEY:-please-change-this-secret-key-in-production}
      ALLOWED_HOSTS: ${ALLOWED_HOSTS:-*}
      CORS_ORIGINS: ${CORS_ORIGINS:-*}
      LOG_LEVEL: ${LOG_LEVEL:-info}
      LOG_FILE_PATH: ${LOG_FILE_PATH:-/app/logs/aphrodite-v2.log}
      DEBUG: ${DEBUG:-false}
      CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://redis:6379/0}
      CELERY_RESULT_BACKEND: ${CELERY_RESULT_BACKEND:-redis://redis:6379/1}
      ENABLE_BACKGROUND_JOBS: ${ENABLE_BACKGROUND_JOBS:-true}
      JELLYFIN_URL: ${JELLYFIN_URL:-}
      JELLYFIN_API_KEY: ${JELLYFIN_API_KEY:-}
      JELLYFIN_USER_ID: ${JELLYFIN_USER_ID:-}
    ports:
      - ${APHRODITE_PORT:-8000}:8000
    volumes:
      - /home/aerya/docker/aphrodite/aphrodite_data:/app/data
      - /home/aerya/docker/aphrodite/aphrodite_logs:/app/logs
      - /home/aerya/docker/aphrodite/aphrodite_media:/app/media
      - /home/aerya/docker/aphrodite/aphrodite_static:/app/api/static/originals
    labels:
      - com.centurylinklabs.watchtower.enable=true
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    healthcheck:
      test:
        - CMD
        - curl
        - -f
        - http://localhost:8000/health/live
      interval: 10s
      timeout: 10s
      retries: 5
      start_period: 40s
  aphrodite-worker:
    image: ${APHRODITE_IMAGE:-ghcr.io/jackkerouac/aphrodite:latest}
    container_name: aphrodite-worker
    pull_policy: always
    restart: always
    command:
      - python3
      - -m
      - celery
      - -A
      - celery_app
      - worker
      - --loglevel=debug
      - --pool=solo
      - --concurrency=1
    environment:
      POSTGRES_HOST: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB:-aphrodite}
      POSTGRES_USER: ${POSTGRES_USER:-aphrodite}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-aphrodite123}
      DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://aphrodite:aphrodite123@postgres:5432/aphrodite}
      REDIS_URL: ${REDIS_URL:-redis://redis:6379/0}
      CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://redis:6379/0}
      CELERY_RESULT_BACKEND: ${CELERY_RESULT_BACKEND:-redis://redis:6379/1}
      ENVIRONMENT: ${ENVIRONMENT:-production}
      SECRET_KEY: ${SECRET_KEY:-please-change-this-secret-key-in-production}
      LOG_LEVEL: ${LOG_LEVEL:-info}
      LOG_FILE_PATH: ${LOG_FILE_PATH:-/app/logs/aphrodite-v2.log}
      PYTHONPATH: /app
    volumes:
      - /home/aerya/docker/aphrodite/aphrodite_data:/app/data
      - /home/aerya/docker/aphrodite/aphrodite_logs:/app/logs
      - /home/aerya/docker/aphrodite/aphrodite_media:/app/media
      - /home/aerya/docker/aphrodite/aphrodite_static:/app/api/static/originals
    labels:
      - com.centurylinklabs.watchtower.enable=true
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    working_dir: /app/api
    healthcheck:
      test:
        - CMD
        - python3
        - -c
        - import sys; sys.path.insert(0, '/app'); from celery_app import
          celery_app; print('Worker healthy')
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
networks:
  default:
    name: aphrodite_network


Et le fameux .env. Comme expliqué plus haut, après plusieurs tests, il faut y paramétrer le serveur Jellyfin et également décommenter les informations liées à Postgre et Redis. J’ai passé les logs en DEBUG vu les soucis que je rencontrais au début.

Pour créer la SECRET_KEY : (en console) openssl rand -hex 64

Et ne pas oublier de mettre le mot de passe POSTGRES_PASSWORD dans la partie DATABASE_URL
Créer une clé API dans Jellyfin via le menu tout en bas du Tableau de bord

Et récupérer l’ID utilisateur qui sera utilisée pour connecter Aphrodite. Dans Tableau de bord/Utilisateurs, cliquer sur le user et l’ID est à la fin de l’URL

# =============================================================================
# Docker Image Configuration
# =============================================================================
# Leave blank to always pull the latest version from GitHub Container Registry
# APHRODITE_IMAGE=ghcr.io/jackkerouac/aphrodite:latest

# =============================================================================
# Database Configuration
# =============================================================================
# IMPORTANT: Change POSTGRES_PASSWORD to a secure password!
# This password will be used to create the database user
POSTGRES_DB=aphrodite
POSTGRES_USER=aphrodite
POSTGRES_PASSWORD=motdepassedelamortquitue
POSTGRES_PORT=5432

# =============================================================================
# Redis Configuration
# =============================================================================
REDIS_PORT=6379

# =============================================================================
# Security Configuration (REQUIRED)
# =============================================================================
SECRET_KEY=4c887cda6e10bac46eb61a961e38f4626609c9caeca08123ed1d6d876c6b14c20a11118cec534f26d5d5de4f5b6935fa07ff8887b91322058c20f95705025fa0
# =============================================================================
# Application Configuration
# =============================================================================
# Port to run Aphrodite on (default: 8000)
APHRODITE_PORT=8000

# API Configuration
API_HOST=0.0.0.0
API_PORT=8000

# Environment
ENVIRONMENT=production

# Logging level (debug, info, warning, error)
LOG_LEVEL=debug
DEBUG=true

# Network Configuration
ALLOWED_HOSTS=*
CORS_ORIGINS=*

# =============================================================================
# Background Jobs Configuration
# =============================================================================
ENABLE_BACKGROUND_JOBS=true
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/1

# =============================================================================
# Database & Redis URLs (Advanced - Override defaults if needed)
# =============================================================================
DATABASE_URL=postgresql+asyncpg://aphrodite:motdepassedelamortquitue@postgres:5432/aphrodite
REDIS_URL=redis://redis:6379/0

# =============================================================================
# Jellyfin Integration (Optional - Configure via Web Interface)
# =============================================================================
# You can set these here or configure them in the web interface
JELLYFIN_URL=https://jelly.domaine.tld
JELLYFIN_API_KEY=xxx
JELLYFIN_USER_ID=xxx


On peut ensuite lancer la Docker et aller visiter les paramètres d’Aphrodite. Mon screen date de ma 1ère installation aussi je ne sais plus si les paramètres de Jellyfin sont déjà remplis par le biais du .env

Il faut aller récupérer (ou créer) ses clés API :
OMDB : version gratuite, clé dans le mail qu’on reçoit suite à l’inscription
TMDB : le token, pas la clé
MDBList : en bas de page
AniDB si vous avez des mangas : j’ai pas regardé plus que ça pour créer une clé API

aphrodite2

C’est par ailleurs dans cette partie qu’on peut configurer les badges à mettre en overlay sur les affiches. Je ne rentre pas dans les détails, il y a tellement de personnalisation possible que c’est propre à chacun.
Aphrodite étant tout jeune, les notes ne sont pour l’instant disponibles qu’à partir d’IMDb, Metacritic, MyAnimeList, Rotten Tomatoes et TMDb. C’est déjà pas mal même si je suis impatient de voir Trakt arriver. TMDb et Trakt.tv ont maintenant un nombre d’utilisateurs suffisant pour avoir plusieurs centaines de votes et les rendre qualitatifs.
Il n’y a évidemment pas AlloCiné, pardon pour ceux qui y bossent, mais c’est bien trop franco-nombriliste-français pour avoir une quelconque utilité dans la galaxie des *arrs et du streaming.


aphrodite4
aphrodite5
aphrodite6
aphrodite7
aphrodite8
aphrodite10
aphrodite11


Pour l’audio et la vidéo, Aphrodite peut détecter les données via l’analyse des fichiers. Faut évidemment avoir la machine qui le permet sans que ça prenne des heures.

aphrodite24
aphrodite25

On peut générer un aperçu de sa configuration via le menu Preview

aphrodite26

Avant d’aller plus loin, il faut prendre le temps de vérifier l’import des bibliothèques suite à la connexion avec Jellyfin, dans le menu Poster Manager.
C’est ballot, j’ai pas pensé à faire de screen avant de modifier mes affiches…

aphrodite29

Ici on peut modifier les affiches, par lots de 50 donc faut être patient… C’est sympa, ça change mais on ne peut pas faire de choix et, pour l’instant, il n’y a pas MediUX d’intégré. Mais le projet est jeune, ça a le temps de venir.

aphrodite30

C’est également dans ce menu qu’on peut lancer à la demande l’application des badges, toujours par lots de 50 affiches. Ça peut être intéressant pour tester ou s’occuper des bibliothèques spécifiques avec peu de contenus.

aphrodite31

Et ensuite passer aux choses sérieuses avec la mise en place de tâches (ou d’une seule, c’est selon) via les Schedules

aphrodite27

Après avoir testé plusieurs configurations, j’ai créé une tâche qui se répète toutes les heures pour mes 2 bibliothèques, pour les contenus non encore « badgés » et seulement les notes et récompenses, comme expliqué au début de mon article.

aphrodite28

On peut déclencher le travail directement, sans attendre la prochaine planification et mes bibliothèques passent d’affiches simples

aphrodite18

à des badgées selon mes préférences !
Il y a eu l’ajout de collections entre temps également, depuis Jellyfin.

aphrodite40

Au final ça tourne très bien, il y a presque trop de réglages possibles quand on est comme moi un éternel insatisfait ^^’

Aphrodite est encore jeune et en sus de l’utiliser je suivrai assurément ses évolutions !

Loading

#542 Peace Brb, disconnecting from the world for a day or two - Liens en vrac de sebsauvage

10 septembre 2025 à 10:18

Il y a quelques temps Navo avait utilisé le terme "quota social" dans une émission sur Youtube "Un bon moment".

Pour le reste, c'est exactement ça, quand il n'y a plus de crédit, ne me parle pas.

Après il existe quelques personnes d'exception (exceptionnelles ?) qui peuvent, sous une certaine réserve, entrer en communication malgré une absence total de crédit. Ce sont de sacrés funambule, franchement c'est pas simple, mais elles arrivent parfois à me "rattraper" et me ramener près d'elles sans me bousculer, sans me forcer.


Permalien

[Tutoriel] Clonezilla : sauvegardez votre PC (image)

Je connais et utilise Clonezilla depuis de nombreuses années, c'est un LiveCD puissant qui permet de faire une sauvegarde de votre ordinateur ou serveur vers un fichier image.

Il se positionne en alternative gratuite et open source à Acronis (anciennement True Image), AOMEI Backuper, Macrium Reflect, EaseUS Todo Backup, Veeam, etc.

Tutoriel en version texte

Florian d'IT-Connect nous propose un tutoriel d'utilisation de Clonezilla en français et c'est une bonne chose car il est vrai que le logiciel peut semble un peu austère pour les débutants (et pas que!).

Un bon complément libre à la solution UrBackup, merci Florian !

 

 

Vous n'aimez pas le RSS : abonnez-vous par email 📥
Vous devriez me suivre sur Twitter : @xhark

Article original écrit par Mr Xhark publié sur Blogmotion le 09/09/2025 | Pas de commentaire |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

Cet article [Tutoriel] Clonezilla : sauvegardez votre PC (image) provient de : on Blogmotion.

Porte-Parole du Parti socialiste et « en même temps » Global Data Protection Officer chez Palantir

6 septembre 2025 à 19:34

Le grand écart d'une avocate avec un soutien inconditionnel du parti

Le macronisme déteindrait-il ? Julie Martinez, porte-parole (bénévole) du Parti socialiste pour les questions d'IA est en même temps salariée de Palantir, une société connue pour être l'une des pires en matière de gestion des données personnelles. Qui plus est, Palantir multiplie les alliances avec l'exécutif américain. Peut-on faire cohabiter trumpisme, libertarianisme, extrême droite et PS ? Oui...

Pavilion Palantir au World Economic Forum de Davos - Cory Doctorow - CC BY-SA 2.0

C'est un discret post sur Bluesky qui nous a mis la puce à l'oreille. L'Humanité à publié hier un article qui relate comment Julie Martinez, une jeune avocate de formation cumule deux rôle a priori antinomiques : porte parole du PS en charge de l'intelligence artificielle et Global Data Protection Officer chez Palantir.

Palantir, pour ceux qui ne connaissent pas, c'est un monstre né dans la foulée du 11 septembre. L'idée est de mettre l'informatique (aujourd'hui on dit l'IA parce que c'est le buzzword du moment) au service de la data. Partant du principe que l'on collecte de plus en plus de données, il faut réfléchir aux moyens permettant de la rendre utilisable, exploitable. En anglais, on dit la rendre actionable. Et ça marche. Palantir vient se connecter aux systèmes d'information de ses clients et mouline leurs données. Aux États-Unis, la donnée, y compris très personnelle est une marchandise comme une autre. Tout se vend, tout s'achète, tout se mouline, se recrache et se réinjecte.

Palantir est aussi connue pour une liste de controverses aussi longue qu'un jour sans pain. Elle a aidé la NSA pour ses programmes d'espionnage illégaux dénoncés par Snowden, un de ses salariés avait prêté main forte à Cambridge Analytica, qui avait influencé le Brexit ou la première élection de Trump avec des données personnelles de 87 millions d'utilisateurs « volées » sur Facebook. Elle est épinglée à de...

Jérôme Herbinet | FLOSS toots: "💡 Amis contributeurs d'#OpenSt…" - Mastodon Chapril - Liens en vrac de sebsauvage

3 septembre 2025 à 18:16

Rooooh, bah merci !

Avec cette couche LIDAR, cela me permet de reprendre les chemins dans une forêt où j'ai mes habitudes. J'ai beau passer plusieurs fois sur les mêmes traces, le relevé GPS subit parfois une déviation importante en raison du relief ou de la couverture de végétation.
Soit j'ai un décalage de quelques mètres selon un certain cap, parfois cela va être un lissage des différentes courbes/virages que je peux observer en réalité.

Il y a deux types de couche LIDAR : une au niveau du sol (c'est impressionnant d'ailleurs ! ), et une autre plutôt de surface. La première aide à identifier vraiment le terrain ; avec la seconde je vois surtout la cime des arbres.

Ça va être top ça pour affiner les contributions dans les zones où l'imagerie visible n'est pas suffisante. Je m'étais déjà aidé de la vue infrarouge, mais cela repère principalement la végétation. Cela peut donc aider pour identifier des arbres dans une zone avec une définition ou des couleurs ne permettant pas de les distinguer ; ou repérer des chemins entre les champs.


Permalien

1965-2025 : soixante ans d'inanités des politiques

3 septembre 2025 à 17:45

Votez pour eux et leur ego boursouflé ou subissez le chaos

À quoi servent les politiques ? A-t-on réellement besoin d'un conseil syndical pour gérer l'immeuble France ? Mais surtout, pourquoi continue-t-on d'élire les pires égotiques, gonflés de certitudes toutes plus fausses les unes que les autres ? Mystère et boule de gomme. En attendant, François Bayrou continue de vouloir faire croire que s'il perd le pouvoir, l'apocalypse s'abattra sur nous tous. Une belle inversion.

Les experts en économie qui gouvernent la France

Hiver 1965. Alors que la France s'apprête à élire pour la première fois au suffrage universel le président de la république, l'opposition résume le discours du général de Gaulle : « Moi ou le chaos ». Été 2025, François Bayrou annonce un vote de confiance à l'Assemblée pour le 8 septembre. Et ils estime que les députés devront faire un choix entre « le chaos et la responsabilité ». Entre les deux, combien de fois a-t-on entendu que sans eux, ces fabuleux politiques, le pays s'effondrerait, la crédibilité de la France sur le plan international serait réduite comme peau de chagrin ? A bien y regarder, c'est un peu une inversion accusatoire. Car le chaos, c'est eux.

Le général de Gaulle a bien joué un rôle essentiel pendant la deuxième guerre mondiale. Mais il est aussi l'homme dont le préfet de police Maurice Papon, un collaborateur condamné en 1998 à dix ans de réclusion criminelle pour complicité de crimes contre l'humanité, a supervisé le massacre du 17 octobre 1961. De Gaulle est aussi l'homme des meurtres de la station de métro Charonne. Le chaos, c'est l'assassinat des peuples par leurs dirigeants, sous prétexte de « maintenir l'ordre ». Le leur. Celui qui leur est favorable et celui qui est favorable à ceux qui les ont propulsés au pouvoir. Curieusement, il est assez probable qu'il y ait plus de citoyens tués par leurs dirigeants que l'inverse dans l'histoire humaine. Pourtant,...

MiniVid : indexage, lecture, tags et favoris pour vos vidéos locales

Par : Aerya
3 septembre 2025 à 00:57

Il y a quelque temps on m’a demandé si je connaissais un agrégateur et lecteur de vidéos auto-hébergé. Après avoir parlé des classiques Plex, Emby, Jellyfin, Kodi, j’ai compris que c’était comme prendre un tank pour aller chercher le pain… vu qu’il s’agissait d’avoir une interface de lecture de vidéos X.

Le fait est que je n’ai rien trouvé de probant, simple, assez récent, puis ça m’a saoulé. J’ai donc créé MiniVid, présenté ici et dont le code est publié sur GitHub !

Bien évidemment, ça s’adapte parfaitement à d’autres vidéos comme des clips, documentaires, téléchargements YouTube, Twitch etc.


MàJ du 05.09.25 : j’ai publié le Docker sur GitHub, y’a plus à build localement, vous pouvez utiliser ghcr.io/aerya/minivid:latest

MàJ du 08.09.25 : j’ai ajouté un script Windows-MiniVid.cmd
– Il installera si nécessaire Docker Desktop sur la machine,

  • – Guidage complet pour la configuration de MiniVid (édition complète disponible),
  • – Ajout de dossiers locaux comme distants (SMB/CIFS avec ou sans user:pwd).
minivid windows
minivid1
minivid4
minivid2
minivid3
📂 Navigation par dossiers
Accédez à vos vidéos avec une arborescence claire.

🔖 Tags automatiques extraits des noms de fichiers
Tags globaux par dossier
Tags individuels par fichier
Multi-sélection et recherche par tags
Blacklist configurable pour supprimer les mots inutiles (and, the, source, etc.)

🔍 Recherche avancée
Par nom de fichier
Par tags multiples
Par favoris
Par statut Lue / Non lue

🗂 Filtres et tris personnalisables
Nom
Taille
Date de modification
Statut Lues / Non lues

⭐ Favoris
Marquez vos vidéos d’un clic (★)
Accédez à la vue dédiée « Favoris »

🎥 Lecteur intégré (HTML5 natif)
Supporte mp4, webm et mkv (Chrome/Chromium)
Les fichiers non compatibles avec Firefox (.mkv, .avi, .flv, .m2ts) sont automatiquement basculés en remux/transcodage à la volée avec ffmpeg si activé

🖼 Miniatures automatiques
Générées avec ffmpeg
Capture par défaut à 5 secondes (pour éviter logos/intro)
Ajustable via variables (MINI_THUMB_OFFSET, MINI_THUMB_MAX)

📱 Interface responsive
Desktop, tablette et mobile

🌙 Mode clair / sombre
Bascule instantanée

🛠 Page Maintenance
Rescan complet de la bibliothèque
Purge des miniatures
Journal d’événements en direct (logs des actions)

⏱ Scan automatique
Toutes les heures par défaut
Intervalle configurable via MINI_SCAN_INTERVAL

🔐 Authentification optionnelle
Mode public ou mono-utilisateur avec identifiant/mot de passe

⚙ Configuration simple
Tout se règle via variables d’environnement dans votre docker-compose.yml

VariableValeur par défautDescription
MEDIA_DIRS(vide)Liste des dossiers vidéos (séparés par `
MEDIA_NAMESDossier 1, Dossier 2…Noms affichés pour chaque dossier (même ordre que MEDIA_DIRS)
MINI_ALLOWED_EXT.mp4,.webm,.mkv,.avi,.flv,.m2tsExtensions autorisées
MINI_BANNED_TAGS(vide)Liste de mots à ignorer lors de la génération de tags (and,the,source,…)
DATA_DIR/dataDossier de stockage interne (état, favoris, prefs)
THUMB_DIR/cache/thumbsDossier cache des miniatures
MINI_USER(vide)Identifiant de connexion (optionnel)
MINI_PASS(vide)Mot de passe de connexion (optionnel)
SECRET_KEY(aléatoire)Clé de session Flask (authentification)
MINI_PLAYBACKdirectMode lecture : direct, auto, remux
MINI_TRANSCODE0Autoriser le transcodage H.264/AAC (1 = oui, 0 = non)
MINI_FIREFOX_MKV_FALLBACK1Force le remux des .mkv dans Firefox
MINI_AUTOSCAN1Activer le rescan automatique (1 = oui)
MINI_SCAN_INTERVAL3600Intervalle entre scans auto (en secondes)
MINI_THUMB_OFFSET5Seconde du screenshot miniature
MINI_THUMB_MAX30Offset max (si vidéo longue)
MINI_FFPROBE_TIMEOUT10Timeout en secondes pour ffprobe/ffmpeg
API_READ_KEY(vide)Clé API (optionnelle) pour accès en lecture seule


Pour l’installation et la configuration, reportez-vous au dépôt GitHub.


Exemple de docker-compose.yml

services:
  minivid:
    image: ghcr.io/aerya/minivid:latest
    container_name: minivid
    restart: always
    environment:
      TZ: Europe/Paris
      MEDIA_DIRS: /videos1|/videos2|/videos3|/videos4|/videos5
      MEDIA_NAMES: ruTorrent|MeTube|Docs|Concerts|Tests formats vidéo
      DATA_DIR: /data
      THUMB_DIR: /cache/thumbs
      MINI_ALLOWED_EXT: .mp4,.webm,.mkv,.avi,.flv,.m2ts
      MINI_PLAYBACK	Mode de lecture : auto
      MINI_TRANSCODE: 1
      MINI_FIREFOX_MKV_FALLBACK: 1
      MINI_THUMB_OFFSET: 5
      MINI_THUMB_MAX: 30
      MINI_AUTOSCAN: 1
      # Auth (prises du .env ; si vide => pas d'auth)
      MINI_USER: ${MINI_USER}
      MINI_PASS: ${MINI_PASS}
      SECRET_KEY: 032cb57bd9a0ed97c62a46518aaa3cf2ka9d256da92e17e75e75d282ad5cda87
      # Liste noire tags (les mots de moins de 3 lettres sont automatiquement bannis)
      MINI_BANNED_TAGS:  >
        and,the,source,video,videos,vid,vids,film,movie,part,
        les,une,des,ils,elles,sur,sous,dans,par,pour,sans,avec,chez,
        cet,cette,ces,mon,mes,ton,tes,ses,notre,nos,votre,vos,leur,leurs,
        qui,que,quoi,dont,quand,comme,
        your,they,for,with,without,into,onto,about,this,that,these,those,
        here,there,then,than,are,was,being,been,have,had,just,only,
        over,under,very,more,most,less,were,com,net
    volumes:
      - /mnt/user/rutorrent-direct:/videos1:ro
      - /mnt/user/MeTube:/videos2:ro
      - /mnt/user/TEST/Docs:/videos3:ro
      - /mnt/user/TEST/Concerts:/videos4:ro
      - /mnt/user/TEST/Formats:/videos5:ro
      - /mnt/user/appdata/MiniVid/data:/data
      - /mnt/user/appdata/MiniVid/cache:/cache
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    ports:
      - "8080:8080"

  # Scan toutes les INTERVAL secondes
  minivid-scheduler:
    image: curlimages/curl:8.10.1
    container_name: minivid-scheduler
    depends_on:
      - minivid
    restart: always
    environment:
      APP_URL: ${APP_URL}
      MINI_USER: ${MINI_USER}
      MINI_PASS: ${MINI_PASS}
      INTERVAL: ${INTERVAL}
    command: >
      sh -c '
        set -eu;
        for i in $(seq 1 60); do curl -fsS "$APP_URL/maintenance" >/dev/null 2>&1 && break || sleep 2; done
        while :; do
          if [ -n "$MINI_USER" ] && [ -n "$MINI_PASS" ]; then
            # login (remember=on)
            curl -sS -c /tmp/c.jar -X POST "$APP_URL/login" \
              -d "username=$MINI_USER" -d "password=$MINI_PASS" -d "remember=on" -o /dev/null || true
            if curl -sS -b /tmp/c.jar "$APP_URL/api/maintenance/progress" | grep -qi "\"running\"\\s*:\\s*true"; then
              sleep 120
            else
              curl -m 5 -sS -b /tmp/c.jar -X POST "$APP_URL/api/maintenance/rescan" -o /dev/null || true
            fi
          else
            curl -m 5 -sS -X POST "$APP_URL/api/maintenance/rescan" -o /dev/null || true
          fi
          sleep "$INTERVAL"
        done
      '

Exemple de .env

# URL interne du service
APP_URL=http://minivid:8080

# Auth (laisser vide pour désactiver l'auth)
MINI_USER=admin
MINI_PASS=admin

# Fréquence en secondes (3600 = 1h)
INTERVAL=3600

L’indexation des fichiers se fait à la volée au 1er lancement, plus ou moins rapidement selon la quantité de vidéos et le CPU. Le transcodage sous Firefox/LibreWolf peut faire souffrir le CPU sur une petite machine, je ne l’ai pas optimisé vu qu’il est plus rapide de passer par un autre navigateur.

Aucun appel externe, tout est 100% local. Fonctionne en http://IP:port comme en reverse proxy.

minivid8
minivid11
minivid9
minivid10
minivid5
minivid6
minivid7

Loading

🧼 CrapFixer : nettoyer Windows 11 en profondeur

J'ai découvert l'existence de CrapFixer chez GuiPoM dont voici la présentation en vidéo ci-dessous.

Si l'interface semble être un clone du fameux CCleaner ce logiciel open-source n'a pas du tout la même utilité. CrapFixer est un cousin de O&O Shutup, il permet de désactiver des fonctionnalités de télémétrie, de personnaliser Windows... bref de "tweaker" comme on disait à l'époque 🤭

Tout comme ce qui est précisé dans la vidéo, je vous déconseille d'utiliser CrapFixer si vous ne savez pas ce qu'il fait.

Et puis les PowerToys qui continuent d'évoluer avec de nouveaux outils que je ne connaissais pas, à tester donc ! Avec la mise à disposition par Microsoft, cela évite de télécharger des freewares douteux. Ici on a le bénéfice de la communauté de développeurs et le soutien de Microsoft, que demander de mieux ?

➡ Télécharger CrapFixer

En bonus : lisez l'histoire derrière CrapFixer

 

 

Vous n'aimez pas le RSS : abonnez-vous par email 📥
Vous devriez me suivre sur Twitter : @xhark

Article original écrit par Mr Xhark publié sur Blogmotion le 29/08/2025 | 2 commentaires |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

Cet article 🧼 CrapFixer : nettoyer Windows 11 en profondeur provient de : on Blogmotion.

ListSync : un bel outil avec WebUI pour gérer et connecter ses listes avec Overseerr/Jellyseerr

Par : Aerya
27 août 2025 à 14:56

Quelles listes ? Quasi tout ce qui existe : IMDb, Trakt, MDBList, Letterboxd, Steven Lu


ListSync de Woahai321 permet de gérer de manière simple, complète et franchement belle, des listes de contenus multimédia à télécharger. Listes synchronisées avec Overseerr et/ou Jellyseerr pour automatiser les demandes et téléchargements via les *arrs.

L’application est développement très actif.

🔄 Synchronisation automatique

🎬 Prise en charge de plusieurs plateformes de watchlist

🖥 Compatible avec Overseerr et Jellyseerr

⚡ Installation simplifiée avec Docker

📊 Suivi en temps réel – Barres de progression et mises à jour instantanées

📋 Gestion intuitive des listes – Ajoutez, modifiez et organisez vos listes facilement

📈 Analyses complètes – Taux de réussite, indicateurs de performance et données historiques

⚙ Configuration via le web – Gérez tous les paramètres depuis le tableau de bord

🎨 Interface moderne et responsive – Parfaitement adaptée aux ordinateurs, tablettes et mobiles

🌙 Thèmes clair/sombre – Détection automatique des préférences système

Pour cet article, j’installe une instance locale. Mais selon les besoins, le compose et le .env ne sont pas les mêmes. Pour une utilisation/configuration plus poussée, je vous invite à suivre la documentation.

Je place le docker-compose.yml et le .env dans /home/aerya/docker/list-sync. Je n’indique aucune liste dans l’environnement, je ne me servirai que de l’interface Web.

J’utilise la version :main qui est la stable. J’ai ajouté la MàJ automatique du docker via un label Watchtower comme à mon habitude. Et j’ai mis en dur la timzeone mais ça marche aussi via le .env

Le compose

services:
  listsync-full:
    image: ghcr.io/woahai321/list-sync:main
    container_name: listsync
    ports:
      # Frontend (Next.js Dashboard) 
      - "3222:3222"
      # Backend API (FastAPI)
      - "4222:4222"
    environment:
      # Timezone Configuration (set to Europe/London for BST/GMT, change as needed)
      - TZ=Europe/Paris
      
      # Overseerr Configuration 
      - OVERSEERR_URL=${OVERSEERR_URL}
      - OVERSEERR_API_KEY=${OVERSEERR_API_KEY}
      - OVERSEERR_USER_ID=${OVERSEERR_USER_ID:-1}
      - SYNC_INTERVAL=${SYNC_INTERVAL:-24}
      - AUTOMATED_MODE=true
      - OVERSEERR_4K=${OVERSEERR_4K:-false}
      
      # List Configuration (comma-separated)
      - IMDB_LISTS=${IMDB_LISTS}
      - TRAKT_LISTS=${TRAKT_LISTS}
      - LETTERBOXD_LISTS=${LETTERBOXD_LISTS}
      - MDBLIST_LISTS=${MDBLIST_LISTS}
      - STEVENLU_LISTS=${STEVENLU_LISTS}
      - TRAKT_SPECIAL_LISTS=${TRAKT_SPECIAL_LISTS}
      - TRAKT_SPECIAL_ITEMS_LIMIT=${TRAKT_SPECIAL_ITEMS_LIMIT}      

      # Optional Discord webhook
      #- DISCORD_WEBHOOK_URL=${DISCORD_WEBHOOK_URL}
      
      # Internal API URL for frontend
      - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-http://0.0.0.0:4222/api}
      
      # Docker-specific settings
      - RUNNING_IN_DOCKER=true
      - NO_SANDBOX=1
      - DISPLAY=:99
    volumes:
      # Persist data directory
      - /home/aerya/docker/list-sync/data:/usr/src/app/data
      # Mount environment file
      - /home/aerya/docker/list-sync/.env:/usr/src/app/.env
      # Optional: Mount logs for debugging
      - /home/aerya/docker/list-sync/logs:/var/log/supervisor
    restart: always
    labels:
      - com.centurylinklabs.watchtower.enable=true
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4222/api/system/health", "&&", "curl", "-f", "http://localhost:3222"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
    # Note: Complete ListSync application with:
    # - Core sync service (python -m list_sync)
    # - FastAPI backend (port 4222)
    # - Next.js frontend (port 3222)
    # All managed by supervisor for reliability 


Et le .env avec les variables. Donc me concernant uniquement l’URL d’Overseerr et ma clé API. Je ferai le reste depuis la WebUI.

#=======================================================================
# ListSync Full Local Deployment Environment Configuration
# This file contains all variables needed for complete local deployment
# Copy this to .env and configure your values
#=======================================================================

# === Core Required Configuration ===
# Your Overseerr/Jellyseerr API key (REQUIRED)
OVERSEERR_API_KEY=xxxMQ==

# Your Overseerr/Jellyseerr URL (REQUIRED)
OVERSEERR_URL=https://demande.domain.tld

# === Optional Discord Notifications ===
# Discord webhook URL for notifications (leave blank to disable)
DISCORD_WEBHOOK_URL=

# Timezone (set to your local timezone)
TZ=UTC+2

#=======================================================================

# === Local Development Domains ===
# Frontend domain (Next.js Dashboard) 
FRONTEND_DOMAIN=http://localhost:3222
# Backend API domain (FastAPI Server)
BACKEND_DOMAIN=http://localhost:4222

# === API Configuration ===
# This will be used by the frontend to call the API
NEXT_PUBLIC_API_URL=http://localhost:4222/api

# === CORS Configuration ===
# Allow frontend domain to access backend API
CORS_ALLOWED_ORIGINS=http://localhost:3222,http://0.0.0.0:3222,http://127.0.0.1:3222

#=======================================================================

# === List Configuration ===
# Configure which lists to sync (comma-separated)

# IMDb Lists (examples: "top", "popular", or specific list IDs)
IMDB_LISTS=

# Trakt Lists (specific list IDs)
TRAKT_LISTS=

# Trakt Special Lists (trending, collected, watched)
TRAKT_SPECIAL_LISTS=
TRAKT_SPECIAL_ITEMS_LIMIT=20

# Letterboxd Lists
LETTERBOXD_LISTS=

# MDBList Lists
MDBLIST_LISTS=

# Steven Lu Lists
STEVENLU_LISTS=

# === Sync Configuration ===
# User ID in Overseerr (usually 1 for admin)
OVERSEERR_USER_ID=1

# Sync interval in hours (24 = once per day)
SYNC_INTERVAL=24

# Enable automated mode (true/false)
AUTOMATED_MODE=true

# Enable 4K requests (true/false)
OVERSEERR_4K=false

#=======================================================================
# NOTE: This is the FULL LOCAL DEPLOYMENT configuration
# - Web UI will be available at http://localhost:3222
# - API server will run at http://localhost:4222
# - Core sync functionality will run automatically
# - All services managed by Docker Compose
#======================================================================= 

listsync2

Les options sont sommaires mais suffisantes

listsync3

Je peux ajouter une liste de test. Attention, les listes peuvent être pratiques mais risquent également d’ajouter un paquet de fichiers en téléchargement d’un coup voire lors d’une mise à jour (toutes les 24h ici).
Je teste ça avec Decypharr et le cache d’AllDebrid donc je ne crains rien (hormis indexer des trucs qui ne m’intéressent pas plus que ça) mais il faut faire attention si on télécharge réellement des .torrents, encore plus sur des trackers privés. Idem avec des indexeurs Usenet où on est parfois limité en API hit ou téléchargement, c’est un coup à tuer le quota mensuel en 3 minutes.

listsync13

J’utilise une top liste du super MDBList.com. Une petite « liste « Top Movies of the week » de 10 items pour tester.

listsync4

Et je l’exécute maintenant, je vais attendre 24h pour terminer ce tuto

listsync7

Et là… entre l’ajout à Overseerr, l’envoie à Radarr, la rechercher sur Prowlarr, le DL simulé par Decypharr (donc la recherche dans le cache d’AllDebrid), la validation dans Radarr, l’ajout dans Plex et la mise à jour des jaquettes par Kometa, ça a pris environ 3 minutes. LA VACHE !
J’en avais déjà certains, quand même.

listsync6
listsync8
listsync9
listsync10

Oui. Alors là on visualise bien pourquoi je ne suis pas fan des listes « des autres » pour ma consommation personnelle. Je vais clairement virer Dragons, Elio, KPop et Bad Guys… Chacun ses goûts.
En revanche, pour partager ça avec d’autres, c’est pratique de prendre des listes Netflix, Disney, Apple, HBO etc, surtout avec des jaquettes et collections par Kometa. Mais je ne m’aventure pas sur ce terrain là, mon plaisir est de découvrir, tester et partager des « retex ».

listsync11

De retour sur SyncList, on peut visualiser l’état des synchronisations et les déclencher manuellement (global ici ou par liste sur l’onglet Lists)

listsync14

Et on profite de quelques stats

listsync15

Un bel outil pour qui aime les listes.

Loading

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

Par : Aerya
27 août 2025 à 09:13


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

Par : Aerya
27 août 2025 à 08:29

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

Personnaliser les affiches et collections de Plex avec Kometa

Par : Aerya
27 août 2025 à 06:46

J’aime bien avoir une idée des notes IMDB/TMDB des contenus répertoriés par Plex. Kometa, un script Python empaqueté dans un Docker pour plus de simplicité, permet de m’auditer les jaquettes des contenus indexés et créer celles de collections et playlists.
On peut presque faire la même chose sur Emby/Jellyfin, avec Posterizarr qui fonctionne aussi pour Plex)

kometa1
kometa2

On peut y mettre les infos qu’on souhaite, à l’endroit qu’on veut et créer/afficher ou non les listes par diffuseur etc. Tout est configurable, pour peu qu’on prenne le temps de lire la documentation.

Je partage ma configuration actuelle, qu’il faudrait encore peaufiner, et vous pouvez en trouver d’autres ici ou .

kometa3

Voici un Docker qui fonctionne très bien. Au besoin, pour UNRAiD, Synology, QNAP, Kubernetes, la doc est complète.

services:
  kometa:
    image: kometateam/kometa:develop
    container_name: kometa
    restart: always
    environment:
      - TZ=Europe/Paris
      - KOMETA_CONFIG=/config/config.yml
      - KOMETA_RUN=true
      - KOMETA_TIMES=00:00,06:00,12:00,18:00
    volumes:
      - /home/aerya/docker/kometa/config:/config
      - /home/aerya/docker/kometa/assets:/assets
    labels:
      - com.centurylinklabs.watchtower.enable=true

KOMETA_TIMES = les heures où Kometa doit mouliner

Et voici mon config.yml
Il faut le domaine Plex + token, les clés API TMDB, FanART et MDBlist. Je voulais tester les playlists, pas encore pris le temps…

Attention, dans la partie « libraries » les noms des librairies doivent être ceux de Plex, ici Films et Séries TV

plex:
  url: https://plex.domain.tld
  token: xxx
  timeout: 120
  verify_ssl: true

  db_cache:
  clean_bundles: false
  empty_trash: true
  optimize: true
tmdb:
  apikey: xxx
  language: fr-FR
  region: FR

  cache_expiration: 60
imdb:
  cache_expiration: 30

mdblist:
  apikey: xxx

  cache_expiration: 60
fanart:
  apikey: xxx

settings:
  run_order:
  - operations
  - metadata
  - overlays
  - collections
  asset_directory:
  - /assets
  
  overlay_artwork_filetype: jpg
  overlay_artwork_quality: 100
  show_unmanaged: true
  show_unconfigured: true
  show_missing: true

  cache: true
  cache_expiration: 60
  asset_folders: true
  asset_depth: 0
  create_asset_folders: false
  prioritize_assets: false
  dimensional_asset_rename: false
  download_url_assets: false
  show_missing_assets: true
  show_missing_season_assets: false
  show_missing_episode_assets: false
  show_asset_not_needed: true
  sync_mode: append
  default_collection_order:
  minimum_items: 1
  item_refresh_delay: 0
  delete_below_minimum: false
  delete_not_scheduled: false
  run_again_delay: 0
  missing_only_released: false
  only_filter_missing: false
  show_filtered: false
  show_unfiltered: false
  show_options: false
  save_report: false
  tvdb_language: default
  ignore_ids:
  ignore_imdb_ids:
  playlist_sync_to_users:
  playlist_exclude_users:
  playlist_report: true
  custom_repo:

libraries:
  Films:
    collection_files:
    - default: streaming
      template_variables:
        region: FR
        language: fr
        sep_style: gray
        visible_library_netflix: true
        visible_library_amazon: true
        visible_library_disney: true
        visible_library_appletv: true
        visible_library_paramount: true
        visible_library_max: true

    overlay_files:
    - default: ratings
      template_variables:
        rating1: critic
        rating1_image: imdb
        rating2: audience
        rating2_image: tmdb
        rating3: user
        rating3_image: imdb
    - default: resolution
      template_variables:
        use_edition: false
    - default: streaming
      template_variables:
        region: FR

    operations:
      assets_for_all: true
      mass_audience_rating_update: tmdb
      mass_user_rating_update: imdb

  Séries TV:
    collection_files:
    - default: streaming
      template_variables:
        region: FR
        language: fr
        sep_style: gray
        visible_library_netflix: true
        visible_library_amazon: true
        visible_library_disney: true
        visible_library_appletv: true
        visible_library_paramount: true
        visible_library_max: true
    overlay_files:
    - default: ratings
      template_variables:
        builder_level: show
        rating1: critic
        rating1_image: imdb
        rating2: audience
        rating2_image: tmdb
        rating3: user
        rating3_image: imdb
    - default: resolution
      template_variables:
        builder_level: show
        use_edition: false
    - default: streaming
      template_variables:
        region: FR
    operations:
      assets_for_all: true
      mass_audience_rating_update: tmdb
      mass_user_rating_update: imdb

collections_streaming.yml

collections:

  "Netflix • Films & Séries":
    tmdb_watch_provider: Netflix
    tmdb_region: FR
    summary: "Titres disponibles sur Netflix (France)."
    sync_mode: sync
    collection_order: alpha
    visible_home: true
    visible_shared: true
    build_collection: true
    url_poster: /assets/Streaming/Netflix/poster.jpg

  "Prime Video • Films & Séries":
    tmdb_watch_provider: Amazon Prime Video
    tmdb_region: FR
    summary: "Titres disponibles sur Amazon Prime Video (France)."
    sync_mode: sync
    collection_order: alpha
    visible_home: true
    visible_shared: true
    build_collection: true
    url_poster: /assets/Streaming/PrimeVideo/poster.jpg

  "Disney+ • Films & Séries":
    tmdb_watch_provider: Disney Plus
    tmdb_region: FR
    summary: "Titres disponibles sur Disney+ (France)."
    sync_mode: sync
    collection_order: alpha
    visible_home: true
    visible_shared: true
    build_collection: true
    url_poster: /assets/Streaming/DisneyPlus/poster.jpg

  "Apple TV+ • Films & Séries":
    tmdb_watch_provider: Apple TV+
    tmdb_region: FR
    summary: "Titres disponibles sur Apple TV+ (France)."
    sync_mode: sync
    collection_order: alpha
    visible_home: true
    visible_shared: true
    build_collection: true
    url_poster: /assets/Streaming/AppleTVPlus/poster.jpg

  # (Optionnel) Réseaux pour séries — utile pour “Originals”
  "Netflix • Séries (Network)":
    tmdb_network: Netflix
    summary: "Séries produites/diffusées par Netflix."
    sync_mode: sync
    collection_order: alpha
    visible_home: false
    visible_shared: true
    url_poster: /assets/Networks/Netflix/poster.jpg

  "Apple TV+ • Séries (Network)":
    tmdb_network: Apple TV+
    summary: "Séries Apple Originals."
    sync_mode: sync
    collection_order: alpha
    visible_home: false
    visible_shared: true
    url_poster: /assets/Networks/AppleTVPlus/poster.jpg

overlays.yml

overlays:

  ratings:
    template: rating
    default:
      rating1: imdb
      rating2: tmdb
      position: top_right
      font: Roboto-Bold
      font_size: 62
    operations:
      delete_overlays: false

  resolution:
    template: resolution
    default:
      position: bottom_left
      font: Roboto-Bold
      font_size: 70
    operations:
      delete_overlays: false

  streaming:
    template: streaming
    default:
      position: bottom_right
      region: FR
      style: logo
      allow_multiple: true
      font: Roboto-Bold
      font_size: 50
    template_variables:
      include:
        - Netflix
        - Amazon Prime Video
        - Disney Plus
        - Apple TV+
        - Canal+
        - Paramount+
        - OCS
    operations:
      delete_overlays: false

Si après un test, vous voulez que Plex revienne par défaut, Kometa propose un outil de reset.

kometa4

Loading

Streaming à la carte sans stockage local : Decypharr, débrideurs et torrenting

Par : Aerya
25 août 2025 à 19:53

Je continue mon tour d’horizon des solutions de streaming à la carte, légales ou non selon les pays, et qui permet de se créer et maintenir une bibliothèque multimédia sans stockage local.

Je n’aborderai pas publiquement les solutions de streaming depuis des .nzb directement.

Sur le même principe que Stremio, Vortex, ou RDT-Client/Zurg, ou encore DebridMediaManager, on peut utiliser Decypharr pour simuler un client BitTorrent (qBittorrent) et streaming le contenu de .torrent depuis des débrideurs, dont TorBox.

Je vais détailler ici l’installation manuelle de Decypharr, Prowlarr et Radarr/Sonarr/Plex mais tout est notamment inclus dans le script SSDv2 (avec une grosse et belle nouveauté à venir).

J’en profite pour remercier Laster13 et Teal-C pour leurs réponses à mes questions.

La dernière mouture de Decypharr embarque rClone et sa configuration sera automatisée. Mes tests sont réalisés avec Prowlarr et des indexeurs FR publics dont YGG via « api.eu », le débrideur AllDebrid ; et je ne « tape » que dans le contenu en cache chez AD (donc aucun téléchargement).
Verdict : RàS pour les films, quelques saisons de séries manquantes uniquement dans le cache, OK avec le téléchargement.

Le plus important est de bien comprendre que si on demande aux *arrs d’organiser les bibliothèques dans /mnt/Bibliothèques, ils ne vont y mettre que des symlinks vers le montage rClone d’AllDebrid (/mnt/decypharr).
Les *arrs, pour traiter les fichiers, tout comme Plex (ou autre) pour leur lecture, doivent avoir accès à ce montage rClone.
C’est pourquoi il est impératif de monter ce dossier en volume pour chaque Docker devant y avoir accès.

Arborescence du test :

aerya@StreamBox:/$ tree -L 2 /mnt/
/mnt/
├── Bibliothèques
│   ├── Films
│   └── Séries
├── Data
│   ├── lost+found
│   ├── quotaless
│   └── rCloneCache
└── decypharr
    ├── alldebrid
    └── qbit
        ├── radarr
        └── sonarr

Bibliothèques : dossier racine pour les *arrs
Data/rCloneCache : j’avais déjà le dossier pour autre chose, j’utilise le même

decypharr/alldebrid : montage de mon compte AD
decypharr/qbit : dossier de téléchargement (simulé) des fichiers. Les sous-dossiers radarr/sonarr seront ajoutés automatiquement lors de la configuration de Decypharr (tags)

Il faut installer et lancer Decypharr avant le reste vu que tout dépend ensuite du montage du débrideur et des symlinks. Idem s’il faut relancer le Docker Decypharr, il faut relancer les autres ensuite.

services:
  decypharr:
    image: cy01/blackhole:latest
    container_name: decypharr
    restart: always
    cap_add:
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    ports:
      - 8282:8282
    volumes:
      - /mnt:/mnt:rshared
      - /mnt/decypharr/qbit:/mnt/decypharr/qbit
      - /home/aerya/docker/decypharr/configs/:/app
    environment:
      - TZ=Europe/Paris
      - PUID=0
      - PGID=0
    devices:
      - /dev/fuse:/dev/fuse:rwm
    labels:
      - com.centurylinklabs.watchtower.enable=true

/mnt/decypharr/qbit devant être commun aux *arrs et Plex, on y montera /mnt:/mnt dans chaque ainsi que /mnt/decypharr/qbit:/mnt/decypharr/qbit dans les *arrs qui sauront directement où aller chercher les fichiers à traiter.

La configuration n’est pas vraiment expliquée dans la doc, la mienne n’est peut-être pas optimale mais fonctionne.

Je n’ai rien modifié dans l’onglet général. J’ai testé les notifications Discord (attention on voit la passkey des trackers utilisés) mais y’a vraiment pas d’intérêt si on ne fait qu’utilise le cache du débrideur (pas de téléchargement).

decypharr1

Pour la partie débrideur, on fait notre choix, on colle une clé API (ou plusieurs) et j’ai configuré le montage dans

/mnt/decypharr/alldebrid/__all__


On peut ajouter plusieurs débrideurs. On pourra les attribuer à un *arr lié à Decypharr et même les sélectionner lors de l’ajout manuel d’un .torrent

J’utilise le WebDav et je NE COCHE PAS la case Download Uncached pour qu’il ne télécharge aucun fichier (sur AD) mais n’utilise que son cache.
Je fais ça parce que je voulais tester le cache d’AD et ne voulais pas télécharger des fichiers sans les partager. On peut tout à fait faire les 2 mais attention, il n’y aura pas de seed (donc ratio 0). A ne pas faire chez les Tier 1 sous peine de voir son compte banni !
Certains ont créé des scripts qui captent les .torrent utilisés pour les mettre en seed depuis un client local ou sur un serveur. Dans ce cas, Decypharr est utilisable sans crainte sur les trackers privés.

decypharr2

Configuration du client qBittorrent émulé. Je met le chemin qui correspond au volume local dont je parlais au début

/mnt/decypharr/qbit
decypharr3

On peut ajouter les *arrs soit depuis Decypharr soit depuis les *arrs eux-mêmes. Je n’ai qu’AD en débrideur j’ai donc laissé la sélection auto mais on peut choisir.
Par exemple Radarr sur AD et Sonarr sur RD ou Sonarr4K sur TB etc. Selon les goût de chacun. Ce qui est certain, c’est que le cache de contenu MULTi/FRENCH est évidemment plus important sur AD et RD que sur TB, principalement utilisé par les anglophones pour Stremio.

decypharr4

Le Repair est le contrôle et la réparation des symlinks. Qui peuvent être cassés si le contenu lié est effacé du débrideur. Dans ce cas, selon la config, ça peut soit rechercher sur le débrideur (si le fichier a été renommé, vu que ça fonctionne avec le hash et non le nom) soit ça ira chercher un autre .torrent via les *arrs.
Pour l’instant je laisse l’option par défaut à savoir « per torrent » mais il est peut-être préférable d’utiliser « per file ». Dans le cas d’un .torrent de saison complètement, que ça ne recherche que l’épisode manquant (du cache) plutôt que de tout relancer.
Je l’ai mis en autotmatique, toutes les 24h.

decypharr5


Et enfin la partie rClone. Le monte globalement dans /mnt/decypharr et souhaite utiliser un cache (100Go) dans un dossier (et disque) qui me sert déjà à ça : /mnt/Data/rCloneCache
On peut sans doute améliorer cette configuration mais Plex lit un fichier de 94Go sans broncher…


decypharr6

Avec le mode de téléchargement activé, voici le rendu. PausedUP signifie que le .torrent est complété (et de fait plus en seed).

decypharr7

Je ne montre que l’exemple de configuration de Radarr. Pour Sonarr c’est la même logique. Chez moi c’est derrière un VPN pour des interrogations de sources hors Prowlarr et NZBHydra, il n’y a donc pas de port de publié.
Je retire tous les volumes par défaut pour ne monter que /mnt/decypharr/qbit:/mnt/decypharr/qbit et /mnt:/mnt

services:
  radarr:
    container_name: radarr
    restart: always
    network_mode: container:gluetun-mullvad
    environment:
      - TZ=Europe/Paris
      - PUID=0
      - PGID=0
    volumes:
      - /home/aerya/docker/radarr:/config
      - /mnt/decypharr/qbit:/mnt/decypharr/qbit
      - /mnt:/mnt
    labels:
      - com.centurylinklabs.watchtower.enable=true
    image: linuxserver/radarr:nightly

Configuration du dossier racine : /mnt/Bibliothèques/Films

radarr1

Configuration du client de téléchargement si on n’a pas ajouté Radarr depuis Decypharr. Il faut sélectionner qBittorrent

radarr2

Et dans l’adresse il faut mettre l’URL (ou l’IP) de Decypharr et le port (et SSL si vous utilisez une URL et un reverse proxy).
Le nom d’utilisateur et le mot de passe sont l’URL de Radarr et sa clé API.
La catégorie : radarr (et donc sonarr pour Sonarr ofc!)

Ne surtout pas cocher la case Sequential Order (sinon ça DL localement)

radarr3

Et comme le même chemin/volume est monté dans chaque Docker, il n’y a aucun Remote Path Mapping à mettre

radarr4

Lors de l’ajout d’un film, la complétion est quasi instantanée pour peu que le fichier cherché soit déjà dans le cache d’AllDebrid. Si vous activez le téléchargement des fichiers non encore en cache, ça peut prendre quelques minutes.


radarr5

En regardant de plus près, on voit bien que c’est un symlink vers le cache d’AllDebrid

aerya@StreamBox:/mnt/Bibliothèques/Films$ ls -l Alien\ -\ Romulus\ \(2024\)/
total 4
lrwxrwxrwx 1 root root 208 Aug 25 18:55 Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY.mkv -> /mnt/decypharr/alldebrid/__all__/Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY/Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY.mkv
ncdu 1.19 ~ Use the arrow keys to navigate, press ? for help
--- /mnt/Bibliothèques/Films/Alien - Romulus (2024)- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@   4.0 KiB [###################################################]  Alien.Romulus.2024.MULTi.VFF.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.7.1.Atmos-ONLY.mkv


Plus globalement, tous les fichiers sont bien chez AllDebrid, monté via WebDav/rClone et je n’ai localement que des symlinks qui ne prennent aucune place.
En théorie, on pourrait se faire cette installation sur une Carte MicroSD de quelques Go 🙂

ncdu 1.19 ~ Use the arrow keys to navigate, press ? for help
--- /mnt ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   15.9 TiB [###################################################] /decypharr
    4.0 MiB [                                                   ] /Bibliothèques

Pour terminer, la configuration de Plex. Toujours avec /mnt:/mnt de monté pour garantir l’accès aux symlinks.

services:
  pms-docker:
    container_name: plex
    restart: always
    ports:
      - 32400:32400/tcp
      - 33401:33401/tcp
      - 3005:3005/tcp
      - 8324:8324/tcp
      - 32469:32469/tcp
      - 1900:1900/udp
      - 32410:32410/udp
      - 32412:32412/udp
      - 32413:32413/udp
      - 32414:32414/udp
    environment:
      - PLEX_UID=0
      - PLEX_GID=0
      - TZ=Europe/Paris
      - PLEX_CLAIM=claim-xxx
      - ADVERTISE_IP=http://192.168.0.163:32400/
    hostname: plex.xxx.xxx
    volumes:
      - /home/aerya/docker/plex:/config
      - /mnt:/mnt
      - type: tmpfs
        target: /transcode
        tmpfs:
          size: 4g
    labels:
      - com.centurylinklabs.watchtower.enable=true
    image: plexinc/pms-docker:latest
plex1
plex2

Loading

❌