1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Example Settings File
# General Daemon Settings
[]
## The port to listen on for RPC requests. (default: 6600, the default port for MPD)
= 6600
## The root paths of the music library.
= ["~/Music"]
## Separators for artist names in song metadata.
## For example, "Foo, Bar, Baz" would be split into ["Foo", "Bar", "Baz"]. if the separator is ", ".
## If the separator is not found, the entire string is considered as a single artist.
## If unset, will not split artists.
##
## Users can provide one or many separators, and must provide them as either a single string or an array of strings.
##
## ```toml
## [daemon]
## artist_separator = " & "
## # or
## artist_separator = [" & ", "; "]
## ```
= ["; ", ", ", " & ", " feat. ", " ft. "]
## Exceptions for artist name separation, for example:
## "Foo & Bar; Baz" would be split into \["Foo", "Bar", "Baz"\] if the separators are set to "&" and "; ".
##
## However, if the following exception is set:
## ```toml
## [daemon]
## protected_artist_names = ["Foo & Bar"]
## ```
## Then the artist "Foo & Bar; Baz" would be split into \["Foo & Bar", "Baz"\].
##
## Note that the exception applies to the entire "name", so:
## ```toml
## [daemon]
## protected_artist_names = ["Foo & Bar"]
## ```
## would split "Foo & Bar" into \["Foo & Bar"\],
## but "Foo & BarBaz" would still be split into \["Foo", "BarBaz"\].
= []
## Separators for genres in song metadata.
## For example, "Foo, Bar, Baz" would be split into ["Foo", "Bar", "Baz"]. if the separator is ", ".
## If the separator is not found, the entire string is considered as a single genre.
## If unset, will not split genres.
= ", "
## how conflicting metadata should be resolved
## "overwrite" - overwrite the metadata with new metadata
## "skip" - skip the file (keep old metadata)
= "overwrite"
## What level of logging to use.
## Possible values are "trace", "debug", "info", "warn", "error".
## Default is "info".
= "info"
# Settings for song analysis
[]
## The kind of analysis to perform, either "features" or "embedding".
## "features" will compute traditional audio features (tempo, key, etc.)
## "embedding" will compute neural audio embedding using a pre-trained model.
## Default is "features".
##
## Note that regardless of this setting, both features and embedding will be computed during analysis.
## This only determines the kind used for clustering, radio, and other such tasks
= "features"
## The number of threads to use for analysis.
## Default is the number of logical CPUs on the system.
##
## Note that:
## - increasing this number may increase memory usage significantly during analysis.
## - setting this number to more than the number of logical CPUs will have no effect (saturates at number of logical CPUs).
## - leave this unset to use the default.
# num_threads = 8
## You can optionally override the model used for generating audio embeddings.
## Requirements:
## - The model must be in the ONNX format with opset version 16 or higher.
## - The model should expect mono audio samples at a sample rate of 22,050 Hz.
## - The input tensor must be name "audio" and have shape [B, N] where N a dynamic length corresponding to the number of audio samples in the song, and B is the batch size.
## - The output tensor must be name "embedding" and have shape [B, 32] corresponding to a 32-dimensional embedding vector. B is the batch size.
##
## If unset, or a non-existent/invalid path, the built-in model (which is bundled into the daemon binary) will be used.
# model_path = "",
# Parameters for the reclustering algorithm.
[]
## The number of reference datasets to use for the gap statistic.
## (which is used to determine the optimal number of clusters)
## 50 will give a decent estimate but for the best results use more,
## 500 will give a very good estimate but be very slow.
## We default to 50.
= 50
## The maximum number of clusters to create.
## This is the upper bound on the number of clusters that can be created.
## Increase if you're getting a "could not find optimal k" error.
## Default is 24.
= 24
## The clustering algorithm to use.
## Either "kmeans" or "gmm".
= "gmm"
## The projection method to preprocess the data with before clustering.
## Either "tsne", "pca" (not implemented yet), or "none".
## Default is "none".
= "tsne"
# Settings for the TUI
[]
## How many songs should be queried for when starting a radio.
## Default is 20.
= 20
## The color scheme to use for the TUI.
## Each color is either:
## - a hex string in the format "#RRGGBB".
## example: "#FFFFFF" for white.
## - a material design color name in format "<COLOR>_<SHADE>".
## so "pink", "red-900", "light-blue_500", "red900", etc. are all invalid.
## but "PINK_900", "RED_900", "LIGHT_BLUE_500" are valid.
## - Exceptions are "WHITE" and "BLACK", which are always valid.
[]
### app border colors
= "PINK_900"
= "PINK_300"
### border colors
= "RED_900"
= "RED_200"
### popup border color
= "LIGHT_BLUE_500"
### text colors
= "WHITE"
= "RED_600"
= "RED_200"
### gauge colors, such as song progress bar
= "WHITE"
= "BLACK"