Files
2026-06-09 18:40:21 +02:00

8.0 KiB

title, created, updated, type, tags, confidence, contested, sources
title created updated type tags confidence contested sources
Meelo 2026-06-07 2026-06-07 app
catalogue
music
music-streaming
meelo
python
fastapi
subsonic
opensaubsonic
vue
nuxt
high false
https://selfh.st/apps/?tag=Music
https://github.com/Arthi-2004/Meelo
https://meeloapp.github.io/Meelo/

🎼 Meelo

Serveur de streaming musical moderne écrit en Python (FastAPI) + frontend Vue/Nuxt, API Subsonic/OpenSubsonic complète et scanner multi-utilisateurs ultra-rapide conçu pour des bibliothèques jusqu'à plusieurs millions de pistes.

📋 Informations Générales

Métadonnée Valeur
Site web https://meeloapp.github.io/Meelo/
GitHub https://github.com/Arthi-2004/Meelo
License GPL-3.0
Langage Python (FastAPI) / TypeScript (Vue/Nuxt)
Étoiles 36
Dernière MAJ 2026-06-06
Catégorie cat-music

📝 Description

Meelo est un serveur de streaming musical personnel, moderne et ambitieux développé principalement par Arthi-2004. L'objectif affiché est simple : devenir le Navidrome-killer en proposant une UI contemporaine (Nuxt 3, design sombre Material-like) tout en conservant la compatibilité Subsonic/OpenSubsonic, plus des fonctionnalités avancées que ses concurrents n'ont pas (ou peu).

Côté backend, Meelo est écrit en Python avec FastAPI (asynchrone), SQLAlchemy 2 et Pydantic v2, ce qui lui confère une rapidité de scan et une consommation mémoire maîtrisée malgré des bases de données de plusieurs millions de pistes. Le frontend est une SPA Vue 3 / Nuxt 3 avec Tailwind, Pinia et un player HTML5 custom (sans dépendance lourde comme Preact/Tone.js). Le tout est distribué en deux images Docker (backend + frontend) ou en monolithe.

Fonctionnalités phares : API Subsonic/OpenSubsonic complète (donc compatible avec tous les clients Subsonic : app-symfonium, DSub, play:Sub, Substreamer, Feishin…), albums intelligents auto-générés (compils, éditions deluxe, volumes…), gestion fine des doublons et éditions multiples, listes de lecture collaboratives, scrobbling Last.fm / ListenBrainz, transcodage à la volée (FLAC → MP3/Opus), recherche full-text floue, et multi-utilisateurs avec permissions fines. Un système de "tracks preferences" permet à l'algorithme d'apprentissage d'améliorer les suggestions.

Cas d'usage : « j'ai une bibliothèque de 500 000 FLAC sur mon NAS, je veux un serveur qui scanne en moins d'une heure, propose une UI moderne type Spotify, et que mes apps mobiles préfèrent ». Meelo coche la case.

🚀 Installation

Option 1 : Docker Compose (recommandé)

# docker-compose.yml
version: "3.8"

services:
  meelo-backend:
    image: ghcr.io/arthi-2004/meelo-backend:latest
    container_name: meelo-backend
    restart: unless-stopped
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgresql+asyncpg://meelo:meelo@postgres:5432/meelo
      JWT_SECRET: changez-moi-en-production-32-chars-min
      ADMIN_EMAIL: admin@example.com
      ADMIN_PASSWORD: changez-moi-aussi
      SCAN_INTERVAL: "3600"
      TRANSCODING_ENABLED: "true"
      FFMPEG_PATH: /usr/bin/ffmpeg
    volumes:
      - ./data/backend:/app/data
      - ./music:/music:ro
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 5s
      retries: 3

  meelo-frontend:
    image: ghcr.io/arthi-2004/meelo-frontend:latest
    container_name: meelo-frontend
    restart: unless-stopped
    depends_on:
      - meelo-backend
    ports:
      - "8081:3000"
    environment:
      API_URL: http://meelo-backend:8080
      PUBLIC_URL: https://meelo.example.com

  postgres:
    image: postgres:16-alpine
    container_name: meelo-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: meelo
      POSTGRES_PASSWORD: meelo
      POSTGRES_DB: meelo
    volumes:
      - ./data/db:/var/lib/postgresql/data

Option 2 : Installation manuelle

Cloner le monorepo git clone https://github.com/Arthi-2004/Meelo.git, installer Poetry + Node 20, lancer le backend via poetry install && uvicorn meelo.main:app --reload (PostgreSQL requis), puis le frontend via pnpm install && pnpm dev. Pour la prod : pnpm build (génère un bundle statique servi par Nginx) + le backend derrière Gunicorn + Uvicorn workers dans un systemd unit. Prévoir 2-4 Go de RAM minimum pour 100 000 pistes.

⚙️ Configuration

Meelo se configure via variables d'environnement (12-factor) ou un fichier .env à la racine du backend. Les paramètres clés :

  • DATABASE_URL : connexion PostgreSQL (obligatoire, SQLite déprécié en prod).
  • JWT_SECRET : obligatoire, 32 caractères min, unique par instance.
  • SCAN_INTERVAL : intervalle de re-scan en secondes (défaut 1 h).
  • TRANSCODING_ENABLED + FFMPEG_PATH : active le transcodage à la volée.
  • LISTENBRAINZ_TOKEN / LASTFM_API_KEY : scrobbling.
  • MAX_UPLOAD_SIZE : taille max des uploads (pour la fonction d'upload web).

L'UI web propose un premier wizard : login admin, ajout du dossier de musique, choix du thème, configuration des providers de métadonnées (Spotify, MusicBrainz, Discogs). Toute la config peut ensuite être éditée depuis Settings → Server (changements persistés en base).

🔄 Alternatives

Open Source / Self-Hosted :

  • app-navidrome — Référence en Go, ultra-léger, plus mature.
  • app-funkwhale — Fédéré (ActivityPub), axé podcasts et audio social.
  • app-koel — UI plus "design", Laravel + Vue, plus gourmand.
  • app-gonic — Subsonic-compatible en Go, minimaliste.
  • app-jellyfin — Polyvalent (vidéo + musique) avec plugins.
  • app-kavita — Plus orienté livres/mangas (autre catégorie).

Propriétaire :

  • Plex + Plexamp — L'excellent Plexamp (gratuit avec Plex Pass) offre une expérience musicale aboutie, mais l'écosystème reste fermé et payant.
  • Spotify + Serveur personnel — Approche hybride, perd l'intérêt du self-hosted.
  • Apple Music iCloud Library — Verrouillage total, aucun contrôle.

🔒 Sécurité

  • Reverse proxy HTTPS obligatoire (Traefik, Caddy, Nginx Proxy Manager) — Meelo ne gère pas le TLS nativement.
  • JWT_SECRET : générer une chaîne aléatoire de 64 caractères (openssl rand -hex 32), ne jamais commiter le .env.
  • PostgreSQL : mot de passe fort, ne pas exposer le port 5432 sur l'interface réseau, uniquement via le réseau Docker.
  • Dossier musique en :ro : read-only dans le compose, Meelo n'écrit jamais dedans (sauf si vous activez l'upload web, dans ce cas prévoir un dossier uploads/ séparé).
  • Rate limiting : activer CrowdSec/Fail2ban au niveau du reverse proxy, Meelo ne l'implémente pas en natif.
  • Mises à jour : suivre les releases GitHub, le projet est jeune (alpha/beta) — ne pas déployer en prod critique sans tests.
  • Sauvegardes : pg_dump régulier de la base + le dossier data/ (cache transcodage, illustrations).

📚 Ressources

🔗 Pages Liées