Vue lecture

Recommendarr : recommandations Plex/Jellyfin/arrs par l’IA


Ok, y’a déjà whatmille solutions de recommandations et découverte de contenus : les listes prises à droite à gauche et ajoutées aux arrs ou à ListSync, Overseerr/Jellyseerr, Suggestarr etc BAH EN VOICI UNE DE PLUS !

Recommendarr de fingerthief permet d’avoir des recommandations faites par une IA à partir des contenus vus sous Plex/Jellyfin, Trakt, Tautulli (eh non ! pas encore mort) et de ceux indexés par Radarr et Sonarr.
Attention, tous les synopsis etc sont en anglais.

Quand je parle d’IA, c’est vaste et comprend l’autohébergé (j’ai testé avec OpenAI) :

Services d’IA compatibles

Vous pouvez utiliser n’importe lequel de ces services avec une API compatible OpenAI :

  • OpenAI : URL par défaut (https://api.openai.com/v1) avec votre clé API OpenAI
  • LM Studio : URL locale (ex. http://localhost:1234/v1) exécutant des modèles sur votre ordinateur
  • Ollama : URL locale (ex. http://localhost:11434/v1) pour des modèles hébergés en local
  • Anthropic Claude : API d’Anthropic avec l’URL de base appropriée
  • Auto-hébergé : votre propre serveur d’API LLM compatible avec OpenAI
  • Mistral, Groq, Cohere : la plupart des fournisseurs d’IA avec des endpoints compatibles OpenAI


Honnêtement, vu que je passe 90% de mon temps à tester des trucs plutôt qu’à profiter de mon setup, les recommandations que j’ai sont certes logiques (plus que celles de TMDB, en bas des fiches du moins) mais je ne sais pas si elles reflètent vraiment la qualité de cet outil. Ce dont je ne doute pas.

L’installation est simple puisque tout se configure via la WebUI

services:
  recommendarr:
    container_name: recommendarr
    restart: always
    ports:
      - 3080:3000
    volumes:
      - /home/aerya/docker/recommendarr:/app/server/data
    image: tannermiddleton/recommendarr:latest
    labels:
      - com.centurylinklabs.watchtower.enable=true

Et ensuite on peut connecter ses outils/comptes. Dans mon cas Trakt, TMDB, Jellyfin et Radarr/Sonarr. Je pense que ça venait de mon navigateur mais impossible d’accéder à la configuration en cliquant sur un autre bouton que Configure AI Service ou le menu des paramètres.

recommendarr1


Pour l’IA j’ai utilisé mon compte OpenAI avec le modèle gpt-5-chat-latest (pas comme sur le screen). Choix complètement fait au pifomètre, je suis preneur de conseils.

recommendarr2

Et ensuite…. magie…. Ou presque. L’IA ne fera qu’aller chercher des contenus par rapport à notre demande. Il faut donc paramétrer la demande. Au moins le nombre de recommandations.

recommendarr4

Dans la partie IA, en sus du modèle à choisir et son degré de précision, on peut demander à ce que Recommandarr utilise un sous-ensemble de la bibliothèque afin de réduire l’utilisation de jetons tout en fournissant des recommandations pertinentes.

recommendarr5

On sélectionne la catégorie visée (films/séries) et le nombre de recommandations souhaitées.

recommendarr6


Puis on peut affiner la recherche en sélectionnant des genres.

recommendarr7

Puis sélectionner un prompt pré-défini ou en créer

recommendarr8
Style « Vibe »

Se concentre sur l’atmosphère émotionnelle et l’expérience sensorielle du contenu de votre bibliothèque. Les recommandations privilégient la correspondance avec le ressenti et l’ambiance de vos films/séries préférés plutôt que le simple genre ou la similarité de l’intrigue.
Idéal pour : Trouver du contenu qui évoque la même sensation, capturant des tons et atmosphères spécifiques.


Style analytique

Procède à une analyse détaillée des structures narratives, des motifs thématiques et des techniques formelles. Les recommandations reposent sur une analyse en profondeur des éléments cinématographiques et télévisuels qui relient les œuvres à un niveau plus substantiel.
Idéal pour : Une exploration intellectuelle et la découverte de contenus partageant une approche artistique ou une profondeur thématique similaire.


Style créatif

Dépasse les catégorisations classiques pour trouver des liens inattendus entre les œuvres. Met en avant les parcours émotionnels, la vision artistique et les approches narratives originales.
Idéal pour : Découvrir des recommandations surprenantes, qui peuvent sembler éloignées au premier abord mais partagent une même essence créative.


Style technique

Se focalise sur l’artisanat de la production, les techniques de réalisation et l’exécution technique. Analyse les méthodes de mise en scène, la cinématographie, les styles de montage et les éléments de production.
Idéal pour : L’appréciation des aspects techniques et la recherche de contenus offrant une qualité de production ou une innovation technique similaire.


Comme souvent on peut sélectionner la langue préférée du contenu (séries plutôt en langue française etc). On pourra aussi de temps en temps rescanner les bibliothèques.

recommendarr9

Et enfin, découvrir les reco. À noter qu’on ne peut pas les ajouter à Radarr/Sonarr directement, sans passer par Overseerr/Jellyseerr/whatever.

Voici par exemple pour les films

recommendarr10
recommendarr11
recommendarr12
recommendarr13

Évidemment, avec Decypharr, ça tombe en quelques secondes.

recommendarr14

Et pour les séries, on peut évidemment sélectionner les saisons

recommendarr15

C’est sympa à tester, on peut y créer plusieurs utilisateurs donc c’est intéressant mais avec un LLM autohébergé ça doit consommer pas mal de ressources. Avec OpenAI ça ne consomme en revanche rien que le serveur donc je vais le garder dans un coin mais je doute l’utiliser tous les jours, avec tout le reste…

recommendarr16


L’idéal serait de couler ça à Overseerr/Jellyseerr…

Loading

  •  

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

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

  •  

SuggestArr : recommandations de contenus avec intégration Plex/Emby/Jellyfin/Overseerr/jellyseerr


J’avais complètement zappé de présenter le fabuleux SugestArr il y a quelques mois, remédions à ça de suite !

On ajoute tous les contenus découverts sur le Web, sur IMDB, TMDB, Trakt, par des connaissances, via des forums, via Overseerr ou Jellyseerr…

Cet outil de guiseppe99barchetta devrait vous ravir puisqu’il permet d’avoir des recommandations personnalisées et est, je trouve, relativement complet :

  • Prise en charge multi-médias : compatible avec Jellyfin, Plex et Emby pour récupérer le contenu.
  • Intégration TMDb : recherche de films et séries similaires via TMDb.
  • Requêtes automatisées : envoie des demandes de téléchargement pour les contenus recommandés vers Jellyseer ou Overseerr.
  • Interface web : interface conviviale pour la configuration et la gestion.
  • Journaux en temps réel : visualiser et filtrer les logs en direct (ex. INFO, ERROR, DEBUG).
  • Sélection des utilisateurs : possibilité de choisir quels utilisateurs peuvent initier des requêtes, avec gestion et validation des contenus demandés automatiquement.
  • Gestion des tâches cron : modification du planning des cron jobs directement depuis l’interface web.
  • Pré-validation de configuration : vérifie automatiquement les clés API et les URLs lors de l’installation.
  • Filtrage de contenu : exclut les demandes de contenus déjà disponibles sur les plateformes de streaming dans votre pays.
  • Support de bases de données externes : possibilité d’utiliser PostgreSQL ou MySQL en plus de SQLite pour plus de performance et d’évolutivité.

Y’a pas d’application AndroidTV/smarthone mais c’est responsive et on peut automatiser les ajouts.

Pour l’utiliser il faut une clé API TMDB et évidemment une ou des instances Plex/Emby/Jellyfin et Oberseerr/Jellyseerr.

services:
  suggestarr:
    image: ciuse99/suggestarr:latest
    container_name: SuggestArr
    restart: always
    ports:
      - 5000:5000
    volumes:
      - /mnt/user/appdata/suggestarr:/app/config/config_files
    labels:
      - com.centurylinklabs.watchtower.enable=true


Une fois lancé, on se connecte avec notre lecteur favori, on ajoute une clé TMDB

suggestarr1

Dans le cas de Plex, ça liste les serveurs disponibles (pour faire simple j’ai sélectionné un local) et ça en détaille les librairies et utilisateurs. On peut aussi mettre une URL directement

suggestarr9

On enchaine avec Overseerr ou Jellyseerr

suggestarr8

Je reste sur du SQLite. Si vous voulez une BDD robuste à part, il faut revoir le docker-compose pour l’ajouter

suggestarr4

Configuration rapide :

  • Note minimale sur TMDB et nombre minimum d’avis,
  • Je n’inclus pas le contenu sans note
    J’exclus le contenu déjà téléchargé et/ou vu
  • Je n’exclus aucun genre ni aucun service (Disney+, Netflix, Youtube, Canal+…)
  • Je sélectionne English pour la langue originale des contenus que je veux en recommandation. Je ne suis absolument pas fan de Plus belle la vie et autres trucs français. Je préfère les séries US notamment. Précision : ça ne limite pas aux contenus produits en langue anglais mais ça la priorise
  • Et je souhaite des recommandations de contenus produits à partir des années 90
suggestarr5
  • Pour chaque film en historique de lecture je veux 8 suggestions, 5 pour chaque série,
  • Suggestarr me fera des recommandations par rapport aux 5 derniers contenus lus,
  • Le Search Size définissant combien de suggestions en tout je demande (si j’ai bien pigé ?)
    Et le cron, pour l’exécution. J’ai changé après la capture, j’ai mis toutes les 6h (0 */6 * * *)
suggestarr6

Et la récap de fin avant le 1er lancement

suggestarr10

Et ça ajoute les recommandations dans Overseerr ou Jellyseerr selon votre configuration. Attention du coup si, comme moi, tout est automatiquement validé, ça peut vite accroître les bibliothèques !
Mon setup étant tout récent je n’ai hélas pas de screen à vous montrer mais vous pouvez voir ce que ça donne avec la fin de cette vidéo YouTube avec UNRAiD.

Loading

  •