Перейти к содержимому

Symfonium custom string template

Requires v12.0+

Это содержимое пока не доступно на вашем языке.

This page documents Symfonium custom string template syntax and the field lists available in each context.

It is organized into:

  • Common template syntax: placeholders, conditional blocks, conditions/operators, text formatting, escaping rules, and global localized string.* labels
  • Context-specific sections:
    • Now Playing: additional features (\t, \o, next. fields, chapter.* fields) plus the full Now Playing field list
    • Album subtitle: album-level fields available on album pages
    • Artist subtitle: artist-level fields available on artist pages

Syntax: %fieldname%

  • Replaces %fieldname% with the field value
  • If the field is empty or missing, nothing is shown

Examples:

TemplateExample result
%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

%lb% is a line break.


Use blocks to show punctuation or labels only when something exists or when a condition matches.

Syntax: { ... }

  • A { ... } block is displayed only if its first placeholder matches:
    • either a non-empty field
    • or a true condition placeholder (%|condition%)
  • You can include multiple placeholders and literal text inside the same { ... } block, but only the first placeholder controls whether the block is shown
  • Put required spaces inside the block, for example { by %artist%}

Examples:

TemplateExample resultIf field is empty
%title%{ by %artist%}Seven Nation Army by The White StripesSeven Nation Army
%album%{ (%year%)}Thriller (1982)Thriller
{%composer% ● }%artist%Beethoven ● Berliner PhilharmonikerBerliner Philharmoniker

Use %|condition% as the first placeholder to gate a block without printing a value.

Example:

{%|format.samplerate>"48"% Hi-Res: %format.codec%}

Shows Hi-Res: FLAC only if format.samplerate > 48.

Use \n inside conditional blocks:

%album%{\n(%year%)}

Outside of { ... }, prefer %lb% for line breaks.


Syntax: %field|condition%

Prints the field only if the condition is true.

What you can compare:

  • Another field name, for example artist, composer, year
  • A literal string or number in quotes, for example "2012", "Rock", "256"

Notes on literals:

  • track means the track field
  • "track" means the literal text track
  • Quotes can appear inside values. Make sure the literal starts and ends with "

Examples:

%year|year>"2012"%
%composer|composer!=artist%
%composer|genre=="Classical"%

OperatorMeaningExampleNotes
==equalsgenre=="Classical" / artist==composer
!=not equalsartist!="Metallica"
+=containsgenre+="Rock"works with literal or another field
-=does not containmood-="depressing"
>greater thanyear>"1999"use quotes for literal numbers
<less thanduration<"500"duration is in seconds
==emptyis emptyyear==emptyempty is reserved
!=emptynot emptycomposer!=emptyempty is reserved
[]in rangebpm[]"0".."100"inclusive bounds

Multiple conditions, mixed && / ||, and parentheses

Section titled “Multiple conditions, mixed && / ||, and parentheses”
  • Use && for AND
  • Use || for OR
  • You can mix && and || in the same condition
  • Use parentheses (...) to control evaluation priority

Example:

%format|format.bitdepth!=empty && (format.samplerate>"48" || format.bitdepth>"24")%

This prints %format% only when bit depth exists and either:

  • sample rate is greater than 48
  • bit depth is greater than 24

**Bold**
__Underline__
~~Strike~~
//Italics//
^^CAPS^^

These placeholders return translated strings in the user locale:

  • string.hires
  • string.lossless
  • string.lossy
  • string.hires.lossless
  • string.low.quality
  • string.high.quality
  • string.high.efficiency
  • string.time.unit.day.short
  • string.time.unit.hour.short
  • string.time.unit.minute.short
  • string.time.unit.second.short
  • string.time.unit.day.one
  • string.time.unit.day.other
  • string.time.unit.hour.one
  • string.time.unit.hour.other
  • string.time.unit.minute.one
  • string.time.unit.minute.other
  • string.time.unit.second.one
  • string.time.unit.second.other
  • string.track.one
  • string.track.other
  • string.album.one
  • string.album.other

Now Playing templates can access:

  • track metadata
  • playback state
  • queue state
  • chapter state
  • audio format
  • EQ / renderer info
  • and more

Use \t to split one template into multiple segments.

Example:

%player.position%\t%format%\t%player.duration%

With horizontal alignment space between, this typically renders:

  • left: position
  • center: format
  • right: duration

Use \o to apply a protection overlay only to that part, even if the full string is not protected.

Add next. before item-data fields to refer to the next queue item:

%next.title%

For chapter fields, next.chapter.* refers to the next chapter.


  • title
  • title.raw
  • cleantitle (title without added track number or explicit symbol)
  • artist
  • album
  • album.raw
  • album.version
  • album.type (also known as Release Type)
  • albumartist
  • album.tags
  • album.title
  • album.title.raw
  • album.title.version
  • composer
  • year
  • releasedate
  • originaldate
  • releasedate.year
  • originaldate.year
  • track
  • disc
  • disctitle
  • duration
  • duration.seconds (Total seconds)
  • duration.d (Add .nz to hide if zero)
  • duration.h (Add .nz to hide if zero)
  • duration.m (Add .nz to hide if zero)
  • duration.s (Add .nz to hide if zero)
  • duration.dd (0 padded, add .nz to hide if zero)
  • duration.hh (0 padded, add .nz to hide if zero)
  • duration.mm (0 padded, add .nz to hide if zero)
  • duration.ss (0 padded, add .nz to hide if zero)
  • bpm
  • genre
  • style
  • mood
  • occasion
  • grouping
  • language
  • comment
  • work
  • movement.name
  • movement.number
  • movement.number.roman
  • mediatype
  • providername
  • offlinestatus
  • explicit
  • favorite
  • userrating
  • rating
  • userrating.5 (normalized to 5 stars)
  • rating.5 (normalized to 5 stars)
  • track.tags
  • original.artist
  • original.album
  • filepath
  • filename
  • lastplayed
  • lastSkipped
  • isaudiobook
  • playcount
  • skipcount
  • player.position
  • player.duration
  • player.remaining
  • player.position.seconds
  • player.duration.seconds
  • player.remaining.seconds
  • player.paused
  • player.repeat.mode
  • player.shuffle.mode
  • volume.current
  • sleep.timer
  • sleep.timer.seconds
  • sleep.timer.eos
  • queue.position
  • queue.size
  • queue.name
  • smartqueue
  • smartflow
  • radio.mode (1 if from Smart Queue, 2+ if from Smart Flow)
  • chapter.count
  • chapter.index
  • chapter.title
  • chapter.position
  • chapter.position.seconds
  • chapter.position.d (Add .nz to hide if zero)
  • chapter.position.h (Add .nz to hide if zero)
  • chapter.position.m (Add .nz to hide if zero)
  • chapter.position.s (Add .nz to hide if zero)
  • chapter.position.dd (0 padded, add .nz to hide if zero)
  • chapter.position.hh (0 padded, add .nz to hide if zero)
  • chapter.position.mm (0 padded, add .nz to hide if zero)
  • chapter.position.ss (0 padded, add .nz to hide if zero)
  • chapter.remaining
  • chapter.remaining.seconds
  • chapter.remaining.d (Add .nz to hide if zero)
  • chapter.remaining.h (Add .nz to hide if zero)
  • chapter.remaining.m (Add .nz to hide if zero)
  • chapter.remaining.s (Add .nz to hide if zero)
  • chapter.remaining.dd (0 padded, add .nz to hide if zero)
  • chapter.remaining.hh (0 padded, add .nz to hide if zero)
  • chapter.remaining.mm (0 padded, add .nz to hide if zero)
  • chapter.remaining.ss (0 padded, add .nz to hide if zero)
  • chapter.duration
  • chapter.duration.seconds
  • chapter.duration.d (Add .nz to hide if zero)
  • chapter.duration.h (Add .nz to hide if zero)
  • chapter.duration.m (Add .nz to hide if zero)
  • chapter.duration.s (Add .nz to hide if zero)
  • chapter.duration.dd (0 padded, add .nz to hide if zero)
  • chapter.duration.hh (0 padded, add .nz to hide if zero)
  • chapter.duration.mm (0 padded, add .nz to hide if zero)
  • chapter.duration.ss (0 padded, add .nz to hide if zero)
  • chapter.all.position
  • chapter.all.position.seconds
  • chapter.all.position.d (Add .nz to hide if zero)
  • chapter.all.position.h (Add .nz to hide if zero)
  • chapter.all.position.m (Add .nz to hide if zero)
  • chapter.all.position.s (Add .nz to hide if zero)
  • chapter.all.position.dd (0 padded, add .nz to hide if zero)
  • chapter.all.position.hh (0 padded, add .nz to hide if zero)
  • chapter.all.position.mm (0 padded, add .nz to hide if zero)
  • chapter.all.position.ss (0 padded, add .nz to hide if zero)
  • chapter.all.remaining
  • chapter.all.remaining.seconds
  • chapter.all.remaining.d (Add .nz to hide if zero)
  • chapter.all.remaining.h (Add .nz to hide if zero)
  • chapter.all.remaining.m (Add .nz to hide if zero)
  • chapter.all.remaining.s (Add .nz to hide if zero)
  • chapter.all.remaining.dd (0 padded, add .nz to hide if zero)
  • chapter.all.remaining.hh (0 padded, add .nz to hide if zero)
  • chapter.all.remaining.mm (0 padded, add .nz to hide if zero)
  • chapter.all.remaining.ss (0 padded, add .nz to hide if zero)
  • chapter.all.duration
  • chapter.all.duration.seconds
  • chapter.all.duration.d (Add .nz to hide if zero)
  • chapter.all.duration.h (Add .nz to hide if zero)
  • chapter.all.duration.m (Add .nz to hide if zero)
  • chapter.all.duration.s (Add .nz to hide if zero)
  • chapter.all.duration.dd (0 padded, add .nz to hide if zero)
  • chapter.all.duration.hh (0 padded, add .nz to hide if zero)
  • chapter.all.duration.mm (0 padded, add .nz to hide if zero)
  • chapter.all.duration.ss (0 padded, add .nz to hide if zero)
  • format
  • format.bitrate
  • format.bitrate.raw
  • format.samplerate
  • format.samplerate.raw
  • format.bitdepth
  • format.codec
  • format.bitandsample
  • format.channels
  • eq.profile
  • eq.config
  • output.current
  • renderer.current
  • renderer.type
  • lb (line break)
  • bool1
  • bool2
  • bool3
  • bool4
  • bool5

%title%%lb%{by %artist%}
%album%{ (%year%)}

Composer ● Artist only when composer exists

Section titled “Composer ● Artist only when composer exists”
{%composer% ● }%artist%

three-part line using \t (position / format / duration)

Section titled “three-part line using \t (position / format / duration)”
%player.position%\t%format%\t%player.duration%
{%|format.samplerate>"48"% Hi-Res: %format.codec%}

show active output device (Android vs other renderer)

Section titled “show active output device (Android vs other renderer)”
{ %output.current|renderer.type=="Android"%}{ %renderer.current|renderer.type!="Android"%}

toggleable Apple-style quality indicator (uses bool1)

Section titled “toggleable Apple-style quality indicator (uses bool1)”
ⓘ {%format|bool1=="true"%}{Dolby Atmos %|format.channels>"2" && bool1=="false"%}{%string.high.efficiency|format.bitrate>"10" && format.bitrate<"256" && format.bitdepth==empty && bool1=="false"%}{%string.high.quality|format.bitrate>"255" && format.bitrate<"321" && format.bitdepth==empty && bool1=="false"%}{%string.lossless|format.bitdepth[]"16".."24" && format.samplerate<"49" && bool1=="false"%}{%string.hires.lossless|format.bitdepth[]"16".."32" && format.samplerate>"48" && bool1=="false"%}

If you bind a toggle bool1 action to the custom string, it alternates between:

  • showing %format% when bool1 is true
  • showing the Apple-style indicator when bool1 is false
Vol %volume.current%%
{%chapter.index% - }%chapter.title%
%chapter.position%\t%chapter.title%\t%chapter.remaining%

full audiobook progress relative to first chapter

Section titled “full audiobook progress relative to first chapter”
%chapter.all.position%\t%chapter.all.duration%
%next.chapter.title%
%format.codec% • %format.bitdepth%/%format.samplerate.raw% • %format.bitrate.raw%

Album pages typically expose album-level metadata, not queue or player state. You can use the same common template syntax.

  • title
  • title.raw
  • version
  • tags
  • type
  • status
  • composer
  • artist
  • year
  • duration
  • duration.seconds (Total seconds)
  • duration.d (Add .nz to hide if zero)
  • duration.h (Add .nz to hide if zero)
  • duration.m (Add .nz to hide if zero)
  • duration.s (Add .nz to hide if zero)
  • duration.dd (0 padded, add .nz to hide if zero)
  • duration.hh (0 padded, add .nz to hide if zero)
  • duration.mm (0 padded, add .nz to hide if zero)
  • duration.ss (0 padded, add .nz to hide if zero)
  • genre
  • style
  • mood
  • language
  • providername
  • offlinestatus
  • occasion
  • mediatype
  • grouping
  • explicit
  • releasedate
  • originaldate
  • releasedate.year
  • originaldate.year
  • lastplayed
  • lastSkipped
  • userrating
  • rating
  • userrating.5
  • rating.5
  • favorite
  • song.count
  • playcount
  • skipcount
  • description
  • format
  • format.bitrate
  • format.channels
  • format.samplerate
  • format.bitdepth
  • format.codec
  • format.bitandsample
  • format.bitrate.raw
  • format.samplerate.raw
  • lb

album title + version only if version exists

Section titled “album title + version only if version exists”
%title%{ — %version%}
%year%{ • %genre%}
{★ %userrating.5%/5%|userrating!=empty%}
{⬇ Offline%|offlinestatus!=empty%}

Artist pages typically expose artist-level metadata and library stats. You can use the same common template syntax.

  • title
  • title.raw
  • version
  • tags
  • type
  • gender
  • duration
  • duration.seconds (Total seconds)
  • duration.d (Add .nz to hide if zero)
  • duration.h (Add .nz to hide if zero)
  • duration.m (Add .nz to hide if zero)
  • duration.s (Add .nz to hide if zero)
  • duration.dd (0 padded, add .nz to hide if zero)
  • duration.hh (0 padded, add .nz to hide if zero)
  • duration.mm (0 padded, add .nz to hide if zero)
  • duration.ss (0 padded, add .nz to hide if zero)
  • genre
  • style
  • mood
  • song.count
  • album.count
  • instrument
  • providername
  • offlinestatus
  • lastplayed
  • userrating
  • userrating.5
  • favorite
  • playcount
  • description
  • lb
%song.count% songs{ • %album.count% albums}
%genre%{ • %style%}
{♥ Favorite%|favorite!=empty%}
%title%{\n%instrument%}