2009-06-16, 22:28
Filenaming Schema
This schema is designed to resolve a number of issues with the current plethora of possible artwork naming schemes AND improve skin functionality by:
1) Offering a totally consistent naming convention for art
2) Being completely unambiguous about what the art is doing
3) Is placeable ANYWHERE in the filesystem (does not 'have' to reside alongside the media, although it my if it wishes)
4) Allows a wider range of art than is currently possible
5) Supports different orientations of art (landscape and portrait)... so skins can pick up whichever style they require
6) Is possible to rapidly port the existing scheme to this proposed scheme via a script (which is also reversible!)
7) Allows for art at all levels of media (eg. Tv show, season AND episode level for all artwork types)
note:
Fanart = Large image / wallpaper, usually full screen representing the media
Cover.Front =The image you'd expect to see on the front of the box (DVD, CD case)
Cover.Back = The image you'd expect to see on the back of the box (DVD, CD case)
Cover.Inner = The image you'd expect to see on the liner notes / inside the cover)
Cover.Sleeve = The unfolded back, spine and front cover all in one
Cover.Disc = The image of the physical disc label (usually a round image)
Poster = Usually a 'Promotional' poster... promoting a movie or album release.
Banner = A highly oblong image usually landscape representing the media
Framegrab = A snapshot of the media (screen shot) of the playing TV show or movie, not applicable to Audio
Logo = A 'symbol' associated with the media, usually an iconic logo or symbol
Genre = A general classification for the category/style of media. e.g. Comedy, Rock, Horror, Jazz, Documentary.
<n> = Some number to allow multiple instances of artwork types. e.g. Starwars.movie.framegrab.001
MediaInfo = 'Flags' as they are termed today. I felt the term MediaInfo was easier to understand
HasBeenPlayed = 'Watched', but a more generic term to cover Audio and even Images
Items in GREEN are optional
<moviename>.movie.fanart[COLOR="green"](.landscape/portrait).<n>
<moviename>.movie.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<moviename>.movie.poster(.landscape/portrait).<n>
<moviename>.movie.banner(.landscape/portrait).<n>
<moviename>.movie.framegrab.<n>
<moviename>.movie.logo.<n>
Examples:
Star Wars.movie.fanart.landscape.01.jpg
Superman.movie.coverart.portrait.jpg
Regex for the above is:
(.*)(\.movie.*)$
<tvshow>.tvshow.fanart(.landscape/portrait).<n>
<tvshow>.tvshow.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<tvshow>.tvshow.poster(.landscape/portrait).<n>
<tvshow>.tvshow.banner(.landscape/portrait).<n>
<tvshow>.tvshow.framegrab.<n>
<tvshow>.tvshow.logo.<n>
<tvshow>^<season>.tvshow.fanart(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.poster(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.banner(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.framegrab.<n>
<tvshow>^<season><episode>.tvshow.fanart(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.poster(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.banner(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.framegrab.<n>
Examples:
Friends.tvshow.fanart.landscape.jpg
The Simpsons^S01E12.tvshow.framegrab.04.jpg
Regex for the above is:
TBD
<artist>.music.fanart(.landscape/portrait).<n>
<artist>.music.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<artist>.music.poster(.landscape/portrait).<n>
<artist>.music.banner(.landscape/portrait).<n>
<artist>.music.logo.<n>
<artist>^<album>.music.fanart(.landscape/portrait).<n>
<artist>^<album>.music.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<artist>^<album>.music.poster(.landscape/portrait).<n>
<artist>^<album>.music.banner(.landscape/portrait).<n>
<artist>^<album>^<track>.music.fanart(.landscape/portrait).<n>
<artist>^<album>^<track>.music.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<artist>^<album>^<track>.music.poster(.landscape/portrait).<n>
<artist>^<album>^<track>.music.banner(.landscape/portrait).<n>
Examples:
Madonna.music.fanart.landscape.jpg
Bon Jovi^Greatest Hits.music.cover.front.jpg
Regex for the above is:
([^\^]*)\^?([^\^]*)?\^?([^\^]*)?(\.music.*)
<genre>.genre.fanart(.landscape or .portrait).<n>
<genre>.genre.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<genre>.genre.banner(.landscape or .portrait).<n>
<genre>.genre.framegrab.<n>
Examples:
Rock.genre.fanart.landscape.jpg
Comedy.genre.fanart.landscape.02.jpg
Regex for the above is:
(.*)(\.genre.*)$
<audioformat>.mediainfo.audio.mono
<audioformat>.mediainfo.audio.color
<videoformat>.mediainfo.video.mono
<videoformat>.mediainfo.video.color
<resolution>.mediainfo.resolution.mono
<resolution>.mediainfo.resolution.color
<studio>.mediainfo.studio.mono
<studio>.mediainfo.studio.color
<source>.mediainfo.source.mono
<source>.mediainfo.source.color
<played>.mediainfo.HasBeenPlayed.mono
<played>.mediainfo.HasBeenPlayed.color
<lang>.mediainfo.subtitle.mono
<lang>.mediainfo.subtitle.color
[/COLOR]
Examples:
mp3.mediainfo.audio.color
h264.mediainfo.video.mono
true.mediainfo.HasBeenPlayed.mono
fr.mediainfo.subtitle.mono
Regex for the above is:
(.*)(\.mediainfo.*)$
NOTES:
*The very wordy examples given above should be abbreviated at some point, they are here to make the examples more readable. So, for instance, Music.Fanart might end up being abbreviated to MusicFA or similar.
*The ^ delimiter is used to allow media titles to have '.' character in them, and makes parsing very easy... although is movie has "^" in the title... we have a problem
*The seemingly redundant .movie ".tvshow" and ".music" etc are needed to prevent namespace collisions where Movie / TVshow / Artist items have the same title.
*We might need a way to figure for unicode characters to be encoded in the filename (for the titles). But this problem must already exist with all media right? We just need to clarify how it's resolved / handled
*For MediaInfo files, it's unclear if there needs to be one mediainfo file for EVERY (say) studio, or if it would be possible to create a "disney.mediainfo.studio" file that would be found for any studio containing the word "Disney"
*MediaInfo have ".mono" and ".colour" options, this is because the typical usage of this type of art is to act as an overlay / icon / indicator. Since some skins are light, and some dark... the icon would need to be visible in both cases... hence two versions... I could have relied on these images being monochrome and therefore 'invertible' but I felt this was too much of an assumption. So this way, you can have colour ones if you wish.
Just to make this clear....
".mono" = White logo on transparent background... Any skin can then colourize the image to fit the skin theme accordingly
".colour" = Full Colour logo on transparent background... so a skin should just display the logo 'as is'
This schema is designed to resolve a number of issues with the current plethora of possible artwork naming schemes AND improve skin functionality by:
1) Offering a totally consistent naming convention for art
2) Being completely unambiguous about what the art is doing
3) Is placeable ANYWHERE in the filesystem (does not 'have' to reside alongside the media, although it my if it wishes)
4) Allows a wider range of art than is currently possible
5) Supports different orientations of art (landscape and portrait)... so skins can pick up whichever style they require
6) Is possible to rapidly port the existing scheme to this proposed scheme via a script (which is also reversible!)
7) Allows for art at all levels of media (eg. Tv show, season AND episode level for all artwork types)
note:
Fanart = Large image / wallpaper, usually full screen representing the media
Cover.Front =The image you'd expect to see on the front of the box (DVD, CD case)
Cover.Back = The image you'd expect to see on the back of the box (DVD, CD case)
Cover.Inner = The image you'd expect to see on the liner notes / inside the cover)
Cover.Sleeve = The unfolded back, spine and front cover all in one
Cover.Disc = The image of the physical disc label (usually a round image)
Poster = Usually a 'Promotional' poster... promoting a movie or album release.
Banner = A highly oblong image usually landscape representing the media
Framegrab = A snapshot of the media (screen shot) of the playing TV show or movie, not applicable to Audio
Logo = A 'symbol' associated with the media, usually an iconic logo or symbol
Genre = A general classification for the category/style of media. e.g. Comedy, Rock, Horror, Jazz, Documentary.
<n> = Some number to allow multiple instances of artwork types. e.g. Starwars.movie.framegrab.001
MediaInfo = 'Flags' as they are termed today. I felt the term MediaInfo was easier to understand
HasBeenPlayed = 'Watched', but a more generic term to cover Audio and even Images
Items in GREEN are optional
<moviename>.movie.fanart[COLOR="green"](.landscape/portrait).<n>
<moviename>.movie.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<moviename>.movie.poster(.landscape/portrait).<n>
<moviename>.movie.banner(.landscape/portrait).<n>
<moviename>.movie.framegrab.<n>
<moviename>.movie.logo.<n>
Examples:
Star Wars.movie.fanart.landscape.01.jpg
Superman.movie.coverart.portrait.jpg
Regex for the above is:
(.*)(\.movie.*)$
<tvshow>.tvshow.fanart(.landscape/portrait).<n>
<tvshow>.tvshow.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<tvshow>.tvshow.poster(.landscape/portrait).<n>
<tvshow>.tvshow.banner(.landscape/portrait).<n>
<tvshow>.tvshow.framegrab.<n>
<tvshow>.tvshow.logo.<n>
<tvshow>^<season>.tvshow.fanart(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.poster(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.banner(.landscape/portrait).<n>
<tvshow>^<season>.tvshow.framegrab.<n>
<tvshow>^<season><episode>.tvshow.fanart(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.poster(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.banner(.landscape/portrait).<n>
<tvshow>^<season><episode>.tvshow.framegrab.<n>
Examples:
Friends.tvshow.fanart.landscape.jpg
The Simpsons^S01E12.tvshow.framegrab.04.jpg
Regex for the above is:
TBD
<artist>.music.fanart(.landscape/portrait).<n>
<artist>.music.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<artist>.music.poster(.landscape/portrait).<n>
<artist>.music.banner(.landscape/portrait).<n>
<artist>.music.logo.<n>
<artist>^<album>.music.fanart(.landscape/portrait).<n>
<artist>^<album>.music.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<artist>^<album>.music.poster(.landscape/portrait).<n>
<artist>^<album>.music.banner(.landscape/portrait).<n>
<artist>^<album>^<track>.music.fanart(.landscape/portrait).<n>
<artist>^<album>^<track>.music.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<artist>^<album>^<track>.music.poster(.landscape/portrait).<n>
<artist>^<album>^<track>.music.banner(.landscape/portrait).<n>
Examples:
Madonna.music.fanart.landscape.jpg
Bon Jovi^Greatest Hits.music.cover.front.jpg
Regex for the above is:
([^\^]*)\^?([^\^]*)?\^?([^\^]*)?(\.music.*)
<genre>.genre.fanart(.landscape or .portrait).<n>
<genre>.genre.cover(.front/back/inner/sleeve/disc)(.landscape/portrait).<n>
<genre>.genre.banner(.landscape or .portrait).<n>
<genre>.genre.framegrab.<n>
Examples:
Rock.genre.fanart.landscape.jpg
Comedy.genre.fanart.landscape.02.jpg
Regex for the above is:
(.*)(\.genre.*)$
<audioformat>.mediainfo.audio.mono
<audioformat>.mediainfo.audio.color
<videoformat>.mediainfo.video.mono
<videoformat>.mediainfo.video.color
<resolution>.mediainfo.resolution.mono
<resolution>.mediainfo.resolution.color
<studio>.mediainfo.studio.mono
<studio>.mediainfo.studio.color
<source>.mediainfo.source.mono
<source>.mediainfo.source.color
<played>.mediainfo.HasBeenPlayed.mono
<played>.mediainfo.HasBeenPlayed.color
<lang>.mediainfo.subtitle.mono
<lang>.mediainfo.subtitle.color
[/COLOR]
Examples:
mp3.mediainfo.audio.color
h264.mediainfo.video.mono
true.mediainfo.HasBeenPlayed.mono
fr.mediainfo.subtitle.mono
Regex for the above is:
(.*)(\.mediainfo.*)$
NOTES:
*The very wordy examples given above should be abbreviated at some point, they are here to make the examples more readable. So, for instance, Music.Fanart might end up being abbreviated to MusicFA or similar.
*The ^ delimiter is used to allow media titles to have '.' character in them, and makes parsing very easy... although is movie has "^" in the title... we have a problem
*The seemingly redundant .movie ".tvshow" and ".music" etc are needed to prevent namespace collisions where Movie / TVshow / Artist items have the same title.
*We might need a way to figure for unicode characters to be encoded in the filename (for the titles). But this problem must already exist with all media right? We just need to clarify how it's resolved / handled
*For MediaInfo files, it's unclear if there needs to be one mediainfo file for EVERY (say) studio, or if it would be possible to create a "disney.mediainfo.studio" file that would be found for any studio containing the word "Disney"
*MediaInfo have ".mono" and ".colour" options, this is because the typical usage of this type of art is to act as an overlay / icon / indicator. Since some skins are light, and some dark... the icon would need to be visible in both cases... hence two versions... I could have relied on these images being monochrome and therefore 'invertible' but I felt this was too much of an assumption. So this way, you can have colour ones if you wish.
Just to make this clear....
".mono" = White logo on transparent background... Any skin can then colourize the image to fit the skin theme accordingly
".colour" = Full Colour logo on transparent background... so a skin should just display the logo 'as is'