Coder Social home page Coder Social logo

mixmix / ferment Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 80.0 3.84 MB

Peer-to-peer audio sharing and streaming application. Like SoundCloud but decentralized. A mashup of ssb, webtorrent and electron.

Home Page: http://ferment.audio

JavaScript 99.92% HTML 0.08%

ferment's Introduction

Ferment

Ferment is a peer-to-peer audio sharing 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.

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.

Requirements

  • You currently need to have ffmpeg on your system to add audio files.
  • Until I get around to creating a packaged app installer, you'll need a modern version of node and npm installed in order to build.

Install

from npm

$ npm install -g ferment

And then run using:

$ ferment

Install latest updates:

$ npm install -g ferment@latest

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

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! ๐Ÿป

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

120.138.27.120:43761:@uIL3USK7QJg5AHohnZC329+RXS09nwjc24ulFBH2Ngg=.ed25519~G0c0KMPSsZynwgM4wBLoUpfIyAP5gX9At2Ngs56tfmM=

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

Hosting Your Own Pub Server

See this guide for full info.

TODO

  • Scuttlebot database
  • Webtorrent streaming
  • Layout main application interface, base styles
  • Audio player interface
  • Sequencial feed playback
  • API for adding file (transcode, analyse waveform)
  • Upload interface [still needs more fields, and artwork]
  • Connect to local peers and merge streams
  • Store artwork in blobstore, and retrieve again
  • User setup (choose display name, bio, picture)
  • Specific Artist Feed
  • Proper play/pause/loading buttons (nice try emoji)
  • Follow other users ("friends")
  • Display following stats
  • Likes
  • Backgrounding (keep seeding / syncing when main window is closed)
  • Invite to pub
  • Make torrents more reliable via pub server trackers
  • Automatically download/seed from profiles you follow
  • Make Save / Download buttons work
  • Allow "delete" of audio posts (some kind of tombstoning)
  • Reposting
  • Playlists
  • Show seed stats
  • Allow revisions (some kind of special reply that replaces the content with new content)
  • Figure out a way to track listens? [Would be difficult given the decentralized nature of this. Might be better to show swarm strength or some other clever metric]
  • Commenting? This is a pretty major part of soundcloud, but I'm personally not really a fan

Server

  • Pub server (invites, etc)
  • Seed torrents from specified feeds
  • Web interface for viewing specified feeds

ferment's People

Contributors

mmckegg avatar

Stargazers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.