Files
wiki/Catalogue-Self-Hosted/apps/app-funkwhale.md
T
2026-06-09 18:40:21 +02:00

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