import os import re renderPath = os.path.dirname(nuke.thisNode()["prerender_renderpath"].getValue()) + "/" padding="%04d" ext = nuke.thisNode()["fileType"].getValue() if ext == 0.0: ext = "exr" if ext == 1.0: ext = "dpx" if ext == 2.0: ext = "tif" if ext == 3.0: ext = "png" try: curVersion = re.findall(r"_[Vv]\d*", os.path.basename(nuke.root().name()))[0] renderPath += curVersion+"/" except: curVersion = "" def makePrerender(node): nukescripts.clear_selection_recursive() node["selected"].setValue(True) dependentNodes = node.dependent() writeLocation = renderPath+node.name() if not os.path.isdir(writeLocation): os.makedirs(writeLocation) #write write = nuke.createNode("Write",inpanel = False) write["file"].setValue(writeLocation+"/{name}{version}_{padding}.{ext}".format(name = node.name(), version = curVersion, padding = padding, ext = ext)) write["label"].setValue("_intermediate_") write["file_type"].setValue(ext) write["channels"].setValue("all") write.setName("intermediate_%s" % node.name()) write.setXpos(node.xpos()) write.setYpos(node.ypos()+200) write.setInput(0,node) #switch switch = nuke.createNode("Switch",inpanel = False) switch["which"].setValue(1) switch.setXpos(write.xpos()) switch.setYpos(write.ypos()+80) switch["label"].setValue("_intermediate_\n(1)read prerenders") switch.setInput(0,write) #read read = nuke.createNode("Read",inpanel = False) read["file"].setValue(writeLocation+"/{name}{version}_{padding}.{ext}".format(name = node.name(), version = curVersion, padding = padding, ext = ext)) read["first"].setValue(int(nuke.root()["first_frame"].getValue())) read["origfirst"].setValue(int(nuke.root()["first_frame"].getValue())) read["last"].setValue(int(nuke.root()["last_frame"].getValue())) read["origlast"].setValue(int(nuke.root()["last_frame"].getValue())) read.setXpos(switch.xpos()-120) read.setYpos(write.ypos()+40) read["label"].setValue("_intermediate_") switch.setInput(1,read) #backdrop bd = nuke.createNode("BackdropNode",inpanel = False) bd.setXpos(write.xpos()-150) bd.setYpos(write.ypos()-80) bd["bdwidth"].setValue(300) bd["bdheight"].setValue(230) bd["note_font_size"].setValue(25) bd["label"].setValue("_intermediate_%s"%node.name()) bd["tile_color"].setValue(654977023) for node in dependentNodes: node.setInput(0,switch) #prerender loop nodesToPrerender = nuke.selectedNodes() if curVersion != "": if renderPath != "" and renderPath != "/": if len(nodesToPrerender) != 0: if nuke.ask("Please give all selected nodes some reasonable names to create meaningful and recognizable prerender elements. Did you do that?"): for node in nodesToPrerender: if node.name() != "PrerenderManager" and node.Class() != "Viewer": makePrerender(node) else: nuke.message("Please select some nodes to prerender. Please give the last node before the render a meaningful name to create meaningful prerender element names.") else: nuke.message("Please set up a render path for the prerenders") else: nuke.message("No version found. Please make sure that the script has a version.")