MuMa (Music Management) combines the original Scrobbler and Music Importer projects into a single monorepo. The goal is to provide a cohesive toolchain for collecting, analysing, organising, and tagging music libraries.
modules/
importer/ # Automated downloading and importing pipeline (former Music Importer)
scrobbler/ # Scrobbling API, web UI, and analyzer worker
Planned modules that will join later:
modules/analyzer– shared analysis jobs that power recommendations and tagging.modules/tagger– dedicated tagging utilities lifted from the Music Importer project.
GitHub Actions (.github/workflows/muma-ci.yml) orchestrates the shared CI pipeline:
- Python unit and integration tests for the Scrobbler backend.
- Frontend build for the Scrobbler web application.
- Python unit tests (with coverage) for the Importer.
- Vitest suite for the Importer frontend.
- Multi-platform Docker builds for each deployable module. Images are tagged for GitHub Container Registry, and optionally Docker Hub when credentials are provided.
Every job runs from its module directory so individual dependency managers continue to work unchanged inside the monorepo.
Each module retains its native tooling.
cd modules/importer
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python -m unittestThe Importer web UI lives in modules/importer/frontend and is a SvelteKit project managed
with pnpm.
The importer exposes a runtime configuration service backed by a persisted store.
GET /api/configreturns the available fields with metadata, defaults, and current values.PATCH /api/configvalidates updates, saves them todata/config.json, and notifies listeners so downloaders pick up changes immediately.
The Svelte dashboard contains a Configuration panel that consumes these endpoints. Adjusting values in the UI lets you tweak paths, downloader credentials, or feature flags without bouncing the importer process.
cd modules/scrobbler
poetry install
poetry run pytestThe frontend for Scrobbler is inside modules/scrobbler/frontend and uses pnpm.
Each module ships its own Dockerfile. From the repository root run, for example:
docker build -f modules/scrobbler/docker/Dockerfile -t muma-scrobbler modules/scrobbler
docker build -f modules/importer/Dockerfile -t muma-importer modules/importerModule specific documentation lives alongside the source code:
modules/scrobbler/README.mdmodules/importer/README.md
These guides were updated to reflect the MuMa naming and directory layout.