Giter Club home page Giter Club logo

meelo's Introduction

Icon

Welcome! Meelo is a self-hosted music server and web app. It works similarly to Plex, Jellyfin, Koel and Black Candy, but focuses on flexibility, browsing and listening experiences. Actually, Meelo is designed for music collectors. What does it mean? Scroll down to see our killer features ‡️

While the software wants to be a flexible as possible, it requires a little bit of setup. However, once everything is ready, you will just have to sit back, relax, and enjoy your music. 😎

Album Page (Top)

⭐ Features

Meelo has all the basic features you might expect from a music player/server (playback, browsing, search, playlists, libraries ...). But it comes with a handful of features that make it unique 🀩

  • Music Videos
    • Access them directly from an album's or an artist's page
    • We also differentiate music video from interviews, behind-the-scenes, trailers...
  • Identifies B-Sides
    • Meelo shows you any tracks that could be related to an album directly on the album's page!
  • ... and Rare tracks
    • And show them on the artist's page, so that these rare gems do not get lost and forgotten!
  • Automatic 'featuring' and duet detection
  • Albums have releases
    • Meaning that you can have multiple versions of a single album
    • But only its main version would appear on browsing pages
    • Of course, you can still access its other versions, directly from the album's page
  • Songs have tracks
    • It is pretty much the same as for albums and releases
    • No duplicated songs when browsing your library!
  • Song Versions
  • Album and Song types
    • Finding instrumental songs or live recordings has never been this simple!
  • Supports all formats!
    • Thanks to transcoding and the way we parse files, any audio and video format is virtually supported
    • (Note: Transcoding is only used when the file format is not supported in the browser)
  • Flexible metadata parsing
    • Use either the embedded metadata or the file's name (or both!) to extract metadata
    • Also works with album covers!
  • Get genres, descriptions, and ratings using MusicBrainz, Genius, Wikipedia and many more providers!
  • Download lyrics

Keep track of the upcoming features here

πŸ“– How to get started

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.

Meelo is shipped though Docker images. You might need to know a bit about Regexes. Look over here for setup instructions.

πŸ–₯️ Live Demo

We are actively working on a public demo, so that you can try out Meelo. Stay tuned...

πŸ“· Screenshots

Unfold to see what the web application looks like!

Album View Artist Page Player Page Release Page

More screenshots here

🀝 Contributing and Bugs reporting

πŸ”¨ Would you like to contribute to Meelo? Feel free to open a pull request.

πŸ€” Is there a feature you would like to have? Open an issue, and we will be happy to discuss it!

πŸ› Have you encountered a bug? Ugh we don't like 'em here! Report it by opening an issue.


Get ready to make the most out of you music collection!

Coverage (Back-end) Maintainability Rating

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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meelo's Issues

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

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

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

Retrieve Source File

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

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.)

List Items

From a route, we should access entries with basic metadata

  • Pagination
  • Sorting

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 Exception Catching Policy

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

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

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

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.

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

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)

Host Swagger

the swagger should be accessible from a route

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

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.

Transcoding

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

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

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

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)

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

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

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.