MusicShack is a self-hosted web application to import, format, and manage a music library. It centralizes browsing, downloading, and metadata handling via multiple sources, with automatic downloads of your favorite artists’ new releases. The server stores downloads locally, while the web UI provides search, download, follow, library editing, and admin features for multiple users.
Important
This is my first useful solo project using technologies that are completely new to me.
I refactor many things every time I notice past architecture error.
Feel free to correct me or ask for any features you think are relevant.
Song tagging is based on the Navidrome standard (I don't know if it's compatible with other music servers; I hope so^^).
- Browse and search music catalogs through different sources
- Download tracks and albums directly from these sources
- Follow artists — every day at 1AM, MusicShack will download any new songs released by the artists you follow
- Add new source URL
- User authentication and simple user management
- Admin panel for adding new users
- Deployable with Docker / Docker Compose
- Plugin architecture to add new data sources in the future, like DAB or even your friends' servers
TO-DO
MusicShack provides an example.env file for quick deployment
For more info about environment variable
-
Copy the .env file:
cp example.env .env
-
Launch MusicShack:
docker compose up -d
-
Access the admin panel:
- Go to
http://localhost:8080/admin - Use your password set at
ADMIN_PASSWORDin the .env file
- Go to
-
Create a user via the admin panel:
- Enter an username and a password
- Click on the
+button or pressEnterkey
-
Access the main interface:
- Go to
http://localhost:8080/ - Log in as the new user you created
Welcome to MusicShack^^
- Go to
- Add sources:
- Click on the
Settingsbutton - Enter an instance URL (find some here)
- Click on the
+button or pressEnterkey
- Click on the
- Follow an artist:
- Click on the
Searchbutton - Select the artist name
- Go to the
Artistsection - Click on their profile
- Click on the
Followbutton
- Click on the
- Download a song:
- Click on the
Searchbutton - Select the song name
- Go to the
Songsection - Click on the
Downloadbutton under the song
- Click on the
- Upload a song:
- Click on the
Librarybutton - Click on the
Uploadbutton - Select a file
- Choose a cover, title, album name, etc.
- Click on the
Savebutton
- Click on the
- Edit a song:
- Click on the
Librarybutton - Click on the
Editbutton of the song you want to edit - Choose a new cover, title, album name, etc.
- Click on the
Savebutton
- Click on the
HTTPS= boolean (false by default) set at true if your domain use httpsPORT= number (8080 by default) port where the app will be accessibleLIBRARY_PATH= string (mandatory) path to the library (downloads/uploads will go into that directory)ADMIN_PASSWORD= string (mandatory) default password for admin panelPOSTGRES_HOST= string (mandatory) localhost or name of the service that contains PostgreSQLPOSTGRES_USER= string (mandatory)POSTGRES_PASSWORD= string (mandatory)POSTGRES_DB= string (mandatory)
The project roadmap is managed via GitHub Projects
- Open an issue to discuss features or bugs
- Feel free to add a plugin for a new provider and open a PR
- Design inspired by the black theme of monochrome
- The whole idea comes from the existence of the hifi API
MIT — see the LICENSE file.
Important
Disclaimer
This project is intended for educational and personal use only. The developers do not encourage or endorse piracy.
- Users are solely responsible for complying with copyright laws in their jurisdiction.
- All music rights remain with their respective copyright holders.
- This tool serves as an interface for personal, non-commercial use.
MusicShack assumes no responsibility for any misuse or legal violations.