https://github.com/vitalybe/radio-stream
A personal music streaming solution
https://github.com/vitalybe/radio-stream
beets electron kotlin music react react-native streaming
Last synced: 3 months ago
JSON representation
A personal music streaming solution
- Host: GitHub
- URL: https://github.com/vitalybe/radio-stream
- Owner: vitalybe
- License: mit
- Created: 2017-01-05T09:54:40.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-06-23T21:52:27.000Z (over 7 years ago)
- Last Synced: 2024-11-27T10:35:57.826Z (10 months ago)
- Topics: beets, electron, kotlin, music, react, react-native, streaming
- Language: JavaScript
- Homepage:
- Size: 12 MB
- Stars: 40
- Watchers: 7
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- jimsghstars - vitalybe/radio-stream - A personal music streaming solution (JavaScript)
README
Radio Stream - Development repository
====================================**NOTE:** These instructions are intended for developers of Radio Stream - If you just want to listen to music [go here](https://github.com/vitalybe/radio-stream-cli).
About
=====
**Radio Stream** is your personal music service that streams music automatically based on your listening habits.* **Your music** - Use your own music files without restrictions.
* **Automatic DJ** - Enjoy music immediately without choosing a specific song or album. The music is selected based on when you last heard it, its rating and more.
* **Dynamic playlists** - Want to hear only some of your music? Create a music playlist, e.g, only with genre Heavy Metal, and have the automatic DJ stream the music from that station.
* **Desktop and Mobile clients** - Listen to your music when you're on another computer or on your mobile phone.
* **Last.FM support** - Scrobble your music to Last.FM
* **Powered by beets** - Use the super-powerful [beets](https://github.com/beetbox/beets) and all its plugins to organize your music.You can read additional details and installation instructions [here](https://github.com/vitalybe/radio-stream-cli).
![]()
Architecture
============Overview
---------
Server
------
Composed of 2 main components.**Docker container**
Docker was used to provide easy deployment and minimize required configuration for the user. It consists of the following subcomponents:
* beets - A [fork of beets](https://github.com/vitalybe/beets) that adds a specialized plugin for generating automatic playlists, updating play counts, ratings, etc. The plugin by default is listening for HTTP requests on internal port.
* nginx - Exposes a single HTTP endpoint for clients. Based on the incoming URL it either serves as proxy for beets or exposes the underlying music files.**Launcher ([radio-stream-cli](https://github.com/vitalybe/radio-stream-cli))**
This is the server-side application that the user interacts with to control the docker container and execute beets inside it.
Client applications
-------------------Both clients are written with react-native and share a large portion of code.
* Android application - Developed using react-native.
* Desktop application - Developed using react-native-web, running on electron.Development
===========Getting started
---------------
git clone --recursive https://github.com/vitalybe/radio-stream
cd readio-stream
# Prepare test hooks
cp scripts/pre-commit .git/hooks/pre-commitThen proceed to a specific folder and follow its readme:
* Server - "[server](https://github.com/vitalybe/radio-stream/tree/master/server)" folder.
* Desktop application - "[web](https://github.com/vitalybe/radio-stream/tree/master/web)" folder.
* Android application - [mobile](https://github.com/vitalybe/radio-stream/tree/master/mobile)" folder.Contributions
=============Pull requests are most welcome. The main areas of focus I would love to see this project expand:
* Ability to create automatic playlists from clients.
* Ability to add music from clients - Currently requires to copy files to the computer running the server and running beet import funcionality.
* Unify web and mobile codebases - Since both electron and react-native rely on javascript, some code elements can be shared between the projects.
* Windows support - Should be relatively easy to do since electron supports windows already. Mac specific code is very minimal.
* Web-only mode - The native parts in this application are minimal so this shouldn't be too hard.
* iPhone support