Sommaire
- Liens utiles
- Funkwhale, c'est quoi ?
- Genèse du projet
- Fonctionnalités
- Architecture technique
- Contributions
- La suite
Je viens de publier la version 0.7 de funkwhale, et je me suis dis que c'était l'occasion de présenter le projet un peu plus largement.
Liens utiles
Funkwhale, c'est quoi ?
On parle d'un serveur de musique sous licence libre (BSD-3, il n'est pas impossible que ça bouge), fortement inspiré de l'expérience proposée par le désormais défunt Grooveshark.com.
L'idée principale, c'est de pouvoir mettre sa bibliothèque musicale en ligne, l'écouter facilement depuis n'importe quel navigateur web, faire ses playlists, etc. Sur le papier, c'est assez similaire à ce qui est proposé par d'autres projets tels que Libresonic ou Sonerezh.
Genèse du projet
Suite à la fermeture de Grooveshark, en 2015, j'ai voulu trouver une alternative. Les projets existants à l'époque ne me convenaient pas pour diverses raisons. Je n'étais pas satisfait par l'interface de Subsonic, et les autres projets que j'avais trouvés était tous mono-utilisateurs ou peu pratiques d'utilisation pour des communautés.
je me suis donc mis au turbin, et j'ai commencé à travailler, pour voir, sur un clone libre et autohébergeable qui intégrerait ce dont j'avais envie, et qui ressemblerait à Grooveshark.
Sur le plan fonctionnel, ce premier prototype proposait un outil d'import de musique basé sur youtube-dl, des radios et un player plutôt confortable, mais souffrait de nombreux défauts, notamment dus à des erreurs dans la conception et dans le choix des technologies utilisées sur la partie front.
Néanmoins, le prototype fonctionnait et je l'ai utilisé pendant presque un an et demi pour mes besoins personnels.
Début 2017, j'ai pris sur moi de réécrire entièrement le front-end de l'application pour arriver au funkwhale d'aujourd'hui, plus performant, plus agréable d'utilisation, mais aussi plus facile à maintenir et à faire évoluer.
Le projet a maintenant atteint une certaine maturité (même si la 1.0 n'a pas encore été publiée), et j'ai ouvert récemment mon instance personnelle à un cercle plus large d'utilisateurs, pour collecter des retours et faire évoluer le tout.
Fonctionnalités
Funkwhale fournit avant toute chose un lecteur de musique dans son interface web. Celui-ci supporte la plupart des fonctionnalités d'un player moderne: liste de lecture, randomisation, boucle, favoris, etc.
Outre le player, funkwhale permet également de parcourir la bibliothèque musicale de l'instance, de l'enrichir via le module d'import. Des radios sont également proposées, qui permettent de lire automatiquement des musiques correspondant à certains critères (mes favoris, chansons peu écoutées, chansons d'un artiste, etc.).
Résolument multi-utilisateur, même s'il est possible de fermer son instance et de l'utiliser seul, le projet permet en théorie d'accueillir plusieurs centaines voire milliers d'utilisateur sur une même instance, même s'il n'existe à ce jour aucune instance aussi grosse.
Depuis peu, les utilisateurs peuvent créer leurs propres radios et les partager avec les autres membres de l'instance. Si vous êtes fan d'electro-swing, vous pouvez par exemple créer votre propre radio qui jouera dynamiquement les titres de vos artistes préférés dans ce genre.
Enfin, avec la version 0.7, le support des playlist a été ajouté, sur un mode similaire à celui des radios, puisque les utilisateurs peuvent partager leurs playlists.
Architecture technique
Le code est strictement découpé en deux composants:
- Une API REST, écrite en Python/Django, qui gère la bibliothèque musicale, les comptes utilisateurs, les données, etc.
- Une appli web (Single Page App, ou SPA) en VueJS, complètement statique et servie indépendamment de l'API, fournissant les fonctionnalités "finales": playlists, radios, player, import, etc.
Si la SPA est donc actuellement le seul client funkwhale, il est donc tout à fait possible d'écrire des clients alternatifs pour consommer l'API de funkwhale.
L'installation se fait relativement simplement, voire en 5 minutes si vous utilisez Docker.
Contributions
Si vous êtes intéressés par le projet, le site officiel fournit une page dédiée aux contributions. À l'heure actuelle, je suis le seul développeur à travailler sur funkwhale, même si j'ai déjà pu intégrer des contributions plus ponctuelles d'autres personnes.
Si vous vous sentez d'humeur curieuse, n'hésitez pas à faire un saut sur #funkwhale-dev:matrix.org, le salon Matrix dédié au développement de funkwhale. Techniquement, il y a vraiment de quoi se faire plaisir, que vous aimiez le front-end, le back-end ou l'UX!
La suite
Le prochain gros objectif pour le projet sera d'inclure de la fédération entre les instances. Pour des raisons évidentes de propriété intellectuelle, je pense que cette fédération concernera, au moins dans un premier temps, les interactions entre utilisateurs (recommandations, messages, etc.). Je pense utiliser pour cela le protocole ActivityPub, qui me semble adapté et permettrait une intégration avec l'écosystème existant, par exemple avec Mastodon.
J'aimerai également fournir une instance publique ne contenant que de la musique libre de droit. Cela permettrait de mettre en avant des contenus libres, ainsi que de tester funkwhale sur des panels d'utilisateurs plus larges et anonymes.
Bien entendu, il faudra également corriger les inévitables bugs et répondre aux demandes qui se présenteront entre temps ;)
Voilà, j'espère que ce journal vous aura donné l'envie de découvrir le projet, quoi qu'il en soit, merci de m'avoir lu !
# DSub
Posté par neilux . Évalué à 5.
Ça a l'air sympathique ! Ça donne envie de tester.
Est-il prévu que Funkwhale soit accessible avec des clients Subsonic* comme DSub ?
Merci pour ce soirnal.
[^] # Re: DSub
Posté par obsidien . Évalué à 4.
Si tu as envie d'essaayer, tu peux rejoindre le salon Matrix, je te fournirai le lien pour t'inscrire sur mon instance :)
Pour les clients subsonic et autres, complètement. J'ai un ticket ouvert la dessus, et cela fait partie des choses que j'ai oublié dans la catégorie "la suite" !
# ActivityPub
Posté par Chocobozzz (site web personnel) . Évalué à 8.
C'est franchement prometteur, bravo !
Je ne peux que t'encourager d'utiliser ActivityPub pour la fédération. En revanche je te conseille de fédérer aussi la musique, tout en donnant aux administrateurs d'instances des gardes-fous afin d'éviter d'avoir des problèmes avec des musiques sous droit d'auteur. Une musique est l'élément central de ton logiciel, si tu ne les fédères pas les interactions qui gravitent autour n'auraient pas beaucoup d'intérêt.
[^] # Re: ActivityPub
Posté par obsidien . Évalué à 2.
J'avoue que je suis encore très peu compétent sur les protocoles liés à fédération, même si je me documente pas mal en ce moment.
Je te rejoins sur le fait qu'une fédération complète serait idéale. Puisque tu es dedans, peut-être pourras tu répondre a ma question ? Dans peertube, la fédération des vidéos entre instances repose elle également sur ActivityPub ?
[^] # Re: ActivityPub
Posté par Chocobozzz (site web personnel) . Évalué à 4.
Oui et c'est comme ça qu'on arrive à avoir une fédération avec Mastodon. Par contre on ne fédère que les métadonnées, pas les fichiers vidéo : ils restent sur l'instance d'origine.
[^] # Re: ActivityPub
Posté par obsidien . Évalué à 2.
Ah oui, c'est vrai qu'avec webtorrent il n'y a pas besoin de fédérer les contenus ! Merci pour l'info en tout cas, il faudra que j'aille regarder l'implementation de peertube pour y voir plus clair.
# Typo
Posté par lGuillaume (site web personnel) . Évalué à 3.
Bonjour,
C'est Son*e*rezh. Les bretons apprécieront :)
[^] # Re: Typo
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Corrigé, merci.
# Reverse Apache?
Posté par Larry Cow . Évalué à 4.
J'espère avoir le temps de m'y consacrer un peu, mais si quelqu'un monte un reverse-proxy Apache2 fonctionnel d'ici là, qu'il n'hésite pas à faire tourner ;)
[^] # Re: Reverse Apache?
Posté par obsidien . Évalué à 2.
C'est vrai qu'actuellement, les guides de déploiement expliquent uniquement des déploiements avec Nginx comme reverse proxy. J'avoue que je connais très mal apache et que je serai donc bien en peine de contribuer cette documentation.
Pour information, la configuration Nginx requise au niveau du reverse proxy se trouve ici: https://code.eliotberriot.com/funkwhale/funkwhale/blob/develop/deploy/nginx.conf
Je serai ravi de reviewer/tester/merger une MR qui traduise cela en directive apache !
[^] # Re: Reverse Apache?
Posté par Larry Cow . Évalué à 3.
J'ai jeté un coup d'oeil très rapide à la conf nginx proposée. C'est encore un peu confus (je ne suis pas totalement hermétique à nginx, mais j'y ai moins d'habitudes que chez Apache).
[^] # Re: Reverse Apache?
Posté par obsidien . Évalué à 2.
Il y a des choses spécifiques au transcoding et à l'authentification sur les fichiers audio qui rendent le le tout plus complexe.
Ça doit probablement pouvoir se simplifier ou s'ecrire différemment sur du apache
[^] # Re: Reverse Apache?
Posté par steph1978 . Évalué à 3.
Tu veux dire un reverse apache en amont du python/django ?
# le désormais défunt Grooveshark.com.
Posté par Anonyme . Évalué à 1.
Etant utilisateur Grooveshack
Je me suis trouvé fort dépourvu quand le bise fut venue ..
Comment penses-tu te prémunir contre ce funeste destin ?
[^] # Re: le désormais défunt Grooveshark.com.
Posté par obsidien . Évalué à 2.
A vrai dire, je ne compte pas vraiment me prémunir contre quoi que ce soit : les personnes hébergeant une instance funkwhale seront responsables de ce qu'elles mettent sur leur instance, et d'avec qui elles le partagent.
D'autres part, il n'y a pas de point central a faire tomber comme avec un grooveshark ou un soudncloud : les instances fonctionnent en autonomie, et même s'il sera bientôt possible de les fédérer, la disparition.de l'une d'entre elle n'affectera pas les autres outre mesure :)
[^] # Re: le désormais défunt Grooveshark.com.
Posté par Anonyme . Évalué à 1.
Étrange il me semble déjà avoir entendu cet argument… n'est-ce pas dans le monde du peer2peer ? avant la mule me semble-t-il.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.