Free music for all
In the last months I have been struggling finding a place to upload my music. A digital town where I can have control of my data, where I am not a product but just a musician sharing their work. That's how I started to read about the ActivityPub protocol and slowly learnt how to successfully implement it.
Introduction
There’s too many reasons to create a platform that would share music in the Fediverse. Right now the best known options to do so outside the federated community are Spotify, SoundCloud, Bandcamp, and YouTube. Bandcamp, from all of these, is the lesser known and used, but with a very simple (and a bit old-styled) user interface it covers everything a final user needs. And what are these needs?
- Upload music for free.
- Group tracks into albums.
- Allow downloading the music.
- Add info to each track and album (title, lyrics, credits, cover…)
- Create a unique website for each artist that displays all their music and that is (partly) customizable.
- Users can be artists, labels or just users (just users mean they can like/bookmark music, follow artists, labels, etc).
- Allow searching albums, songs, artists or labels.
Fedicamp as an alternative
In this article all these basic specifications are very well explained. I share all the objectives with what's exposed there. I got the name “Fedicamp” from the same article, that at least temporarily, works fine for the project. And after reading and thinking about Fedicamp I started to structure a bit more the idea of making something like Bandcamp, but being part of the Fediverse. We should also be able to implement RSS and help a community of musicians that just wants to upload music. We don’t want to give all our tracks to evil companies that profit off our free labor in exchange of a simple hosting system.
Why not Bandwagon.fm?
There’s a decent alternative that it seems it was born from the idea of that article too. It is Bandwagon.fm. I am using it, it is the best we have so far! The platform works more or less okay, it does everything it should but it is actually a demo of a Fediverse framework that allows you to create federated apps for people who do not want to have much knowledge of ActivityPub. This makes this project hard to scale, since the code is not focused on music sharing and the developers are focused in two products instead of one.
Their appraoach needs a lot of time and pending work to feel like a finished product. It is a long way to do a product like that! But their structure makes the path a bit longer.
Also there are differences in the objectives of the project. Bandwagon is already implementing a Stripe payment gateway in a very early production stage. The idea is nice! I like that artists can get some money from their works. But Stripe is a pretty fucked up company that also charges a lot of money to the final users and Bandwagon had SO MANY features to improve or be released way before adding payment integrations. I would not add payment integrations to Fedicamp, or at least, not while the product still needs a lot of improvement.
I just want to upload the music of my bands and let others listen to it for free. For those who are more enthusiastic I want them to be able to run their instance that would be connected to mine. Nothing different than a Mastodon server in that part, no external companies, no ads, no payments. And, why not, we need that software to able to read and send music from/to Bandwagon.fm! So… we still need a Fedicamp I guess?
Status of the project
Fedicamp is a project that is still in a very early stage of development. From the specifications listed above so far I have none, because besides offering all that the software has to be readable, maintenable, scalable, secure and up to date on current technologies. And even having some code working fine it still lacks all these layers to be a real life production software.
The first step is to create Artists that can upload Albums with Tracks and that they can be shared on ActivityPub. Actually this was done today! Next steps is listing albums of the server, or only people that you follow (in the style of Mastodon, that you can see toots from people you follow, from the server or global).
Right now I am using SQLite but I’ll migrate to Postgre, and the cache that right now is in memory at some point it will be managed by Redis. Maybe the queues too. I have to think about a system to upload files (and consume them) efficiently and to implement a serie of security policies. Finally I also want to implement an ORM (right now I’m testing some) and a migration system for the database.
Probably in the way to get all this I will want to try to deploy it and test it or let someone test it. Deploying smoothly such a complex system will be also a big part of the project. We will see if I can arrive somewhere soon, I’ll keep you updated!