Your music library
Table of contents
Audio files
Playlists
File scanning
Artwork
Information files
Illegal filename characters
Albums and folders
Tag mappings
Tag aliasing
Tag value customization
Tag options
Tag values
Order of processing tag changes
Custom sorting for tag values
Custom Artist index sorting
Using the reverseName option
Tag formatting
Format properties
Index tag formatting
Audio files
MinimServer recognizes files with the following file extensions as audio files containing the audio data formats and tagging formats listed below. Files that don't have a file extension in this list are not recognized as audio files.
.aac | Audio Data Transport Stream (ADTS) files containing Advanced Audio Coding (AAC) audio data, with no tags |
.aif .aiff | Audio Interchange File Format (AIFF) files, with ID3v2.2, ID3v2.3 or ID3v2.4 tags |
.dff | Direct Stream Digital Interchange File Format (DSDIFF) files, with no tags |
.dsf | DSD Stream Format files, with ID3v2.2, ID3v2.3 or ID3v2.4 tags |
.flac | Free Lossless Audio Codec (FLAC) files, with Vorbis Comment tags |
.mp3 | MPEG-1, MPEG-2 or MPEG-2.5 files (Layers I, II and III), with ID3v2.2, ID3v2.3 or ID3v2.4 tags |
.mp4 .m4a .m4b | MPEG-4 Audio files containing either Advanced Audio Coding (AAC) or Apple Lossless (ALAC) audio data, with MPEG-4/iTunes tags |
.ogg | Ogg/Vorbis files, with Vorbis Comment tags |
.wav | Waveform Audio File Format files, with ID3v2.2, ID3v2.3 or ID3v2.4 tags |
Playlists
MinimServer recognizes files with the following file extensions as playlists.
.m3u | Standard or extended M3U playlists using the Windows-1252 or ISO 8859-1 character set |
.m3u8 | Standard or extended M3U playlists using the UTF-8 character set |
[NEW] From MinimServer 2 update 251, file paths
in playlist entries can have directory names separated by either forward slash (/
)
or backslash (\
) characters or a mixture of these.
If a Linux or macOS filename or directory name contains a backslash character
(possible but unlikely), the backslash must be written in a playlist file as two backslash characters (\\
).
For example, the file path a/b\c.mp3
(directory name a
, filename b\c.mp3
)
would be written in a playlist file as a/b\\c.mp3
File scanning
By default, MinimServer scans all files within each content directory and its subfolders to identify the audio files and playlists in the library, with the following exceptions:
- When running on Windows, hidden and system files and folders are excluded from scanning
-
When running on a QNAP NAS, folders named
.@__thumb
and@Recycle
are excluded from scanning -
When running on a Synology NAS, folders named
@eaDir
and#Recycle
are excluded from scanning -
When running on an ASUSTOR NAS, folders named
#Recycle
are excluded from scanning
If you want to exclude other files and folders, you can set the excludePattern
property to a comma-separated list of one or more file-matching patterns. A file or folder
is excluded from scanning if its name matches any of the patterns in the list.
A pattern can contain any
combination of wildcard (*
) characters and literal characters (all except *
).
The pattern matches a filename or folder name if all the literal characters in the pattern
match exactly with literal characters in the filename or folder name and each wildcard
character in the pattern matches zero or more literal characters in the filename or folder name.
For example, the following are valid pattern matches:
Pattern | Filename or folder name |
.*
|
.myfile.flac
|
*.mp3
|
myfile.mp3
|
*.aif*
|
myfile.aiff
|
backup*
|
backup2
|
exclude
|
exclude
|
*-old.*
|
myfile-old.aiff
|
and the following are not valid pattern matches:
Pattern | Filename or folder name |
*.mp3
|
myfile.flac
|
*.aif
|
myfile.aiff
|
file.*
|
myfile.mp3
|
Each pattern in the list can optionally be enclosed in single quote ('
)
or double quote ("
) characters. This provides a way to specify patterns
containing all possible literal characters including comma (,
), single quote ('
)
and double quote ("
). For example, the pattern list
'*,*', '"Hello"*', "'*"
specifies the patterns *,*
, "Hello"*
and '*
.
Artwork
When displaying an audio file, MinimServer looks for artwork using the following search order:
- Artwork in JPEG, PNG, GIF or BMP format embedded within the audio file
- A file named filename.jpg or filename.png (exact-case match only) in the same directory (folder) as the audio file, where filename is the filename of the item without its file extension suffix. For example, the audio file Magnificat.flac could have artwork in the file Magnificat.jpg or Magnificat.png.
- If the audio file is part of a group, the artwork for the group (see below)
- If the audio file is part of a multidisc album, the artwork for the album disc (see below)
- If the audio file is part of an album, the artwork for the album (see below)
- A file named folder.jpg (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as the audio file
- A file named folder.png (same case-matching search order as above) in the same directory (folder) as the audio file
- A file named cover.jpg (same case-matching search order as above) in the same directory (folder) as the audio file
- A file named cover.png (same case-matching search order as above) in the same directory (folder) as the audio file
When displaying an album, MinimServer looks for artwork using the following search order:
- A file named albumname.jpg or albumname.png (exact-case match only) in the same directory (folder) as any of the audio files in the album, where albumname is the name of the album. See the Illegal filename characters section for details of how to handle album names containing characters that can't be used in a filename.
- Artwork in JPEG, PNG, GIF or BMP format embedded within an audio file for a track of the album. If more than one track of the album has embedded artwork, the artwork for the lowest-numbered track is used.
- A file named folder.jpg, folder.png, cover.jpg or cover.png in the same directory (folder) as any of the audio files in the album, using the case-matching search order described in steps 6 to 9 above
When displaying a group, MinimServer looks for artwork using the following search order:
- A file named groupname.jpg or groupname.png (exact-case match only) in the same directory (folder) as any of the audio files in the group, where groupname is the name of the group. See the Illegal filename characters section for details of how to handle group names containing characters that can't be used in a filename.
- Artwork in JPEG, PNG, GIF or BMP format embedded within an audio file for a track of the group. If more than one track of the group has embedded artwork, the artwork for the lowest-numbered track is used.
- If the group is part of a multidisc album, the artwork for the album disc (see below)
- If the group is part of an album, the artwork for the album (see above)
- A file named folder.jpg, folder.png, cover.jpg or cover.png in the same directory (folder) as any of the audio files in the group, using the case-matching search order described in steps 6 to 9 above
When displaying a disc of a multidisc album, MinimServer looks for artwork using the following search order:
- A file named discname.jpg or discname.png (exact-case match only) in the same directory (folder) as any of the audio files in the album disc, where discname is the name of the album disc as specified by a DISCSUBTITLE tag. See the Illegal filename characters section for details of how to handle album disc names containing characters that can't be used in a filename.
- Artwork in JPEG, PNG, GIF or BMP format embedded within an audio file for a track of the album disc. If more than one track of the album disc has embedded artwork, the artwork for the lowest-numbered track is used.
- The artwork for the album (see above)
When displaying a playlist, MinimServer looks for artwork using the following search order:
- A file named filename.jpg or filename.png (exact-case match only) in the same directory (folder) as the playlist, where filename is the filename of the playlist without its file extension suffix. For example, the playlist Radio.m3u could have artwork in the file Radio.jpg or Radio.png.
- A file named folder.jpg, folder.png, cover.jpg or cover.png in the same directory (folder) as the playlist, using the case-matching search order described in steps 6 to 9 above
When displaying a playlist entry for a network stream, MinimServer looks for artwork using the following search order:
-
A file named entryname.jpg
or entryname.png (exact-case match only) in the same directory (folder) as the playlist,
where entryname is the title of the playlist entry as specified by the #EXTINF
description for the playlist entry (not including any stream ID prefix).
See the Illegal filename characters section
for details of how to handle playlist entry names containing characters that can't be used in a filename.
For example, the playlist entry
#EXTINF:-1,[Naim] Naim Radio
http://37.130.228.60:8090/
could have artwork in the fileNaim Radio.jpg
orNaim Radio.png
. - A file named folder.jpg, folder.png, cover.jpg or cover.png in the same directory (folder) as the playlist, using the case-matching search order described in steps 6 to 9 above
When displaying a folder in folder view, MinimServer looks for artwork using the following search order:
- A file named foldername.jpg or foldername.png (exact-case match only) in the folder, where foldername is the name of the folder. For example, the folder Jazz could have artwork in the file Jazz.jpg or Jazz.png.
- A file named folder.jpg, folder.png, cover.jpg or cover.png in the folder, using the case-matching search order described in steps 6 to 9 above
- Artwork in JPEG, PNG, GIF or BMP format embedded within an audio file in the folder. If more than one audio file in the folder has embedded artwork, the artwork from the first such file encountered when scanning the folder is used.
Information files
You can include information files (digital booklets) in your music library. See the Format properties section for details of how to view these information files in a UPnP control point.
For each audio file, MinimServer looks for an information file using the following search order:
- A file named filename.pdf (exact-case match only) in the same directory (folder) as the audio file, where filename is the filename of the audio file without its file extension suffix. For example, an information file for the audio file Magnificat.flac would be named Magnificat.pdf.
- For an audio file that is part of a group, a file named groupname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in the group, where groupname is the name of the group containing the audio file. See the Illegal filename characters section for details of how to handle group names containing characters that can't be used in a filename.
- For an audio file that is part of an album, a file named albumname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in the album, where albumname is the name of the album containing the audio file. See the Illegal filename characters section for details of how to handle album names containing characters that can't be used in a filename.
- For an audio file that is part of a multidisc album, a file named discname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in any of the album discs, where discname is the name of the album disc as specified by a DISCSUBTITLE tag. See the Illegal filename characters section for details of how to handle album disc names containing characters that can't be used in a filename.
- A file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as the audio file
- For an audio file that is part of a group, a file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as any of the audio files in the group
- For an audio file that is part of an album, a file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as any of the audio files in the album
For each group, MinimServer looks for an information file using the following search order:
- A file named groupname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in the group, where groupname is the name of the group. See the Illegal filename characters section for details of how to handle group names containing characters that can't be used in a filename.
- For a group that is part of an album, a file named albumname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in the album, where albumname is the name of the album containing the group. See the Illegal filename characters section for details of how to handle album names containing characters that can't be used in a filename.
- A file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as any of the audio files in the group
- For a group that is part of an album, a file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as any of the audio files in the album
For each album, MinimServer looks for an information file using the following search order:
- A file named albumname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in the album, where albumname is the name of the album. See the Illegal filename characters section for details of how to handle album names containing characters that can't be used in a filename.
- A file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as any of the audio files in the album
For each disc of a multidisc album, MinimServer looks for an information file using the following search order:
- A file named discname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in the album disc, where discname is the name of the album disc as specified by a DISCSUBTITLE tag. See the Illegal filename characters section for details of how to handle album disc names containing characters that can't be used in a filename.
- A file named albumname.pdf (exact-case match only) in the same directory (folder) as any of the audio files in the album, where albumname is the name of the album. See the Illegal filename characters section for details of how to handle album names containing characters that can't be used in a filename.
- A file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as any of the audio files in the album disc
- A file named folder.pdf or booklet.pdf (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as any of the audio files in the album
Illegal filename characters
When creating an artwork file (see the Artwork section and the Index artwork section) or an information file (see the Information files section) for an album, group, album disc or playlist entry, it is possible that the name of the album, group, album disc or playlist entry might contain characters that are illegal in a filename.
The rules for illegal filename characters are different on different platforms (Windows, Mac, Linux). Also,
the platform on which MinimServer is running might be different from the platform that is hosting
the library files. To ensure consistent handling of filenames on all platforms,
MinimServer uses special handling for all characters that are
illegal on any supported platform. These characters are:
"
(double quote)
*
(asterisk)
/
(slash)
:
(colon)
<
(less than)
>
(greater than)
?
(question mark)
\
(backslash)
|
(vertical bar)
If any characters from the above list appear in the name of an album, group, album disc or playlist entry, these characters must be omitted from the name portion of the matching .jpg, .png or .pdf file.
For example, the booklet file matching the album name
Beethoven: Symphony 9 "Choral"
would be
Beethoven Symphony 9 Choral.pdf
on all platforms.
Albums and folders
MinimServer scans your library by processing the complete contents of each folder before it starts to process the next folder or subfolder. Within each folder, audio files are grouped into albums based on album name (the value of the Album tag).
In some cases, the contents of an album might be spread across multiple folders. For example, a multidisc album might have each disc in a separate folder, or your library folder structure might be based on artists or composers rather than albums. To allow for these cases, MinimServer merges album contents from different folders if any of the following apply:
- The folder album contents include a DISCNUMBER tag
-
The folder album name is suffixed by the string
[disc
<n>]
,(disc
<n>)
or,
disc
<n>
, where<n>
is a positive integer (see the Multidisc albums section) - The folder album contents include a DISCSUBTITLE tag
-
The folder name contains the string
[part]
-
The
mergeFolderAlbums
property is set totrue
When merging folder album contents, MinimServer checks for all of the following:
-
The album names are the same, excluding any
[disc
<n>]
,(disc
<n>)
or,
disc
<n>
suffix - The artist values are the same. (This value is the AlbumArtist tag value if present, or the Artist tag value if it's the same for all audio files in the folder album.)
-
The folder match filters (if present) are the same. A match filter is an optional
suffix of the form
['<filter>']
that can be appended to a folder name.
The match filter is used to prevent unintended merging in some special cases,
such as two copies of the same album in different audio formats. For example, the
contents of folders "MyAlbum
['24/96
download']
"
and "MyAlbum
['CD
rip']
" won't be merged,
because they have different match filters.
For information about different options for viewing the contents of multidisc albums while browsing your library, see the Multidisc albums section.
Tag mappings
FLAC files and Ogg/Vorbis files are tagged using Vorbis comments, and MinimServer uses the tag names that appear in the file. For files containing ID3v2 tags or MPEG-4/iTunes tags, MinimServer provides the following mappings from ID3v2 frames and MPEG-4/iTunes atoms to FLAC/Vorbis tag names:
FLAC/Vorbis name | ID3v2.2 frame | ID3v2.3 frame | ID3v2.4 frame | MPEG-4/iTunes atom |
ALBUM | TAL | TALB | TALB | ©alb |
ALBUMARTIST | TP2 | TPE2 | TPE2 | aART |
ALBUMARTISTSORT | TS2 | TSO2 | TSO2 | soaa |
ALBUMSORT | TSA | TSOA | TSOA | soal |
ARTIST | TP1 | TPE1 | TPE1 | ©ART |
ARTISTSORT | TSP | TSOP | TSOP | soar |
BPM | TBP | TBPM | TBPM | tmpo |
COMMENT | COM | COMM | COMM | ©cmt |
COMPILATION | TCP | TCMP | TCMP | cpil |
COMPOSER | TCM | TCOM | TCOM | ©wrt |
COMPOSERSORT | TSC | TSOC | TSOC | soco |
CONDUCTOR | TP3 | TPE3 | TPE3 | ©con |
CONTENTGROUP | TT1 | TIT1 | TIT1 | ©grp |
COPYRIGHT | TCR | TCOP | TCOP | cprt |
DATE | TYE, TDA | TYER, TDAT | TDRC | ©day |
DISCNUMBER | TPA | TPOS | TPOS | disk |
DISCSUBTITLE | TSST | |||
ENCODEDBY | TEN | TENC | TENC | ©too |
GENRE | TCO | TCON | TCON | gnre, ©gen |
GROUPING | GRP1 | GRP1 | ||
INITIALKEY | TKE | TKEY | TKEY | |
ISRC | TRC | TSRC | TSRC | |
LABEL | TPB | TPUB | TPUB | |
LANGUAGE | TLA | TLAN | TLAN | |
LYRICIST | TXT | TEXT | TEXT | |
LYRICS | ULT | USLT | USLT | ©lyr |
MOOD | TMOO | |||
MOVEMENT | MVNM | MVNM | ©mvn | |
MOVEMENTNUMBER | MVIN | MVIN | ©mvi | |
MOVEMENTTOTAL | MVIN | MVIN | ©mvc | |
ORIGINALARTIST | TOA | TOPE | TOPE | ©ope |
ORIGINALDATE | TOR | TORY | TDOR | |
RELEASEDATE | TDRL | |||
RATING | POP | POPM | POPM | |
REMIXER | TP4 | TPE4 | TPE4 | |
SUBTITLE | TT3 | TIT3 | TIT3 | |
TOTALDISCS | TPA | TPOS | TPOS | disk |
TOTALTRACKS | TRK | TRCK | TRCK | trkn |
TRACKNUMBER | TRK | TRCK | TRCK | trkn |
TITLE | TT2 | TIT2 | TIT2 | ©nam |
TITLESORT | TST | TSOT | TSOT | sonm |
WORK | ©wrk | |||
see below | TXX | TXXX | TXXX | ---- |
Note 1: The POP
and POPM
ID3v2 frames are mapped to RATING
only if no TXX:RATING
or TXXX:RATING
frame is present in the file.
This mapping translates a POP
or POPM
value in the range 1-255 to a RATING
value in the range 1-5.
Note 2: If a COM
or COMM
ID3v2 frame contains a description
field, the description is converted to upper case and appended to the mapped tag name. For example, a COMM
frame with a
description field Songs-DB_Custom4
is mapped to the tag name COMMENT
SONGS-DB_CUSTOM4
.
Note 3: The ID3v2 TXX
and TXXX
frames are mapped to a tag name corresponding
to the description field converted to upper case. For example, a TXXX
frame with a description field
of Performer
and a value field of Yo-Yo
Ma
would be mapped as PERFORMER=Yo-Yo
Ma
.
The description field can contain any tag name.
Note 4: An MPEG-4/iTunes '----
' atom containing a meaning atom
com.apple.iTunes
is mapped to a tag name corresponding to the name atom converted to upper case.
For example, a '----
' atom containing a meaning atom
com.apple.iTunes
, a name atom Ensemble
and a data atom Ex
Cathedra
would be mapped as ENSEMBLE=Ex
Cathedra
.
The name atom can contain any tag name.
Tag aliasing
The aliasTags
property contains a comma-separated list of tag aliases.
Each tag alias is a pair of tag names separated by a colon. For example, the tag alias
ReleaseDate:Date
defines ReleaseDate as an alias for Date, which causes
MinimServer to treat all occurrences of the ReleaseDate tag (the source) as if they
were Date tags (the target).
Any tags that are aliased in this way are no longer available by their original (source) names. No tag name can appear more than once as a source, but there is no limit on the number of times the same tag name can appear as a target.
If the target name matches any tag name that appears in your files, you might get unexpected
duplicated or conflicting tag entries. For example, if your files contain both ReleaseDate tags
and Date tags, and you have set ReleaseDate:Date
in the aliasTags
property,
MinimServer will treat both the aliased ReleaseDate tags and the unaliased Date tags as if they
are Date tags. To prevent this from happening, you can prefix the target tag name
with a minus sign (-
).
In this example, the setting ReleaseDate:-Date
would cause MinimServer to ignore
any Date tags in the file if there are any ReleaseDate tags in the file.
If you want MinimServer to ignore a tag completely, you can alias it to some other
name that doesn't appear in indexTags or itemTags, such as nil
.
Tag alias replacement takes place after ID3v2 and MPEG-4/iTunes tag mappings have been applied
(see the Tag mappings section). This allows you to use
tag aliasing to customize the predefined mappings that MinimServer provides for
ID3v2 frames and MPEG-4/iTunes tags. For example, if you want the ID3v2.3 TPUB frame to be mapped to
PUBLISHER instead of LABEL, you can add the tag alias Label:Publisher
.
Tag value customization
MinimServer supports customization of tag values using the option settings described in the following sections. To support customization, MinimServer gives each tag an index value, a sort value and a display value. The index value is the value shown in index lists while browsing your library, the sort value is the value used for sorting index lists, and the display value is the value shown in the control point's playlist and on the Now Playing screen.
By default, the index, sort and display values for a tag are the same as the tag value that
MinimServer reads from the audio file. You can optionally customize a tag's index, sort or display values
using the tagOptions
and tagValue
properties as described in the folowing sections.
There's a special option syntax for specifying whether the
index value, sort value or display value (or some combination of these) should be customized.
This specification is provided by suffixing the option name with
'.display
', '.sort
', '.index
' or any combination
of these suffixes. The special suffix '.*
' can be used as a shorthand to
represent the combination of all these suffixes.
For example, to reverse a composer name tagged in "last name first" form in the ComposerSort tag
and use the reversed name as the index and display values for the tag, you can
specify the option ComposerSort.reverseName.index.display
in the tagOptions
property. To use the reversed name as the index, sort and display values, you can specify
ComposerSort.reverseName.*
.
Tag options
You can use the tagOptions
property to specify a comma-separated list
of options for special handling of audio file tags. Each tag option consists of
the tag to which it applies (such as Artist or Date) followed by the option name.
If the option requires a value, the option name is followed by an equals sign and
curly braces enclosing the value.
For example, Album.sortTags={Date,
Artist}
specifies the value
'Date,
Artist
' for the
'sortTags
' option for the Album tag.
For options that don't have a value, the option can optionally be preceded by '+
' to enable the option or '-
'
to disable it. If neither of these is specified, '+
' is assumed.
For example, Date.yearOnly.index
enables the
'yearOnly.index
' option for the Date
tag.
Some options can be applied to all tags by using the special value 'all
' or '[all]
'
as the tag name. For example, the tag option all.ignore.sort={The}
enables the 'ignore.sort={The}
' option for all audio file tags.
This 'all
' option can be overriden for individual tags. For example, the option string
all.ignore.sort={The},
-Album.ignore.sort
enables the 'ignore.sort={The}
' option for all tags except Album.
When disabling an option in this way, the option value must be omitted.
The following tag options are available:
decade |
Uses the decade as the index value, display value or sort value for the tag.
This option must be suffixed as described in the Tag value customization section.
For example, specifying the option Date.decade.index
would cause the dates '1973' and '1979-04-05' to be indexed using the value '1970s'.
This option doesn't have a value.
|
ignore |
The value for this option is a comma-separated list of prefixes that should be ignored
for sorting, indexing or display purposes.This option must be suffixed as described in the Tag value customization section.
For example, you can use the option Artist.ignore.sort={The}
to sort the Artist tag value The Beatles as if it were Beatles, The while showing
it in the index as The Beatles . If you also want to see the index value as Beatles, The ,
you can use the option Artist.ignore.sort.index={The} .
|
Each prefix in the list represents a word followed by a space (for example, The matches The Beatles
but not Thelonius Monk ). A prefix ending in an apostrophe (' ) character doesn't need to be
followed by a space (for example, L' matches L'Estro Armonico ).
| |
You can specify any sequence of characters as a prefix by enclosing it in
double-quote (" ) or single-quote (' ) characters. This provides a way to specify prefixes
containing all possible literal characters including comma (, ), single quote (' )
and double quote (" ). For example, the prefix list
{"[", '"'}
specifies the prefixes [ and "
and these prefixes are matched whether or not they are followed by a space.
| |
reverseName |
Reformats a tag value from "lastname(s), firstname(s)" form to "firstname(s) lastname(s)" form
for display, indexing or sorting purposes.
This option must be suffixed as described in the Tag value customization section.
For example, you can use the option Composer.reverseName.display to display
the tag value "Bach, Johann Sebastian" as "Johann Sebastian Bach" on the control point's
Now Playing screen. If you also want to see this name as "Johann Sebastian Bach" in the
Composer index, you can use the option Composer.reverseName.display.index .
This option doesn't have a value.
|
sortTags |
The value for this option is a comma-separated list
of tag names that will be used (in the order listed) when doing comparisons for sorting purposes.
This option can be applied to the Album tag only. In addition, it can be used for item comparisons
in folder view by using the special value 'folder ' or '[folder] '
as the tag name and it can be used for item comparisons
in the <n> items list by using the special value 'items ' or '[items] '
as the tag name. For example, to sort folder items by the Date and Title tags, you can specify
the option folder.sortTags={Date, Title} .
See the List sort order section for more information.
By default, the list sort direction is controlled by ' |
yearMonth |
Uses a four-digit year followed by a two-digit month as the index value, display value or sort value for the tag.
This option must be suffixed as described in the Tag value customization section.
For example, specifying the option Date.yearMonth.index
would cause the dates '1984-02-05' and '1984-02-26' to be indexed using the value '1984-02'.
This option doesn't have a value.
|
yearOnly |
Uses a four-digit year as the index value, display value or sort value for the tag.
This option must be suffixed as described in the Tag value customization section.
For example, specifying the option Date.yearOnly.index
would cause the dates '1984-02-05' and '1984-09-07' to be indexed using the value '1984'.
This option doesn't have a value.
|
Tag values
You can use the tagValue
property to specify a comma-separated list
of options for custom handling of audio file tags in individual audio items.
Each option setting consists of the option tag name to which it applies (such as Artist or Composer)
and the option name, followed by an equals sign and curly braces enclosing a comma-separated
list of value tag names.
For example, Composer.default={ComposerSort}
specifies the value
'ComposerSort
' for the
'default
' option for the ComposerSort tag.
Tthe option tag name is known as the target tag (because its value is being changed) and the tags within curly braces are known as the source tags (because they provide the changed values). In the above example, the target tag is Composer and the source tag is ComposerSort.
The following options are available:
default |
If the target tag isn't present in the audio file, the first source tag name
that is present in the file (if any) is used to provide the values for the target tag. As an example,
the option setting Artist.default={Soloist,Performer} would examine each audio file
to see if it contains any Artist tags. If no Artist tags are found, the audio file is checked
for Soloist tags. If any Soloist tags are found, their values are used as the Artist values
for the audio file. If no Soloist tags are found, the audio file is checked
for Performer tags and these (if found) are used to provide the Artist values. Processing
ends when the first source tag match is found or when all the source tag names have been checked.
The source tags and their values are preserved unchanged.
|
merge |
All tag values for all the source tag names that are present in the audio file (if any) are merged into the target tag values,
ignoring any duplicate values. As an example, the option setting Artist.merge={Soloist,Performer}
would examine each audio file to see if it contains any Soloist tags. If any Soloist tags are found,
their values are added to the Artist values (if any) for the audio file. The audio file is then checked
for Performer tags and these (if found) are also added to the Artist values. Processing
ends when all the source tag names have been checked.
The source tags and their values are preserved unchanged.
|
replace |
The first source tag name that is present in the audio file (if any) is used to provide or
replace the values for the target tag. As an example,
the option setting Artist.replace={Soloist,Performer} would examine each audio file
to see if it contains any Soloist tags. If any Soloist tags are found, their values are used as
the Artist values for the audio file, replacing any tagged Artist values. If no Soloist tags are
found, the audio file is checked for Performer tags and these (if found) are used to replace any tagged
Artist values. Processing ends when the first source tag name match is found or when all the source tag names
have been checked.
The source tags and their values are preserved unchanged.
|
update |
If the target tag is present in the audio file, the first source tag name
that is present in the audio file (if any) is used to replace the values for the target tag. As an example,
the option setting Artist.update={Soloist,Performer} would examine each audio file
to see if it contains any Artist tags. If one or more Artist tags are found, the audio file is checked
to see if it contains any Soloist tags. If any Soloist tags are found, their values are used as
the Artist values for the audio file, replacing any tagged Artist values. If no Soloist tags are
found, the audio file is checked for Performer tags and these (if found) are used to replace any tagged
Artist values. Processing ends when the first source tag name match is found or when all the source tag names
have been checked.
The source tags and their values are preserved unchanged.
|
value |
The first source tag name that is present in the audio file (if any) is used to provide a custom value or values for the target tag.
This option can be used to customise the target tag's index value, sort value, display value or any combination
of these values.
This option must be suffixed as described in the Tag value customization section.
If the source and/or target tags have multiple values, the source tag values and target tag values are matched positionally
so that the nth source tag value provides a value for the nth target tag value if both tags have at least n values.
For example,
the option setting Artist.value.sort={ArtistSort} would
use any ArtistSort values that are present in the file to provide sort values for the corresponding Artist values.
Processing ends when the first source tag name match is found or when all the source tag names have been checked.
The source tags and their values are preserved unchanged.
|
For the default
, merge
, replace
, update
and value
options, you can specify one or more literal string values to be used as replacement or added values for the target tag.
These literal string values can be specified in place of source tag names or in addition to source tag names.
If literal string values are specified in addition to source tag names, the literal string values must appear after all source tag names.
For example, the option setting Genre.default={'Other'}
adds the tag GENRE=Other to
all files that don't have a GENRE tag. The option setting Subgenre.default={Genre,'Unknown'}
adds the tag SUBGENRE=Unknown to all files that don't have a GENRE or SUBGENRE tag.
Literal string values are delimited by either single-quote ('
) or double-quote ("
)
characters or by a combination of these if needed. Some examples:
"I can't say Yes"
'Say "Yes" today'
"I can't "'say "Yes" today'
For each audio file, all option settings are applied in the order they appear in the
tagValue
option. This ordering is important because each option setting can change
or add tag values, and these changed or added tag values are included when processing the next
option setting. For example, the settings
Composer.value.sort={ComposerSort},
Composer.default={ComposerSort}
are processed by first applying ComposerSort values as custom sort values for matching
Composer tags (if the file contains any such matches) and then using ComposerSort values to
provide Composer values (if no Composer values are present in the file). Reversing the order
of these steps would produce a different result because any Composer values
added by the default
option setting would be included when processing the
value.sort
option setting.
If a source tag value is customized using the decade
, ignore
,
reverseName
, yearMonth
or yearOnly
options described in the
Tag options section or using any of the options described in this section,
you can choose whether or not these
customizations are preserved by the default
, merge
and replace
options
described in this section.
To preserve these customizations, you need to add the suffix .custom
to the source tag name.
For example, if the tagOptions
property is set to
ComposerSort.reverseName.display
and the tagValue
property is set to
Composer.default={ComposerSort.custom}
, any ComposerSort tag value that is used as a default value for Composer
will preserve its reversed display name. The .custom
suffix can't be used with some target tags (see next paragraph).
The Album, AlbumArtist, Date, DiscNumber, DiscSubtitle, Group, Title and TrackNumber
tags are processed specially by MinimServer. Because of this, the default
, merge
and
replace
options for these target tags are unable to preserve any customizations to source tag values.
Because of this, the .custom
suffix described in the previous paragraph can't be used with these
target tags. For example, if the tagOptions
property is set to
Date.yearOnly.index,
OriginalDate.yearMonth.index
and the tagValue
property is set to
Date.replace={OriginalDate}
, any OriginalDate tag value used as a replacement value for Date
will have a "year only" index value in the Date index and a "year month" index value in the OriginalDate index.
Order of processing tag changes
The aliasTags
, tagOptions
, tagValue
, tagUpdate
and tagFormat
properties
all make changes to how tags are displayed. These changes can interact with each other, so it can sometimes be
important to know the order in which MinimServer applies changes made by these properties. This order is as follows:
- Tags are read from the audio file
- Special tags (with names starting #) are added if present in either indexTags or itemTags
- For each tag in turn, tagUpdate processing (if any) is applied to the tag, followed by aliasTags processing (if any)
- For each new tag added by tagUpdate processing, tagUpdate processing (if any) is applied to the tag, followed by aliasTags processing (if any)
- Any actions specified in tagOptions are applied in the order they appear in the tagOptions string
- Any actions specified in tagValue are applied in the order they appear in the tagValue string
- Any indexFormat actions in tagFormat are applied in the order they appear in the tagFormat string
This completes tag processing. Any displayFormat actions in tagFormat do not change tag values. They are applied to metadata sent to the control point when this metadata is requested.
Custom sorting for tag values
You can specify a custom sort value for any tag value by using the value.sort
option
of the tagValue
property. For example, if you want to sort the album title
...It's Too Late To Stop Now... under the letter I instead of under ..., you can do
the following:
- Add AlbumSort to the itemTags list
-
In the
tagValue
property, add the setting:
Album.value.sort={AlbumSort}
- In the tags for this album, add an AlbumSort tag with the value It's Too Late To Stop Now
You can do this for any tag value by following the same pattern (for example, using TitleSort for Title or ArtistSort for Artist).
Custom Artist index sorting
If your library contains ArtistSort tags, you can use the value.sort
option setting
of the tagValue
property to sort the entries in the Artist index using the values in
ArtistSort tags. To set this up, do the following:
- Add Artist to the indexTags list if it isn't already there.
- If your library contains any AlbumArtist tags, make sure you have AlbumArtist in either the itemTags list (if you want to use the Artist index for AlbumArtist values) or the indexTags list (if you want a separate AlbumArtist index).
- Add ArtistSort to the itemTags list if it isn't already there.
-
Set the
tagValue
property to:
Artist.value.sort={ArtistSort},
AlbumArtist.value.sort={ArtistSort}
If you don't have any AlbumArtist tags, you can omit theAlbumArtist.value.sort
setting.
With these settings, Artist and/or AlbumArtist index entries will be sorted using ArtistSort tag values. Any Artist or AlbumArtist entries that don't have a matching ArtistSort tag will be sorted in their usual order.
Note: This might produce unexpected results for files where the AlbumArtist value isn't
the same as the first (or only) Artist value.
To handle this correctly, you need to set the tagValue
property to:
Artist.value.sort={ArtistSort},
AlbumArtist.value.sort={AlbumArtistSort}
and make sure all your AlbumArtist tags have corresponding AlbumArtistSort tags.
You also need to add AlbumArtistSort to the itemTags list.
Using the reverseName option
Many people prefer to sort the Composer index list by the composer's last name. This isn't very easy if the Composer tags in the library are populated with values in the "firstname(s) lastname(s)" form.
One solution is to manually reverse the name order in the Composer tags to "lastname(s), firstname(s)". This is an extra manual step and it has the disadvantage (in some people's view) of showing the same reversed order on the control point's Now Playing screen.
To prevent this, it's possible to populate the library with ComposerSort tags with values in the "lastname(s), firstname(s)" form as well as Composer tags with values in the "firstname(s) lastname(s)" form. This produces the desired results but creates the problem of needing to maintain the same information in two different formats for every classical music file in the library, with the almost inevitable consequences of some files containing inconsistent or incomplete information.
The same considerations and trade-offs can also occur with Artist and AlbumArtist tags.
MinimServer provides an elegant solution to these problems by supporting automatic
reversal of the "lastname(s), firstname(s)" format. If you already have Composer tags in this format,
you can use the Composer.reverseName.display
setting of the tagOptions
property to automatically reverse these names for displaying on the control point's Now Playing screen.
If you also want to show reversed names in the Composer index, you can use the
Composer.reverseName.display.index
setting.
This approach doesn't handle any exceptional cases where MinimServer's automatic reversal fails to produce the desired result. If you want to be able to handle these cases, one possible way to do this is to use the following slightly more complex tagging approach:
- ComposerSort tags are populated with names in "lastnames(s), firstnames(s)" form where possible. (Some composers—such as Josquin des Prez—don't have a first name.)
- Composer tags are populated only in exceptional cases where the automatically reversed ComposerSort value wouldn't produce the desired value for the Now Playing screen.
-
The setting
ComposerSort.reverseName.display
is added to thetagOptions
property. With this setting, MinimServer automatically gives each ComposerSort tag a "firstname(s) lastname(s)" display value. -
The settings
Composer.value.sort={ComposerSort}
andComposer.default={ComposerSort.custom}
are added to thetagValue
property, in that order. - When each audio file is read, MinimServer checks to see whether the file has a Composer tag and a ComposerSort tag. If the file has both these tags, MinimServer uses the sort value from the ComposerSort tag to set the sort value for the Composer tag and leaves the display and index values for the Composer tag unchanged. If the file has a ComposerSort tag and doesn't have a Composer tag, MinimServer uses the sort and display values of the ComposerSort tag as the default sort and display values of the Composer tag. If the file has a Composer tag and doesn't have a ComposerSort tag, MinimServer uses the Composer tag value for displaying and sorting.
-
The above settings will use the original value of the ComposerSort tag as the index value, which
means index entries will be shown as "lastname(s), firstname(s)". If you prefer to see index entries
as "firstname(s) lastname(s)", you can use the
tagValue
settingComposerSort.reverseName.display.index
instead ofComposerSort.reverseName.display
. - A similar approach can be applied with Artist and ArtistSort tags and/or AlbumArtist and AlbumArtistSort tags. You can also do this with any other custom tags for which you would like to customize the sort order.
Tag formatting
You can use the tagFormat
property to specify a comma-separated list
of custom format settings for audio file tags. Each format setting
consists of the tag name to which it applies (such as Album, Artist or Title) followed by
the format type (either displayFormat
or indexFormat
) together with a format string.
For most control points, the displayFormat
option controls the values shown by the control point
on the Now Playing screen as well as album names, album contents and playlists.
The indexFormat
option controls the values shown as tag index entries when browsing your library.
The displayFormat
option can be used with the following tag names:
Album
AlbumArtist
Artist
Comment
DiscSubtitle
Genre
Group
Label
Title
Rating
and any role tags specified in the upnpCustom
property
The indexFormat
option can be used with any tag names that appear in the
indexTags property. See the Index tag formatting
section for more information about this option.
The full syntax of a tag formatting setting is either
tag-name.displayFormat={format-string}
or
tag-name.indexFormat={format-string}
where the format string is a sequence of one or more format items. Each format item
includes a tag list and can optionally include a prefix, suffix and separator.
You can write the format item as any of the following:
$tag-list^prefix^suffix^separator
$tag-list^prefix^suffix
$tag-list^prefix
$tag-list
The last of these (with no ^
) can only be used for the final format item.
For example, the format string
$artist$ensemble^$date^ [^]
contains the following two format items:
$artist$ensemble^
$date^ [^]
For each format item, MinimServer looks for all the tags in the tag list
and combines the tag values into a single string with any duplicates removed.
The tag values are separated by the separator, and the string of tag values is
preceded by the prefix and followed by the suffix. If the string of tag values is empty,
the prefix and suffix aren't used. The tags in the tag list must appear in either the
indexTags
or itemTags
property.
Let's look at an example. The format setting
Artist.displayFormat={$artist$orchestra$conductor}
tells MinimServer to create an Artist display string by combining
all the tagged Artist, Orchestra and Conductor values (if present) using the default separator, prefix and
suffix. The default separator is ', '
(comma and space), and the
default prefix and suffix are both null strings. For example, the display string
with two artists and no orchestra or conductor might be
Andrew Manze, Richard Egarr
If you'd prefer to see the
artists separated by a slash instead of a comma, you could use the format setting
Artist.displayFormat={$artist$orchestra$conductor^^^ / }
For the previous example, this would produce
Andrew Manze / Richard Egarr
You can extend the format string to include additional format items. For example, if you'd
like to see the recording date as part of the song title, you could use the format setting
Title.displayFormat={$title^$date^ [^]}
This format setting uses a format string with two format items:
$title^
$date^ [^]
and the resulting display string might be
Let It Be [1970]
[NEW] The format string can be empty. This prevents MinimServer
from sending the tag value to the control point for display. For example, the setting
Genre.displayFormat={}
prevents the genre from being shown in track information while retaining Genre
as an index selection.
Format properties
Format strings can use format properties as well as tag names. A format property starts
with an asterisk ('*
') character. The following format properties are available:
*infoFileURI
| the URI of an information file associated with this item, album or album disc |
The *infoFileURI
format property can be used to enable the display of
information files (digital booklets) in some UPnP control points. See the Information files section
for details of how you can associate information files with items and albums in your library. To send the location
of the information file to a UPnP control point, you can add Comment
to the list of tags in the
itemTags
property and define a suitable Comment.displayFormat
setting in
the tagFormat
property. For example, you could use the following format setting:
Comment.displayFormat={$*infoFileURI^<a href="^">Digital booklet</a>$comment}
or any other format setting that produces a correctly formatted HTML link to the information file.
For items, albums and album discs that have an associated information file, the Comment display value created by this format setting is sent to the control point as part of the UPnP description information. The control point can use the HTML link in the description to open the information file in a web browser when the user selects the link. This "click to view" support is currently available in the BubbleUPnP and BubbleDS control points for Android.
Index tag formatting
If you are using the indexFormat
option of the tagFormat
property to
customize the MinimServer index, some additional considerations apply. These considerations are
described in this section.
The indexFormat
option doesn't replace any existing tags in the item. For example, the setting
WorkByTitle.indexFormat={$title$tonality$opusnumber$subtitle}
would add a WorkByTitle tag if it doesn't exist in this item. No tag would be added if
the item already has a WorkByTitle tag. This limitation doesn't apply to the Artist tag.
If the tagFormat
property contains multiple indexFormat
settings, these
settings are applied to each item (track or group) from left to right in the order they appear
in the tagFormat
property.
The processing of indexFormat
takes place after the processing of tagOptions
and tagValue
, so any new tags created by indexFormat
don't have
tagOptions
or tagValue
customizations applied to them.
When processing the tags in an indexFormat
format string, the index values
of these tags are used. If a custom sort value has been applied to the first tag that
is processed by the format string, this custom sort value is applied to the new tag that
is created by the indexFormat
option.
The indexFormat
option is processed for each file while scanning the library.
This is unlike displayFormat
processing, which takes place during browsing
and is only applied to items that are being browsed by the control point.
If you have a large library, the overhead of indexFormat
processing
might cause a significant increase in scanning time and memory usage.