About
You can define your own episode and movie naming schemes. Built-in bindings such as {plex} can be used unmodified, or as a starting point for your own custom format.
Simple things are easy. Complex things are just as easy, if you're familiar with Groovy scripting. There are many bindings that can serve as building blocks for you to write your own custom format tailored to your liking with ease.
You will find many examples for all kinds of custom use cases. Ready for you to just copy & paste,
and (optionally) customize to your needs.
Examples
{n} - {s00e00} - {t}
Dark Angel - S03E01 - Labyrinth
V:/TV Shows/{n}/Season {s}/{sxe} - {t}
V:\TV Shows\Dark Angel\Season 3\3x01 - Labyrinth
{n.space('.').lower()}.{s}{e.pad(2)}
dark.angel.301
{n} ({y}){" CD$pi"}
The Man from Earth (2007) CD1
{n} [{y}] {vf} {af}
The Man from Earth [2007] 720p 6ch
Advanced Examples
{n.upperInitial().space('.')}.{y}.{source}.{vc}{'-'+group}
The.Man.From.Earth.2007.DVDRip.XviD-ALLiANCE
{n} ({y}) by {director} [{genres[0]}, {certification}, {rating}]
The Terminator (1984) by James Cameron [Action, PG-13, 8.5]
{n.space('_')}_-_{e.pad(2)}_[{resolution}_{vc}_{ac}][{crc32}]
Juuni_Kokuki_-_01_[1280x720_XviD_MP3][3E16AF40]
{n.space('.')}.{s00e00}.{t.space('.')}.{vf}.{vc}.{ac}
Firefly.s01e01.Serenity.720p.x264.ac3
{n} [{airdate.format('yyyy.MM.dd')}] {t}
The Daily Show [2010.01.05] George Lucas
E:/Complete/{n} ({y}){'/Season '+s}/{s00e00} - {t}
Rename and move files. The directory structure is completely up to you.
{n.replaceTrailingBrackets()} - {sxe} - {t.removeAll(/[!?.]+$/)
My personal favorite. Pretty much 1x01, normalizing accents, and lots of other cleanup operations.
.replaceAll(/[`´‘’ʻ]/, "'").lowerTrail().replacePart(', Part $1')}
Binding Reference source
Name | Description | Example | Type |
---|---|---|---|
n | movie / series name | Dark Angel | String |
y | movie / series year | 2009 | Integer |
s | season number | 3 | Integer |
e | episode number | 1 | Integer |
sxe | season / episode number | 1x01 | String |
s00e00 | season / episode number | S01E01 | String |
t | episode title | Labyrinth | String |
d | airdate | 2009-06-01 | Date |
startdate | series start date | 2002-09-20 | Date |
absolute | absolute episode number | 42 | Integer |
ny | name (year) | Avatar (2009) | String |
es | episode numbers | [1, 2, 3] | Integer* |
sy | season years | [2002, 2003] | Integer* |
sc | season count | 5 | Integer |
di | duplicate index | 1 | Integer |
dc | duplicate count | 2 | Integer |
age | age in days | 7 | Integer |
special | special number | 1 | Integer |
episode | episode object | Firefly - 1x01 - Serenity | Episode |
series | series object | <series properties> | Series |
primaryTitle | primary name | Juuni Kokuki | String |
alias | alias names | [Juuni Kokuki, ...] | String |
movie | movie object | Avatar (2009) | Movie |
id | movie / series ID | 1437 | Integer |
tmdbid | TheMovieDB ID | 1437 | Integer |
tvdbid | TheTVDB ID | 78874 | Integer |
imdbid | IMDb ID | tt0756683 | String |
pi | part index | 1 | Integer |
pc | part count | 2 | Integer |
lang | subtitle language | eng | Language |
subt | subtitle tag | .eng.forced | String |
plex | Plex Naming Standard | <relative path> | File |
kodi | Kodi Naming Standard | <relative path> | File |
emby | Emby Naming Standard | <relative path> | File |
jellyfin | Jellyfin Naming Standard | <relative path> | File |
az | sort collection letter | A | String |
object | match object | Firefly - 1x01 - Serenity | Object |
type | object type | Episode | String |
anime | is anime episode | false | true | false |
regular | is regular episode | true | true | false |
music | music object | Leona Lewis - I See You | AudioTrack |
medium | medium index | 1 | Integer |
album | album | Avatar | String |
artist | track artist | Leona Lewis | String |
albumArtist | album artist | James Horner | String |
actors | list of actors | [Zoe Saldana, ...] | String* |
director | movie director | James Cameron | String |
collection | movie collection | Avatar Collection | String |
ci | movie collection index | 1 | Integer |
cy | movie collection years | [1977, 2019] | Integer* |
decade | movie decade | 1970 | Integer |
genre | primary genre | Science Fiction | String |
genres | all genres | [Science Fiction, ...] | String* |
language | original language | eng | Language |
languages | spoken languages | [eng] | Language* |
country | origin country | KR | String |
runtime | movie / episode runtime | 162 | Integer |
certification | content rating | PG-13 | String |
rating | movie rating | 7.4 | Decimal |
votes | movie votes | 17720 | Integer |
vcf | video compression format | HEVC | String |
vc | video codec library | x264 | String |
ac | audio codec | ac3 | String |
cf | container format | mkv | String |
vf | standard video format | 1080p | String |
hpi | exact video format | 384i | String |
aco | audio codec profile | TrueHD+Atmos | String |
acf | audio channel format | DD5.1 | String |
af | audio channel count | 6ch | ChannelCount |
channels | audio channel layout | 5.1 | ChannelCount |
resolution | video resolution | 3840x2160 | String |
width | video width | 3840 | Integer |
height | video height | 2160 | Integer |
bitdepth | video bitdepth | 10 | Integer |
hdr | high dynamic range | HDR | String |
dovi | Dolby Vision | Dolby Vision | String |
bitrate | overall bitrate | 2.0 Mbps | BitRate |
vbr | video bitrate | 1.6 Mbps | BitRate |
abr | audio bitrate | 192 kbps | BitRate |
fps | frame rate | 23.976 fps | FrameRate |
khz | sampling rate | 44.1 kHz | String |
ar | aspect ratio | 16∶9 | String |
ws | widescreen tag | WS | String |
hd | video definition class | UHD | String |
dt | media creation date | <date and time> | Instant |
vs | source class | BluRay | String |
source | source match | BD25 | String |
edition | movie edition | Extended Edition | String |
tags | movie tags | [Extended Edition] | String* |
s3d | stereoscopic 3D tag | 3D SBS | String |
group | release group | ALLiANCE | String |
original | original file name | Serenity | String |
historic | original path | <bindings> | [String:Any] |
info | extended metadata | <all properties> | [String:Any] |
omdb | OMDb info | <all properties> | [String:Any] |
localize | dynamic localization | <languages> | [String:Any] |
order | dynamic episode order | <episode orders> | [String:Any] |
db | dynamic cross-reference | <mapper> | [String:Any] |
fn | current file name | Serenity | String |
ext | file extension | mkv | String |
f | file object | <file path> | File |
folder | folder object | <folder path> | File |
drive | file system root | <folder path> | File |
files | file group | <file paths> | File* |
relativeFile | relative library path | <relative path> | File |
mediaFile | primary media file | <file path> | File |
mediaFileName | primary media file name | Serenity | String |
mediaTitle | embedded media title | Serenity | String |
audioLanguages | audio streams | <audio languages> | Language* |
textLanguages | subtitle streams | <subtitle languages> | Language* |
duration | media duration | PT23M9.974S | Duration |
seconds | duration in seconds | 1389 | Integer |
minutes | duration in minutes | 23 | Integer |
hours | duration in HH:mm | 0:23 | String |
bytes | file size | 356 MB | FileSize |
megabytes | file size in MB | 356 MB | FileSize |
gigabytes | file size in GB | 0.4 GB | FileSize |
ct | file creation date | <date and time> | Instant |
crc32 | CRC32 checksum | 3E16AF40 | String |
media | media properties | <media properties> | [String:String] |
video | video streams | <video streams> | [String:String]* |
audio | audio streams | <audio streams> | [String:String]* |
text | subtitle streams | <subtitle streams> | [String:String]* |
image | image properties | <image properties> | [String:String] |
exif | EXIF image metadata | <image properties> | [String:String] |
camera | photo camera | <camera properties> | [String:String] |
location | photo location | <location properties> | [String:String] |
today | current date | 2022-08-08 | Date |
home | user home folder | <folder path> | File |
output | --output folder | <folder path> | File |
defines | --def parameters | <script parameters> | [String:String] |
label | --def label value | <label parameter> | String |
self | match bindings | <bindings> | [String:Any] |
model | match context | <list of bindings> | [String:Any]* |
episodelist | series context | <list of bindings> | [String:Any]* |
AnimeList | Anime Lists mapper | <mapping> | Episode |
XEM | XEM mapper | <mapping> | Episode |
Function Reference source
String.pad(length, padding = "0")
Pad to length using the given character.
(e.g. "1" ➔ "01")
String.match(pattern)
Find and match a pattern, or unwind if the given pattern cannot be found.
String.matchAll(pattern)
Find and match all occurrences of a pattern, or unwind if the given pattern cannot be found.
String.removeAll(pattern)
Remove all occurrences of the given pattern.
(e.g. "Wham!" ➔ "Wham")
String.replace(pattern:replacement)
Replace all occurrences of the given patterns.
(e.g. "apple" ➔ "orange")
String.space(replacement)
Replace all spaces.
(e.g. "Doctor Who" ➔ "Doctor_Who")
String.colon(replacement)
Find and replace colons.
(e.g. "Sissi: The Young Empress" ➔ "Sissi - The Young Empress")
String.slash(replacement)
Replace all slashes.
(e.g. "V_MPEG4/ISO/AVC" ➔ "V_MPEG4.ISO.AVC")
String.validateFileName()
Strip special characters.
(e.g. ".hack" ➔ "hack")
String.lower()
Convert all characters to lower case.
(e.g. "Firelfy" ➔ "firefly")
String.upper()
Convert all characters to upper case.
(e.g. "Firelfy" ➔ "FIREFLY")
String.upperInitial()
Convert all initial characters to upper case.
(e.g. "The Day a new Demon was born" ➔ "The Day A New Demon Was Born")
String.lowerTrail()
Convert all trailing characters to lower case.
(e.g. "Gundam SEED" ➔ "Gundam Seed")
String.sortName()
Convert to sort name.
(e.g. "The Walking Dead" ➔ "Walking Dead")
String.initialName()
Reduce first name to initials.
(e.g. "James Cameron" ➔ "J. Cameron")
String.before(pattern)
Match substring before the given pattern or return the original value.
String.after(pattern)
Match substring before the given pattern or return the original value.
String.replaceAll(pattern, replacement)
Replace all occurances of the given pattern.
String.replaceTrailingBrackets(replacement = "")
Replace trailing round brackets.
(e.g. "The IT Crowd (UK)" ➔ "The IT Crowd")
String.replacePart(replacement = "")
Replace trailing part number.
(e.g. "Today Is the Day (1)" ➔ "Today Is the Day, Part 1")
String.matchBrackets()
Match occurances of values enclosed in round brackets, square brackets or curly brackets.
String.acronym()
Convert to acronym.
(e.g. "Deep Space 9" ➔ "DS9")
String.roman()
Replace numbers 1..12 with Roman numerals.
(e.g. "Star Wars: Episode 4" ➔ "Star Wars: Episode IV")
String.clean()
Strip invalid characters and release information.
(e.g. "Sissi: The Young Empress" ➔ "Sissi The Young Empress")
String.ascii()
Convert Unicode characters to ASCII.
(e.g. "カタカナ" ➔ "katakana")
String.transliterate(identifier)
Apply any ICU script transliteration.
(e.g. "中国" ➔ "zhōng guó")
Number.pad(length, padding = "0")
Pad to length using the given character.
(e.g. "1" ➔ "01")
Number.round(precision, padding = "0")
Round decimal number to precision.
(e.g. 3.14 ➔ "3")
List.joining(delimiter, prefix = "", suffix = "")
Format a list of values.
(e.g. [2001, 2002] ➔ "(2001-2002)")