Giter Club home page Giter Club logo

meelo's Introduction

Meelo

Your music, your files, your experience

Coverage (Back-end) Maintainability Rating

Meelo is a music server and application to enjoy your personal music files anywhere, anytime you want. This project is made by and for music collectors. Its goal is to have a clean, organized, easy and accessible way to store and serve files.

Get started! Look over here for setup instructions

Features

  • Files organized in Libraries
  • Scan for new files, and remove deleted files
  • Music Organization close to a Music Collector's collection
    • Artist
    • Album
      • Releases
    • Songs
      • Primary and secondary artists
      • Tracks
      • Versions
  • Access, stream, and download songs from your server
  • Music Videos
  • B-Sides
  • Playlists
  • Metadata scan using:
    • Embedded tags (including bitrate)
    • Path of file, using customizable Regular Expressions
    • Either using one of the two, or the two combined
  • Album Typing
    • Studio Recording, Single, Live Album, Video Album, Soundtrack Album, ...
  • Song Typing
    • Original Version, Demo, Instrumental, Remix, Acoustic, Edit, Clean, ...
  • ... And allow filtering based on items' types
  • Embedded and inline artwork file handling
  • External Metadata Providers (Optional)
    • Genius, MusicBrainz, Wikipedia, Discogs, Metacritic, Allmusic
  • Automated Lyrics download
  • User management
  • Multi-language support
    • English
    • French

Keep track of the upcoming features with the project's issues

Why Meelo could be what you are looking for

Plex, Beets, Koel, as well as iTunes are awesome solutions if you have a 'simple' music collection, but they are not tailored for music collectors, who usually have multiple versions of a single album, multiple files for one single song (from multiple album releases). Therefore, their library ends up clustered and unpleasant to browse and use.

The philosophy behind Meelo

The idea behind Meelo is to have a pleasant way to browse and enjoy your collection and making it the best one possible.

The best music collection is a collection that is fully useable in any music server (like one mentioned above). The only way to reach this goal is to make the music collection independent metadata-wise, i.e. having all the metadata embedded in the files themselves. To use Meelo, you'll need a 'clean' collection: either with embedded metadata or standard file/folder architecture. Using iTunes or Beets is a great way to start.

Screenshots

Album View

More screenshots here

meelo's People

Contributors

arthi-chaud avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meelo's Issues

Host Swagger

the swagger should be accessible from a route

Illustration Extraction: Better Logs

On illustration extraction, the log always says the illustration has been extracted, even if it has not (because the illustration already was extracted)

Service Getters: Add 'select' parameter

Enhance 'get' and 'getMany' method to be able to have a 'select' parameter to define what field should be returned

  • Artist
  • Album
  • Song
  • Track
  • Release
  • Library

Audit feature

As libraries get bigger over time, many files are added,
But we might forget to set some metadata to them.

In order to keep a library as clean as possible, an audit feature would be nice.

It would parse the database, and raise any missing data and/or empty fields like a genre, a release date, an unspecified disc index, etc.

Transcoding

Same as #20, but the file would be transcoded, and streamed instead of downloaded

Extract Illustration

On metadata parsing (#5), if there is one, the artcover should be exported to a file, whose path is built from the entry's metadata

Better Slug implementation

Currently, slugs are just thrown into the code, without real and solid implementation

The following modification must be done:

  • A better slugify function (managing non-alphanum char and transforming them into closest alpha char. For example Élégant -> elegant)
  • Models with a slug must extend a "slugifiable" class
  • A Slug should have its own type, and not be a simple string

Retrieve Source File

From a route, we should be able to retrieve the raw source file, for a potential front-end player

Define Exception Catching Policy

Should custom error extends HttpException?
Should custom errors be catches by a custom filter, which resolves the Http status code?

Models: Remove default, unused columns

Current ORM creates by default
timestamps column which are not used by the app, and sent in the reply on entities fetch.
These column should be removed

Add 'Type' Field to Album Object

An 'album' object can be anything from:

  • Studio Recording
  • Live Recording
  • Compilation Album
  • Remixes compilation
  • Single

The 'album' metadata should include this field to sort and filter albums

List Items

From a route, we should access entries with basic metadata

  • Pagination
  • Sorting

Disc could be detailed objects

Currently, discs are virtual objects, as they are only referred to by track's disc's index

From a die-hard collector point of view, in a box-set, the discs within can be differentiated using a name, an illustration etc.

Therefore, a Disc model should be developed. It would store tracks, have an optional name & illustration, a index in the parent release. This would be a little overkill in 95+% of releases

Better Logs on Metadata Parsing Fail

When a file's metadata parsing fail, a simple, but not detailed, there's a warning log, and the file entry is deleted.
The warning log should detail what went wrong in the parsing

Register a file that matches the RegExp

The server should register (i.e. add its path to the database, and then parse its metadata) a file if its path matches one of the RegExp provided in the settings.json file.

Custom Playlist System

There should be a 'Playlist' feature


Back-end:

  • A Playlist should have a name
  • A Playlist should have an optional illustration
    • Stored in /metadata/_playlists/$slug
  • There should be a relation table link a playlist with its tracks
    • The relation should include an index, for the position of the track in the playlist
  • We should be able to add one item to (at the end of) the playlist
  • We should be able to move items in the playlist
  • We should be able to remove items from the playlist

Front-end:

  • See a playlist
  • Create a playlist
  • Update a playlist
    • Rename
    • Illustration
    • Move items
    • Remove item
  • Add item to playlist
    • Track
    • Song
  • Delete a playlist

Ignore File

We should be able to ignore a source file (i.e. not add/delete it and its metadata from the DB) that match the RegExp

Re-scan if source file changed

Using MD5 checksum stored in the DB, extracted at first scan, we know if a source file was changed.
On change, the related metadata should be updated

Define Illustrations File System

Define the way illustration are stored:

  • Base folder
  • Standard Format
  • Path (From related entry's metadata: artist, album, release index, etc.)

Remove Empty 'Parents'

The entries of the following types should be deleted if:

  • An artist does not have related albums or songs
  • An album does not have related releases
  • A song doesn't have related tracks
  • A release doesn't have related tracks

Manage Songs that have the same title by the same artist

Currently, the database Schema does not allow two different songs with the same title by one sad artist.
However, some artists have multiple songs with the same title.

Therefore, we should be able to manage two different songs with the same title.

The solution would be to use the parent album's release date to differentiate. But that would cause other issues (for exemple with compilations or live albums)

Manage Track-specific illustration

Some Track may have their own illustration, like music videos (the illustration being a thumbnail)

Therefore, the illustration file system might be adapted, it'll look like this:
/meelo/metadata/artistSlug/releaseSlug/disc-index-track-index/cover.jpg

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.