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

6.2 KiB


title: Funkwhale created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, activitypub-fediverse, audio, musique, spotify, django, python, fediverse] confidence: high contested: false sources: [https://selfh.st/apps/?tag=activitypub-fediverse, https://funkwhale.audio/, https://github.com/funkwhale/funkwhale]

🎵 Funkwhale

Le serveur audio fediverse : hébergez, streamez et partagez votre bibliothèque musicale (et vos podcasts) sur une plateforme compatible ActivityPub, alternative libre à Spotify et SoundCloud.

Métadonnée Valeur
Site web https://funkwhale.audio
GitHub https://github.com/funkwhale/funkwhale
License AGPL-3.0
Langage principal Python (Django), PostgreSQL, Redis
Étoiles GitHub 46 (monorepo)
Dernière MAJ 2026-05
Catégorie cat-activitypub-fediverse

Description

Funkwhale est un projet mature du Fediverse : un serveur audio auto-hébergé, capable de gérer des bibliothèques musicales (artistes, albums, pistes), des podcasts et de la radio en direct (channels, lives). Le projet est né en 2016 dans la communauté décentralisée française et a depuis fédéré sa propre communauté multilingue.

La grande force de Funkwhale est l'interopérabilité : depuis la version 1.0, Funkwhale parle ActivityPub, ce qui permet à un compte Funkwhale de suivre un compte Castopod, PeerTube ou Mastodon. Le sous-projet Funkwhale Audio Federation pousse le concept plus loin : deux instances Funkwhale peuvent se fédérer et leurs utilisateurs découvrir/écouter les morceaux hébergés sur l'autre instance (équivalent de ce que propose PeerTube en vidéo).

Fonctionnalités principales : uploads de masse, transcodage via FFmpeg, import depuis Nextcloud Music, Subsonic API (compatibilité avec les clients classiques : DSub, Symfonium, play:Sub…), playlists partagées, favoris, signets, mode aléatoire, radios automatiques, podcasts RSS, modération complète, multi-utilisateurs avec quotas.

Points forts : mature (9 ans), Subsonic API = clients mobiles riches, transcodage, fédération audio, bonne documentation.

Points faibles : développement ralenti depuis 2024, monorepo complexe (funkwhale/funkwhale), configuration Docker non triviale, pas de algorithmes de recommandation natifs.

Installation

Via Docker (recommandé)

L'image officielle est funkwhale/funkwhale sur Docker Hub et funkwhale/front pour le front-end.

# docker-compose.yml
services:
  api:
    image: funkwhale/funkwhale:latest
    container_name: funkwhale-api
    restart: unless-stopped
    command: python /app/funkwhale_api/manage.py runserver 0.0.0.0:5000
    environment:
      DATABASE_URL: "postgresql://funkwhale:change-me@db/funkwhale"
      REDIS_URL: "redis://redis:6379/0"
      FUNKWHALE_HOSTNAME: "music.example.com"
      FUNKWHALE_PROTOCOL: "https"
      DJANGO_SECRET_KEY: "change-me-with-django.utils.crypto.get_random_string"
    volumes:
      - music:/music
      - static_data:/static
    depends_on:
      - db
      - redis

  celeryworker:
    image: funkwhale/funkwhale:latest
    restart: unless-stopped
    command: celery -A funkwhale_api.taskapp worker -l info
    environment:
      DATABASE_URL: "postgresql://funkwhale:change-me@db/funkwhale"
      REDIS_URL: "redis://redis:6379/0"
    depends_on:
      - db
      - redis
    volumes:
      - music:/music
      - static_data:/static

  front:
    image: funkwhale/front:latest
    container_name: funkwhale-front
    restart: unless-stopped
    ports:
      - "80:80"

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: funkwhale
      POSTGRES_PASSWORD: change-me
      POSTGRES_DB: funkwhale
    volumes:
      - db:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: unless-stopped

volumes:
  music:
  static_data:
  db:

Installation manuelle

  1. Installer Python 3.11+, PostgreSQL, Redis, FFmpeg
  2. Cloner le dépôt et créer un virtualenv Python
  3. Lancer pip install -r api/requirements.txt
  4. Configurer .env (DATABASE_URL, REDIS_URL, etc.)
  5. python manage.py migrate puis python manage.py createsuperuser
  6. Servir le front (build statique) via Nginx

Configuration

  1. Créer l'utilisateur administrateur via python manage.py createsuperuser
  2. Configurer le reverse-proxy (Nginx) avec HTTPS obligatoire
  3. Brancher un sous-domaine (music.example.com) et configurer FUNKWHALE_HOSTNAME
  4. Uploader des fichiers via l'interface web (.flac, .mp3, .opus supportés)
  5. Activer les imports Subsonic si vous avez déjà une bibliothèque (clients Subsonic = API activée)
  6. Activer la fédération (par défaut) et bloquer les instances indésirables via l'admin

Alternatives

Open source

  • app-castopod — pour le podcasting spécifiquement
  • app-bookwyrm — pour les livres, autre app fediverse Django
  • Navidrome — serveur Subsonic léger, mais pas ActivityPub
  • Jellyfin — média center complet, pas fediverse
  • Ampache — serveur audio Subsonic, pas fediverse

Propriétaires

  • Spotify — streaming centralisé, abonnement
  • SoundCloud — plateforme upload et partage
  • Apple Music / Google Play Music — fermés

Sécurité

  • HTTPS obligatoire : Funkwhale expose des streams audio, le MITM est un risque
  • Quotas utilisateurs : limiter la taille des uploads par compte pour éviter l'abus
  • Fédération : filtrer les instances suspectes via l'admin (rapports signalés)
  • Mises à jour : suivre les tags 1.x (le projet a un rythme de release lent mais régulier)
  • Sauvegardes : BDD PostgreSQL (durée d'écoute, favoris, comptes) ET music/ (la vraie bibliothèque)

Ressources

Pages Liées