Symfonium custom string template (v12+)

In the now playing screens (compact and expanded), custom strings can be used to display whatever you like. You can enter plain text there, but of course there are placeholders available that are replaced with information about the currently playing track.

Basic string replacement

The basic syntax for these placeholders is easy: %fieldname%

You have to give the precise name of the field between the percent signs (%). Everything including the percent signs will be replaced with the contents of the field at run time. If the field is empty (corresponding tag not set or empty), then nothing will be shown.

Everything outside of the percent signs will be printed literally. Simple usage examples are:

Template Translates to (Example)
%title% by %artist% Seven Nation Army by The White Stripes
%album% (%year%) Thriller (1982)
%composer% ● %artist% Ludwig van Beethoven ● Berliner Philharmoniker
%artist%%lb%%composer% Berliner Philharmoniker
Ludwig van Beethoven

The available field names are:

  • title
  • cleantitle → the title without added track number or explicit symbol
  • artist
  • album
  • albumartist
  • composer
  • year
  • track
  • disc
  • duration
  • bpm
  • genre
  • style
  • mood
  • explicit
  • format
  • lb → a line break
  • next.title
  • next.cleantitle → the title without added track number or explicit symbol
  • next.artist
  • next.album
  • next.albumartist
  • next.composer
  • next.year
  • next.track
  • next.disc
  • next.duration
  • next.bpm
  • next.genre
  • next.style
  • next.mood
  • next.explicit

Version 12.1 adds the following new fields.

  • smartqueue
  • smartflow
  • format.bitrate
  • format.samplerate
  • format.bitdepth
  • format.codec
  • format.bitandsample
  • eq.profile
  • eq.config
  • queue.position
  • queue.size
  • language
  • releasedate
  • originaldate
  • userrating
  • rating
  • favorite
  • track.tags
  • playcount
  • skipcount
  • comment
  • next.language
  • next.releasedate
  • next.originaldate
  • next.userrating
  • next.rating
  • next.favorite
  • next.track.tags
  • next.playcount
  • next.skipcount
  • next.comment

Note: All fields prefixed with next. refers to the next item in the queue.

Conditional text

As no contents is shown when the field is empty, you maybe want to print some of the characters only if actual contents is shown. This is possible by enclosing the expression with curly brackets: {AAA%fieldname%BBB}.

AAA will only be shown before and BBB only after the main contents, if the field does contain something. Above examples enhanced with this function could be:

Template Translates to (Example) or when field is empty
%title%{ by %artist% } Seven Nation Army by The White Stripes Seven Nation Army
→ if artist is empty
%album%{ (%year%)} Thriller (1982) Thriller
→ if year is empty
{%composer% ● }%artist% Ludwig van Beethoven ● Berliner Philharmoniker Berliner Philharmoniker
→ if composer is empty

Please be aware that you can use only one field within the curly brackets. So this would not be possible: {Mood and Style: %mood% - %style%}. This also extends to the line break placeholder %lb% which cannot be used inside curly brackets, but you can use \n (backslash followed by lowercase n) instead:

Template Translates to or when field is empty
%album%{\n(%year%)} Thriller
(1982)
Thriller
→ if year is empty

Do not forget to include necessary whitespace within the curly brackets when using conditional text.

Conditional expressions

Even going further, you can show the contents of certain fields only if a condition of your choice is met. The syntax for this is: %fieldname|condition%
Conditions can be measured against the currently stated field, or against other known fields.
The checked value can be any field value or a literal value if you wrap it between ". (So track represent the track field, but "track" represent the actual track string). You can still have " inside the raw value this is not a problem as long as the raw value starts and ends with ".

Template Translates to (Example)
%year|year>"2012"% 2013
→ but not 2011
%composer|composer!=artist% Taylor Swift
→ if the track is not performed by Taylor Swift
%composer|genre=="Classical% Ludwig van Beethoven
→ only for titles in the Classical genre

The available operators for the conditions are:

Operator Meaning Example Note
== the same genre=="Classical"
artist==composer
!= not the same artist!="Metallica"
composer!=artist
+= contains genre+="Rock"
mood+=style
-= does not contain mood-="depressing"
mood-=genre
> is greater than year>"1999" Wrapping between "" is also necessary for raw number values
< is less than duration<"500" duration is in seconds
==empty empty year==empty empty is just a reserved word
!=empty not empty composer!=empty empty is just a reserved word

Of course you can combine conditional strings and expressions to get the full flexibility out of this, for example:

Template Translates to (if condition is met) (if condition is not met)
{%composer|genre=="Classical"% ● }%artist% Wolfgang Amadeus Mozart ● Boston Symphony Orchestra Billie Eilish
%title%{\n(%bpm|bpm>"120"% BPM)} The Bells
(138 BPM)
Last Christmas
{Oldies%|year<"1980"%} Oldies [nothing]
3 Likes