I've been working on a music streaming server + API and I was wondering if you would be interested in collaborating? mStream could provide a better web interface and a API to access BeetsDB over the web.
mStream's database was originally built to work with a Beets DB.. I had to move away from that due to needing some extra fields for mStream's internal workings, but it would be pretty easy to write some kind of adapter to get the projects to work in sync.
If you're interested you can check out the project here: https://github.com/IrosTheBeggar/mStream
The Web Interface: https://darncoyotes.mstream.io/
The API: https://github.com/IrosTheBeggar/mStream/blob/master/docs/API.md
Hey! Sorry for the delay! I鈥檝e been aware of mStream for a while and it鈥檚 a really cool project. It seems like it鈥檚 made a bunch of progress too since I last looked. The interface in the demo is looking really good.
I鈥檇 very much be interested in exploring a collaboration. Since beets doesn鈥檛 really focus on GUIs or players in general, it seems like an awesome way to leverage the strengths of both projects. Maybe it would be useful to hash out some ideas in real time sometime鈥攐ver IRC, for example?
IRC sounds good to me. When's a good time for you?
Great! I should have some time on Friday of this week, during the day in US/Pacific time. Might that work?
I'm available between 11-3 Pacific time.
I've been doing some thinking on how to integrate the projects and I wanted to write out some of my thoughts. The hardest part of integration is that mStream's DB has several extra mandatory columns that Beets doesn't have. The big ones are a sha256 hash column and an album-art path column. These two pieces of info are necessary in order to keep look-up times quick.
Here's two solutions I've come up with:
In this scenario, mStream would re scan the library using it's current code. The problem here is mStream and Beets may have slight differences due to processing edge cases differently. For example, if an mp3 has two sets of ID3 tags with different info, mStream and Beets may end up with different info in the DB.
The upside is we would both have to do minimal work to get the projects to work together. Also if DB structure where to change suddenly for either project, the system would continue to work.
In this scenario, when Beets finishes updating it would call mStream to update it's DB. mStream would then dump it's entire DB and repopulate it by querying Beets. This would ensure accuracy and improve speed, but we would have to write more code and test the future changes don't break anything
This is a good summary; thanks! I agree that the database location is sort of the central issue.
How about 2pm, on #beets?
2pm on #beets works for me
@sampsyo
My IRC knowledge is a bit rusty. What's the IP address for beets?
You can find the #beets channel on irc.freenode.net. There's a webchat client available here.
Just to recap the conversation:
The goal is to integrate Beets and mStream in 2 steps:
Step 1: Keep Beets and mStream separated. We need a Beets command that calls the mStream update function (similar to how Kodi works). I can write up some install docs to add to the Beets docs.
Step 2: Write a set of mStream plugins that add the UI + API endpoints necessary to interact with Beets. Before this can be done, a STDIO interface for Beets needs to be built.
The installation instructions for mStream can be found here:
https://github.com/IrosTheBeggar/mStream/blob/master/docs/install.md
Are there any clarifications or edits that should be made for the Beets docs?
This looks great! The installation instructions are succinct and clear.
Are the Beets docs stored in a repository somewhere? If so, how could I go about making a pull request to add mStream install instructions?
You can find all the documentation at /docs inside the repository. You can also find the exact path to a file on beets.readthedocs.io by clicking the "Edit on GitHub" link in the top right of the page.
Most helpful comment
Just to recap the conversation:
The goal is to integrate Beets and mStream in 2 steps:
Step 1: Keep Beets and mStream separated. We need a Beets command that calls the mStream update function (similar to how Kodi works). I can write up some install docs to add to the Beets docs.
Step 2: Write a set of mStream plugins that add the UI + API endpoints necessary to interact with Beets. Before this can be done, a STDIO interface for Beets needs to be built.