--- title: Jellyplist created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, music, jellyfin, playlist, spotify, python, spotdl] confidence: medium contested: false sources: - https://selfh.st/apps/?tag=music - https://github.com/kamilkosek/jellyplist --- # 📋 Jellyplist > Utilitaire de **synchronisation de playlists Spotify vers un serveur Jellyfin** : rĂ©plique vos playlists Spotify (ordre, ajouts, retraits) en s'appuyant sur [[app-spotizerr]]/spotDL pour tĂ©lĂ©charger les morceaux manquants. **ArchivĂ© octobre 2025**. | MĂ©tadonnĂ©e | Valeur | | :--- | :--- | | **Site web** | https://github.com/kamilkosek/jellyplist | | **GitHub** | https://github.com/kamilkosek/jellyplist | | **License** | GPL-3.0 | | **Langage** | Python (Flask) + PostgreSQL + Redis | | **Étoiles** | 16 ⭐ | | **DerniĂšre MAJ** | 2025-10-10 (archivĂ©) | | **CatĂ©gorie** | [[cat-music]] | ## Description Jellyplist Ă©tait un **« Spotify → Jellyfin bridge »** : vous ajoutez une playlist Spotify dans Jellyplist, l'app la synchronise dans votre instance [[app-jellyfin]] en tĂ©lĂ©chargement les morceaux manquants via spotDL et en crĂ©ant/met Ă  jour une playlist m3u native cĂŽtĂ© Jellyfin. Le suivi de l'ordre, des ajouts/retraits Ă©tait **delta-based** : l'app dĂ©tecte les changements cĂŽtĂ© Spotify et les rĂ©percute. Le projet a Ă©tĂ© **archivĂ© en octobre 2025** par son mainteneur (kamilkosek) qui explique sur le README : *« Spotify a dĂ©sactivĂ© des fonctionnalitĂ©s cruciales de leur API l'an dernier, et mes workarounds ne fonctionnent plus non plus. J'ai dĂ©cidĂ© d'archiver ce projet et de ne plus investir d'effort pour le faire fonctionner Ă  nouveau. »* ConcrĂštement, l'API publique de Spotify a resserrĂ© ses conditions d'accĂšs (notamment pour les apps non-commerciales, dont l'usage a Ă©tĂ© limitĂ©) et plusieurs endpoints ont changĂ©. Jellyplist n'est plus utilisable en l'Ă©tat avec un compte Spotify standard. **Pourquoi documenter un projet archivĂ© ?** Parce que (1) c'est un cas d'usage typique d'un pont self-hosted entre deux Ă©cosystĂšmes, (2) le code reste un excellent **point de dĂ©part pour un fork** (l'architecture Flask + PostgreSQL + Redis est saine), (3) l'auteur lui-mĂȘme redirige vers **[[app-spotizerr]]** comme alternative recommandĂ©e, et (4) les concepts (sync delta, Lidarr integration, m3u preservation) restent valides et applicables Ă  d'autres sources (Bandcamp, Apple Music, Tidal). **Si vous cherchez un Ă©quivalent moderne et maintenu** : [[app-spotizerr]] (Ă©toile Spotify → Jellyfin via m3u), le **plugin officiel Jellyfin « SmartPlaylists »** (rĂšgles dynamiques mais pas de sync Spotify), ou **spotDL** en CLI pour du download *one-shot* depuis URL Spotify. ## Installation ### Docker Compose (archive — Ă  des fins de rĂ©fĂ©rence) ```yaml # docker-compose.yml — configuration Jellyplist (archivĂ©) services: redis: image: redis:7-alpine container_name: jellyplist-redis volumes: - redis_data:/data restart: unless-stopped postgres: container_name: jellyplist-postgres image: postgres:17.2 environment: POSTGRES_USER: jellyplist POSTGRES_PASSWORD: jellyplist PGDATA: /data/postgres volumes: - /jellyplist_pgdata:/data/postgres restart: unless-stopped jellyplist: image: ghcr.io/kamilkosek/jellyplist:latest # image encore pullable container_name: jellyplist depends_on: - postgres - redis ports: - "5055:5055" env_file: .env # voir ci-dessous volumes: - /jellyplist/cookies.txt:/jellyplist/cookies.txt - /data/music/library:/storage/media/music restart: unless-stopped volumes: redis_data: ``` ### .env (rĂ©fĂ©rence) ```env JELLYFIN_SERVER_URL=http://192.168.1.10:8096 JELLYFIN_ADMIN_USER=admin JELLYFIN_ADMIN_PASSWORD=*** SPOTIFY_CLIENT_ID=*** SPOTIFY_CLIENT_SECRET=*** SECRET_KEY=*** MUSIC_STORAGE_BASE_PATH=/storage/media/music JELLYPLIST_DB_HOST=jellyplist-postgres JELLYPLIST_DB_USER=jellyplist JELLYPLIST_DB_PASSWORD=jellyplist # optionnel : LIDARR_API_KEY, LIDARR_URL ``` ## Configuration *(Section conservĂ©e Ă  titre de documentation du fonctionnement historique. Ne pas tenter de redĂ©ployer sans correctif API Spotify.)* - **Credentials Spotify** : crĂ©er une app sur developer.spotify.com, rĂ©cupĂ©rer Client ID + Secret. **⚠ Depuis 2024, l'API publique restreint fortement l'usage hors-commercial** — c'est la cause de l'archivage. - **Auth Jellyfin** : username/password admin (pas de token API pour profiter du refresh auto). - **Dossier musique partagĂ©** : doit ĂȘtre le **mĂȘme path** que la bibliothĂšque musicale Jellyfin, pour que les fichiers tĂ©lĂ©chargĂ©s soient scannĂ©s. - **Cookies Spotify** : `cookies.txt` au format Netscape pour spotDL, permet 256 kbps au lieu de 128 kbps. - **IntĂ©gration Lidarr** : envoi automatique des artistes/albums dĂ©tectĂ©s comme manquants Ă  [[app-lidarr]] pour acquisition. - **Sync delta** : dĂ©tection des tracks ajoutĂ©s/retirĂ©s cĂŽtĂ© Spotify → ajout/suppression dans la playlist Jellyfin correspondante. ## Alternatives ### Open Source (maintenues) - **[[app-spotizerr]]** — alternative directe recommandĂ©e par l'auteur Jellyplist : API REST + UI web, gĂ©nĂšre des `.m3u` picked up par [[app-jellyfin]]. - **spotDL** — CLI Python de rĂ©fĂ©rence pour tĂ©lĂ©charger depuis URL Spotify, mature. - **Jellyfin SmartPlaylists plugin** (officiel) — playlists dynamiques basĂ©es sur rĂšgles, mais **pas de sync Spotify**. - **jellyfin-smartlists-plugin** (jyourstone) — fork plus avancĂ© du prĂ©cĂ©dent. - **Plex-Trakt-Sync** (autre Ă©cosystĂšme) — concept similaire, pas directement applicable. ### PropriĂ©taires - **Soundiiz** — service web de transfert de playlists entre services, freemium, fermĂ©. - **TuneMyMusic** — idem, freemium. - **Spotlistr** — Ă©quivalent plus ancien, fermĂ©. ## SĂ©curitĂ© - **Projet archivĂ©** : **ne pas dĂ©ployer en production** sans audit du code et correctifs pour la nouvelle API Spotify (les endpoints historiques utilisĂ©s par l'app sont en partie obsolĂštes). - **Credentials Spotify** : Client Secret dans `.env` Ă  protĂ©ger (chmod 600), ne pas commit. - **Cookies Spotify** : fichier `cookies.txt` au format Netscape, contient votre session → **accĂšs complet Ă  votre compte Spotify**. À stocker de maniĂšre chiffrĂ©e et Ă  rĂ©gĂ©nĂ©rer rĂ©guliĂšrement. - **Password admin Jellyfin** : Jellyplist utilise les credentials admin Jellyfin (pas juste un token), ce qui lui donne **accĂšs total** Ă  l'instance Jellyfin. Compromission de Jellyplist = compromission de Jellyfin. **Isoler sur un rĂ©seau dĂ©diĂ©** ou utiliser un utilisateur Jellyfin dĂ©diĂ© avec droits moindres (mais l'app requiert admin pour crĂ©er des playlists au nom de l'utilisateur). - **PostgreSQL exposĂ©** : par dĂ©faut le port 5432 est mappĂ© sur l'host, Ă  supprimer (`expose` au lieu de `ports`) pour ne pas exposer la DB. - **AGPL-3.0** : tout fork servi en rĂ©seau doit publier ses modifications. ## Ressources - Repository (archivĂ©) : https://github.com/kamilkosek/jellyplist - Issue d'archivage : voir README du repo - [[app-spotizerr]] (recommandĂ© par l'auteur) : https://github.com/spotizerr/spotizerr - spotDL : https://spotdl.readthedocs.io/ - Jellyfin SmartPlaylists : https://github.com/jyourstone/jellyfin-smartlists-plugin ## Pages LiĂ©es - [[cat-music]] — catĂ©gorie parente - [[app-jellyfin]] — serveur cible principal - [[app-spotizerr]] — alternative recommandĂ©e - [[app-funkwhale]] — autre serveur de bibliothĂšque - [[app-lidarr]] — intĂ©gration optionnelle - [[app-music-service]] — autre outil de la catĂ©gorie - [[app-traefik]] — reverse proxy - [[app-authentik]] — SSO - [[recettes-docker-compose]] — templates - [[securisation-home-lab]] — bonnes pratiques