Skip to content

Uriopass/Musidex

Repository files navigation

Musidex logo, a capital letter M

Musidex

Your musical pokedex, Plex for music.

Add songs from youtube videos or youtube playlist to your library, or import them from your local files.
Tags are automatically imported and searchable, sync it on your phone to enjoy free offline music, managed from your home server.

Don't want to bother making playlists?
Let Musidex handle it for you, a neural network analyses your musics and checks for similarity to provide semantic autoplaying.
Choose a starting point and let it choose the next song for you!

Demo

Try the demo at:

https://demo.douady.paris/

Please don't mess it up. :)

Roadmap

  • Music streaming
  • Youtube import
  • Web front
  • Neural embedding based auto play
  • Text search
  • CI
  • Multiple accounts
  • Android App
  • Docker build
  • iOS App
  • Local download for apps
  • Browser extension to add YT videos to library directly from youtube
  • Tag filtering
  • Playlists through tags/Tag editor
  • Basic authentication
  • CD
  • MP3 import
  • Ogg import
  • FLAC import

Setting up the server

Using docker

# Build the image, can take up to 20 minutes depending on your CPU and your network bandwidth
docker build -t musidex .

# Run the container (replace /path/to/musidex with absolute path to Musidex, like $HOME/musidex)
docker run -d -p 80:3200 -v /path/to/musidex/storage:/storage -t musidex 

All musidex data (musics, thumbnails, db) ends up in the storage directory.

Linux

Only GNU/Linux distros are supported at the moment.

Dependencies

You can run the prepare.sh script after cloning to run all of the following commands, or run them yourself with an explanation.

Youtube-dl to add music from youtube URLs.

python3 -m pip install -U yt-dlp

Ffmpeg so that the downloaded audio files are converted to more friendly formats. (as advised by youtube-dl).
Npm for the frontend.
Sqlite for the db.

sudo apt install ffmpeg npm libsqlite3-dev python3 python-is-python3

The rust compiler for the backend.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME"/.cargo/env

The repo itself.

git clone https://github.com/Uriopass/Musidex
cd Musidex

# Prepare the web dependencies
(cd musidex-web && npm install)

Building and running

# Just run the start script
./start.sh

Developing on the project

First install the dependencies as listed above, then

# Start the daemon, will listen on localhost:3200
cargo run --manifest-path=musidex-daemon/Cargo.toml

# And in another terminal... start the web client
cd musidex-web
npm start # will start on localhost:3000 
          # and proxy api requests to the daemon

Then if you want to work on the daemon, simply run cargo run again after doing your modifications.

If you want to work on the web client, the modifications will be hot reloaded.

All musidex data ends up in the storage directory.