git ssb

5+

Matt McKegg / ferment



Tree: 13868e1aa6a7204af20406c760dac884fd24fdf1

Files: 13868e1aa6a7204af20406c760dac884fd24fdf1 / README.md

10724 bytesRaw

<h1 align="center">
<br>
<a href="http://ferment.audio"><img src="/ferment-logo.png" alt="Ferment" width="200"></a>
<br>
Ferment <br>
<br>
</h1>

Ferment is a peer-to-peer audio publishing and streaming application. It is an attempted re-creation of classic SoundCloud, but runs entirely decentralized instead of one corporation and its investors holding all the power. ๐Ÿ’ž ๐Ÿป

It is made possible by combining these amazing projects: ssb, webtorrent and electron.

๐Ÿ“บ Watch a quick video demo

๐Ÿ”ฝ Download for macOS

๐Ÿ›  Build from source

๐Ÿ’– Donate and support me on Patreon

<img src="/assets/ferment-screenshot-0.0.0.jpg" alt="WebTorrent" width="888" height="688" />

Experimental // EVERYTHING IS SUBJECT TO CHANGE AND BREAKING!

I'm just fiddling with ideas right now. My goal is to replace my need for SoundCloud as a backyard musician that uploads WAY to much stuff. I no longer want to pay them $200 a year to host it all (also sick of being told to pay more money to get SoundCloud Go and having my feed ransomed out from underneath me).

The long-term vision โœจ

I want to see a thriving audio sharing community (actually would be COMMUNITIES! it's decentralized), a lot like SoundCloud used to encourage before it had to MONETIZE and start trying to make a profit (AND OH NOEZ, WE'RE GOING BANKRUPT ๐Ÿ˜ž). Pretty sure that SoundCloud was doomed from the start (so glad we had all these great years off the pocket of those investors), but a peer-to-peer decentralized not-for-profit open source might just work!

It will also soon be possible to host your own server that allows people without the app to stream music from your profile (or others that you want to seed). This will still be peer-to-peer but your server will act as a mirror and tracker.

How it works

Ferment uses a peer-to-peer gossip protocol called Secure Scuttlebutt. The best part about this is there is no central server and no single point of failure. In fact everyone on the network is a server, with a copy of all of their friends and their friend's friends data. You gossip with other peers to find out if any of your shared contacts have any new posts and share them. But by gossip, we mean cryptographically prove everything they've said since the last time you heard from them. It is impossible to skip a message.

Finding peers across the complex topography of the internet is pretty difficult though. This is where pub servers come in. They act as gossip hubs where information can be shared across networks. A pub is just an ordinary Ferment peer that has a publicly accessible IP address and can be remotely connected to on demand.

The actual audio files are just torrents (a special variant called webtorrent that works over WebRTC). The SSB message contains a reference to its magnet url, and you seed the file to other ferment peers.

Whenever you listen to something in Ferment, you start seeding that file with other peers. It will be cached on your machine until you remove it (right-click > Stop Sharing Post). In the future this will be handled automatically (you'll only cache material you have "liked" and selected content from followed users that are weak on the network).

Ferment is an audio publishing platform for copyright-owning creators and creative commons licensed material. As this is a decentralized, peer-to-peer community, what you culture in your network is up to you. You get to choose what level of sharing legality you are comfortable with.

For example, if someone in your network adds copyrighted material, and you listen to it, your Ferment will start sharing the file. If you don't want to share the legal responsibility for this, right-click and select 'Stop Sharing Post.'

You could also consider unfollowing them and reporting the infringement to the owner of the pub to prevent the spread of the material.

A pub owner should unfollow anyone who adds material which infringes copyright.

Requirements

If there is no packaged app for your platform, you'll need to build from source using modern version of node and npm.

Install

on macOS

Download the latest release here!

Make sure you read the section of this readme titled "Joining Pub Server"!

from npm

$ npm install -g ferment

And then run using:

$ ferment

If you get an error appear saying something like Module version mismatch. Expected 50, got 48., try running the following:

# requires automake on your system
$ ferment --rebuild

Install latest updates:

$ npm install -g ferment@latest && ferment --rebuild

If you get weird issues, trash it and reinstall:

$ npm rm -g ferment

from source

Warning: Development is done on the master branch, so this could be broken right now!

$ git clone https://github.com/mmckegg/ferment.git
$ cd ferment
$ npm install

And then run using:

$ npm start

Install latest updates:

$ npm update
$ npm run rebuild # make sure native add-ons are compatible with electron version

If you get weird issues, trash your ferment/node_modules directory:

$ rm -rf node_modules
$ npm install

Joining Pub Server

By default, Ferment will only see other users that are on the same local area network as you. In order to share with users on the internet, you need to be invited to a pub server.

Since I'm a nice person ๐Ÿ’– you can hang out in my pub, and you don't even have to buy any drinks! ๐Ÿป But please be mindful about uploading content that you do not own the rights to. My pub will unfollow anyone who uploads content that I don't think is fair to the original creators.

Click 'Join Pub' on the sidebar then paste the code below:

pub.ferment.audio:43761:@uIL3USK7QJg5AHohnZC329+RXS09nwjc24ulFBH2Ngg=.ed25519~MqAyQji/+ZHHtq9JM8Dl/w6hOujxXAxlOpYiFUfLgRM=

NOTE: To avoid destroying my server, this code can only be used a limited amount of times. Please post an issue if it doesn't work for you, and I'll generate a new one.

If all goes to well, you'll start to see audio appear before your eyes! Give that play button a spin.

However, if you don't see anything appear after about 30 seconds, try restarting ferment. It may take a minute or two before it appears. You should be all good as long as +connected pub.ferment.audio:43761:.... appears in your terminal.

If you receive an error message, it probably means my pub server has locked up. This seems to be happening a bit at the moment, trying to get to the bottom of it. Let me know and I'll restart it. In the mean time, you could start creating a shiny profile and adding some tunes!

Publishing Audio

You can share audio with your followers by clicking the "+ Add Audio" button in the top right corner of the screen. Make sure you read the section about copyright before publishing anything!

After choosing a file and pressing Publish, Ferment will convert your audio into a format that compresses and streams well. At this point, you will start to seed the file.

To make sure other people can play your file, you'll need to wait until the status changes from "Waiting to share ๐Ÿ’–" to the beer ๐Ÿป icon. Other users and pubs that follow you should start seeding your post soon after you add it, but if this doesn't happen for a few minutes, restarting Ferment can help.

On start-up, Ferment checks the files you have cached (or added) against the tracker and prioritize seeding the rarest files on the network. However, any files you play will start seeding immediately.

Hosting Your Own Pub Server

See this guide for full info setting up scuttlebot.

Ferment flavoured pub server

Ferment includes it's own bundled server app that you can run which also functions as a tracker and torrent seeder. It also scopes the network, only replicating ferment feeds with you (rather than the normal 3-hop friend replicate, which gives you a bunch of other ssb data, which you won't be able to see but takes up hard-drive space and makes things slow for no reason).

This is all super undocumented now. Eventually there will be a one-click style install. Or at least some step by step instructions for different platforms.

Here's a hint to get started:

xvfb-run npm run server -- --host={yourhostname} --seed {YOUR_ID}

TODO

Server

License

GPL-3.0

Built with git-ssb-web