feat: initial implementation of metadata aggregator
- gRPC service with MusicBrainz provider - PostgreSQL schema with migrations - Service layer with database-first caching - Repository pattern for data access - YAML configuration support - Research documentation for 17 music metadata projects
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# MusicMetaLinker
|
||||
|
||||
## Overview
|
||||
|
||||
Python library for entity linking and knowledge augmentation for music metadata. Links music tracks to external sources (MusicBrainz, AcousticBrainz, YouTube Music, Deezer) for metadata enrichment.
|
||||
|
||||
## Key Features
|
||||
|
||||
- **Purpose**: Entity linking across music databases
|
||||
- **Sources**: MusicBrainz, AcousticBrainz, YouTube Music, Deezer
|
||||
- **Matching**: Intelligent service selection based on available metadata
|
||||
- **License**: MIT
|
||||
|
||||
## Source
|
||||
|
||||
| Resource | URL |
|
||||
|----------|-----|
|
||||
| **Repository** | https://github.com/andreamust/MusicMetaLinker |
|
||||
| **PyPI** | https://pypi.org/project/MusicMetaLinker |
|
||||
|
||||
## How It Works
|
||||
|
||||
1. **Service Selection**: Evaluates available metadata, selects best external service
|
||||
2. **Information Retrieval**: Connects to service API, searches for best match
|
||||
3. **Filtering and Return**: Filters results, returns enriched metadata
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
from musicmetalinker import MusicMetaLinker
|
||||
|
||||
# Initialize with known metadata
|
||||
linker = MusicMetaLinker(
|
||||
track_name="Bohemian Rhapsody",
|
||||
artist_name="Queen",
|
||||
album_name="A Night at the Opera"
|
||||
)
|
||||
|
||||
# Get linked metadata
|
||||
track_name = linker.get_track()
|
||||
artist_name = linker.get_artist()
|
||||
album_name = linker.get_album()
|
||||
duration = linker.get_duration()
|
||||
isrc = linker.get_isrc()
|
||||
|
||||
# Get external IDs
|
||||
links = {
|
||||
'mbid': linker.get_mbid(),
|
||||
'isrc': linker.get_isrc(),
|
||||
'deezer_id': linker.get_deezer_id()
|
||||
}
|
||||
|
||||
# Or query by single identifier
|
||||
linker = MusicMetaLinker(mbid="b10bbbfc-cf9e-42e0-be17-e2c3e1d2600d")
|
||||
linker = MusicMetaLinker(isrc="GBUM71029604")
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install MusicMetaLinker
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Best for enriching existing metadata with external links
|
||||
- Automatic service selection based on input
|
||||
- Can query by MBID, ISRC, or Deezer ID directly
|
||||
Reference in New Issue
Block a user