Bỏ qua để đến nội dung

Symfonium custom string template

Requires v12.0+

Nội dung này hiện chưa có sẵn bằng ngôn ngữ của bạn.

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%}