btw: The container seems to ignore the -e TZ=Europe/Berlin part. Logs are still off by 2 hours for me.
lms.conf
# LMS Sample configuration file
# Path to the working directory
# Must have write privileges in order to create and modify this directory
working-dir = "/var/lms/";
# ffmpeg location
ffmpeg-file = "/usr/bin/ffmpeg";
# Log files, empty means stdout
log-file = "";
access-log-file = "";
# Logger configuration, see log-config in https://webtoolkit.eu/wt/doc/reference/html/overview.html#config_general
log-config = "*";
# Listen port/addr of the web server
listen-port = 5082;
listen-addr = "0.0.0.0";
behind-reverse-proxy = false;
# If enabled, these files have to exist and have correct permissions
tls-enable = false;
tls-cert = "/var/lms/cert.pem";
tls-key = "/var/lms/privkey.pem";
tls-dh = "/var/lms/dh2048.pem";
# Path to the resources used by the web interface.
wt-resources = "/usr/share/Wt/resources";
docroot = "/usr/share/lms/docroot/;/resources,/css,/images,/js,/favicon.ico";
approot = "/usr/share/lms/approot";
# Location for deployment (See README if you want to deploy on a non root path)
deploy-path = "/";
# Number of threads to be used to dispatch http requests (0 means auto detect)
http-server-thread-count = 0;
# ListenBrainz root API
listenbrainz-api-base-url = "https://api.listenbrainz.org";
# How many listens to retrieve when syncing (0 to disable sync)
listenbrainz-max-sync-listen-count = 1000;
# How often to resync listens (0 to disable sync)
listenbrainz-sync-listens-period-hours = 1;
# How many feedbacks to retrieve when syncing (0 to disables sync)
listenbrainz-max-sync-feedback-count = 1000;
# How often to resync feedbacks (0 to disable sync)
listenbrainz-sync-feedbacks-period-hours = 1;
# Acousticbrainz root API
acousticbrainz-api-base-url = "https://acousticbrainz.org";
# Authentication
# Available backends: "internal", "PAM", "http-headers"
authentication-backend = "internal";
http-headers-login-field = "X-Forwarded-User";
# Max entries in the login throttler (1 entry per IP address. For IPv6, the whole /64 block is used)
login-throttler-max-entries = 10000;
# API
api-subsonic = true;
# Use this list to make the reported server version to 1.12.0 depending on the client's name
# Main usage is to make auto detections for the 'p' (password) parameter work
api-subsonic-report-old-server-protocol = ("DSub");
# Turn on this option to allow the demo account creation/use
demo = false;
# Max external cover file size in MBytes
cover-max-file-size = 10;
# Max cover cache size in MBytes
cover-max-cache-size = 30;
# JPEG quality for covers (range is 1-100)
cover-jpeg-quality = 75;
# Preferred file names for covers (order is important)
cover-preferred-file-names = ("cover", "front" );
# Playqueue max entry count
playqueue-max-entry-count = 1000;
# Set to true if you want to hide duplicate tracks
scanner-skip-duplicate-mbid = false;
# Scanner read style for metadata, maybe be 'fast', 'average' or 'accurate'
scanner-parser-read-style = "accurate";
These are the complete logs from starting the container, logging in, supplying /music as the root and hitting scan. _lms_logs.txt (15,7 KB)
From the layout it looked to me like āApplyā only affects the āTagsā section of āScan optionsā, which I did not change and thus I did not think of hitting āApplyā there.
It managed to finish and the 3 errors it found were actually three 5KB tracks where something somewhere at some point went wrong. I was able to replace/fix all of them.
To put it mildly, with my amount of files the UI is laggy.
Or in other words: upon logging in the site freezes/loads for over 2 minutes before displaying random albums.
Iāll test how quick rescans are and also how it performs when used as a source for symfonium. On its own it is sadly not usable with my amount of files.
It does help. The site now loads after a few seconds. However ānormalā use is still pretty much out of reach.
When searching for an artist and clicking on the result it takes 30+ seconds until the artist is loaded.
Rescan was quicker but still slower than jellyfin (that takes 15ish minutes).
And syncing Symfonium took 1,5 hours. Also a bit slower than jellyfin (takes around 1 hour).
So to sum up itās a viable alternative to jellyfin, however itās not really usable on its own via the GUI (same goes for jellyfin) and jellyfin is as of yet faster.
Edit:
Considering that the restart increased the performance Iāll redo the rescan and sync to symfonium to be sure that I give it the best possible shot.
That yielded no significant improvement so for now Iāll stick with jellyfin as the source for Symfonium.
Iād be happy to test future versions. Stresstesting music players/servers has become kind of a hobby of mine ever since iTunes started collapsing when my collection was at ~100k tracks over a decade ago which made me look for alternatives.
The fileserver is running an Intel Xeon E5-2620v4 with 128GB of DDR4 2133 ECC RAM. The music resides on a 8x 8TB Z2 ZFS pool in TrueNAS Core.
The docker host runs an Intel i7 2600 with 16GB DDR3 1333 RAM (I look to replace it with a newer, faster machine with more RAM soon). That PC runs proxmox, which hosts a ubuntu server VM and within that I deployed the docker container. It has a 1GBit/s LAN connection to the file server. While scanning, none of the CPU cores are close to full load so Iām not sure if the compute performance of that PC is a limiting factor but it might be.
Thanks!
The scanner is currently mono threaded, no effort has been put on it to make it faster (it is even scanning using the taglibās āaccurateā mode, the slowlest one). Will tackle this later, I already have some ideas.
What worries me now is the responsiveness of the UI. I tested on my old i5 3470 using a fake database of 1.8M songs and all the UI has sub second response times except for:
searches by name, which are really slow when a lot or matches are found
artist and album views, which are really slow (about 8s) because of the current similarity engine which does not scale.
Will try to make a version in which you can disable the similarity engine, to make sure there is no other problem.
@655321 would you mind testing the docker 083652e image?
Warning: the db schema changed and is not backward compatible with 3.42.1
Once restarted, go to the media collection settings and disable to similarity engine. Apply and then restart the service.
Then the UI should always stay reactive in all views/tabs and even when searching.
If it is not the case, stop the service, run sqlite3 on the db and issue the analyze; command. And test again (I tweaked analyzis limit because value was too small)
Thanks!
It didnāt seem to care, when I started up the new container it still showed me my albums.
Or should I have deleted the old database manually before redeploying?
Yes applying triggers a rescan, which not needed in this particular case, hence the āthen restart the serviceā to make it stop.
Itās fine to remove the container, since the db is stored within the persistent /opt/lms volume.
The db has been migrated to a new schema (you keep all your data), what I meant is that you wonāt be able to run v3.42.1 using this db once the db is migrated, but I guess you donāt care
I let it finish anyhow (Iāve added a couple hundred songs since the last scan).
Also now it scanned a lot quicker than last time. Might be because I updated and restarted the VM host.
The time is still off by 2 hours btw. so the container still ignores this:
environment:
- TZ=Europe/Berlin
Thanks for clearing that up.
Indeed. I mean the covers load in slowly but thatās to be expected as each is usually 1400px+, often 2+MB per image. Otherwise it reacts within a few seconds, which is impressive.
One thing Iāve noticed now after searching a couple of artists is that it doesnāt recognize/use all of my multi value album artists.
Looking at the documentation I see that you only support albumartists albumartistssort as of yet.
My collection predates these tags and Iāve mainly used ; as a separator/delimiter for multi value tags. And lately Iāve also used multiple albumartist tags (which in mp3tag are shown as separated via \\). Upon further testing lms correctly uses multiple albumartist tags. Only those with ; arenāt recognized.
Do you plan to let the user choose 1 (or more) custom delimiters/separators to be used as well as albumartists & albumartistssort?
Jellyfin, MusicBee, Mediamonkey and Symfonium (with local files) all correctly recognize my multi value tags.
Edit:
Another thing Iāve noticed is that lms sometimes gets confused with multiple albums having the same name but different artists.
For example it lists the album āHomeā by Delaney & Bonnie
Which has these tags.
under Butler, John instead of the actual album:
It also mixed the album āFlesh & Bloodā by Maddy Prior in-between the album of the same name by The John Butler Trio.
I donāt even want to think about what kind of shuffling itāll do with the album āLiveā considering that I have 1634 tracks of different artists that have this exact album title.