TL;DR
Dear Funkwhale community,
There are issues with libraries, we have ideas to solve them, and we could use your input.
Once upon a time…
Back in the early days of Funkwhale, library was a monolithic storage for a whole Funkwhale instance, so pod administrators could upload their music. Since then, per-user libraries were introduced, bringing people with an account the possibility to upload their own content, decide which libraries to share, with whom (instance, followers, or keep private). That was four years ago already, and arguably this is one of the greatest feature of Funkwhale. So everything is for the best, right? Not quite.
As soon as Funkwhale 0.17 got released, libraries became a central part of the user experience. There are many things one can do with a library: create it, give it a name and a description, give access to it, upload content to it, browse it, follow it… Unfortunately, all those actions have flaws, more or less bothersome taken separately, but when combined altogether result in a cumbersome experience. So we've been asking the following question: what's wrong with libraries?
An ambivalent word
Library as a word is confusing. As stated earlier, it used to be the unique storage place a pod could hold. Since then, its definition shifted. Nowadays, it refers to very orthogonal ideas depending on what part of the UI we are looking at:
- in the sidebar, the library contains the whole set of music attached to peoples' account, including some remote content (favourites).
- on the /content/libraries page, libraries are the global storage people have to manage (feed in, purge…)
- on the /content/libraries page, libraries are containers for people to organise subsets of their music
- on the /content/libraries page, libraries are a mean to share subsets of their music
- on other people's page, libraries have a follow button to widen the catalog of content to browse
- on artist page, they are for discovering related contents
This results in a fuzzy concept, and we think this fuzziness is at the root of some of the biggest issues we have with libraries. Namely uploading and organising content. We need clearer definitions.
Digging the history
We've been digging into Funkwhale community's past discussions to shed some light on libraries current state and their initial goals. Fortunately we are not left blind here.
At the time of Funkwhale 0.17, Agate shared her reasoning behind the current implementation of library of library. In an other message, she draws the big picture where libraries were taking place. The orientation the project was aiming for was to connect people to each other, allowing them to recommend music and discover new things based on common tastes.
In November 2019 on Matrix, where Agate was helping us to understand what libraries were, and to distinguish them from radios. I quote:
library is a collection of audio files (as: this file is stored in this library)
library is for storage / sharing
Goals
- use separate wordings to convey distinguishable ideas
- avoid hefty management of current libraries (upload, deduplication, and purge)
- make organisation of music a breeze
- make interactions with other people's "libraries" consistent and predictable
- give a clear visibility over what is shared with whom
- give a clear visibility over what's in a library
What others do
Let see if there is inspiration to take from other projects.
The gaming world
Steam allows to organise players game library into collections. It also sports dynamic collections, to automatically organise games based on tags and filters. The announcement on their blog shows what it looks like.
GoG also has some kind of dynamic collections: they allow to save filters as bookmarks on the one hand, and on the other hand they allow to add tags to games, so that they could be retrieved through bookmarks. A blog post [talks about it][https://www.gog.com/news/6_cool_things_you_can_do_in_gog_galaxy_20_that_you_might_have_missed).
Media players
Amongst media centers, Plex has both collections and libraries. The first one are meant for organising content of a same kind, the second are more like top-level containers related to media types (music, TV shows, movies…).
Music streaming platforms like Spotify, Youtube Music or Apple Music all have a similar concept of library. We could define it as the whole set of music hosted on the platform and attached to a user account.
Proposal
Breaking it up
In order to make things easy to grasp for users, and maybe help with the underlying technical issues that make use of library so odd, I propose to solve the "library" ambiguity by breaking it up into the pieces below.
Library (idea #1). This is the concept people are likely already familiar with. We keep this wording in the sidebar, and in the few places where it is relevant.
Storage (idea #2). It would be attached to a user account, instead of being attached to a library. This way content could be uploaded once, and used many times. Deduplication and purge mechanisms would not get in the way each time someone tries to organize something. Bandwidth, time and nerves would be preserved.
Collections (ideas #3 #4). This would be the new name we give to the containers that allow simultaneously to organise and to share content.
Adding remote collections to library
Wherever the pod they are hosted, followed collections should appear in the library. For more clarity, we could even change the label of the "follow" button to "add to library".
Adding content to collections
By allowing people to organize content and share it altogether, collections can be seen as part of a human-based, non algorithmic recommendation system. Going this road, Funkwhale UI should encourage
creating multiple smaller libraries of somehow related content, rather than into a few rag-bags of audio files. Adding music to (and removing music from) collections should be easy and straightforward.
People should have the possibility to add any album, playlist or track to a (new or existing) collection of their own, and doing so would make the content part of their library, even when the files are hosted on a remote pod.
Dynamic collections
Pre-defined collections could help make obvious where music in the library comes from. Like Uploads (for all content uploaded to a given library), Followed (for all content fetched from any followed collection), and Favourites (for all favourites, whether the files were uploaded or fetched from remote collections).
Conceptually this overlaps very much with radios. Just it would be presented like albums, playlists and tracks to browse, instead of being an automatically feeded queue of tracks like radios are.
Previous discussions
Back in March 2021, we used to talk about the differences between channels and libraries in the perspective of artists.
In July 2021, we concluded that if we were to rename the libraries for collections, we would have to rename API endpoints. So it has been instead proposed to keep the libraries with their API, and simply rename "My Library" to "My Collection".
August 2022, we have an opportunity to bring new API endpoints if we were to rename libraries.
Request for comments
Thanks for reading! Do not hesitate to drop your questions and share your thoughts.