MinimServer

Home

Donate

Features

Downloads

Installing

Release notes

User guide

Support

Troubleshooting

Forum

MinimStreamer

License

UPnP AV

Technology

Contact

Latest news

Added support for digital booklets

Latest change

MinimServer update 97 has been released

Your music library

Table of contents

Audio files
Playlists
File scanning [NEW]
Artwork
Information files [NEW]
Illegal filename characters [NEW]
Albums and folders
Tag mappings
Tag aliasing
Tag value customization
Tag options
Tag values
Custom sorting for tag values
Custom Artist index sorting
Using the reverseName option
Tag formatting
Format properties [NEW]
Index tag formatting

» User guide main contents

Audio files

MinimServer recognizes the following filetypes as audio files containing the audio data formats and tagging formats listed below:

.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   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 the following filetypes 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

File scanning [NEW]

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:

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:

  1. Artwork in JPEG or PNG format embedded within the audio file
  2. [NEW] 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 filetype suffix. For example, the audio file Magnificat.flac could have artwork in the file Magnificat.jpg or Magnificat.png.
  3. If the audio file is part of an album, the artwork for the album (see below)
  4. If the audio file isn't part of an album but is part of a group, the artwork for the group (see below)
  5. A file named folder.jpg (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as the audio file
  6. A file named folder.png (same case-matching search order as above) in the same directory (folder) as the audio file
  7. A file named cover.jpg (same case-matching search order as above) in the same directory (folder) as the audio file
  8. 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:

  1. Artwork in JPG or PNG 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.
  2. 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.
  3. 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 5 to 8 above.

When displaying a group, MinimServer looks for artwork using the following search order:

  1. Artwork in JPG or PNG format embedded within an audio file for a track of the group. If more than one track of the group album has embedded artwork, the artwork for the lowest-numbered track is used.
  2. 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.
  3. 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 5 to 8 above.

When displaying a disc of a multidisc album, MinimServer looks for artwork using the following search order:

  1. Artwork in JPG or PNG 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.
  2. 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.
  3. 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 disc, using the case-matching search order described in steps 5 to 8 above.

[NEW] When displaying a playlist, MinimServer looks for artwork using the following search order:

  1. 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 filetype suffix. For example, the playlist Radio.m3u could have artwork in the file Radio.jpg or Radio.png.
  2. 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 5 to 8 above.

When displaying a playlist entry for a network stream, MinimServer looks for artwork using the following search order:

  1. 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 file Naim Radio.jpg or Naim Radio.png.

  2. [NEW] 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 5 to 8 above.

Information files [NEW]

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:

  1. 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 filetype suffix. For example, an information file for the audio file Magnificat.flac would be named Magnificat.pdf.
  2. 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.
  3. 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.
  4. 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.
  5. 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
  6. 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
  7. 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:

  1. 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.
  2. 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.
  3. 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
  4. 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:

  1. 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.
  2. 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:

  1. 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.
  2. 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.
  3. 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
  4. 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 [NEW]

When creating an artwork file (see the 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:

When merging folder album contents, MinimServer checks for all of the following:

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 iTunes (mp4/m4a) tags, MinimServer provides the following mappings from ID3v2 frames and iTunes tags to FLAC/Vorbis tag names:

FLAC/Vorbis name   ID3v2.2 frame   ID3v2.3 frame   ID3v2.4 frame   iTunes tag
         
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
ISRC TRC TSRC TSRC  
LABEL TPB TPUB TPUB  
LANGUAGE TLA TLAN TLAN  
LYRICIST TXT TEXT TEXT  
LYRICS ULT USLT USLT ©lyr
MOOD     TMOO  
ORIGINALARTIST  TOA TOPE TOPE ©ope
ORIGINALDATE TOR TORY TDOR  
RELEASEDATE     TDRL  
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

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 nonaliased Date tags as if they are Date tags. To prevent this from happening, you can alias Date to some other name that doesn't appear in indexTags or itemTags, such as nil.

Tag alias replacement takes place after ID3v2 and 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 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 initial words or prefixes [NEW] that should be ignored for sorting, indexing or display purposes. A word is followed by a space (for example, The Beatles) and a prefix ends with an apostrophe (') character (for example, L'estro). 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}.
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 '+' and '-' tag prefixes in the indexTags or itemTags property. To override this sort direction for album or folder lists, you can specify a '+' or '-' prefix for tag names in the sortTags option. For example, to sort album lists by ascending Date tag value while sorting Date index lists by descending Date value, you can specify the tag option Album.sortTags={+Date, Title}.

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.
indexValue.decade  [DEPRECATED] This option has been replaced by the decade.index option (see above). It will be removed in a future release.
indexValue.yearOnly  [DEPRECATED] This option has been replaced by the yearOnly.index option (see above). It will be removed in a future release.
sortValue.ignoreThe  [DEPRECATED] This option has been replaced by the ignore.sort option (see above). It will be removed in a future release.

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.
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 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.

Similarly, the option setting Title.value.sort={TitleSort} would use the TitleSort tag value (if present in the file) to provide the sort value for the Title tag value.

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 leter I instead of under ..., you can do the following:

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:

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.

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:

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 setting controls the value shown by the control point on the Now Playing screen and for playlists and album contents, and the indexFormat setting controls the value shown in index lists while browsing your library.

The full syntax of this option 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]

Format properties [NEW]

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 option
 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 options, these options 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.