Page 1 of 1

Plex / Kodi / Emby / Jellyfin Naming Schemes

Posted: 12 Sep 2016, 10:03
by rednoah
⭑⭑ General Advice: If are organizing files for Plex, then you must pick a database and episode order first (i.e. TheMovieDB::TV with Airdate Order is recommended) and then stick to that no matter what in both FileBot and Plex. DO NOT mix databases and episode orders within the same Plex library folder. ⭑⭑


⭑⭑ The {plex} binding manual applies equally to the {kodi} and {emby} and {jellyfin} bindings as well. ⭑⭑




Plex Naming Standard


:idea: Plex has strict standards for naming and organizing your media files. Please read How do I organize files for Plex? for details.


The {plex} binding gives you the appropriate Plex path for movies and TV episodes:

Code: Select all

{ plex }

Code: Select all

Movies/Avatar (2009)/Avatar (2009)
TV Shows/Alias/Season 01/Alias - S01E01 - Truth Be Told

The {plex.id} binding additionally appends the numeric ID to the movie / series folder name to guarantee and speedup movie / series detection:

Code: Select all

{ plex.id }

Code: Select all

TV Shows/Alias {tmdb-2046}/Season 01/Alias - S01E01 - Truth Be Told
Movies/Avatar (2009) {tmdb-19995}/Avatar (2009)
:idea: Make sure to Disable Local Media Assets for all your media libraries to make Plex not give preference to the embedded media title.


Image


You can reuse some path components and omit others. {plex.name} and {plex.tail} are particularly useful if you want to rename files in place or if you want the {plex} path but without the top-level Movies or TV Shows folder.

e.g. Avatar (2009)

Code: Select all

{ plex.name }
e.g. Firefly/Season 01/Firefly - S01E01 - Serenity

Code: Select all

{ plex.tail }
e.g. Firefly/Firefly - S01E01 - Serenity

Code: Select all

{ plex.tail.root } / { plex.name }

e.g. Movies/Avatar (2009)/Avatar (2009) {imdb-tt0499549}

Code: Select all

{ plex.derive{" {imdb-$imdbid}"} }
e.g. Movies/Avatar (2009)/Avatar (2009) {tmdb-19995}

Code: Select all

{ plex.derive{" {tmdb-$id}"} }
e.g. Avatar (2009) by James Cameron [720p, x264, AC3].eng

Code: Select all

{ plex.derive{" by $director"}{" [$vf, $vc, $ac]"}.name }
:idea: plex.derive() can be used to insert additional information after the file name but before the subtitle language suffix and file extension.




Advanced {plex} operators:

~ ... nullify the Movies / TV Shows category folder level
% ... append values to the file name (but before the part index and subtitle language suffix)
* ... append values to the movie / series folder name
** ... append values to both the file name and the movie / series folder name
<< ... append values to the season folder name
>> ... inject subcategory folder level after the category folder level (but before the movie / series folder level)
^ ... replace subtitle language suffix
id ... add {id-123} tags to the movie folder name / series folder name
unix ... {plex} path without file name validation (i.e. allow : colon and ? question mark in file paths)

e.g. Avatar (2009)/Avatar (2009)

Code: Select all

{ ~plex }
e.g. Avatar (2009) {tmdb-19995}/Avatar (2009)

Code: Select all

{ ~plex.id }
e.g. Avatar (2009) {tmdb-19995}/Avatar (2009) {edition-Extended Edition}
Multiple Editions

Code: Select all

{ ~plex.id % { " {edition-${tags[0]}}" } }
e.g. Avatar (2009)/Avatar (2009) by James Cameron [720p, x264, AAC]

Code: Select all

{ ~plex % {" by $director"} % {" [$vf, $vc, $ac]"} }
e.g. Avatar (2009) [M19995]/Avatar (2009)

Code: Select all

{ ~plex * " [M$id]" }
e.g. Avatar (2009) [M19995]/Avatar (2009) [M19995]

Code: Select all

{ ~plex ** " [M$id]" }
e.g. Firefly/Season 01 [2002-2003]/Firefly - S01E01 - Serenity

Code: Select all

{ ~plex << sy.bounds().joining('-', ' [', ']') }
e.g. Avatar (2009)/Avatar (2009).en

Code: Select all

{ ~plex ^ {'.'+lang.ISO2} }
e.g. Movies/Avatar (2009)/Avatar (2009) (i.e. {plex} without subtitle language suffix)

Code: Select all

{ plex ^ null }
e.g. Movies/A/Æon Flux (2005)/Æon Flux (2005)

Code: Select all

{ plex >> az }
e.g. A/AEon Flux (2005)/AEon Flux (2005)

Code: Select all

{ (~plex >> az).ascii() }



Kodi Naming Standard

The {kodi} binding and the {plex} binding work exactly the same, with slightly different implementation details, e.g. SxE formatting and multi-episode formatting.

e.g. TV Shows/Alias/Season 1/Alias - 1x01 - Truth Be Told

Code: Select all

{ kodi }
:!: Kodi does not support {tmdb-id} markers. See Naming TV Shows and Naming Movies for details.



Emby Naming Standard

The {emby} binding and the {plex} binding work exactly the same, with slightly different implementation details, e.g. series name and series folder formatting.

e.g. TV Shows/Alias (2001) {tmdb-2046}/Season 01/Alias (2001) - S01E01 - Truth Be Told

Code: Select all

{ emby.id }


Jellyfin Naming Standard (requires FileBot r9503)

The {jellyfin} binding and the {plex} binding work exactly the same, with slightly different implementation details, e.g. series name and series folder formatting and [tmdbid-12345] ID tag formatting.

e.g. TV Shows/Alias (2001) [tmdbid-2046]/Season 01/Alias (2001) - S01E01 - Truth Be Told

Code: Select all

{ jellyfin.id }



Custom Naming Schemes

If you need to make very specific customizations to the standard Plex naming scheme, you'll want you write your own format expression so you have full control over all the bits and pieces. You can get started by copying the following examples and modifying them to your liking.

Movies

Code: Select all

Movies/{n} ({y})/{n} ({y}){' CD'+pi}{'.'+lang}
TV Series

Code: Select all

TV Shows/{n}/{episode.special ? 'Specials' : 'Season '+s.pad(2)}/{n} - {episode.special ? 'S00E'+special.pad(2) : s00e00} - {t.replaceAll(/[`´‘’ʻ]/, /'/).replaceAll(/[!?.]+$/).replacePart(', Part $1')}{'.'+lang}
Anime

Code: Select all

Anime/{primaryTitle}/{primaryTitle} - {sxe} - {t.replaceAll(/[!?.]+$/).replaceAll(/[`´‘’ʻ]/, /'/).replacePart(', Part $1')}
Music

Code: Select all

Music/{n}/{album+'/'}{pi.pad(2)+'. '}{artist} - {t}