1f08ccf2f4cf390067b2eb9605fdfc267c10b31e
This seems to be how its supposed to be implemented set - should only change current playlist and shouldnt modify index This lets dsub work properly when it comes to modifying the current playlist as it does a combination of "set" and "skip" Itll only use set if its adding tracks to the playlist and includes the whole playlist, and itll use both set and skip to set the current playing and skip back to the first track
FLOSS alternative to subsonic, supporting its many clients
features
- browsing by folder (keeping your full tree intact)
- browsing by tags (using taglib - supports mp3, opus, flac, ape, m4a, wav, etc.)
- on-the-fly audio transcoding and caching (requires ffmpeg) (thank you spijet)
- jukebox mode (thank you AlexKraak)
- pretty fast scanning (with my library of ~27k tracks, initial scan takes about 10m, and about 5s after incrementally)
- multiple users, each with their own transcoding preferences, playlists, top tracks, top artists, etc.
- last.fm scrobbling
- artist similarities and biographies from the last.fm api
- a web interface for configuration (set up last.fm, manage users, start scans, etc.)
- support for the album-artist tag, to not clutter your artist list with compilation album appearances
- written in go, so lightweight and suitable for a raspberry pi, etc.
- newer salt and token auth
- tested on dsub, jamstash, sublime music, and soundwaves
installation
the default login is admin/admin.
password can then be changed from the web interface
$ apt install build-essential git sqlite libtag1-dev ffmpeg libasound-dev # for debian like
$ pacman -S base-devel git sqlite taglib ffmpeg alsa-lib # for arch like
$ go get go.senan.xyz/gonic/cmd/gonic
$ export PATH=$PATH:$HOME/go/bin
$ gonic -h # or see "configuration options below"
note: unfortunately if you do this above, you'll be compiling gonic locally on your machine (if someone knows how I can statically link sqlite3 and taglib, please let me know so I can distribute static binaries)
or else you can run in docker, available on dockerhub as sentriz/gonic
# example docker-compose.yml
version: '3'
services:
gonic:
image: sentriz/gonic:latest
environment:
- TZ
# optionally, see env vars below
expose:
- 80
devices:
- /dev/snd:/dev/snd # if using jukebox
volumes:
- ./data:/data # gonic db etc
- /path/to/music:/music:ro # your music
- /path/to/cache:/cache # transcode cache dir
then start with docker-compose up -d
configuration options
| env var | command line arg | description |
|---|---|---|
GONIC_MUSIC_PATH |
-music-path |
path to your music collection |
GONIC_CACHE_PATH |
-cache-path |
optional path to store audio transcodes (default /tmp/gonic_cache) |
GONIC_DB_PATH |
-db-path |
optional path to database file |
GONIC_LISTEN_ADDR |
-listen-addr |
optional host and port to listen on (eg. 0.0.0.0:4747, 127.0.0.1:4747) (default 0.0.0.0:4747) |
GONIC_PROXY_PREFIX |
-proxy-prefix |
optional url path prefix to use if behind reverse proxy. eg /gonic (see example configs below) |
GONIC_SCAN_INTERVAL |
-scan-interval |
optional interval (in minutes) to check for new music (automatic scanning disabled if omitted) |
GONIC_JUKEBOX_ENABLED |
-jukebox-enabled |
optional whether the subsonic jukebox api should be enabled |
screenshots
![]() |
![]() |
![]() |
![]() |
![]() |
example nginx config with GONIC_PROXY_PREFIX
location /gonic/ {
proxy_pass http://localhost:4747/;
# set "Secure" cookie if using HTTPS
proxy_cookie_path / "/; Secure";
# set "X-Forwarded-Host" header for last.fm connection callback
proxy_set_header X-Forwarded-Host $host;
}
Description
Languages
Go
99%
Shell
0.3%
Dockerfile
0.3%
CSS
0.3%





