Lightweight Music Server. Access your self-hosted music using a web interface.
See the codeLMS is a self-hosted music streaming software: access your music collection from anywhere using a web interface!
A demo instance is available. Note the administration settings are not available.
genre, mood, artists, ...composer, conductor, lyricist, mixer, performer, producer, remixeralbum, single, EP, compilation, live, ...LMS provides several ways to help you find the music you like:
Note: the recommendation engine supports two modes:
genre, mood, grouping, and language.LMS primarily relies on tags to organize your music collection but also supports browsing by directory using the Subsonic/OpenSubsonic API.
LMS supports an Artist information folder to manage metadata and images for artists. This folder can be placed anywhere within the scanned libraries but is best located in a dedicated ArtistInfo directory in the root of a media library for maximum compatibility with other softwares.
The folder must follow a structure defined by Kodi, as detailed here. artist.nfo files are used to define additional artist information such as biography, sort name, and MusicBrainz ArtistID. See the format here.
The canonical artist name used by LMS is the one specified in the artist.nfo file; If an artist.nfo exists but does not provide a name, the name of the containing folder is used.
If no artist info file is provided, LMS will pick the artist name found on the latest release.
Place a .lmsignore file at the root of a media library to exclude files or directories from scanning.
The file uses a gitignore-inspired reduced syntax:
*.jpg: ignore all .jpg files at any depth/Unsorted/: ignore the top-level Unsorted/ directory onlyextras/: ignore any extras/ directory at any depth!cover.jpg: re-include a file previously matched by a broader rule?: matches any single character except /[abc]: character classLines starting with # are comments. An empty file has no effect.
Note: only one .lmsignore file per library root is supported; files placed in subdirectories are ignored.
It is possible to apply global filters on your collection using genre, mood, grouping, language, codec, and by music library. More tags, including custom ones, can be added in the database administration settings.
Note: You can use the lms-audioinfo tool to get an idea of the tags parsed by LMS.
LMS works best when using the default Picard settings, where the artist tag contains a single display-friendly value, and the artists tag holds the actual artist names. This ensures a cleaner, more organized representation of artist names, when multiple artists are involved.
While LMS can manage multiple album artists using the albumartist tag, it works better when using the custom albumartists and albumartistssort tags, similar to how it handles regular artist tags.
Note: if you use Picard, add this script to set up both artist and album artist tags:
$setmulti(artistssort,%_artists_sort%)
$setmulti(albumartists,%_albumartists%)
$setmulti(albumartistssort,%_albumartists_sort%)
LMS supports several non-standard tags to allow more accurate artist identification:
musicbrainz_composerid, musicbrainz_conductorid, musicbrainz_lyricistid, musicbrainz_mixerid, musicbrainz_producerid, musicbrainz_remixeridalbumartistssort, composerssort, conductorssort, lyricistssort, mixerssort, producerssort, remixerssort. Singular forms of these tags are also accepted (e.g., conductorsort, lyricistsort, etc.)The recommended way to group tracks within an album is to use the musicbrainz_albumid tag.
When this tag is not present, LMS will attempt to group them as best as possible: if the analyzed file contains a disc number and the total number of discs is greater than 1, sibling directories are also scanned to find a matching album. Otherwise, LMS will only consider albums within the current directory.
For an album to be considered a match, the following conditions must be met:
LMS scans and serves artwork in jpg/jpeg, png, bmp, webp and gif formats, both as standalone files and embedded in track tags. webp and gif images are always served at their original size: they are never resized, even when a client requests a specific size.
The recommended method is to name the album image file using the release's MusicBrainz ReleaseID. This file can be placed anywhere within one of the scanned libraries.
If no file with the MusicBrainz ReleaseID is found, LMS will search for a file named cover, front, folder or default (or other names configured in lms.conf, see the cover-preferred-file-names setting), using this logic:
cover.jpg placed alongside the CD1/CD2 folders).If still no image is found, LMS falls back to images embedded in the album's tracks, preferring an embedded "Front Cover" image, then "Media", then "Other" (as some tracks may be badly tagged), using the earliest disc/track that has one, and the largest image as a tiebreaker.
LMS automatically associates images with each disc in your collection. Name the image file after the disc's subtitle or another identifier configured in lms.conf (see the medium-image-file-names setting), and place it in the same directory as the disc's tracks. If no suitable image is found, LMS will also look for embedded images within the tracks of the disc.
The recommended method is to name the artist image file using the artist's MusicBrainz ArtistID. This file can be placed anywhere within one of the scanned libraries.
If no file with the MusicBrainz ArtistID is found, LMS will look for a file named thumb, folder or fanart (or other names configured in lms.conf, see the artist-info-image-file-names setting) in the artist information directory, where the corresponding artist.nfo file is located.
If neither exists, it will then search for a file named artist (or another name configured in lms.conf, see the artist-image-file-names setting) in the artist's directories, using this logic:
If still no image is found, LMS falls back to the preferred artwork of the artist's earliest release (by original release date). This behavior is enabled by default and can be disabled in the admin Scan Settings.
LMS supports playlist files in m3u and m3u8 formats. These playlists are synced during the scan process and are available as public shared playlists.
LMS resolves a playlist's cover image in this order:
#EXTIMG: directive. An explicit path declared inside the playlist file (URLs are ignored).LMS supports lyrics in lrc files, txt files, and embedded track metadata. Both synchronized and unsynchronized lyrics are supported.
See INSTALL.md file.
Any feedback is welcome:
1,113 followers · starred Aug 2026
59 followers · starred Aug 2021
682 followers · starred Sep 2026
15 followers · starred May 2026
Lightweight Music Server. Access your self-hosted music using a web interface.
See the codeLMS is a self-hosted music streaming software: access your music collection from anywhere using a web interface!
A demo instance is available. Note the administration settings are not available.
genre, mood, artists, ...composer, conductor, lyricist, mixer, performer, producer, remixeralbum, single, EP, compilation, live, ...LMS provides several ways to help you find the music you like:
Note: the recommendation engine supports two modes:
genre, mood, grouping, and language.LMS primarily relies on tags to organize your music collection but also supports browsing by directory using the Subsonic/OpenSubsonic API.
LMS supports an Artist information folder to manage metadata and images for artists. This folder can be placed anywhere within the scanned libraries but is best located in a dedicated ArtistInfo directory in the root of a media library for maximum compatibility with other softwares.
The folder must follow a structure defined by Kodi, as detailed here. artist.nfo files are used to define additional artist information such as biography, sort name, and MusicBrainz ArtistID. See the format here.
The canonical artist name used by LMS is the one specified in the artist.nfo file; If an artist.nfo exists but does not provide a name, the name of the containing folder is used.
If no artist info file is provided, LMS will pick the artist name found on the latest release.
Place a .lmsignore file at the root of a media library to exclude files or directories from scanning.
The file uses a gitignore-inspired reduced syntax:
*.jpg: ignore all .jpg files at any depth/Unsorted/: ignore the top-level Unsorted/ directory onlyextras/: ignore any extras/ directory at any depth!cover.jpg: re-include a file previously matched by a broader rule?: matches any single character except /[abc]: character classLines starting with # are comments. An empty file has no effect.
Note: only one .lmsignore file per library root is supported; files placed in subdirectories are ignored.
It is possible to apply global filters on your collection using genre, mood, grouping, language, codec, and by music library. More tags, including custom ones, can be added in the database administration settings.
Note: You can use the lms-audioinfo tool to get an idea of the tags parsed by LMS.
LMS works best when using the default Picard settings, where the artist tag contains a single display-friendly value, and the artists tag holds the actual artist names. This ensures a cleaner, more organized representation of artist names, when multiple artists are involved.
While LMS can manage multiple album artists using the albumartist tag, it works better when using the custom albumartists and albumartistssort tags, similar to how it handles regular artist tags.
Note: if you use Picard, add this script to set up both artist and album artist tags:
$setmulti(artistssort,%_artists_sort%)
$setmulti(albumartists,%_albumartists%)
$setmulti(albumartistssort,%_albumartists_sort%)
LMS supports several non-standard tags to allow more accurate artist identification:
musicbrainz_composerid, musicbrainz_conductorid, musicbrainz_lyricistid, musicbrainz_mixerid, musicbrainz_producerid, musicbrainz_remixeridalbumartistssort, composerssort, conductorssort, lyricistssort, mixerssort, producerssort, remixerssort. Singular forms of these tags are also accepted (e.g., conductorsort, lyricistsort, etc.)The recommended way to group tracks within an album is to use the musicbrainz_albumid tag.
When this tag is not present, LMS will attempt to group them as best as possible: if the analyzed file contains a disc number and the total number of discs is greater than 1, sibling directories are also scanned to find a matching album. Otherwise, LMS will only consider albums within the current directory.
For an album to be considered a match, the following conditions must be met:
LMS scans and serves artwork in jpg/jpeg, png, bmp, webp and gif formats, both as standalone files and embedded in track tags. webp and gif images are always served at their original size: they are never resized, even when a client requests a specific size.
The recommended method is to name the album image file using the release's MusicBrainz ReleaseID. This file can be placed anywhere within one of the scanned libraries.
If no file with the MusicBrainz ReleaseID is found, LMS will search for a file named cover, front, folder or default (or other names configured in lms.conf, see the cover-preferred-file-names setting), using this logic:
cover.jpg placed alongside the CD1/CD2 folders).If still no image is found, LMS falls back to images embedded in the album's tracks, preferring an embedded "Front Cover" image, then "Media", then "Other" (as some tracks may be badly tagged), using the earliest disc/track that has one, and the largest image as a tiebreaker.
LMS automatically associates images with each disc in your collection. Name the image file after the disc's subtitle or another identifier configured in lms.conf (see the medium-image-file-names setting), and place it in the same directory as the disc's tracks. If no suitable image is found, LMS will also look for embedded images within the tracks of the disc.
The recommended method is to name the artist image file using the artist's MusicBrainz ArtistID. This file can be placed anywhere within one of the scanned libraries.
If no file with the MusicBrainz ArtistID is found, LMS will look for a file named thumb, folder or fanart (or other names configured in lms.conf, see the artist-info-image-file-names setting) in the artist information directory, where the corresponding artist.nfo file is located.
If neither exists, it will then search for a file named artist (or another name configured in lms.conf, see the artist-image-file-names setting) in the artist's directories, using this logic:
If still no image is found, LMS falls back to the preferred artwork of the artist's earliest release (by original release date). This behavior is enabled by default and can be disabled in the admin Scan Settings.
LMS supports playlist files in m3u and m3u8 formats. These playlists are synced during the scan process and are available as public shared playlists.
LMS resolves a playlist's cover image in this order:
#EXTIMG: directive. An explicit path declared inside the playlist file (URLs are ignored).LMS supports lyrics in lrc files, txt files, and embedded track metadata. Both synchronized and unsynchronized lyrics are supported.
See INSTALL.md file.
Any feedback is welcome:
1,113 followers · starred Aug 2026
59 followers · starred Aug 2021
682 followers · starred Sep 2026
15 followers · starred May 2026