MusicPly
MusicPly
A simple web-ui to show local music playlists and play audio files.
Also it looks like Win98, for whatever reason ¯\_(ツ)_/¯
Installation (via git clone && make)
$> git clone https://github.com/Mikescher/musicply
$> make build-quick
$> SOURCE=".." ./build/musicply
Installation (via docker)
$> docker pull mikescher/musicply
$> docker run \
--volume "..." \
--publish "8000:8000" \
--env "SOURCE=..." \
--name=musicply \
"mikescher/musicply:latest"
Usage / Configuration
MusicPly is configured via environment variables.
The most important config is SOURCE
, which specified the source directories.
You can either
- supply a single (json5) array in the
SOURCE
environment variable, which contains a list of all sources in the schema:
{name: "...", path: "...", recursive: ...}
- supplying a single path to a json5 file in the
SOURCE
environment variable - supply multiple
SOURCE
variables by appending indizes (akaSOURCE_01
,SOURCE_02
,SOURCE_03
, ...) to the environment variable, where each variable contains a single source-object
An example config file (config.json
) could look like:
[
{name: "Back in Black", path: "/data/ACDC/BackInBlack", recursive: true}, // with recursive:true we also iterate through all subfolders.
{name: "Hotel California", path: "/data/Eagles/HotelCalifornia"}, // if recursive is not specified, teh default value ist false
// values are shown in the here specified order in the web UI
]
This config can be used by supplying the filepath:
$> SOURCE="/config.json" ./build/musicply
# or
$> docker run \
--volume "/home/user/music:/data:ro" \
--volume "$(pwd)/config.json:/config.json:ro" \
--publish "8000:8000" \
--env "SOURCE=/config.json" \
"mikescher/musicply:latest"
Or you can provide the json5 directly in the environment variable:
$> SOURCE="$(cat /config.json)" ./build/musicply
# or
$> docker run \
--volume "/home/user/music:/data:ro" \
--publish "8000:8000" \
--env "SOURCE=$(cat /config.json)" \
"mikescher/musicply:latest"
Or you can provide the sources individually:
$> SOURCE_1='{name: "Back in Black", path: "/data/ACDC/BackInBlack", recursive: true}' \
SOURCE_2='{name: "Hotel California", path: "/data/Eagles/HotelCalifornia"}' \
./build/musicply
# or
$> docker run \
--volume "/home/user/music:/data:ro" \
--publish "8000:8000" \
--env 'SOURCE_1={name: "Back in Black", path: "/data/ACDC/BackInBlack", recursive: true}' \
--env 'SOURCE_2={name: "Hotel California", path: "/data/Eagles/HotelCalifornia"}' \
"mikescher/musicply:latest"
Additional Configuration
The following environment variables can also be used to configure the application:
SERVER_IP
The interface the webserver binds to (default: 0.0.0.0)SERVER_PORT
The webserver port (default: 8000)CORS
Enable CORS headers (default: true)LOGLEVEL
,CUSTOM_404
,GIN_DEBUG
,RETURN_RAW_ERRORS
Enable more logoutput (default: 'WARN', false, false, false)
Additional Configuration (Footer Links)
You can also show additional buttons under the playlist-control by supplying /FOOTERLINK_[0-9]/
env variables.
The variables must contain 3, semicolon-seperated values: ${icon-path};${Tooltip};${Link}
Additional Configuration (Track sort)
You can manually override the sort order of tracks in a playlist by specifying an sort
array in your source:
SOURCE_1='{
name: "Hotel California",
path: "/data/Eagles/HotelCalifornia",
sort: ["artist", "album", "trackindex", "filename"],
}'
In the above case we first sort by artist, then by album, then track-index and lastly by filename (this is also the default if no sort
is specified).
The possible values are:
filename
filepath
title
artist
album
trackindex
year
cdate
mdate
Additional Configuration (Deduplication)
You can specify a deduplication strategy per-source. This removes duplicate tracks from the enumerated playlists:
SOURCE_1='{
name: "Hotel California",
path: "/data/Eagles/HotelCalifornia",
deduplicate: { keys: ["title", "artist"], use: "newest"
}'
The keys
field specifies which track-data are used to identify duplicates (tracks where all keys are equal will be duplicates).
The possible values are:
title
artist
album
year
track_index
track_total
filename
The use
field specifies which track will be used (the other ones will be discarded).
The possible values are:
any
: Use any track without a specific strategynewest
: Use the newest track (by file creation-time)oldest
: Use the oldest track (by file creation-time)biggest
: Use the track with the largest file-size