Gonic
music streaming server / free-software subsonic server API implementation
Install / Use
/learn @sentriz/GonicREADME
features
- browsing by folder (keeping your full tree intact) see here
- 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)
- subsonic jukebox mode, for gapless server-side audio playback instead of streaming (thank you lxea)
- support for podcasts (thank you lxea)
- pretty fast scanning (with my library of ~50k tracks, initial scan takes about 10m, and about 6s after incrementally)
- multiple users, each with their own transcoding preferences, playlists, top tracks, top artists, etc.
- last.fm scrobbling
- listenbrainz scrobbling (thank you spezifisch, lxea)
- artist similarities and biographies from the last.fm api
- support for multi valued tags like albumartists and genres (see more)
- 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. (see ARM images below)
- newer salt and token auth
- tested on airsonic-refix, amperfy, symfonium, dsub, jamstash, subsonic.el, sublime music, soundwaves, stmp, termsonic, tempus, strawberry, and ultrasonic
installation
the default login is admin/admin.
password can then be changed from the web interface
...from source
https://github.com/sentriz/gonic/wiki/installation#from-source
...with docker
https://github.com/sentriz/gonic/wiki/installation#with-docker
...with systemd
https://github.com/sentriz/gonic/wiki/installation#with-systemd
...elsewhere
configuration options
| env var | command line arg | description |
| ----------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GONIC_MUSIC_PATH | -music-path | path to your music collection (see also multi-folder support below) |
| GONIC_PODCAST_PATH | -podcast-path | path to a podcasts directory |
| GONIC_PLAYLISTS_PATH | -playlists-path | path to new or existing directory with m3u files for subsonic playlists. items in the directory should be in the format <userid>/<name>.m3u. for example the admin user could have 1/my-playlist.m3u. gonic create and make changes to these playlists over the subsonic api. |
| GONIC_CACHE_PATH | -cache-path | path to store audio transcodes, covers, etc |
| GONIC_DB_PATH | -db-path | optional path to database file |
| GONIC_HTTP_LOG | -http-log | optional http request logging, enabled by default |
| 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_TLS_CERT | -tls-cert | optional path to a TLS cert (enables HTTPS listening) |
| GONIC_TLS_KEY | -tls-key | optional path to a TLS key (enables HTTPS listening) |
| 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_SCAN_AT_START_ENABLED | -scan-at-start-enabled | optional whether to perform an initial scan at startup |
| GONIC_SCAN_WATCHER_ENABLED | -scan-watcher-enabled | optional whether to watch file system for new music and rescan |
| GONIC_SCAN_EMBEDDED_COVER_ENABLED | -scan-embedded-cover-enabled | optional whether to scan for embedded covers in audio files (default true) |
| GONIC_JUKEBOX_ENABLED | -jukebox-enabled | optional whether the subsonic jukebox api should be enabled |
| GONIC_JUKEBOX_MPV_EXTRA_ARGS | -jukebox-mpv-extra-args | optional extra command line arguments to pass to the jukebox mpv daemon |
| GONIC_PODCAST_PURGE_AGE | -podcast-purge-age | optional age (in days) to purge podcast episodes if not access
