selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
qm-music logo

Self-host qm-music

v2.5.0

Lightweight Subsonic music server for self-hosted streaming

ReleaseOpen SourceApache-2.0
Updated12 hours ago
LanguageJava
Setup difficultyEasy
Stars
588
RAM
~150MB
Port
6688 (HTTP web interface and Subsonic API)
Docker
qmmusic/qm-music
Install with Docker
StreamMusic (音流) client interface showing QM-Music libraryFeishin web client connected to QM-Music server

What is qm-music?

A private cloud music server built on the Subsonic protocol for self-hosting your music library. It provides a lightweight Docker deployment requiring only about 150MB of memory, making it suitable for Raspberry Pi and other low-resource devices. The server implements the Subsonic API, allowing compatibility with clients including Feishin, StreamMusic, Amperfy, substreamer, and music-assistant. Key capabilities include smart audio transcoding (libmp3lame/acc) to save bandwidth, multi-format support (MP3, FLAC, AAC, WAV), automatic library scanning with metadata parsing, multi-user accounts with playlists and favorites, and optional Spotify and Last.fm integration for enhanced metadata. The web admin interface runs on port 6688 with default credentials admin/admin (which must be changed on first login). Configuration is done via environment variables for timezone, transcoding, external API keys, and library refresh schedules. The project is licensed under Apache-2.0 and actively maintained with regular releases.

Should you self-host qm-music?

qm-music scores 51/100 on selfhost.directory (how scoring works) and ranks #20 of 59 in Music Streaming. It has 588 GitHub stars.

It shipped 11 stable releases in the past year. The latest, v2.5.0, came out on 10 September 2026. New versions land roughly every 9 days.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is Apache-2.0-licensed and written mostly in Java.

Its closest alternative on selfhost.directory is koel (75/100, 17 320 stars). It scores higher overall, so compare the two before you pick. See qm-music vs koel side by side.

Features

  • Automatic library scanning
  • Chinese library optimization
  • Favorites
  • Global Search
  • Low Resource Usage
  • Lyrics synchronization
  • Multi-format Audio Support
  • Multi-user support
  • Play history and statistics
  • Playlists
  • Smart audio transcodingOptional, disabled by default
  • Smart Recommendations
  • Spotify metadata enrichmentRequires Spotify API credentials
  • Subsonic API Compatibility

qm-music README

How to install qm-music

Install qm-music with Docker

Environment variables
QM_FFMPEG_ENABLE, TZ, QM_SPOTIFY_ENABLE, QM_SPOTIFY_CLIENT_ID, QM_SPOTIFY_CLIENT_SECRET, QM_LASTFM_ENABLE, QM_LASTFM_API_KEY, QM_REFRESH_AUTO, QM_CLEAN_PLAY_HISTORY_AUTO, QM_SAVE_PLAY_HISTORY_MONTH

docker run -d
--name qm-music
-p 6688:6688
-v [host_music_file_path]:/data/qm-music/music_dir
-v [host_path_db_path]:/data/qm-music/db
-v [host_path_cache_path]:/data/qm-music/cache
-e QM_FFMPEG_ENABLE=true
-e TZ=Asia/Shanghai
-e QM_SPOTIFY_ENABLE=false
-e QM_SPOTIFY_CLIENT_ID=[QM_SPOTIFY_CLIENT_ID]
-e QM_SPOTIFY_CLIENT_SECRET=[QM_SPOTIFY_CLIENT_SECRET]
-e QM_LASTFM_ENABLE=false
-e QM_LASTFM_API_KEY=[QM_LASTFM_API_KEY]
-e QM_REFRESH_AUTO=true
--restart unless-stopped
qmmusic/qm-music:latest

Replace bracketed paths with actual host paths

How to configure qm-music

  • QM_CLEAN_PLAY_HISTORY_AUTOtrueEnable automatic scheduled play history cleanup

    Enable automatic scheduled play history cleanup

    values: true|false

  • QM_FFMPEG_ENABLEfalseEnable smart audio transcoding (libmp3lame/acc) to save bandwidth

    Enable smart audio transcoding (libmp3lame/acc) to save bandwidth

    values: true|false

  • QM_LASTFM_API_KEYLast.fm API key

    Last.fm API key

  • QM_LASTFM_ENABLEfalseEnable Last.fm integration for enhanced metadata

    Enable Last.fm integration for enhanced metadata

    values: true|false

  • QM_REFRESH_AUTOtrueEnable automatic scheduled library refresh

    Enable automatic scheduled library refresh

    values: true|false

  • QM_SAVE_PLAY_HISTORY_MONTH24Retention period for play history in months

    Retention period for play history in months

  • QM_SPOTIFY_CLIENT_IDSpotify API client ID

    Spotify API client ID

  • QM_SPOTIFY_CLIENT_SECRETSpotify API client secret

    Spotify API client secret

  • QM_SPOTIFY_ENABLEfalseEnable Spotify integration for enhanced metadata

    Enable Spotify integration for enhanced metadata

    values: true|false

  • TZAsia/ShanghaiTimezone for the container

    Timezone for the container

    values: Any valid TZ identifier

qm-music releases & version history

More in Music Streaming

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…