moe

The ultimate tool for managing your music.

https://github.com/moemusic/moe

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.5%) to scientific vocabulary

Keywords

music music-library python3

Keywords from Contributors

diffusers transformers distribution mesh genomics annotation embedded climate benchmarking bioinformatics
Last synced: 6 months ago · JSON representation

Repository

The ultimate tool for managing your music.

Basic Info
Statistics
  • Stars: 92
  • Watchers: 6
  • Forks: 4
  • Open Issues: 1
  • Releases: 64
Topics
music music-library python3
Created over 5 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog License

README.rst

###############
Welcome to Moe!
###############
Moe is our resident Music-Organizer-Extraordinaire who's sole purpose is to give you full control over your music library by streamlining 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.

Because all of this functionality is available as a python API which doesn't always require a database of music to operate on, Moe also provides an extensive suite of tools for handling and operating on music files. This can greatly simplify or enhance any other script/program that deals with music.

Usage
=====

CLI
---
Moe comes with a command-line interface which is how most users will take advantage of the library management features. Below is a screenshot of Moe importing an album from the filesystem and adding it to the underlying database all while fixing tags, relocating the files, and anything else you can imagine.

.. image:: _static/import_example.png

Once added to Moe, querying your library or manipulating your music by editing tags, renaming files, etc. is all just a single command away. The ultimate goal is to automate away any tedius and time-consuming steps you have in your workflow without sacrificing the attention to detail. With the help of an *extremely* flexible plugin system, you can easily fine-tune your music library exactly how you like.

Library
-------
As previously mentioned, all of Moe's music management logic and functionality is also available as a python library. As an example, below is a standalone script that takes an album directory and Musicbrainz release ID from the command-line, and then updates the underlying files' tags with any changes from Musicbrainz.

.. code:: python

    #!/usr/bin/env python3

    import argparse
    from pathlib import Path

    from moe.config import Config, ConfigValidationError
    from moe.library import Album
    from moe.write import write_tags
    import moe.plugins.musicbrainz as moe_mb

    def main():
        try:
            Config(config_dir=Path.home() / ".config" / "my_script", init_db=False)
        except ConfigValidationError as err:
            raise SystemExit(1) from err

        parser = argparse.ArgumentParser(
            description="Update an album with musicbrainz tags."
        )
        parser.add_argument("path", help="dir of the album to update")
        parser.add_argument("mb_id", help="musicbrainz id of the album to fetch")
        args = parser.parse_args()

        album = Album.from_dir(Path(args.path))

        album.merge(moe_mb.get_album_by_id(args.mb_id), overwrite=True)

        for track in album.tracks:
            write_tags(track)


    if __name__ == "__main__":
        main()

This is just a small taste of what Moe is capable of and how it can make your life easier when dealing with music.

Why Moe?
--------
While powerful music taggers like `beets`_ exist, Moe was developed to address several fundamental, long-standing issues in the music tagging space and aims to provide a more modern and extensible platform for both users and developers.

Key Differentiators
~~~~~~~~~~~~~~~~~~~
* **First-Class Support for "Extras":** Moe treats "extra" files like artwork, booklets, and log files as integral components of an album and manages them as first-class objects in your library.
* **Multi-Value Tag Support:** Moe supports multi-valued tags, addressing a common limitation in other taggers often restricted to single values or limited multi-value tag support.
* **Highly Extensible Plugin System:** Moe's plugin system is inspired by pytest, utilizing a powerful hook system. This allows plugins to extend or modify the behavior of Moe's core components and even other plugins, simplifying plugin development and providing lots of customization options. It's extremely easy to create local plugins to complement your configuration, or to publish ones to PyPI for others to use.
* **Metadata-Source Agnostic:** Metadata sources such as Musicbrainz are implemented as standalone plugins that can be added or removed based on your preferences.
* **Modern, Maintainable, and Library-First Architecture:**

  * **Library First:** Moe is built as a library before a CLI. This enables easy integration of Moe's logic into other programs and supports the development of alternative user interfaces.
  * **Modern Tooling:** It leverages mature libraries such as `SQLAlchemy`_ for database management and `pathlib`_ for path handling. This approach greatly reduces the maintenance overhead that comes with hand-rolled solutions for complex issues.
  * **Contribution Friendly:** A lean core, high test coverage, and modern architecture make Moe approachable for new contributors and make it easy to introduce new changes.

.. _beets: https://github.com/beetbox/beets
.. _SQLAlchemy: https://www.sqlalchemy.org/
.. _pathlib: https://docs.python.org/3/library/pathlib.html

If you want to learn more, check out the `Getting Started `_ docs.

Owner

  • Name: MoeMusic
  • Login: MoeMusic
  • Kind: organization

GitHub Events

Total
  • Create event: 28
  • Issues event: 2
  • Release event: 7
  • Watch event: 14
  • Delete event: 21
  • Issue comment event: 68
  • Push event: 58
  • Pull request review event: 54
  • Pull request review comment event: 44
  • Pull request event: 47
Last Year
  • Create event: 28
  • Issues event: 2
  • Release event: 7
  • Watch event: 14
  • Delete event: 21
  • Issue comment event: 68
  • Push event: 58
  • Pull request review event: 54
  • Pull request review comment event: 44
  • Pull request event: 47

Committers

Last synced: over 2 years ago

All Time
  • Total Commits: 633
  • Total Committers: 6
  • Avg Commits per committer: 105.5
  • Development Distribution Score (DDS): 0.144
Past Year
  • Commits: 91
  • Committers: 4
  • Avg Commits per committer: 22.75
  • Development Distribution Score (DDS): 0.352
Top Committers
Name Email Commits
Jacob Pavlock j****k@g****m 542
Moe bot u****n 55
GitHub Action a****n@g****m 29
dependabot[bot] 4****] 3
Moe bot 2
ali-ramadhan a****n@g****m 2
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 6
  • Total pull requests: 149
  • Average time to close issues: 4 months
  • Average time to close pull requests: 2 days
  • Total issue authors: 4
  • Total pull request authors: 3
  • Average comments per issue: 1.83
  • Average comments per pull request: 1.06
  • Merged pull requests: 137
  • Bot issues: 0
  • Bot pull requests: 36
Past Year
  • Issues: 1
  • Pull requests: 35
  • Average time to close issues: 4 days
  • Average time to close pull requests: 8 days
  • Issue authors: 1
  • Pull request authors: 3
  • Average comments per issue: 2.0
  • Average comments per pull request: 2.54
  • Merged pull requests: 31
  • Bot issues: 0
  • Bot pull requests: 7
Top Authors
Issue Authors
  • ali-ramadhan (3)
  • optimalprocedure (1)
  • arsaboo (1)
  • jaimet (1)
Pull Request Authors
  • jtpavlock (118)
  • github-actions[bot] (44)
  • ali-ramadhan (16)
Top Labels
Issue Labels
enhancement (1) core (1) bug (1) plugin: musicbrainz (1) status: need info (1)
Pull Request Labels

Packages

  • Total packages: 2
  • Total downloads:
    • pypi 279 last-month
  • Total dependent packages: 2
    (may contain duplicates)
  • Total dependent repositories: 3
    (may contain duplicates)
  • Total versions: 60
  • Total maintainers: 1
pypi.org: moe

The ultimate tool for managing your music library.

  • Versions: 48
  • Dependent Packages: 2
  • Dependent Repositories: 3
  • Downloads: 279 Last month
Rankings
Dependent packages count: 3.1%
Stargazers count: 8.1%
Dependent repos count: 9.0%
Average: 11.2%
Forks count: 16.8%
Downloads: 18.7%
Maintainers (1)
Last synced: 6 months ago
conda-forge.org: moe
  • Versions: 12
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 34.0%
Stargazers count: 38.0%
Average: 45.1%
Dependent packages count: 51.2%
Forks count: 57.4%
Last synced: 6 months ago

Dependencies

pyproject.toml pypi
  • black ^22.6.0 develop
  • commitizen ^2.17.12 develop
  • darglint ^1.8.1 develop
  • debugpy ^1.4.1 develop
  • flake8 ^5.0.4 develop
  • flake8-alphabetize ^0.0.17 develop
  • flake8-bugbear ^22.7.1 develop
  • flake8-comprehensions ^3.10.0 develop
  • flake8-docstrings ^1.5.0 develop
  • flake8-pytest-style ^1.6.0 develop
  • flake8-use-fstring ^1.1 develop
  • github3.py ^3.2.0 develop
  • isort ^5.10.1 develop
  • pre-commit ^2.6.0 develop
  • pypandoc ^1.8.1 develop
  • pyright ^1.1.267 develop
  • pytest ^6.0.1 develop
  • pytest-cov ^2.10.0 develop
  • SQLAlchemy ^1.4.15
  • Sphinx ^4.0.2
  • Unidecode ^1.2.0
  • alembic ^1.4.2
  • dynaconf ^3.1.4
  • furo ^2021.7.5-beta.38
  • mccabe ^0.7.0
  • mediafile ^0.6.0
  • musicbrainzngs ^0.7.1
  • pluggy ^0.13.1
  • python >=3.7, <3.11
  • pyyaml ^5.3.1
  • questionary ^1.9.0
.github/workflows/ci.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • codecov/codecov-action v3 composite
.github/workflows/prep_release.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/preview_docs.yml actions
  • readthedocs/actions/preview v1 composite
.github/workflows/release.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • ncipollo/release-action v1 composite