MinimServer

Home

Features

MinimServer 2.2

License options

Downloads

Release notes

Quick start

MinimWatch

User guide

Support

Troubleshooting

Forum

MinimStreamer

License terms

UPnP and DLNA

Technology

Contact

Latest news

(2024/04/14) Configuration status web page updated automatically

Latest change

(2024/11/13) MinimServer 2.2 update 256 has been released

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

» User guide main contents

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:

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, PNG, GIF or BMP format embedded within the audio file
  2. 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.
  3. If the audio file is part of a group, the artwork for the group (see below)
  4. If the audio file is part of a multidisc album, the artwork for the album disc (see below)
  5. If the audio file is part of an album, the artwork for the album (see below)
  6. A file named folder.jpg (exact-case match if available, otherwise case-insensitive match) in the same directory (folder) as the audio file
  7. A file named folder.png (same case-matching search order as above) in the same directory (folder) as the audio file
  8. A file named cover.jpg (same case-matching search order as above) in the same directory (folder) as the audio file
  9. 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. 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.
  2. 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.
  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 6 to 9 above

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

  1. 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.
  2. 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.
  3. If the group is part of a multidisc album, the artwork for the album disc (see below)
  4. If the group is part of an album, the artwork for the album (see above)
  5. 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:

  1. 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.
  2. 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.
  3. The artwork for the album (see above)

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 file extension 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 6 to 9 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. 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:

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

  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 file extension 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

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:

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

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:

  1. Tags are read from the audio file
  2. Special tags (with names starting #) are added if present in either indexTags or itemTags
  3. For each tag in turn, tagUpdate processing (if any) is applied to the tag, followed by aliasTags processing (if any)
  4. For each new tag added by tagUpdate processing, tagUpdate processing (if any) is applied to the tag, followed by aliasTags processing (if any)
  5. Any actions specified in tagOptions are applied in the order they appear in the tagOptions string
  6. Any actions specified in tagValue are applied in the order they appear in the tagValue string
  7. 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:

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.

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:

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.