2. It's not updating the GUI. I've not had it running while running this below:
Code: Select all
Z:\Movies & TV\New Downloads\_FileBot>filebot -script fn:preferences
Print User Preference Node: /
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
<preferences EXTERNAL_XML_VERSION="1.0">
<root type="user">
<map/>
<node name="net">
<map/>
<node name="filebot">
<map>
<entry key="getting.started" value="1"/>
<entry key="dialog.open.folder" value="Z:\Movies & TV\3. UHD"/>
</map>
<node name="ui">
<map>
<entry key="window.width" value="2115"/>
<entry key="window.height" value="755"/>
<entry key="window.x" value="155"/>
<entry key="window.y" value="2"/>
<entry key="panel.selected" value="0"/>
</map>
<node name="rename">
<map>
<entry key="rename.format.movie" value="{ ////////////////////////////////////////////// // MOVIE BINDING ////////////////////////////////////////////// // Posted here: https://www.filebot.net/forums/viewtopic.php?f=4&t=10766&p=43842#p43842 ////////////////////////////////////////////// def space = call{' '}; // Root Directory def dir_root = 'Z:\\Movies & TV\\'+ call{hd.matches(/(?i)SD/) ? '1. SD\\' : ' '}+ call{hd.matches(/(?i)HD/) ? '2. HD\\' : ' '}+ call{hd.matches(/(?i)UHD/) ? '3. UHD\\' : ' '}; // Main Title e.g. // 1408 (2007) (Director's Cut) 1080p HD Blu-ray non-HDR x264 DTS5.1ch_SiNNERS // 300 (2007) 720p HD BRRip non-HDR x265 DTS 5.1ch_ESiR // Deadpool (2016) 2160p UHD WEB-DL non-HDR AVC DTS-HD MA 7.1ch_DDR // Deadpool 2 (2018) (Super Duper Cut) 2160p UHD Blu-ray REMUX HDR10bit ATEME TrueHD Atmos 13Obj 7.1ch_EPSiLON def main_title = call{n}+ space + '(' + call{y} + ')'+ space + call{fn.matches(/(?i).+\b25th.+?anniv.+/) ? '(25th Anniv. Edition)' : ' '}+ space + call{fn.matches(/(?i).+\b\(limited\b.*?\).+/) ? '(Limited Edition)' : ' '}+ space + call{fn.matches(/(?i).+\b\(uncut\b.*?\).+/) ? '(Uncut)' : ' '}+ space + call{fn.matches(/(?i).+\bcollector.+?s.+?edition\b.+/) ? '(Collector\'s Edition)' : ' '}+ space + call{fn.matches(/(?i).+\bdirect.+?cut\b.+/) ? '(Director\'s Cut)' : ' '}+ space + call{fn.matches(/(?i).+\bextended.+?\b.+/) ? '(Extended)' : ' '}+ space + call{fn.matches(/(?i).+\bextended.+?edit\b.+/) ? '(Extended Edition)' : ' '}+ space + call{fn.matches(/(?i).+\bimax\b.+/) ? '(IMAX Edition)' : ' '}+ space + call{fn.matches(/(?i).+\blimited\b.+/) ? '(Limited)' : ' '}+ space + call{fn.matches(/(?i).+\bremastered\b.+/) ? '(Remastered)' : ' '}+ space + call{fn.matches(/(?i).+\bsuper.+duper.+cut\b.+/) ? '(Super Duper Cut)' : ' '}+ space + call{fn.matches(/(?i).+\btheatrical\b.+/) ? '(Theatrical)' : ' '}+ space + call{fn.matches(/(?i).+\bunrated\b.+/) ? '(Unrated)' : ' '}+ space + call{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {' '}{' '}}+ space + call{self.vf ? self.vf : self.hpi}+ space + call{hd}+ space + call{source.matches(/(?i)blu.*ray/) ? 'Blu-ray' : {source} ?: 'WEB-DL'}+ space + call{fn.matches(/(?i).+\bremux\b.+/) ? 'REMUX' : ' '}+ // Only calls {hdr} if it's not SD else non-HDR space + call{if (hd =~ 'HD') {any{hdr + "-" + bitdepth + 'bit'}{'non-HDR'}}}+ space + call{vc}+ space + // Call audio // Thread here where I got the base code from: https://www.filebot.net/forums/viewtopic.php?f=5&t=5285 call { def mCFP = [ 'AAC LC SBR PS' : 'AAC', 'AAC LC SBR' : 'AAC', 'AAC LC' : 'AAC', 'AC 3 Dep' : 'E-AC3', 'AC 3' : 'AC3', 'DTS 96 24' : 'DTS 96-24', 'DTS ES XBR' : 'DTS-HD HRA', 'DTS ES XLL' : 'DTS-HD MA', 'DTS ES XXCH XBR' : 'DTS-HD HRA', 'DTS ES XXCH XLL' : 'DTS-HD MA', 'DTS ES XXCH' : 'DTS-ES', 'DTS ES' : 'DTS-ES', 'DTS XBR' : 'DTS-HD HRA', 'DTS XLL X' : 'DTS X', 'DTS XLL' : 'DTS-HD MA', 'DTS' : 'DTS', 'E AC 3 JOC' : 'EAC3 Atmos', 'E AC 3' : 'EAC3', 'MLP FBA 16 ch' : 'TrueHD Atmos', 'MLP FBA' : 'TrueHD', 'MP3' : 'MP3', 'MPEG Audio' : 'MP2', 'PCM' : 'PCM' ]; def audioClean = { it.replaceAll(/[\p{Pd}\p{Space}]/, ' ').replaceAll(/\p{Space}{2,}/, ' ').slash(' ') }; def channelClean = { it.replaceAll(/Debug.+|Object\sBased\s?\/?|(\d+)?\sobjects\s\/\s|0.(?=\d.\d)|20/).replaceAll(/6/,'5.1').replaceAll(/8/,'7.1') }; def audioCollection = audio.collect { au -> def channels = any{ channelClean(au['ChannelPositionsString2'])}{ channelClean(au['ChannelsOriginal'])}{ channelClean(au['Channels']) }; def dynChannel = {au['NumberOfDynamicObjects'] + 'Obj'}; def ch = channels.tokenize('\\/').take(3)*.toDouble().inject(0, { a, b -> a + b }).findAll { it > 0 }.max().toString() + 'ch'; def codec = audioClean(any{ au['CodecID/Hint'] }{ au['Format'] }); def format_profile = { ( au['Format_AdditionalFeatures'] != null) ? audioClean(au['Format_AdditionalFeatures']) : '' }; def combined = allOf{codec}{format_profile}.join(' '); def stream = allOf { mCFP.get(combined, 'UNKNOWN_FORMAT--'+combined+'--') } { dynChannel } { ch }; }; return audioCollection[0].join( ' ' ) } + '_'+ // Group call{ any{ fn.match(/(?<=[_-])[^\s_-]+?$/)} {group} {'_NA'} }; // Language def lang = call{ any{'.'+subt} + {fn.matches(/(?i).+sdh.+/) ? '_SDH' : ''} {any{fn.match(/(?i)\(foreignpartsonly\)/)} '' } }; // Extension // def ext = call{'.'+ext}; // call all the bindings to create the result // call(dir_root) + (call(main_title).replace(':', ';').replace('*', '') + call(lang)).replaceAll(/null/,'') }"/>
<entry key="rename.last.format.state" value="Movie"/>
<entry key="dialog.select.width" value="979"/>
<entry key="dialog.select.height" value="380"/>
<entry key="dialog.select.repeat" value="false"/>
<entry key="rename.format.episode" value="////////////////////////////////////////////// // TV BINDING ////////////////////////////////////////////// Z:/Movies & TV/TV/{n.replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')}/{n.replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')} ({any{self.d}{'0000-00-00'}}) [{info.network}] {episode.special ? 'S00E'+special.pad(2) : s00e00} {t.after(/^[.]+/).replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')} {self.vf ? self.vf + "" : self.hpi} {fn.matches(/(?i).+\bAMZN\b.+/) ? "AMZN" : ""} {"${self.source ?: 'NA'}"} {ac} {audio[0].channels.replaceAll(/2/, "2ch").replaceAll(/6/, "5.1ch")} {vc}_{any{"$group"}{fn.match(/(?<=[_-])[^\s_-]+?$/)}{'NA'}.replaceAll(/[-_\[\]]\s*|\.\w{3}$/, "")}{any{'.'+lang}{lang}}{any{fn.match(/(?i)sdh.+?/)('')}{fn.match(/(?i).*sdh.*/)('_SDH')}}{any{fn.match(/(?i)\(foreignpartsonly\)/)}{''}}{"."+ext}"/>
</map>
<node name="format.recent.movie">
<map>
<entry key="0" value="{evaluate('Z:/Movies & TV/New Downloads/_FileBot/Format_Movie_Test.groovy' as File)}"/>
<entry key="1" value="{ ////////////////////////////////////////////// // MOVIE BINDING ////////////////////////////////////////////// // Posted here: https://www.filebot.net/forums/viewtopic.php?f=4&t=10766&p=43842#p43842 ////////////////////////////////////////////// def space = call{' '}; // Root Directory def dir_root = 'Z:\\Movies & TV\\'+ call{hd.matches(/(?i)SD/) ? '1. SD\\' : ' '}+ call{hd.matches(/(?i)HD/) ? '2. HD\\' : ' '}+ call{hd.matches(/(?i)UHD/) ? '3. UHD\\' : ' '}; // Main Title e.g. // 1408 (2007) (Director's Cut) 1080p HD Blu-ray non-HDR x264 DTS5.1ch_SiNNERS // 300 (2007) 720p HD BRRip non-HDR x265 DTS 5.1ch_ESiR // Deadpool (2016) 2160p UHD WEB-DL non-HDR AVC DTS-HD MA 7.1ch_DDR // Deadpool 2 (2018) (Super Duper Cut) 2160p UHD Blu-ray REMUX HDR10bit ATEME TrueHD Atmos 13Obj 7.1ch_EPSiLON def main_title = call{n}+ space + '(' + call{y} + ')'+ space + call{fn.matches(/(?i).+\b25th.+?anniv.+/) ? '(25th Anniv. Edition)' : ' '}+ space + call{fn.matches(/(?i).+\b\(limited\b.*?\).+/) ? '(Limited Edition)' : ' '}+ space + call{fn.matches(/(?i).+\b\(uncut\b.*?\).+/) ? '(Uncut)' : ' '}+ space + call{fn.matches(/(?i).+\bcollector.+?s.+?edition\b.+/) ? '(Collector\'s Edition)' : ' '}+ space + call{fn.matches(/(?i).+\bdirect.+?cut\b.+/) ? '(Director\'s Cut)' : ' '}+ space + call{fn.matches(/(?i).+\bextended.+?\b.+/) ? '(Extended)' : ' '}+ space + call{fn.matches(/(?i).+\bextended.+?edit\b.+/) ? '(Extended Edition)' : ' '}+ space + call{fn.matches(/(?i).+\bimax\b.+/) ? '(IMAX Edition)' : ' '}+ space + call{fn.matches(/(?i).+\blimited\b.+/) ? '(Limited)' : ' '}+ space + call{fn.matches(/(?i).+\bremastered\b.+/) ? '(Remastered)' : ' '}+ space + call{fn.matches(/(?i).+\bsuper.+duper.+cut\b.+/) ? '(Super Duper Cut)' : ' '}+ space + call{fn.matches(/(?i).+\btheatrical\b.+/) ? '(Theatrical)' : ' '}+ space + call{fn.matches(/(?i).+\bunrated\b.+/) ? '(Unrated)' : ' '}+ space + call{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {' '}{' '}}+ space + call{self.vf ? self.vf : self.hpi}+ space + call{hd}+ space + call{source.matches(/(?i)blu.*ray/) ? 'Blu-ray' : {source} ?: 'WEB-DL'}+ space + call{fn.matches(/(?i).+\bremux\b.+/) ? 'REMUX' : ' '}+ // Only calls {hdr} if it's not SD else non-HDR space + call{if (hd =~ 'HD') {any{hdr + "-" + bitdepth + 'bit'}{'non-HDR'}}}+ space + call{vc}+ space + // Call audio // Thread here where I got the base code from: https://www.filebot.net/forums/viewtopic.php?f=5&t=5285 call { def mCFP = [ 'AAC LC SBR PS' : 'AAC', 'AAC LC SBR' : 'AAC', 'AAC LC' : 'AAC', 'AC 3 Dep' : 'E-AC3', 'AC 3' : 'AC3', 'DTS 96 24' : 'DTS 96-24', 'DTS ES XBR' : 'DTS-HD HRA', 'DTS ES XLL' : 'DTS-HD MA', 'DTS ES XXCH XBR' : 'DTS-HD HRA', 'DTS ES XXCH XLL' : 'DTS-HD MA', 'DTS ES XXCH' : 'DTS-ES', 'DTS ES' : 'DTS-ES', 'DTS XBR' : 'DTS-HD HRA', 'DTS XLL X' : 'DTS X', 'DTS XLL' : 'DTS-HD MA', 'DTS' : 'DTS', 'E AC 3 JOC' : 'EAC3 Atmos', 'E AC 3' : 'EAC3', 'MLP FBA 16 ch' : 'TrueHD Atmos', 'MLP FBA' : 'TrueHD', 'MP3' : 'MP3', 'MPEG Audio' : 'MP2', 'PCM' : 'PCM' ]; def audioClean = { it.replaceAll(/[\p{Pd}\p{Space}]/, ' ').replaceAll(/\p{Space}{2,}/, ' ').slash(' ') }; def channelClean = { it.replaceAll(/Debug.+|Object\sBased\s?\/?|(\d+)?\sobjects\s\/\s|0.(?=\d.\d)|20/).replaceAll(/6/,'5.1').replaceAll(/8/,'7.1') }; def audioCollection = audio.collect { au -> def channels = any{ channelClean(au['ChannelPositionsString2'])}{ channelClean(au['ChannelsOriginal'])}{ channelClean(au['Channels']) }; def dynChannel = {au['NumberOfDynamicObjects'] + 'Obj'}; def ch = channels.tokenize('\\/').take(3)*.toDouble().inject(0, { a, b -> a + b }).findAll { it > 0 }.max().toString() + 'ch'; def codec = audioClean(any{ au['CodecID/Hint'] }{ au['Format'] }); def format_profile = { ( au['Format_AdditionalFeatures'] != null) ? audioClean(au['Format_AdditionalFeatures']) : '' }; def combined = allOf{codec}{format_profile}.join(' '); def stream = allOf { mCFP.get(combined, 'UNKNOWN_FORMAT--'+combined+'--') } { dynChannel } { ch }; }; return audioCollection[0].join( ' ' ) } + '_'+ // Group call{ any{ fn.match(/(?<=[_-])[^\s_-]+?$/)} {group} {'_NA'} }; // Language def lang = call{ any{'.'+subt} + {fn.matches(/(?i).+sdh.+/) ? '_SDH' : ''} {any{fn.match(/(?i)\(foreignpartsonly\)/)} '' } }; // Extension // def ext = call{'.'+ext}; // call all the bindings to create the result // call(dir_root) + (call(main_title).replace(':', ';').replace('*', '') + call(lang)).replaceAll(/null/,'') }"/>
<entry key="2" value="{evaluate('Z:/Movies & TV/New Downloads/_FileBot/Format_Movie.groovy' as File)}"/>
<entry key="3" value="{evaluate('Z:/Movies & TV/New Downloads/_FileBot Bindings/Format_Movie.groovy' as File)}"/>
<entry key="4" value="{ 	////////////////////////////////////////////// 	// MOVIE BINDING 	////////////////////////////////////////////// 	// Posted here: https://www.filebot.net/forums/viewtopic.php?f=4&t=10766&p=43842#p43842 	////////////////////////////////////////////// 	def space = call{' '}; 	// Root Directory 	def dir_root = 'Z:\\Movies & TV\\'+ 	call{hd.matches(/(?i)SD/) ? '1. SD\\' : ' '}+ 	call{hd.matches(/(?i)HD/) ? '2. HD\\' : ' '}+ 	call{hd.matches(/(?i)UHD/) ? '3. UHD\\' : ' '}; 	// Main Title e.g. 	// 1408 (2007) (Director's Cut) 1080p HD Blu-ray non-HDR x264 DTS5.1ch_SiNNERS 	// 300 (2007) 720p HD BRRip non-HDR x265 DTS 5.1ch_ESiR 	// Deadpool (2016) 2160p UHD WEB-DL non-HDR AVC DTS-HD MA 7.1ch_DDR 	// Deadpool 2 (2018) (Super Duper Cut) 2160p UHD Blu-ray REMUX HDR10bit ATEME TrueHD Atmos 13Obj 7.1ch_EPSiLON 	def main_title = call{n}+ 	space + '(' + call{y} + ')'+ 	space + call{fn.matches(/(?i).+\b25th.+?anniv.+/) ? '(25th Anniv. Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(limited\b.*?\).+/) ? '(Limited Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(uncut\b.*?\).+/) ? '(Uncut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bcollector.+?s.+?edition\b.+/) ? '(Collector\'s Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bdirect.+?cut\b.+/) ? '(Director\'s Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?\b.+/) ? '(Extended)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?edit\b.+/) ? '(Extended Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bimax\b.+/) ? '(IMAX Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\blimited\b.+/) ? '(Limited)' : ' '}+ 	space + call{fn.matches(/(?i).+\bremastered\b.+/) ? '(Remastered)' : ' '}+ 	space + call{fn.matches(/(?i).+\bsuper.+duper.+cut\b.+/) ? '(Super Duper Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\btheatrical\b.+/) ? '(Theatrical)' : ' '}+ 	space + call{fn.matches(/(?i).+\bunrated\b.+/) ? '(Unrated)' : ' '}+ 	space + call{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {' '}{' '}}+ 	space + call{self.vf ? self.vf : self.hpi}+ 	space + call{hd}+ 	space + call{source.matches(/(?i)blu.*ray/) ? 'Blu-ray' : {source} ?: 'WEB-DL'}+ 	space + call{fn.matches(/(?i).+\bremux\b.+/) ? 'REMUX' : ' '}+ 	// Only calls {hdr} if it's not SD else non-HDR 	space + call{if (hd =~ 'HD') {any{hdr + "-" + bitdepth + 'bit'}{'non-HDR'}}}+ 	space + call{vc}+ 	space + 	// Call audio 	// Thread here where I got the base code: https://www.filebot.net/forums/viewtopic.php?f=5&t=5285 	call { 		def mCFP = 		[ 		'AAC LC SBR PS' : 'AAC', 		'AAC LC SBR' : 'AAC', 		'AAC LC' : 'AAC', 		'AC 3 Dep' : 'E-AC3', 		'AC 3' : 'AC3', 		'DTS 96 24' : 'DTS 96-24', 		'DTS ES XBR' : 'DTS-HD HRA', 		'DTS ES XLL' : 'DTS-HD MA', 		'DTS ES XXCH XBR' : 'DTS-HD HRA', 		'DTS ES XXCH XLL' : 'DTS-HD MA', 		'DTS ES XXCH' : 'DTS-ES', 		'DTS ES' : 'DTS-ES', 		'DTS XBR' : 'DTS-HD HRA', 		'DTS XLL X' : 'DTS X', 		'DTS XLL' : 'DTS-HD MA', 		'DTS' : 'DTS', 		'E AC 3 JOC' : 'EAC3 Atmos', 		'E AC 3' : 'EAC3', 		'MLP FBA 16 ch' : 'TrueHD Atmos', 		'MLP FBA' : 'TrueHD', 		'MP3' : 'MP3', 		'MPEG Audio' : 'MP2', 		'PCM' : 'PCM' 		]; 		def audioClean = { it.replaceAll(/[\p{Pd}\p{Space}]/, ' ').replaceAll(/\p{Space}{2,}/, ' ').slash(' ') }; 		def channelClean = { it.replaceAll(/Debug.+|Object\sBased\s?\/?|(\d+)?\sobjects\s\/\s|0.(?=\d.\d)|20/).replaceAll(/6/,'5.1').replaceAll(/8/,'7.1') }; 		def audioCollection = audio.collect 		{ au -> 			def channels = any{ channelClean(au['ChannelPositionsString2'])}{ channelClean(au['ChannelsOriginal'])}{ channelClean(au['Channels']) }; 			def dynChannel = {au['NumberOfDynamicObjects'] + 'Obj'}; 			def ch = channels.tokenize('\\/').take(3)*.toDouble().inject(0, { a, b -> a + b }).findAll { it > 0 }.max().toString() + 'ch'; 			def codec = audioClean(any{ au['CodecID/Hint'] }{ au['Format'] }); 			def format_profile = { ( au['Format_AdditionalFeatures'] != null) ? audioClean(au['Format_AdditionalFeatures']) : '' }; 			def combined = allOf{codec}{format_profile}.join(' '); 			def stream = allOf { mCFP.get(combined, 'UNKNOWN_FORMAT--'+combined+'--') } { dynChannel } { ch }; 		}; 		return audioCollection[0].join( ' ' ) 		} + 		'_'+ 		// Group 		call{ any{ fn.match(/(?<=[_-])[^\s_-]+?$/)} {group} {'_NA'} }; 		// Language 		def lang = call{ any{'.'+subt} + {fn.matches(/(?i).+sdh.+/) ? '_SDH' : ''} {any{fn.match(/(?i)\(foreignpartsonly\)/)} '' } }; 		// Extension 		// def ext = call{'.'+ext}; 		// call all the bindings to create the result 		// call(dir_root) + 		(call(main_title).replace(':', ';').replace('*', '') + call(lang)).replaceAll(/null/,'') 	}"/>
<entry key="5" value="{ 	////////////////////////////////////////////// 	// MOVIE BINDING 	////////////////////////////////////////////// 	// Posted here: https://www.filebot.net/forums/viewtopic.php?f=4&t=10766&p=43842#p43842 	////////////////////////////////////////////// 	def space = call{' '}; 	// Root Directory 	def dir_root = 'Z:\\Movies & TV\\'+ 	call{hd.matches(/(?i)SD/) ? '1. SD\\' : ' '}+ 	call{hd.matches(/(?i)HD/) ? '2. HD\\' : ' '}+ 	call{hd.matches(/(?i)UHD/) ? '3. UHD\\' : ' '}; 	// Main Title e.g. 	// 1408 (2007) (Director's Cut) 1080p HD Blu-ray non-HDR x264 DTS5.1ch_SiNNERS 	// 300 (2007) 720p HD BRRip non-HDR x265 DTS 5.1ch_ESiR 	// Deadpool (2016) 2160p UHD WEB-DL non-HDR AVC DTS-HD MA 7.1ch_DDR 	// Deadpool 2 (2018) (Super Duper Cut) 2160p UHD Blu-ray REMUX HDR10bit ATEME TrueHD Atmos 13Obj 7.1ch_EPSiLON 	def main_title = call{n}+ 	space + '(' + call{y} + ')'+ 	space + call{fn.matches(/(?i).+\b25th.+?anniv.+/) ? '(25th Anniv. Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(limited\b.*?\).+/) ? '(Limited Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(uncut\b.*?\).+/) ? '(Uncut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bcollector.+?s.+?edition\b.+/) ? '(Collector\'s Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bdirect.+?cut\b.+/) ? '(Director\'s Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?\b.+/) ? '(Extended)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?edit\b.+/) ? '(Extended Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bimax\b.+/) ? '(IMAX Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\blimited\b.+/) ? '(Limited)' : ' '}+ 	space + call{fn.matches(/(?i).+\bremastered\b.+/) ? '(Remastered)' : ' '}+ 	space + call{fn.matches(/(?i).+\bsuper.+duper.+cut\b.+/) ? '(Super Duper Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\btheatrical\b.+/) ? '(Theatrical)' : ' '}+ 	space + call{fn.matches(/(?i).+\bunrated\b.+/) ? '(Unrated)' : ' '}+ 	space + call{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {' '}{' '}}+ 	space + call{self.vf ? self.vf : self.hpi}+ 	space + call{hd}+ 	space + call{source.matches(/(?i)blu.*ray/) ? 'Blu-ray' : {source} ?: 'WEB-DL'}+ 	space + call{fn.matches(/(?i).+\bremux\b.+/) ? 'REMUX' : ' '}+ 	// Only calls {hdr} if it's not SD else non-HDR 	space + call{if (hd =~ 'HD') {any{hdr + "-" + bitdepth + 'bit'}{'non-HDR'}}}+ 	space + call{vc}+ 	space + 	// Call audio 	// Thread here where I got the base code: https://www.filebot.net/forums/viewtopic.php?f=5&t=5285 	call { 		def mCFP = 		[ 		'AAC LC SBR PS' : 'AAC', 		'AAC LC SBR' : 'AAC', 		'AAC LC' : 'AAC', 		'AC 3 Dep' : 'E-AC3', 		'AC 3' : 'AC3', 		'DTS 96 24' : 'DTS 96-24', 		'DTS ES XBR' : 'DTS-HD HRA', 		'DTS ES XLL' : 'DTS-HD MA', 		'DTS ES XXCH XBR' : 'DTS-HD HRA', 		'DTS ES XXCH XLL' : 'DTS-HD MA', 		'DTS ES XXCH' : 'DTS-ES', 		'DTS ES' : 'DTS-ES', 		'DTS XBR' : 'DTS-HD HRA', 		'DTS XLL X' : 'DTS X', 		'DTS XLL' : 'DTS-HD MA', 		'DTS' : 'DTS', 		'E AC 3 JOC' : 'EAC3 Atmos', 		'E AC 3' : 'EAC3', 		'MLP FBA 16 ch' : 'TrueHD Atmos', 		'MLP FBA' : 'TrueHD', 		'MP3' : 'MP3', 		'MPEG Audio' : 'MP2', 		'PCM' : 'PCM' 		]; 		def audioClean = { it.replaceAll(/[\p{Pd}\p{Space}]/, ' ').replaceAll(/\p{Space}{2,}/, ' ').slash(' ') }; 		def channelClean = { it.replaceAll(/Debug.+|Object\sBased\s?\/?|(\d+)?\sobjects\s\/\s|0.(?=\d.\d)|20/).replaceAll(/6/,'5.1').replaceAll(/8/,'7.1') }; 		def audioCollection = audio.collect 		{ au -> 			def channels = any{ channelClean(au['ChannelPositionsString2'])}{ channelClean(au['ChannelsOriginal'])}{ channelClean(au['Channels']) }; 			def dynChannel = {au['NumberOfDynamicObjects'] + 'Obj'}; 			def ch = channels.tokenize('\\/').take(3)*.toDouble().inject(0, { a, b -> a + b }).findAll { it > 0 }.max().toString() + 'ch'; 			def codec = audioClean(any{ au['CodecID/Hint'] }{ au['Format'] }); 			def format_profile = { ( au['Format_AdditionalFeatures'] != null) ? audioClean(au['Format_AdditionalFeatures']) : '' }; 			def combined = allOf{codec}{format_profile}.join(' '); 			def stream = allOf { mCFP.get(combined, 'UNKNOWN_FORMAT--'+combined+'--') } { dynChannel } { ch }; 		}; 		return audioCollection[0].join( ' ' ) 		} + 		'_'+ 		// Group 		call{ any{ fn.match(/(?<=[_-])[^\s_-]+?$/)} {group} {'_NA'} }; 		// Language 		def lang = call{ any{'.'+subt} + {fn.matches(/(?i).+sdh.+/) ? '_SDH' : ''} {any{fn.match(/(?i)\(foreignpartsonly\)/)} '' } }; 		// Extension 		// def ext = call{'.'+ext}; 		// Call all the bindings to create the result 		call(dir_root) + (call(main_title).replace(':', ';').replace('*', '') + call(lang)).replaceAll(/null/,'') 	}"/>
<entry key="6" value="{ 	////////////////////////////////////////////// 	// MOVIE BINDING 	////////////////////////////////////////////// 	// Posted here: https://www.filebot.net/forums/viewtopic.php?f=4&t=10766&p=43842#p43842 	////////////////////////////////////////////// 	def space = call{' '}; 	// Root Directory 	def dir_root = 'Z:/Movies & TV/'+ 	call{hd.matches(/(?i)SD/) ? '1. SD/' : ' '}+ 	call{hd.matches(/(?i)HD/) ? '2. HD/' : ' '}+ 	call{hd.matches(/(?i)UHD/) ? '3. UHD/' : ' '}; 	// Main Title e.g. 	// 1408 (2007) (Director's Cut) 1080p HD Blu-ray non-HDR x264 DTS5.1ch_SiNNERS 	// 300 (2007) 720p HD BRRip non-HDR x265 DTS 5.1ch_ESiR 	// Deadpool (2016) 2160p UHD WEB-DL non-HDR AVC DTS-HD MA 7.1ch_DDR 	// Deadpool 2 (2018) (Super Duper Cut) 2160p UHD Blu-ray REMUX HDR10bit ATEME TrueHD Atmos 13Obj 7.1ch_EPSiLON 	def main_title = call{n}+ 	space + '(' + call{y} + ')'+ 	space + call{fn.matches(/(?i).+\b25th.+?anniv.+/) ? '(25th Anniv. Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(limited\b.*?\).+/) ? '(Limited Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(uncut\b.*?\).+/) ? '(Uncut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bcollector.+?s.+?edition\b.+/) ? '(Collector\'s Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bdirect.+?cut\b.+/) ? '(Director\'s Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?\b.+/) ? '(Extended)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?edit\b.+/) ? '(Extended Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bimax\b.+/) ? '(IMAX Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\blimited\b.+/) ? '(Limited)' : ' '}+ 	space + call{fn.matches(/(?i).+\bremastered\b.+/) ? '(Remastered)' : ' '}+ 	space + call{fn.matches(/(?i).+\bsuper.+duper.+cut\b.+/) ? '(Super Duper Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\btheatrical\b.+/) ? '(Theatrical)' : ' '}+ 	space + call{fn.matches(/(?i).+\bunrated\b.+/) ? '(Unrated)' : ' '}+ 	space + call{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {' '}{' '}}+ 	space + call{self.vf ? self.vf : self.hpi}+ 	space + call{hd}+ 	space + call{source.matches(/(?i)blu.*ray/) ? 'Blu-ray' : {source} ?: 'WEB-DL'}+ 	space + call{fn.matches(/(?i).+\bremux\b.+/) ? 'REMUX' : ' '}+ 	// Only calls {hdr} if it's not SD else non-HDR 	space + call{if (hd =~ 'HD') {any{hdr + "-" + bitdepth + 'bit'}{'non-HDR'}}}+ 	space + call{vc}+ 	space + 	// Call audio 	// Thread here where I got the base code: https://www.filebot.net/forums/viewtopic.php?f=5&t=5285 	call { 		def mCFP = 		[ 		'AAC LC SBR PS' : 'AAC', 		'AAC LC SBR' : 'AAC', 		'AAC LC' : 'AAC', 		'AC 3 Dep' : 'E-AC3', 		'AC 3' : 'AC3', 		'DTS 96 24' : 'DTS 96-24', 		'DTS ES XBR' : 'DTS-HD HRA', 		'DTS ES XLL' : 'DTS-HD MA', 		'DTS ES XXCH XBR' : 'DTS-HD HRA', 		'DTS ES XXCH XLL' : 'DTS-HD MA', 		'DTS ES XXCH' : 'DTS-ES', 		'DTS ES' : 'DTS-ES', 		'DTS XBR' : 'DTS-HD HRA', 		'DTS XLL X' : 'DTS X', 		'DTS XLL' : 'DTS-HD MA', 		'DTS' : 'DTS', 		'E AC 3 JOC' : 'EAC3 Atmos', 		'E AC 3' : 'EAC3', 		'MLP FBA 16 ch' : 'TrueHD Atmos', 		'MLP FBA' : 'TrueHD', 		'MP3' : 'MP3', 		'MPEG Audio' : 'MP2', 		'PCM' : 'PCM' 		]; 		def audioClean = { it.replaceAll(/[\p{Pd}\p{Space}]/, ' ').replaceAll(/\p{Space}{2,}/, ' ').slash(' ') }; 		def channelClean = { it.replaceAll(/Debug.+|Object\sBased\s?\/?|(\d+)?\sobjects\s\/\s|0.(?=\d.\d)|20/).replaceAll(/6/,'5.1').replaceAll(/8/,'7.1') }; 		def audioCollection = audio.collect 		{ au -> 			def channels = any{ channelClean(au['ChannelPositionsString2'])}{ channelClean(au['ChannelsOriginal'])}{ channelClean(au['Channels']) }; 			def dynChannel = {au['NumberOfDynamicObjects'] + 'Obj'}; 			def ch = channels.tokenize('\\/').take(3)*.toDouble().inject(0, { a, b -> a + b }).findAll { it > 0 }.max().toString() + 'ch'; 			def codec = audioClean(any{ au['CodecID/Hint'] }{ au['Format'] }); 			def format_profile = { ( au['Format_AdditionalFeatures'] != null) ? audioClean(au['Format_AdditionalFeatures']) : '' }; 			def combined = allOf{codec}{format_profile}.join(' '); 			def stream = allOf { mCFP.get(combined, 'UNKNOWN_FORMAT--'+combined+'--') } { dynChannel } { ch }; 		}; 		return audioCollection[0].join( ' ' ) 		} + 		'_'+ 		// Group 		call{ any{ fn.match(/(?<=[_-])[^\s_-]+?$/)} {group} {'_NA'} }; 		// Language 		def lang = call{ any{'.'+subt} + {fn.matches(/(?i).+sdh.+/) ? '_SDH' : ''} {any{fn.match(/(?i)\(foreignpartsonly\)/)} '' } }; 		// Extension 		// def ext = call{'.'+ext}; 		// Call all the bindings to create the result 		call(dir_root) + (call(main_title).replace(':', ';').replace('*', '') + call(lang)).replaceAll(/null/,'') 	}"/>
<entry key="7" value="{ 	////////////////////////////////////////////// 	// MOVIE BINDING 	////////////////////////////////////////////// 	// Posted here: https://www.filebot.net/forums/viewtopic.php?f=4&t=10766&p=43842#p43842 	////////////////////////////////////////////// 	def space = call{' '}; 	// Root Directory 	def dir_root = 'Z:/Movies & TV/'+ 	call{hd.matches(/(?i)SD/) ? '1. SD/' : ' '}+ 	call{hd.matches(/(?i)HD/) ? '2. HD/' : ' '}+ 	call{hd.matches(/(?i)UHD/) ? '3. UHD/' : ' '}; 	// Main Title e.g. 	// 1408 (2007) (Director's Cut) 1080p HD Blu-ray non-HDR x264 DTS5.1ch_SiNNERS 	// 300 (2007) 720p HD BRRip non-HDR x265 DTS 5.1ch_ESiR 	// Deadpool (2016) 2160p UHD WEB-DL non-HDR AVC DTS-HD MA 7.1ch_DDR 	// Deadpool 2 (2018) (Super Duper Cut) 2160p UHD Blu-ray REMUX HDR10bit ATEME TrueHD Atmos 13Obj 7.1ch_EPSiLON 	def main_title = call{n}+ 	space + '(' + call{y} + ')'+ 	space + call{fn.matches(/(?i).+\b25th.+?anniv.+/) ? '(25th Anniv. Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(limited\b.*?\).+/) ? '(Limited Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\b\(uncut\b.*?\).+/) ? '(Uncut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bcollector.+?s.+?edition\b.+/) ? '(Collector\'s Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bdirect.+?cut\b.+/) ? '(Director\'s Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?\b.+/) ? '(Extended)' : ' '}+ 	space + call{fn.matches(/(?i).+\bextended.+?edit\b.+/) ? '(Extended Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\bimax\b.+/) ? '(IMAX Edition)' : ' '}+ 	space + call{fn.matches(/(?i).+\blimited\b.+/) ? '(Limited)' : ' '}+ 	space + call{fn.matches(/(?i).+\bremastered\b.+/) ? '(Remastered)' : ' '}+ 	space + call{fn.matches(/(?i).+\bsuper.+duper.+cut\b.+/) ? '(Super Duper Cut)' : ' '}+ 	space + call{fn.matches(/(?i).+\btheatrical\b.+/) ? '(Theatrical)' : ' '}+ 	space + call{fn.matches(/(?i).+\bunrated\b.+/) ? '(Unrated)' : ' '}+ 	space + call{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {' '}{' '}}+ 	space + call{self.vf ? self.vf : self.hpi}+ 	space + call{hd}+ 	space + call{source.matches(/(?i)blu.*ray/) ? 'Blu-ray' : {source} ?: 'WEB-DL'}+ 	space + call{fn.matches(/(?i).+\bremux\b.+/) ? 'REMUX' : ' '}+ 	// Only calls {hdr} if it's not SD else non-HDR 	space + call{if (hd =~ 'HD') {any{hdr + "-" + bitdepth + 'bit'}{'non-HDR'}}}+ 	space + call{vc}+ 	space + 	// Call audio 	// Thread here where I got the base code: https://www.filebot.net/forums/viewtopic.php?f=5&t=5285 	call { 		def mCFP = 		[ 		'AAC LC SBR PS' : 'AAC', 		'AAC LC SBR' : 'AAC', 		'AAC LC' : 'AAC', 		'AC 3 Dep' : 'E-AC3', 		'AC 3' : 'AC3', 		'DTS 96 24' : 'DTS 96-24', 		'DTS ES XBR' : 'DTS-HD HRA', 		'DTS ES XLL' : 'DTS-HD MA', 		'DTS ES XXCH XBR' : 'DTS-HD HRA', 		'DTS ES XXCH XLL' : 'DTS-HD MA', 		'DTS ES XXCH' : 'DTS-ES', 		'DTS ES' : 'DTS-ES', 		'DTS XBR' : 'DTS-HD HRA', 		'DTS XLL X' : 'DTS X', 		'DTS XLL' : 'DTS-HD MA', 		'DTS' : 'DTS', 		'E AC 3 JOC' : 'EAC3 Atmos', 		'E AC 3' : 'EAC3', 		'MLP FBA 16 ch' : 'TrueHD Atmos', 		'MLP FBA' : 'TrueHD', 		'MP3' : 'MP3', 		'MPEG Audio' : 'MP2', 		'PCM' : 'PCM' 		]; 		def audioClean = { it.replaceAll(/[\p{Pd}\p{Space}]/, ' ').replaceAll(/\p{Space}{2,}/, ' ').slash(' ') }; 		def channelClean = { it.replaceAll(/Debug.+|Object\sBased\s?\/?|(\d+)?\sobjects\s\/\s|0.(?=\d.\d)|20/).replaceAll(/6/,'5.1').replaceAll(/8/,'7.1') }; 		def audioCollection = audio.collect 		{ au -> 			def channels = any{ channelClean(au['ChannelPositionsString2'])}{ channelClean(au['ChannelsOriginal'])}{ channelClean(au['Channels']) }; 			def dynChannel = {au['NumberOfDynamicObjects'] + 'Obj'}; 			def ch = channels.tokenize('\\/').take(3)*.toDouble().inject(0, { a, b -> a + b }).findAll { it > 0 }.max().toString() + 'ch'; 			def codec = audioClean(any{ au['CodecID/Hint'] }{ au['Format'] }); 			def format_profile = { ( au['Format_AdditionalFeatures'] != null) ? audioClean(au['Format_AdditionalFeatures']) : '' }; 			def combined = allOf{codec}{format_profile}.join(' '); 			def stream = allOf { mCFP.get(combined, 'UNKNOWN_FORMAT--'+combined+'--') } { dynChannel } { ch }; 		}; 		return audioCollection[0].join( ' ' ) 		} + 		'_'+ 		// Group 		call{ any{ fn.match(/(?<=[_-])[^\s_-]+?$/)} {group} {'_NA'} }; 		// Language 		def lang = call{ any{'.'+subt} + {fn.matches(/(?i).+sdh.+/) ? '_SDH' : ''} {any{fn.match(/(?i)\(foreignpartsonly\)/)} '' } }; 		// Extension 		// def ext = call{'.'+ext}; 		// Call all the bindings to create the result 		(call(main_title).replace(':', ';').replace('*', '') + call(lang)).replaceAll(/null/,'') 	}"/>
</map>
</node>
<node name="presets">
<map>
<entry key="My Preset" value="{"@type":"net.filebot.ui.rename.Preset","name":"My Preset","path":"Z:\\Movies & TV\\3. UHD","includes":"minutes > 5 && fn != /(?i)extras/","format":"{home}/Movies/{n} {y}","database":"TheMovieDB::TV","sortOrder":"DVD","matchMode":"Opportunistic","language":"en","action":"HARDLINK"}"/>
</map>
</node>
</node>
</node>
</node>
</node>
</root>
</preferences>
Done ?(?????)?
Z:\Movies & TV\New Downloads\_FileBot>