sensibleHub is a self-hosted music management server. It allows managing your music collection from any device (that has a web browser) and syncing using external programs.
This page lets you see and edit metadata, including the cover image, that will be included in the generated MP3 file. The image shows both the dark and light mode.
The page used for adding new songs. When a download is already running, new urls will be put in a queue. A progress bar will appear on all pages to indicate if a download is running.
Show all songs that are in an album. On this page, you can also set an album image for all songs in it so you don’t have to set it manually for every song.
Listings show songs sorted by some criteria, e.g. by title, artist, year or search score.
In the “More” menu at the upper right side, you can find other listings that can be useful for metadata editing.
While typing in the search box, your collection is already searched and suggestions are shown:
There are several methods for installing this software. Using Docker is the easiest, but you can also download release binaries or build from source.
After installing, look into the configuration section below.
If you prefer using Docker, you can first run the following command to download the default configuration file:
curl -L https://raw.githubusercontent.com/xarantolus/sensibleHub/master/config.json > config.json
Then you can already download/run the server for the first time:
docker run -v"$(pwd):/config" -v"$(pwd)/data:/data" -p 128:128 -p 1280:1280 ghcr.io/xarantolus/sensiblehub:master
The volume mounted at /config
must contain a config.json
file. To change the exposed ports, you can modify the first port (before the :
) in the command to another port. If you didn’t change the configuration file 128
is the default HTTP port, 1280
is used for FTP.
You can now continue with the configuration section. You need to restart the container for it to use the new configuration.
You can download releases from the releases section of this repository.
Unzip the downloaded file to a directory of your choice on your server. Afterwards you should make sure that youtube-dl
(or another compatible downloader) and ffmpeg
are installed.
Additional requirements This program relies on some other programs that need to be installed and be available in your $PATH:
You might be able to install them using the following command:
apt-get install ffmpeg python3 python3-pip && pip3 install -U yt-dlp
You should however check that the yt-dlp
version is recent (run yt-dlp --version
) as there are frequent changes. Alternatively, try running yt-dlp --update
to get the newest version or check out their releases.
You can also put both executables in the same directory this program is installed into. That way, it should be able to find them just fine.
Depending on your system some ports might be restricted, so make sure to set sufficient permissions (see here). You might also need to mark the binary as executable (using chmod +x sensibleHub
).
After that, you are ready to start the server.
./sensibleHub
Expected output:
2020/05/26 20:01:48 [Cleanup] No cleanup necessary
2020/05/26 20:01:48 [FTP] Server listening on port 1280
2020/05/26 20:01:48 [Web] Server listening on port 128
You can now continue with the configuration section.
config.json
, open this to get more info.Assuming you kept the default ports, you can visit the website at http://yourserver:128/
. You can also connect via FTP at ftp://yourserver:1280/
using one of the accounts set in the config file.
This program can import songs that should be included in its library in a few different ways.
import
that is at the same location as the executable.import
directory. It does not matter if you copy the files directly or directories containing them (the server will search everything in there). Please note that the server will delete files from the import directory once they are added to its library.These imports will only happen on startup, not while the software is running, so you have to restart the server every time with this method.
You can also import files by putting them in any directory over FTP. On Windows, you can create a FTP network connection quite nicely.
Now any music file that is moved there will be imported. It seems like import errors are not shown, so you might need to watch the server output to see if anything went wrong.
Also, a warning: any file in the data/
and import/
directories may be deleted by the software at any time. It happens when inconsistencies are found (e.g. a song exists in the data/
directory on disk but isn’t in the index) or a song is edited. While it doesn’t delete files that are used for songs (images, audio etc.), you should make a backup anyways. As all data (except the configuration file) is stored in the data/
directory, you can just zip it and call it a backup.
Obviously one wants to have their music with them on all devices, even when offline. Here’s a guide on how to achieve that on Windows/Linux desktop and Android.
On a PC or Laptop, you can create recurring sync jobs (on all platforms) that use rclone (which you need to install before continuing).
First, set up a new rclone FTP remote with rclone config
. After setup, it should look similar to this:
[MyMusic]
type = ftp
host = yourserver
user = myusername
port = 1280
pass = *** ENCRYPTED ***
Now you can use rclone sync like this to sync it to your music directory:
rclone sync --update --ignore-size -v MyMusic:/ %USERPROFILE%\Music
The --ignore-size
flag is very important as the server doesn’t always know the correct file size if the file hasn’t been generated yet.
If you want to, you can set this up as a cron job or use windows task scheduler to run the command automatically. Another simple option is creating a batch file/script and running it from time to time.
My recommended music player for Windows is Dopamine, it can automatically index the music directory. You can download it here.
On Android, you can use any FTP app that doesn’t look at the file size or lets you disable that. One of them is FolderSync.
Add a new “account” (in-app, there’s no registration) with the following attributes:
yourserver
.1280
Now you can create a new Folder pair with these settings:
/
/storage/emulated/0/Music
For Android, any music player will probably work. I recommend Music, it is quite customizable and colorful. You can enable Ignore Media Store covers in settings if some cover images aren’t displayed.
This program tries not to need too much memory.
I personally run it on a Raspberry Pi 4 (4GB version) and it works great. Listing pages with all songs are generated in about 300 milliseconds, but due to InstantClick it feels a bit faster.
RAM usage is a bit weird. While on windows (where I develop) everything seems to be around 50MB, it looks like there’s a problem on ARM computers (like the Raspberry Pi): using the same music library it needs about ten times as much memory. I have not found out where this issue comes from.
There are several assumptions made so the program will work as expected in most cases.
CleanName
function in store/album.go
.Title (feat. Artist2 & Artist3)
. If this is not done, the “Featured in” listing of the artists’ page might not display all relevant songs.These are keyboard shortcuts that can be used on any page:
n
for loading the page where you can add new songss
for all songs, a
for artists, y
for years, i
for incomplete, e
for recent edits and u
for unsynced songs/
for focusing on the search baresc
for going to the main pageThe website should work in most modern browsers. It uses native image lazy loading which is not yet supported by all browsers, but images will load without it regardless. If you use a recent browser version, it will be just a bit snappier.
Everything also works without JavaScript, but the experience is much better if it’s enabled (Progressive enhancement).
Mobile support also works great, menus are collapsed at the top right.
Song listing | Song listing with opened menu |
---|---|
![]() |
![]() |
Compared to other music servers this one is very basic. Here are some things you should be aware of:
This program would not be possible without work done by many others. For that, I would like to thank them. Here’s a list of projects that are used in one way or another:
If you have any ideas, a pull request or something just doesn’t work please feel free to get in contact.
This is free as in freedom software. Do whatever you like with it.