Track Collection

I am not satisfied with my fragmented music library. I (think I) want a text-based solution that stores the information about my music library. This track collection would be the Single Version of the Truth (SVOT). This text-based solution would also be a Git repository to keep track of changes.

Format

Album:
    title: string
    type: ["SINGLE", "EP", "ALBUM"]
    record-label: string
    tracks: Track[]
Track:
    title: string
    artists: string[]
    bpm: number
    key: string
    tags: string[]
    additional-notes?: string[]

Example:

{
    "title": "Synergy",
    "type": "EP",
    "record-label": "Up The Stuss",
    "tracks": [{
        "title": "Pumpin'",
        "artists": ["Across Boundaries", "Chris Stussy", "Locklead"],
        "bpm": 133,
        "key": "4A",
        "tags": ["tech-house", "electronic", "opener"],
        "additional-notes": ["High pitched noises at the end", "Mix in early"]
    }]
}

Consumers

This track collection needs to work with different applications:

Nicotine+: I need to be able to select a track and get a formatted string to paste in the Nicotine+ search bar. The format is <Track.artists[0]> <Track.title>. This will probably not work all the time since the first artist on a track is not always the one listed in Nicotine+.

Spotify: My main streaming platform is Spotify, and I think it is not going to change anytime soon. This is because I switched a lot in the past, and came back to Spotify because most people use it. It is a better platform to share playlists with others and find new music through other peoples playlists. The playlist part needs to sync with Spotify so when I update the track collection the Spotify playlist reflects those new changes.

th7mo.com: The website is going to implement a view for the track collection. I need a fuzzy finding implementation and a flexible way to view all tracks.

Unknown: For DJ’ing I have local audio files (.wav, .flac, .aiff, .mp3). These audio files need to have the correct metadata (in rekordbox). This program needs to write the correct metadata to those local audio files.

Things to work out