7.7 KiB
title, created, updated, type, tags, confidence, contested, sources
| title | created | updated | type | tags | confidence | contested | sources | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Jellyplist | 2026-06-07 | 2026-06-07 | app |
|
medium | false |
|
📋 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)
# 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)
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.txtau 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
.m3upicked 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.txtau 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 (
exposeau lieu deports) 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