156 lines
6.2 KiB
Markdown
156 lines
6.2 KiB
Markdown
---
|
|
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](https://funkwhale.audio) |
|
|
| **GitHub** | [https://github.com/funkwhale/funkwhale](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.
|
|
|
|
```yaml
|
|
# 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
|
|
- Site officiel : [funkwhale.audio](https://funkwhale.audio)
|
|
- Documentation : [docs.funkwhale.audio](https://docs.funkwhale.audio/)
|
|
- Communauté : Matrix `#funkwhale:matrix.org`
|
|
- Code source : [github.com/funkwhale/funkwhale](https://github.com/funkwhale/funkwhale)
|
|
|
|
## Pages Liées
|
|
- [[cat-activitypub-fediverse]]
|
|
- [[recettes-docker-compose]]
|
|
- [[app-castopod]]
|