I created Moe: a program for managing your music library

I made Moe to help streamline the process between downloading/ripping music to your filesystem and listening to it with your favorite music player.

In short, Moe maintains a database of your music library that can be updated with various metadata sources, queried, edited, etc. through either an API or command-line interface. All of these features, and more, are made available by a highly extensible plugin ecosystem.

If you have used beets before, it’s similar to that except for the following main differences:

  1. Multiple-value fields supported
  2. Support for extras/artifacts i.e. all the non-music files that come with albums. Moe keeps track of them and treats them as part of the album. There’s minimal features surrounding these “extras” now, but over time I can imagine features specific to different types of files.
  3. I think the plugin implementation is more flexible and allows for more extensibility. I use the same plugin system as pytest and it can be extended to alter almost anything provided I create hooks. This lets plugins extend plugins too and so on. There’s also an low barrier to create local plugins to compliment your configuration, or to publish your plugin to pypi to share.
  4. Metadata-source agnostic. Unlike beets, musicbrainz isn’t hard coded into the core and is simply a drop in option that can be replaced at any time. It would be easy to pull tags from musicbrainz, genres from lastfm, and popularity stats from spotify for instance (provided the other sources are implemented).
  5. I think in general beets is difficult to maintain and work on. Poor test coverage, hand rolled solutions for things like paths and database integration, and niche plugins merged into the core repository further expanding the already massive codebase. My goal is to make moe approachable for contributors and easy to maintain in general while promoting third party plugins. The technical barrier to implementing anything other than minor features or bug fixes in beets these days is quite large.
  6. Moe is a library first, and a cli second, which is the opposite from beets. While not the immediate goal, it would be easy to implement other UIs, or integrate moe into other programs.

I hope I’m not breaking any rules posting this here, I thought this forum may be interested in it as the main, and currently only supported, metadata source Moe uses is musicbrainz. I just released v1.0, so I’m sure there’s plenty of bugs I’ve missed, and there’s plenty of features yet to be implemented. If you encounter any bugs or you’d like to open a feature request please do so on github.

In general, I also wholeheartedly welcome any and all contributions from others, and would love to see others join in on helping further Moe along its journey to become the ultimate music manager.

11 Likes

Thanks for your effort.

Maybe you should mention that Moe needs python (Python >=3.9, <3.11 according to PyPi?) as requirement and has to be installed on a command line with
$ pip install moe

There is no ready-to-use windows (or any other) binary, right?

1 Like

Correct. Also, the installation steps are in the getting started page of the docs, linked in the project readme, but perhaps I should have also mentioned it here. Thanks for bringing light to it.

2 Likes