\r\n\r\n#!\/usr\/bin\/env python\r\n\r\nimport nuke\r\nimport nukescripts\r\n\r\nprint "importing nuke..."\r\nprint "importing nukescripts..."\r\n\r\n\r\n########################################################################################################################\r\n\r\n__author__ = "Boris Martinez Castillo"\r\n__version__ = "1.0.1"\r\n__maintainer__ = "Boris Martinez Castillo"\r\n__email__ = "boris.vfx@outlook.com"\r\n\r\n########################################################################################################################\r\n\r\nSTART_FRAME = int(nuke.root()['first_frame'].value())\r\nLAST_FRAME = int(nuke.root()['last_frame'].value())\r\n\r\n\r\ndef get_file_name(f):\r\n return f['file'].value().split('\/')[-1]\r\n\r\ndef set_name(n):\r\n txt = nuke.createNode("Text2")\r\n msg = txt['message'].setValue(n)\r\n return txt\r\n\r\ndef content_finder():\r\n SEL = nuke.selectedNodes() # HOLD ALL SELECTED NODES\r\n fh_sel_list = []\r\n txt_sel_list = []\r\n counter = 0\r\n\r\n for i in SEL:\r\n start_frame = i.firstFrame()\r\n end_frame = i.lastFrame()\r\n print start_frame\r\n print end_frame\r\n i['selected'].setValue('False') # DE-SELECT CURRENT NODE FROM SELECTION LIST.\r\n\r\n cv = nuke.createNode("CurveTool")\r\n nuke.execute(cv, START_FRAME, LAST_FRAME) # EXECUTES CURVE TOOL\r\n\r\n if type(get_stop_frame(cv)) == list:\r\n\r\n for e in get_stop_frame(cv):\r\n fh = nuke.createNode("FrameHold")\r\n fh.setInput(0, cv)\r\n fh['first_frame'].setValue(int(e))\r\n label = set_name(get_file_name(i))\r\n txt_sel_list.append(label.name())\r\n read_recolor(nuke.toNode(i.name()), 112656639)\r\n counter += 1\r\n print counter\r\n else:\r\n read_recolor(nuke.toNode(i.name()), 3238002943)\r\n counter += 1\r\n if counter == len(SEL):\r\n print "txt_sel_list: ", txt_sel_list\r\n return txt_sel_list\r\n\r\ndef content_finder_input():\r\n SEL = nuke.selectedNodes() # HOLD ALL SELECTED NODES\r\n fh_sel_list = []\r\n txt_sel_list = []\r\n counter = 0\r\n\r\n for i in SEL:\r\n start_frame = i.firstFrame()\r\n end_frame = i.lastFrame()\r\n print start_frame\r\n print end_frame\r\n i['selected'].setValue('False') # DE-SELECT CURRENT NODE FROM SELECTION LIST.\r\n\r\n cv = nuke.createNode("CurveTool")\r\n nuke.execute(cv, start_frame, end_frame) # EXECUTES CURVE TOOL\r\n\r\n if type(get_stop_frame(cv)) == list:\r\n\r\n for e in get_stop_frame(cv):\r\n fh = nuke.createNode("FrameHold")\r\n fh.setInput(0, cv)\r\n fh['first_frame'].setValue(int(e))\r\n label = set_name(get_file_name(i))\r\n txt_sel_list.append(label.name())\r\n read_recolor(nuke.toNode(i.name()), 112656639)\r\n counter += 1\r\n print counter\r\n else:\r\n read_recolor(nuke.toNode(i.name()), 3238002943)\r\n counter += 1\r\n if counter == len(SEL):\r\n print "txt_sel_list: ", txt_sel_list\r\n return txt_sel_list\r\n\r\ndef content_finder_custom(sf,lf):\r\n SEL = nuke.selectedNodes() # HOLD ALL SELECTED NODES\r\n fh_sel_list = []\r\n txt_sel_list = []\r\n counter = 0\r\n\r\n for i in SEL:\r\n start_frame = i.firstFrame()\r\n end_frame = i.lastFrame()\r\n print start_frame\r\n print end_frame\r\n i['selected'].setValue('False') # DE-SELECT CURRENT NODE FROM SELECTION LIST\r\n\r\n cv = nuke.createNode("CurveTool")\r\n nuke.execute(cv, sf, lf) # EXECUTES CURVE TOOL\r\n\r\n if type(get_stop_frame(cv)) == list:\r\n\r\n for e in get_stop_frame(cv):\r\n fh = nuke.createNode("FrameHold")\r\n fh.setInput(0, cv)\r\n fh['first_frame'].setValue(int(e))\r\n label = set_name(get_file_name(i))\r\n txt_sel_list.append(label.name())\r\n read_recolor(nuke.toNode(i.name()), 112656639)\r\n counter += 1\r\n print counter\r\n else:\r\n read_recolor(nuke.toNode(i.name()), 3238002943)\r\n counter += 1\r\n if counter == len(SEL):\r\n print "txt_sel_list: ", txt_sel_list\r\n return txt_sel_list\r\n\r\ndef content_finder_int():\r\n SEL = nuke.selectedNodes() # HOLD ALL SELECTED NODES\r\n fh_sel_list = []\r\n txt_sel_list = []\r\n counter = 0\r\n\r\n for i in SEL:\r\n\r\n i['selected'].setValue('False') # DE-SELECT CURRENT NODE FROM SELECTION LIST\r\n\r\n cv = nuke.createNode("CurveTool")\r\n nuke.execute(cv, START_FRAME, LAST_FRAME) # EXECUTES CURVE TOOL\r\n\r\n if type(get_stop_frame_int(cv)) == int:\r\n\r\n fh = nuke.createNode("FrameHold")\r\n fh['first_frame'].setValue(get_stop_frame_int(cv))\r\n label = set_name(get_file_name(i))\r\n txt_sel_list.append(label.name())\r\n read_recolor(nuke.toNode(i.name()), 112656639)\r\n counter += 1\r\n print counter\r\n else:\r\n read_recolor(nuke.toNode(i.name()), 3238002943)\r\n counter += 1\r\n if counter == len(SEL):\r\n print txt_sel_list\r\n return txt_sel_list\r\n\r\ndef content_finder_int_input():\r\n SEL = nuke.selectedNodes() # HOLD ALL SELECTED NODES\r\n fh_sel_list = []\r\n txt_sel_list = []\r\n counter = 0\r\n\r\n for i in SEL:\r\n start_frame = i.firstFrame()\r\n end_frame = i.lastFrame()\r\n print start_frame\r\n print end_frame\r\n i['selected'].setValue('False') # DE-SELECT CURRENT NODE FROM SELECTION LIST\r\n\r\n cv = nuke.createNode("CurveTool")\r\n nuke.execute(cv, start_frame, end_frame) # EXECUTES CURVE TOOL\r\n\r\n if type(get_stop_frame_int(cv)) == int:\r\n\r\n fh = nuke.createNode("FrameHold")\r\n fh['first_frame'].setValue(get_stop_frame_int(cv))\r\n label = set_name(get_file_name(i))\r\n txt_sel_list.append(label.name())\r\n read_recolor(nuke.toNode(i.name()), 112656639)\r\n counter += 1\r\n print counter\r\n else:\r\n read_recolor(nuke.toNode(i.name()), 3238002943)\r\n counter += 1\r\n if counter == len(SEL):\r\n print txt_sel_list\r\n return txt_sel_list\r\n\r\ndef content_finder_int_custom(sf,lf):\r\n SEL = nuke.selectedNodes() # HOLD ALL SELECTED NODES\r\n fh_sel_list = []\r\n txt_sel_list = []\r\n counter = 0\r\n\r\n for i in SEL:\r\n start_frame = i.firstFrame()\r\n end_frame = i.lastFrame()\r\n print start_frame\r\n print end_frame\r\n i['selected'].setValue('False') # DE-SELECT CURRENT NODE FROM SELECTION LIST\r\n\r\n cv = nuke.createNode("CurveTool")\r\n nuke.execute(cv, sf, lf) # EXECUTES CURVE TOOL\r\n print\r\n if type(get_stop_frame_int(cv)) == int:\r\n\r\n fh = nuke.createNode("FrameHold")\r\n fh['first_frame'].setValue(get_stop_frame_int(cv))\r\n label = set_name(get_file_name(i))\r\n txt_sel_list.append(label.name())\r\n read_recolor(nuke.toNode(i.name()), 112656639)\r\n counter += 1\r\n print counter\r\n else:\r\n read_recolor(nuke.toNode(i.name()), 3238002943)\r\n counter += 1\r\n if counter == len(SEL):\r\n print txt_sel_list\r\n return txt_sel_list\r\n\r\ndef attach_contact_sheet(l):\r\n\r\n print "attach_contact_sheet list: ", l\r\n all_nodes = len(l)\r\n \t\r\n [nuke.toNode(i)['selected'].setValue('True') for i in l]\r\n contact_sheet = nuke.createNode("ContactSheet")\r\n columns = int(contact_sheet["columns"].getValue())\r\n rows = (all_nodes \/ columns) + 1\r\n contact_sheet["rows"].setValue(rows)\r\n \r\n\t\r\ndef read_recolor(l,c):\r\n l['tile_color'].setValue(c)\r\n return\r\n\r\ndef get_other_muzzles(l,f,a):\r\n for i in l:\r\n if i > f:\r\n a.append(i)\r\n return a\r\n\r\ndef get_frames(anim,value,li):\r\n frame = 0\r\n for key in anim.keys():\r\n x_value = key.x\r\n y_value = key.y\r\n if y_value == value:\r\n frame = x_value\r\n li.append(frame)\r\n break\r\n return li\r\n\r\ndef get_stop_frame(node):\r\n anim_curve_x = node['intensitydata'].animation(0)\r\n y_list = []\r\n stop_frame = 0\r\n\r\n for key in anim_curve_x.keys():\r\n x_value = key.x\r\n y_value = key.y\r\n y_list.append(y_value)\r\n\r\n\r\n y_max_value = max(y_list) # CALCULATE MAX VALUE\r\n other_muzzles = []\r\n other_stop_frames = []\r\n\r\n print "max value found: ", y_max_value\r\n\r\n om = get_other_muzzles(y_list,0.05,other_muzzles)\r\n print "other_muzzles: ",om\r\n for i in om:\r\n get_frames(anim_curve_x,i,other_stop_frames)\r\n\r\n print "other_stop_frames: ", other_stop_frames\r\n\r\n if y_max_value < 0.05:\r\n return None\r\n\r\n for key in anim_curve_x.keys():\r\n x_value = key.x\r\n y_value = key.y\r\n if y_value == y_max_value:\r\n stop_frame = x_value\r\n break\r\n\r\n return other_stop_frames\r\n\r\ndef get_stop_frame_int(node):\r\n anim_curve_x = node['intensitydata'].animation(0)\r\n y_list = []\r\n stop_frame = 0\r\n\r\n for key in anim_curve_x.keys():\r\n x_value = key.x\r\n y_value = key.y\r\n y_list.append(y_value)\r\n\r\n\r\n y_max_value = max(y_list) # CALCULATE MAX VALUE\r\n other_muzzles = []\r\n other_stop_frames = []\r\n\r\n print "max value found: ", y_max_value\r\n\r\n om = get_other_muzzles(y_list, 0.05, other_muzzles)\r\n print "other_muzzles: ", om\r\n for i in om:\r\n get_frames(anim_curve_x, i, other_stop_frames)\r\n\r\n print "other_stop_frames: ", other_stop_frames\r\n\r\n if y_max_value < 0.05:\r\n return None\r\n\r\n for key in anim_curve_x.keys():\r\n x_value = key.x\r\n y_value = key.y\r\n if y_value == y_max_value:\r\n stop_frame = x_value\r\n break\r\n\r\n return int(stop_frame)\r\n\r\ndef main_function():\r\n panel = modalPanel()\r\n if not panel.showModalDialog():\r\n print "script aborted"\r\n return\r\n else:\r\n print "script run"\r\n if panel.giveFrameRangeValue() == "global" and panel.analysis_mode.value() == "extract" :\r\n attach_contact_sheet(content_finder())\r\n return\r\n elif panel.giveFrameRangeValue() == "input" and panel.analysis_mode.value() == "extract":\r\n attach_contact_sheet(content_finder_input())\r\n return\r\n elif panel.giveFrameRangeValue() == "custom" and panel.analysis_mode.value() == "extract":\r\n range = panel.frame_display.value()\r\n start_frame = int(range.split("-")[0])\r\n end_frame = int(range.split("-")[-1])\r\n print start_frame, end_frame\r\n attach_contact_sheet(content_finder_custom(start_frame,end_frame))\r\n return\r\n elif panel.giveFrameRangeValue() == "global" and panel.analysis_mode.value() == "contact sheet":\r\n attach_contact_sheet(content_finder_int())\r\n return\r\n elif panel.giveFrameRangeValue() == "input" and panel.analysis_mode.value() == "contact sheet":\r\n attach_contact_sheet(content_finder_int_input())\r\n return\r\n elif panel.giveFrameRangeValue() == "custom" and panel.analysis_mode.value() == "contact sheet":\r\n range = panel.frame_display.value()\r\n start_frame = int(range.split("-")[0])\r\n end_frame = int(range.split("-")[-1])\r\n print start_frame, end_frame\r\n attach_contact_sheet(content_finder_int_custom(start_frame, end_frame))\r\n return\r\n else:\r\n print "pass"\r\n return\r\n\r\n#CREATE A PYTHON PANEL FOR DEALING WITH TIME RANGES\r\n\r\nclass modalPanel(nukescripts.PythonPanel):\r\n\r\n def __init__(self):\r\n nukescripts.PythonPanel.__init__(self,"get my muzzle")\r\n #CREATE KNOBS\r\n self.frame_range = nuke.Enumeration_Knob('fRange','frame range', ['global','input','custom'])\r\n self.analysis_mode = nuke.Enumeration_Knob('mode','build mode ', ['contact sheet','extract'])\r\n self.frame_display = nuke.String_Knob("")\r\n self.frame_display.clearFlag(nuke.STARTLINE)\r\n self.author = nuke.Text_Knob("written by Boris Martinez")\r\n #ADD KNOBS\r\n for i in (self.frame_range,self.frame_display,self.analysis_mode,self.author):\r\n self.addKnob(i)\r\n #SET KNOB DEFAULT VALUES\r\n self.get_frame_range()\r\n\r\n def giveFrameRangeValue(self):\r\n return self.frame_range.value()\r\n\r\n def get_frame_range(self):\r\n if self.giveFrameRangeValue() == "global":\r\n first_frame = nuke.root().firstFrame()\r\n last_frame = nuke.root().lastFrame()\r\n txt = str(int(first_frame)) + '-' + str(int(last_frame))\r\n self.frame_display.setValue(txt)\r\n elif self.giveFrameRangeValue() == "input":\r\n print "here should come the read frame range"\r\n node = nuke.selectedNode()\r\n first_frame = node.firstFrame()\r\n last_frame = node.lastFrame()\r\n txt = str(int(first_frame)) + '-' + str(int(last_frame))\r\n self.frame_display.setValue(txt)\r\n elif self.giveFrameRangeValue() == "custom":\r\n self.frame_display.setValue("")\r\n print "here the user decides"\r\n\r\n def knobChanged(self,knob):\r\n if knob.name() == "fRange":\r\n self.get_frame_range()\r\n\r\n\r\nif __name__ == "__main__":\r\n main_function()\r\n\r\n\r\n<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":" code<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47,48,49,1],"tags":[],"class_list":["post-2209","post","type-post","status-publish","format-standard","hentry","category-nuke","category-python","category-scripting","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/boris-mc.com\/index.php?rest_route=\/wp\/v2\/posts\/2209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/boris-mc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/boris-mc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/boris-mc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/boris-mc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2209"}],"version-history":[{"count":33,"href":"https:\/\/boris-mc.com\/index.php?rest_route=\/wp\/v2\/posts\/2209\/revisions"}],"predecessor-version":[{"id":2375,"href":"https:\/\/boris-mc.com\/index.php?rest_route=\/wp\/v2\/posts\/2209\/revisions\/2375"}],"wp:attachment":[{"href":"https:\/\/boris-mc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/boris-mc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/boris-mc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}