MusicBrainz Picard/Documentation/Scripting: Difference between revisions
From MusicBrainz Wiki
Jump to navigationJump to search
(luks: is %musicbrainz_artistid% the TrackArtist's ArtistID? (Imported from MoinMoin)) |
(manually redirecting anyone naughtily linking to the wiki instead of /doc/) |
||
(53 intermediate revisions by 22 users not shown) | |||
Line 1: | Line 1: | ||
#REDIRECT [[MusicBrainz Picard]] |
|||
This page describes a simple scripting language implemented in [[Picard Qt|PicardQt]]. |
|||
==Syntax== |
|||
The syntax is derived from [http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Titleformat_Reference Foobar2000's titleformat]. There are three base elements: '''text''', '''variable''' and '''function'''. Variables consist of alpha-numeric characters enclosed in percent signs (e.g. <code><nowiki>%artist%</nowiki></code>). Functions start with a dollar sign and end with an argument list enclosed in parentheses (e.g. <code><nowiki>$lower(...)</nowiki></code>). |
|||
To use parenthesis or commas as-is inside a function call you must escape them with a backslash. |
|||
==Metadata Variables== |
|||
<ul><li style="list-style-type:none">{i} ''Not all of these variables are available for all files. Plugins or scripts can also create a new ones.'' |
|||
</ul> |
|||
===%title%=== |
|||
<ul><li style="list-style-type:none">[[Track Title|TrackTitle]] |
|||
</ul> |
|||
===%artist%=== |
|||
<ul><li style="list-style-type:none">[[Artist Name|ArtistName]] |
|||
</ul> |
|||
===%artistsort%=== |
|||
<ul><li style="list-style-type:none">[[Artist Sort Name|ArtistSortName]] |
|||
</ul> |
|||
===%album%=== |
|||
<ul><li style="list-style-type:none">[[Release Title|ReleaseTitle]] |
|||
</ul> |
|||
===%albumartist%=== |
|||
<ul><li style="list-style-type:none">[[Release Artist|ReleaseArtist]] |
|||
</ul> |
|||
===%albumartistsort%=== |
|||
<ul><li style="list-style-type:none">[[Release Artist|ReleaseArtist]] [[Artist Sort Name|ArtistSortName]] |
|||
</ul> |
|||
===%tracknumber%=== |
|||
<ul><li style="list-style-type:none">Track number |
|||
</ul> |
|||
===%totaltracks%=== |
|||
<ul><li style="list-style-type:none">Total tracks on the album |
|||
</ul> |
|||
===%discnumber%=== |
|||
<ul><li style="list-style-type:none">Disc number |
|||
</ul> |
|||
===%totaldiscs%=== |
|||
<ul><li style="list-style-type:none">Total number of discs |
|||
</ul> |
|||
===%date%=== |
|||
<ul><li style="list-style-type:none">Release date |
|||
</ul> |
|||
===%musicbrainz_trackid%=== |
|||
<ul><li style="list-style-type:none">[[Track ID|TrackID]] |
|||
</ul> |
|||
===%musicbrainz_albumid%=== |
|||
<ul><li style="list-style-type:none">[[Release ID|ReleaseID]] |
|||
</ul> |
|||
===%musicbrainz_artistid%=== |
|||
<ul><li style="list-style-type:none">[[Artist ID|ArtistID]] |
|||
</ul> |
|||
===%musicbrainz_albumartistid%=== |
|||
<ul><li style="list-style-type:none">[[Release Artist|ReleaseArtist]]'s [[Artist ID|ArtistID]] |
|||
</ul> |
|||
===%compilation%=== |
|||
<ul><li style="list-style-type:none">0 for single artist albums, 1 for multiple artist albums |
|||
</ul> |
|||
===%asin%=== |
|||
<ul><li style="list-style-type:none">Amazon [[ASIN]] |
|||
</ul> |
|||
===%composer%=== |
|||
<ul><li style="list-style-type:none">[[Composer Relationship Type|ComposerRelationshipType]] |
|||
</ul> |
|||
===%conductor%=== |
|||
<ul><li style="list-style-type:none">[[Conductor Relationship Type|ConductorRelationshipType]] |
|||
</ul> |
|||
===%arranger%=== |
|||
<ul><li style="list-style-type:none">[[Arranger Relationship Type|ArrangerRelationshipType]], [[Instrumentator Relationship Type|InstrumentatorRelationshipType]], [[Orchestrator Relationship Type|OrchestratorRelationshipType]] |
|||
</ul> |
|||
===%lyricist%=== |
|||
<ul><li style="list-style-type:none">[[Lyricist Relationship Type|LyricistRelationshipType]] |
|||
</ul> |
|||
===%remixer%=== |
|||
<ul><li style="list-style-type:none">[[Remixer Relationship Type|RemixerRelationshipType]] |
|||
</ul> |
|||
===%producer%=== |
|||
<ul><li style="list-style-type:none">[[Producer Relationship Type|ProducerRelationshipType]] |
|||
</ul> |
|||
===%engineer%=== |
|||
<ul><li style="list-style-type:none">[[Engineer Relationship Type|EngineerRelationshipType]] |
|||
</ul> |
|||
===%releasetype%=== |
|||
<ul><li style="list-style-type:none">[[Release Type|ReleaseType]] |
|||
</ul> |
|||
===%releasestatus%=== |
|||
<ul><li style="list-style-type:none">[[Release Status|ReleaseStatus]] |
|||
</ul> |
|||
==Technical Variables== |
|||
===%_extension%=== |
|||
<ul><li style="list-style-type:none">Extension of the file name. For example ''mp3'' for file ''01 Track.mp3''. |
|||
</ul> |
|||
==Functions== |
|||
===$if(if,then,else)=== |
|||
<ul><li style="list-style-type:none">If <code><nowiki>if</nowiki></code> is not empty, it returns <code><nowiki>then</nowiki></code>, otherwise it returns <code><nowiki>else</nowiki></code>. |
|||
</ul> |
|||
===$if2(a1,a2,a3,...)=== |
|||
<ul><li style="list-style-type:none">Returns first non empty argument. |
|||
</ul> |
|||
===$lower(text)=== |
|||
<ul><li style="list-style-type:none">Returns <code><nowiki>text</nowiki></code> in lower case. |
|||
</ul> |
|||
===$upper(text)=== |
|||
<ul><li style="list-style-type:none">Returns <code><nowiki>text</nowiki></code> in upper case. |
|||
</ul> |
|||
===$left(text,num)=== |
|||
<ul><li style="list-style-type:none">Returns first <code><nowiki>num</nowiki></code> characters from <code><nowiki>text</nowiki></code>. |
|||
</ul> |
|||
===$right(text,num)=== |
|||
<ul><li style="list-style-type:none">Returns last <code><nowiki>num</nowiki></code> characters from <code><nowiki>text</nowiki></code>. |
|||
</ul> |
|||
===$num(num,len)=== |
|||
<ul><li style="list-style-type:none">Returns <code><nowiki>num</nowiki></code> formatted to <code><nowiki>len</nowiki></code> digits. |
|||
</ul> |
|||
===$replace(text,search,replace)=== |
|||
<ul><li style="list-style-type:none">Returns <code><nowiki>replace</nowiki></code> in place of <code><nowiki>text</nowiki></code>, if <code><nowiki>search</nowiki></code> was found in <code><nowiki>text</nowiki></code>. |
|||
</ul> |
|||
===$rsearch(text,pattern)=== |
|||
<ul><li style="list-style-type:none">[http://docs.python.org/lib/re-syntax.html Regular expression] search. This function will return the first matching group. |
|||
</ul> |
|||
===$rreplace(text,pattern,replace)=== |
|||
<ul><li style="list-style-type:none">[http://docs.python.org/lib/re-syntax.html Regular expression] replace. |
|||
</ul> |
|||
===$in(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> contains <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$unset(name)=== |
|||
<ul><li style="list-style-type:none">Unsets the variable <code><nowiki></nowiki></code>name<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$set(name, value)=== |
|||
<ul><li style="list-style-type:none">Sets the variable <code><nowiki></nowiki></code>name<code><nowiki></nowiki></code> to <code><nowiki></nowiki></code>value<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$get(name)=== |
|||
<ul><li style="list-style-type:none">Returns the variable <code><nowiki></nowiki></code>name<code><nowiki></nowiki></code> (equivalent to <code><nowiki></nowiki></code>%name%<code><nowiki></nowiki></code>). |
|||
</ul> |
|||
===$trim(text[,char])=== |
|||
<ul><li style="list-style-type:none">Trims all leading and trailing whitespaces from <code><nowiki></nowiki></code>text<code><nowiki></nowiki></code>. The optional second parameter specifies the character to trim. |
|||
</ul> |
|||
===$add(x,y)=== |
|||
<ul><li style="list-style-type:none">Add <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> to <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$sub(x,y)=== |
|||
<ul><li style="list-style-type:none">Substracts <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> from <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$div(x,y)=== |
|||
<ul><li style="list-style-type:none">Divides <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> by <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$mod(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns the remainder of <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> divided by <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$mul(x,y)=== |
|||
<ul><li style="list-style-type:none">Multiplies <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> by <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$or(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if either <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> or <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> not empty. |
|||
</ul> |
|||
===$and(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if both <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> and <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code> are not empty. |
|||
</ul> |
|||
===$not(x)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is empty. |
|||
</ul> |
|||
===$eq(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$ne(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> not equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$lt(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is lower than <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$lte(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is lower than or equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$gt(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is greater than <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$gte(x,y)=== |
|||
<ul><li style="list-style-type:none">Returns true, if <code><nowiki></nowiki></code>x<code><nowiki></nowiki></code> is greater than or equals <code><nowiki></nowiki></code>y<code><nowiki></nowiki></code>. |
|||
</ul> |
|||
===$noop(...)=== |
|||
<ul><li style="list-style-type:none">Does nothing (useful for comments or disabling a block of code). |
|||
</ul> |
|||
==Examples== |
|||
===Use case 1: Disc numbers=== |
|||
<pre>$set(discnumber,$rsearch(%album%,\\\(disc \(\\d+\)\\\))) |
|||
$set(album,$rreplace(%album%,\\s\\\(disc \\d+\\\),)) |
|||
</pre> |
|||
<ul><li style="list-style-type:none">Would it be possible to trim all of ''(disc 1: Subtitle Here)'' and also set the disc number? --[[User:AaronCooper|AaronCooper]] (2007-03-07) |
|||
<ul><li style="list-style-type:none">You can use the plugin from [[Picard Qt/Plugins|PicardQt/Plugins]]. --[[User:LukasLalinsky|LukasLalinsky]] |
|||
</ul> |
|||
</ul> |
|||
===Use case 2: Artist names=== |
|||
<pre>$if($search(%album%,(feat. conductor)), |
|||
$set(artist,%orchestra%)) |
|||
</pre> |
|||
<ul><li style="list-style-type:none">''Stupid assumption that all classical albums have "feat. conductor" in the title, but it shows the idea. :)'' |
|||
</ul> |
|||
===Use case 3: Live tracks on live albums=== |
|||
<pre>$if($and($eq(%releasetype%,live),$not($in(%title%,\(live\)))),$set(title,%title% \(live\))) |
|||
</pre> |
|||
===Lower case filenames with underscores=== |
|||
<pre>$lower($replace(%albumartist%/%album%/$num(%tracknumber%,2) %title, ,_)) |
|||
</pre> |
|||
===(Year) only if available=== |
|||
<pre>$if(%date%,\($left(%date%,4)\)) |
|||
</pre> |
|||
===Remove "feat." from track titles=== |
|||
<pre>$set(title,$rreplace(%title%,\\s\\\(feat. [^\)]+\\\),)) |
|||
</pre> |
|||
[[Category:To Be Reviewed]] [[Category:Picard]] [[Category:Development]] |
Latest revision as of 21:16, 25 November 2014
Redirect to: