Smart playlists: Difference between revisions
>UNiversal m (→Fields) |
>UNiversal |
||
Line 5: | Line 5: | ||
=== Smart playlist for music === | === Smart playlist for music === | ||
;<big>{{highlight|Music -> Playlists -> New smart playlist|bordered=yes}}</big> | ;<big>{{highlight|Music -> Playlists -> New smart playlist|bordered=yes}}</big> | ||
<gallery widths= | <gallery widths=600px heights=380px> | ||
Image:Musicxsp1.png|''' Step 1: '''Select "Music" on main menu | Image:Musicxsp1.png|<big>'''Step 1:'''</big> Select "Music" on main menu | ||
Image:Musicxsp2.png|''' Step 2: '''Select "Playlists" from the options | Image:Musicxsp2.png|<big>'''Step 2:'''</big> Select "Playlists" from the options | ||
Image:Musicxsp3.png|''' Step 3: '''Select "New smart playlist" from the options | Image:Musicxsp3.png|<big>'''Step 3:'''</big> Select "New smart playlist" from the options | ||
Image:Musicxsp4.png|''' Step 4: '''Fill in with the desired options and when done press {{button|OK}} | Image:Musicxsp4.png|<big>'''Step 4:'''</big> Fill in with the desired options and when done press {{button|OK}} | ||
</gallery> | </gallery> | ||
Revision as of 16:58, 10 May 2013
XBMC supports smart playlists for all types of media (excluding pictures), which essentially use a set of rules to limit the results from the databases. This means that to be able to create a smart playlist in the GUI, music/video must first be added to the libraries using a scraper addon or by creating NFO files. Smart playlist can be created either by using the built-in GUI smart playlist editor accessible from the Playlists section, or by creating an XML file with the extension XSP (XBMC Smart Playlist).
Creating a smart playlist in the GUI
Smart playlist for music
- Music -> Playlists -> New smart playlist
Smart playlist for video
- Video -> Playlists -> New smart playlist
Format of a smart playlist file
Smart playlists are plain text files that can be parsed by an XML reader (e.g. Visual Studio and Notepad++). Any text editor can be used to create them. They should be saved with the extension XPS and placed in your Userdata directory (smart playlist XSP files cannot be read off of remote shares at present).
The format is as follows:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <smartplaylist type="songs"> <name>All U2 from after 1990</name> <match>all</match> <rule field="artist" operator="is"> <value>U2</value> </rule> <rule field="year" operator="greaterthan"> <value>1990</value> </rule> <limit>50</limit> <order direction="descending">playcount</order> </smartplaylist>
Types
Smart playlists can be of one of the following types:
- songs (default)
- albums
- movies
- tvshows
- episodes
- musicvideos
- mixed (audio and music videos)
<smartplaylist type="songs">
Name and Match
Basically there are two header tags, <name>
and <match>
and then a set of <rule>
tags that define the rules to use, along with an <order>
tag to allow sorting and a <limit>
tag to limit the returned results. Note that the tags and attributes are all case-sensitive. The <name>
tag is the name of the playlist and the <match>
tag indicates how the <rule>
tags should be matched. If <match>all</match>
like in the above example, then only songs which satisfy all the <rule>
's will be included. If <match>one</match>
is specified, then songs that satisfy any one (or more) of the <rule>
's will be included.
<name>All U2 from after 1990</name> <match>all</match>
Rules
The <rule>
tags, of which there can be as many as you wish, have two attributes (field
and operator
) and a <value>
tag.
<rule field="artist" operator="is"> <value>U2</value> </rule>
Fields
Depending on the type of the smart playlist different field
s are available:
field
|
music | video | type | ||||||
---|---|---|---|---|---|---|---|---|---|
Name | Data type | songs | albums | artists | movies | tvshows | episodes | musicvideos | mixed |
genre | string | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
album | string | Yes | Yes | No | No | No | No | Yes | Yes |
artist | string | Yes | Yes | Yes | No | No | No | Yes | Yes |
albumartist | string | Yes | Yes | No | No | No | No | Yes | Yes |
title | string | Yes | No | No | Yes | No | No | Yes | Yes |
year | number | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes |
time | number | Yes | No | No | Yes | No | Yes | Yes | Yes |
tracknumber | number | Yes | No | No | No | No | No | No | Yes |
filename | string | Yes | No | No | Yes | No | Yes | Yes | Yes |
path | string | Yes | No | No | Yes | Yes | Yes | Yes | Yes |
playcount | number | Yes | No | No | Yes | Yes | Yes | Yes | Yes |
lastplayed | date | Yes | No | No | Yes | No | Yes | Yes | Yes |
inprogress | boolean | No | No | No | Yes | No | Yes | No | Yes |
rating | number | Yes | Yes | No | Yes | Yes | Yes | No | Yes |
comment | string | Yes | No | No | No | No | No | No | Yes |
dateadded | date | No | No | No | No | No | No | No | No |
plot | string | No | No | No | Yes | Yes | Yes | Yes | Yes |
plotoutline | string | No | No | No | Yes | No | No | No | Yes |
tagline | string | No | No | No | Yes | No | No | No | Yes |
mpaarating | string | No | No | No | Yes | Yes | Yes | No | Yes |
top250 | number | No | No | No | Yes | No | No | No | Yes |
status | string | No | No | No | No | Yes | No | No | Yes |
votes | number | No | No | No | Yes | Yes | Yes | No | Yes |
director | string | No | No | No | Yes | Yes | Yes | Yes | Yes |
actor | string | No | No | No | Yes | Yes | Yes | No | Yes |
studio | string | No | No | No | Yes | Yes | Yes | Yes | Yes |
country | string | No | No | No | Yes | No | No | No | Yes |
numepisodes | number | No | No | No | No | Yes | No | No | Yes |
numwatched | number | No | No | No | No | Yes | No | No | Yes |
writers | string | No | No | No | Yes | No | Yes | No | Yes |
airdate | date | No | No | No | No | No | Yes | No | Yes |
episode | number | No | No | No | No | No | Yes | No | Yes |
season | number | No | No | No | No | No | Yes | No | Yes |
tvshow | string | No | No | No | No | Yes | Yes | No | Yes |
episodetitle | string | No | No | No | No | No | Yes | No | Yes |
review | string | No | Yes | No | No | No | No | No | Yes |
themes | string | No | Yes | No | No | No | No | No | Yes |
moods | string | No | Yes | Yes | No | No | No | No | Yes |
styles | string | No | Yes | Yes | No | No | No | No | Yes |
type | string | No | Yes | No | No | No | No | No | Yes |
label | string | No | Yes | No | No | No | No | No | Yes |
hastrailer | boolean | No | No | No | Yes | No | No | No | Yes |
videoresolution | number | No | No | No | Yes | No | Yes | Yes | Yes |
audiochannels | number | No | No | No | Yes | No | Yes | Yes | Yes |
videocodec | string | No | No | No | Yes | No | Yes | Yes | Yes |
audiocodec | string | No | No | No | Yes | No | Yes | Yes | Yes |
audiolanguage | string | No | No | No | Yes | No | Yes | Yes | Yes |
subtitlelanguage | string | No | No | No | Yes | No | Yes | Yes | Yes |
videoaspect | number | No | No | No | Yes | No | Yes | Yes | Yes |
set | string | No | No | No | Yes | No | No | No | Yes |
tag | string | No | No | No | Yes | No[1] | No | No[1] | No[1] |
instruments | string | No | No | Yes | No | No | No | No | No |
biography | string | No | No | Yes | No | No | No | No | No |
born | string | No | No | Yes | No | No | No | No | No |
band formed | string | No | No | Yes | No | No | No | No | No |
disbanded | string | No | No | Yes | No | No | No | No | No |
died | string | No | No | Yes | No | No | No | No | No |
playlist | string | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Operators
The operator
attribute specifies the rule that should be used to match the parameter to the field
. All matching is done case-insensitive. The allowed operator
s are:
operator
|
Definition |
---|---|
contains | True if the field contains the parameter as a substring |
doesnotcontain | True if the field does not contain the parameter as a substring |
is | True if the field matches the parameter exactly |
isnot | True if the field does not match the parameter exactly |
startswith | True if the start of the field matches the parameter |
endswith | True if the end of the field matches the parameter |
lessthan | True if the content of the field is less than the parameter |
greaterthan | True if the content of the field is greater than the parameter |
after | True if the content of the field comes after the parameter |
before | True if the content of the field comes before the parameter |
inthelast | True if the field falls in the last range specified by the parameter. Only applicable for a date field. |
notinthelast | True if the field does not fall in the last range specified by the parameter. Only applicable for a date field. |
Limit and Order
The <limit>
tag simply takes a number of songs as it's limit. A missing limit tag, or <limit>0</limit>
will retrieve all matching songs. The <order>
tag has a direction
attribute, the values of which can be ascending
or descending
, and it's value is a field as above, or can be <order>random</order>
if you want a random ordering returned. Note that random should be used with care - it is quite slow if the returned results from the <rule>
sets is large (more than 500 items).
The above example, therefore selects all songs whose artist field is U2 and whose year field is greater than 1990, orders them by the number of times they've been played (most played first) then limits it to just 50. Thus, the top 50 songs you've played from all U2 songs published after 1990.
<limit>50</limit> <order direction="descending">playcount</order>
Grouping
The <group>
tag allows to group the resulting list of media items by a specific category. The final list will consist of folder nodes containing matching media items. Depending on the type of the Smart Playlist the following grouping categories exist:
field
|
music | video | |||||||
---|---|---|---|---|---|---|---|---|---|
Name | Data type | songs | albums | artists | movies | tvshows | episodes | musicvideos | mixed |
none | string | No | No | No | Yes | No | No | No | No |
genres | string | No | No | Yes | Yes | Yes | No | Yes | Yes |
years | string | No | Yes | No | Yes | Yes | No | Yes | Yes |
actors | string | No | No | No | Yes | Yes | Yes | No | No |
artists | string | No | No | No | No | No | No | Yes | Yes |
directors | string | No | No | No | Yes | Yes | Yes | Yes | Yes |
writers | string | No | No | No | No | No | Yes | No | No |
studios | string | No | No | No | Yes | Yes | No | Yes | Yes |
countries | string | No | No | No | Yes | No | No | No | No |
sets | string | No | No | No | Yes | No | No | No | No |
tags | string | No | No | No | Yes | Yes | No | Yes | Yes |
NOTICE: There's an important difference between not providing a <group> tag (or providing an empty <group> tag) and setting the value of the <group> tag to none: The latter will overrule any mixed grouping that would be applied by default to a list of media items (specifically for a mixed list of movies and movie sets if the setting Group movies into sets is enabled).
|
Mixed grouping
For the sets grouping category there is support for additional so called mixed grouping. The difference to normal grouping is that the resulting list will not just be a list of grouped folders but a mix of media items and grouped folders. Mixed grouping can be controlled using the mixed attribute in the <group>
tag with a boolean value (true or false).
Combining playlists
The playlist
field
can be used to combine several playlists together. When playlists are combined, the <limit>
and <order>
tags of the included playlists are ignored; only the <order>
and <limit>
of the final playlist are used.
As a simple example, lets create a new playlist combining the "Rock Music from the 1970s" and "Recently Played Songs" playlists above, to produce a playlist with the recently played rock songs from the 1970s.
Recently played rock tracks from the 1970s
<?xml version="1.0"?> <smartplaylist type="songs"> <name>Recently played Rock Tracks from the 1970s</name> <match>all</match> <rule field="playlist" operator="is">Rock Music from the 1970s</rule> <rule field="playlist" operator="is">Recently Played Songs</rule> </smartplaylist>
Using this system allows very complex queries to be built. Note that in a single playlist, you can only match ALL of the rules, or ONE (or more) of the rules. This is basically either ANDing the conditions together, or ORing them together. You cannot mix AND with OR in a single playlist. To build up a playlist with both AND and OR operations on the rules, you use multiple playlists to group the AND operations and the OR operations, then combine them as above.
Examples
Movie examples
Random movie
Only one movie is added to the list. This isn't possible to create in the GUI because the lower limit is 10 (or at least the limit needs to be edited afterward).
Even though the limit is only one you still need to set random order.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <smartplaylist type="movies"> <name>Random movie</name> <match>all</match> <rule field="playcount" operator="is"> <value>0</value> </rule> <limit>1</limit> <order direction="ascending">random</order> </smartplaylist>
Music examples
Recently played songs
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <smartplaylist type="songs"> <name>Recently Played Songs</name> <match>all</match> <rule field="lastplayed" operator="inthelast"> <value>2 weeks</value> </rule> <order direction="descending">lastplayed</order> </smartplaylist>
Top 100 songs
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <smartplaylist type="songs"> <name>Top 100 Songs</name> <match>all</match> <rule field="playcount" operator="greaterthan"> <value>0</value> </rule> <order direction="descending">playcount</order> <limit>100</limit> </smartplaylist>
Rock music from the 1970s
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <smartplaylist type="songs"> <name>Rock Music from the 1970s</name> <match>all</match> <rule field="genre" operator="is"> <value>Rock</value> </rule> <rule field="year" operator="greaterthan"> <value>1969</value> </rule> <rule field="year" operator="lessthan"> <value>1980</value> </rule> </smartplaylist>
TV show examples
Last played episodes (history)
Not in progress episodes and playcount > 0.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <smartplaylist type="episodes"> <name>Last played episodes (history)</name> <match>all</match> <rule field="lastplayed" operator="inthelast"> <value>6 months</value> </rule> <rule field="inprogress" operator="false" /> <rule field="playcount" operator="greaterthan"> <value>0</value> </rule> <order direction="descending">lastplayed</order> </smartplaylist>
Last played TV shows
Including TV shows with in progress episodes.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <smartplaylist type="tvshows"> <name>Last played TV shows</name> <match>all</match> <rule field="lastplayed" operator="inthelast"> <value>6 months</value> </rule> <order direction="descending">lastplayed</order> </smartplaylist>