---
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
