Better Interoperability

Hello beets community,

I’m working on forte, a tool to make personal music collections searchable
and streamable. Check out the demo version of the (incomplete) web interface
using mock data.
We plan to add native iOS and Android apps along
with support for voice assistants like Amazon Alexa and Google Assistant.
Check out our github to see our progress (and contribute!).

I was listening to a podcast where @adrian, expressed interest in beets
being not only a music organizer, but also a tool to access your music from
other devices. Let’s make this vision a reality. We’d like your thoughts on
how we can connect beets and forte together.

Beets is awsome. It adds all kinds of fun metadata to audio files like
musicbrainz identifiers and lyrics. We’d like to integrate with beets for two reasons:

  1. Beets can add metadata to music without modifying the original tags by
    storing it in the beets database

  2. Beets collects high quality data from many sources.

When we looked at what it would take to integrate with beets, we found two pain points:

  1. The export plugin doesn’t expose the path of the audio files. There doesn’t
    seem to be be any way to get access to the audio files. Why is this? Are you
    willing to expose it?

  2. The field names of the export plugin are implementation details of beets. How
    often do these field names change? Only during major versions?

I think these issues could be easily fixed by us simply writing our own beets
plugin, but forte seems to solve a problem this project shares. I would really
appreciate the community’s input on how connecting these two pieces of
software together could look.

Here’s how I think integration will look:

The user will already have their library managed or indexed by beets. Where
managed means that beets owns a folder where it has moved all music imported
into beets and indexed means that beets has only added metadata in its
database and linked to the original files with their original tags. At some
point, either automatically or manually, a command is called on the forte cli
(probably something like forte sync beets) with a dump of the current beets
database. Our code then updates our database to match the data from beets.