Skip to main content

14_Jellyfin

jellyfin

The Free Software Media System

Imagejellyfin/jellyfin:latest
Version10.10.7
EtatUp 9 hours (healthy)
Compose projectjellyfin
Reseauhost
URLhttps://jellyfin.juxjux.ovh
Sourcehttps://github.com/jellyfin/jellyfin-packaging

Volumes

Source (hote)DestinationTypeMode
/mnt/nas_videos/movies/data/moviesbindrw
/mnt/nas_videos/palettes/data/palettesbindrw
/home/debian/jellyfin/config/configbindrw
/mnt/nas_videos/cinema_europe/data/cinema_europebindrw
/mnt/nas_videos/cinema_UK/data/cinema_ukbindrw
/mnt/nas_videos/spectacles/data/spectaclesbindrw
/cachevolumerw
/mnt/nas_videos/animes/data/animesbindrw
/mnt/nas_videos/cinema_asie/data/cinema_asiebindrw
/mnt/nas_videos/cinema_realisateurs/data/cinema_realisateursbindrw
/mnt/nas_videos/fantastique_et_SF/data/fantastique_et_SFbindrw
/mnt/nas_videos/historiques/data/historiquesbindrw
/mnt/nas_videos/series/data/seriesbindrw
/mnt/nas_videos/cinema_italie/data/cinema_italiebindrw
/mnt/nas_videos/culture_cuisine/data/culture_cuisinebindrw
/mnt/nas_videos/documentaires/data/documentairesbindrw

Integration Claude Code — MCP

Statut MCPMCP actif
Outils (prefix)mcp__jellyfin__
ConfigurationScript Python : C:\Users\eliob\.claude\mcp_jellyfin.py | Auth : JWT MediaBrowser Token via POST /Users/AuthenticateByName

Outils disponibles

  • get_libraries
  • get_items
  • get_item
  • get_recently_added
  • get_resume_items
  • get_sessions
  • get_users
  • get_server_info
  • scan_library
  • search_items

Ce que nous pouvons faire ensemble

  • Parcourir films, séries et musiques de la médiathèque
  • Voir les ajouts récents et les éléments en cours de lecture
  • Surveiller les sessions actives (qui lit quoi en ce moment)
  • Déclencher un scan de bibliothèque après ajout de contenu
  • Rechercher un titre dans toute la médiathèque

260830 - Lecture des flux vidéos Jellyfin à partir de kDrive

Statut : àFAIT exécuter.le 2026-08-30. Cette procédureJellyfin ne peutlit démarrerplus qu'unele foisNAS. laIl copielit kDrive par un montage rclone FUSE. Le NAS conserve l'intégralité des 694 Go terminée et vérifiée par téléchargement intégral — voirl'étape la6 procédure(suppression) « 260830 - Basculement des vidéos de SASNEXTE vers kDrive ».

Ne pas basculer le montage tant que le dossier kDrive est incomplet : Jellyfin verrait une médiathèque tronquée et supprimeraitreste en masseattente, desaprès élémentspériode de sa base.d'observation.

PourquoiRésultat la bascule améliore la lecture

Mesuré le 2026-08-30 : le CIFS actuel via WireGuard plafonne à 5,0 Mo/s (40 Mbit/s) — suffisant pour un 1080p courant, juste pour un remux, et incompatible avec deux flux simultanés. Depuis kDrive, le VPS descend à 97,6 Mo/s (780 Mbit/s). Le goulot était le tunnel depuis Toulon, pas kDrive.

Quatre constats relevés sur l'installation actuelle

    Les 15 binds Jellyfin n'ont pas :shared. Le correctif de propagation du 2026-06-08 a couvert FileBrowser, Navidrome, Komga, Audiobookshelf, Kavita, calibre-web et Immich — Jellyfin est passé au travers, parce qu'il était en CIFS et pas en rclone. Dès qu'il lira du FUSE, tout redémarrage du service rclone lui coupera l'accès avec le transport endpoint is not connected habituel. EnableRealtimeMonitor=True sur 15 bibliothèques sur 16. Jellyfin pose des watchers inotify sur les dossiers, ce qui ne fonctionne pas sur un montage FUSE rclone. À désactiver, et à remplacer par le --poll-interval de rclone plus un scan planifié. Jellyfin écrit dans les dossiers médias. SaveLocalMetadata=True sur 14 bibliothèques, et les vignettes de survol sont stockées à côté des films (palettes/Paul Cézanne....trickplay, movies/Borgo/movie.nfo). C'est ce qui explique les 2 989 jpg et 408 nfo du dossier. Deux conséquences : les vignettes déjà générées voyagent avec les fichiers, donc aucune regénération pour l'existant ; mais pour chaque nouveau film, Jellyfin retéléchargera le fichier entier depuis kDrive pour produire ses vignettes — environ une minute pour 4 Go à 97 Mo/s. Acceptable : ne pas désactiver trickplay. Le montage doit en revanche être en écriture. HardwareAccelerationType=none — tout le transcodage est logiciel. Inchangé par la migration, mais l'équilibre se déplace : le goulot passe du lien CIFS au CPU du VPS. Sans effet en lecture directe.

    Étapesmesuré

    #ActionAvantAprès
    1Désactiver EnableRealtimeMonitor sur les 15 bibliothèques (API Jellyfin)
    2mount --bind /mnt /mnt puis mount --make-shared /mnt, persisté dans /etc/fstab 3Ajouter :shared aux 15 binds de la compose (stack Portainer 5), redéployer 4Commenter la ligne 36Source de /etc/fstabmnt/nas_videos (CIFS //10.0.0.2/video),rclone démonterkDrive /mnt/nas_videosVideos_NAS 5CréerDébit kdrive-video.servicelu surdepuis le modèlecontainer5,0 deMo/s65,6 kdrive-music.service : montage sur le même cheminMo/s /mnt/nas_videos 6Propagation des 15 bindsAjouterabsenteshared lesur montageles à15 EnableRealtimeMonitoractif sur 15 bibliosdésactivé partout monitor-rclone.sh,5 montages6, avec redémarragerestart du containerde jellyfin 7Films cataloguésTest343629 de(+286, lecture,fusion de seek et de transcodage sur 3 films de bibliothèques différentescuisine)

    Le pointgoulot décisifétait le tunnel WireGuard depuis Toulon (40 Mbit/s, incompatible avec deux flux simultanés), pas kDrive. La bascule améliore la lecture au lieu de l'étapela 5dégrader.

    :

    Le remontermontage

    Service /etc/systemd/system/kdrive-video.service, activé au démarrage, calqué sur lekdrive-music.service chemin:

    existant
    ExecStart=/usr/bin/rclone --config=/home/debian/.config/rclone/rclone.conf mount \
      --rc --rc-addr 127.0.0.1:5578 --rc-user=rcadmin --rc-pass=RcVideo2026! --rc-enable-metrics \
      "kdrive:Julien Bertrand (0)/Videos_NAS" /mnt/nas_videos \
      --allow-other --dir-cache-time 72h --poll-interval 15s \
      --vfs-cache-mode minimal --buffer-size 256M \
      --uid 1000 --gid 1000 --umask 002 --allow-non-empty. La compose n'est pas touchée dans ses chemins, les 15 bibliothèques Jellyfin gardent leurs /data/* à l'identique — donc aucune ré-identification, aucun scan complet, aucune perte d'historique de visionnage.
    
    

    Options du montage rclone

    • --vfs-cache-mode minimal — les: lectures passent en direct, seules les écritures (nfo, trickplay) sontpassent misespar en tampon surle disque. NeSurtout pas reprendre full comme les montages musique :— il cacherait 4 Go par film, or le VPS n'a que 33 Go libres sur 99 et l'incident du 2026-06-24 (disque à 100 %) est parti de là.
    • --dir-cache-time 72h — comme music et komga ; 5m avait rendu music instable.
    --rc-addr 127.0.0.1:55781 avec authentification RC —: jamais 0.0.0.0, règle permanente depuis l'incident du 2026-06-09. --allow-non-empty,uid --allow-other,1000 --uid/--gid 1000 : la compose déclare user: 1000:1000. /mnt était déjà en propagation shared — commele lesmount six--bind autresprévu montages.s'est révélé inutile.

    La carte des binds

    Le montage porte sur Videos_NAS entier, pas seulement sur son sous-dossier video, parce que deux bibliothèques ont été fusionnées avec du contenu kDrive préexistant. Les chemins conteneur sont restés identiques : aucune ré-identification, aucun historique de visionnage perdu.

    Chemin hôteChemin conteneur /mnt/nas_videos/Séries/data/series — fusionné /mnt/nas_videos/Video Cuisine/data/culture_cuisine — fusionné /mnt/nas_videos/video/<13 autres>/data/<13 autres> /home/debian/jellyfin/config/config

    Compose : stack Portainer 5, projet compose 5. Sauvegarde docker-compose.yml.bak-260830.

    sudo docker compose -p 5 -f /var/lib/docker/volumes/portainer_data/_data/compose/5/docker-compose.yml up -d --force-recreate

    Disponible pour de futures bibliothèques

    Le montage expose aussi ce qui vivait déjà dans Videos_NAS et qui n'est branché sur aucune bibliothèque : Video Culture Arts et Peinture (130,8 Go), Video Architecture et Urbanisme (29,4 Go), Video concerts (3,5 Go).

    Pièges rencontrés — à ne pas re-découvrir

      Le point de montage n'était pas vide. Sous l'ancien CIFS subsistaient 15 dossiers vides. Laissés en place, un montage rclone mort ferait voir à Jellyfin des dossiers vides au lieu d'une erreur — et il purgerait ses bibliothèques. Vérifié (0 fichier réel, 65 536 octets de dossiers) puis supprimés, montage arrêté le temps de l'opération. grep -c renvoie 1 quand il ne trouve rien et tue un script en set -e. Le redéploiement avait réussi, seule la vérification a échoué. Docker ne montre pas :shared dans .HostConfig.Binds, il le normalise dans .Mounts[].Propagation. Vérifier là. Le projet compose est 5 (l'ID de stack), pas jellyfin — lire le label com.docker.compose.project avant tout redéploiement, sous peine de créer une pile en double.

      Retour arrière

        Décommenter la ligne 36 de /etc/fstab (sauvegarde /etc/fstab.bak-260830) sudo systemctl disable --now kdrive-video.service Restaurer docker-compose.yml.bak-260830 et redéployer

        Tant que le NAS n'a pas été vidé, le retour arrière est complet.

        À signaler, hors périmètre

        /home/debian/jellyfin/config (688 Mo — tout l'historique de visionnage et les métadonnées) n'est pas dans vps_backup.sh, qui ne couvre que BookStack, Immich, Joplin, Mealie, ReadeckReadeck, Baïkal et Baïkal.~/Documents. Cela se compresserait bien. À traiter séparément.