def buildScene(): # Assemble NK scene dataShotDic = buildShotDic() exrPath = dataShotDic['EXR'] endFrame = dataShotDic['endFrame'] # Define Pathes for Write Nodes exrPathFull = '{0}{1}/{2}/SHOT_{3}/MASTER/{4}'.format(root3D, codePart, codeSequence, codeShot, exrPath) dpxPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/v{5}/E{1}_S{2}_v{5}.%04d.dpx'.format(codePart, codeSequence, codeShot, rootRND, 'DPX', '[knob VERSION.label]') movPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/E{1}_S{2}_v{5}.mov'.format(codePart, codeSequence, codeShot, rootRND, 'MOV','[knob VERSION.label]' ) nameBase = 'E{0}_S{1}'.format(codeSequence, codeShot) reader = nuke.nodes.Read(name = 'REA_E{0}_S{1}'.format(codeSequence, codeShot), file = exrPathFull, first = 101, last = endFrame, xpos = 0, ypos = 0) #creating Reader Node dot_A = nuke.nodes.Dot(name = 'DOT', xpos = 34, ypos = 250) dot_A.setInput(0, reader) dot_B = nuke.nodes.Dot(name = 'DOT', xpos = 184, ypos = 250) dot_B.setInput(0, dot_A) verser = nuke.nodes.StickyNote(name = "VERSION", xpos = 0, ypos = 380) # Node to DRIVE VESIONS of Nuke renders verser['label'].setValue('001') # Create WRITE nodes writeDPX = nuke.nodes.Write( name ='DPX_E{0}_S{1}'.format(codeSequence, codeShot),file = dpxPathFull, file_type = 'dpx', colorspace='Cineon', first = 101, last = endFrame, xpos = 0, ypos = 300) writeDPX.setInput(0, dot_A) writeDPX['beforeRender'].setValue("if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))") # Create folder for writer output, if its not exists writeMOV = nuke.nodes.Write( name ='MOV_E{0}_S{1}'.format(codeSequence, codeShot),file = movPathFull, file_type = 'dpx', colorspace='sRGB', first = 101, last = endFrame, xpos = 150, ypos = 300) writeMOV.setInput(0, dot_B) writeMOV['beforeRender'].setValue("if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))") # Create folder for writer output, if its not exists # Setup NK scene view = nuke.toNode('Viewer1') view['xpos'].setValue( -140 ) view['ypos'].setValue( 30 ) nuke.knob('root.first_frame', str(frameStart) ) nuke.knob('root.last_frame', endFrame) nuke.connectViewer(0, reader)
def navUp(): av = nuke.activeViewer() ai = av.activeInput() avn = av.node() curr = avn.input(ai) prev = curr.input(0) nuke.connectViewer(ai, prev)
def precomp_write(): first_node = nuke.selectedNode() read_node = nuke.selectedNode().dependencies() nodes_list = [] while read_node: read_node = read_node[0].dependencies() nodes_list.append(read_node) read_node = nodes_list[-2][0] read_path = read_node.knob("file").value() file_name = read_path.split("/")[-1].split(".")[0] file_path = read_path.split("/")[:-1] file_path = "/".join(file_path) write_path = "{0}/precomp/{1}_precomp.%04d.jpg".format(file_path, file_name) write_node = nuke.nodes.Write() write_node.setInput(0, first_node) write_node.setSelected(True) write_node.knob("file").setValue(write_path) write_node.knob("file_type").setValue("jpeg") #write_node.knob("channels").setValue("rgba") write_node.knob("_jpeg_quality").setValue(100) write_node.knob("beforeRender").setValue("import os\nif not os.path.isdir(os.path.dirname(nuke.thisNode()[\'file\'].evaluate())):\n\tos.makedirs(os.path.dirname(nuke.thisNode()[\'file\'].evaluate()))") nuke.connectViewer(0,write_node)
def navDown(): av = nuke.activeViewer() ai = av.activeInput() avn = av.node() curr = avn.input(ai) nextlist = curr.dependent() next = nextlist[0] nuke.connectViewer(ai, next)
def renderOut(): if len(lista) >= 2: a = nuke.createNode("Write") a.connectInput(0, node) nuke.connectViewer(0, node) a["channels"].setValue("all") a["file_type"].setValue("exr") a.autoplace() renderPath() a["file"].setValue(newdir) else: pass
def Wipe(): # Creating requred nodes u = nuke.selectedNode() b = nuke.createNode('Grid') b['number'].setValue([38.4,21.6]) b['size'].setValue(0.2) x=u.knob("xpos").value() y=u.knob("ypos").value() left = nuke.nodes.OneView() Ltext= nuke.createNode("Text") Ltext['message'].setValue("LEFT") Ltext['box'].setValue([0,50,0,0]) Ltext['name'].setValue("Ltext") Ltext['hide_input'].setValue(1) left['view'].setValue("left") left['name'].setValue("left") left['hide_input'].setValue(1) left.setInput(0,b) Ltext.setInput(0,left) Rtext= nuke.createNode("Text") Rtext['message'].setValue("RIGHT") Rtext['box'].setValue([0,50,0,0]) Rtext['name'].setValue("Rtext") Rtext['hide_input'].setValue(1) Rtext.setInput(0,b) Rtext['label'].setValue("Delete After Use") right = nuke.createNode('OneView') right['view'].setValue("right") right['name'].setValue("right") right['hide_input'].setValue(1) right['label'].setValue("Delete After Use") # Connecting to Viewer nuke.connectViewer(0,Ltext) nuke.connectViewer(1,right) #Positioning nodes somewhere :) x = int(x) y = int(y) left.setXYpos(x,y+150) right.setXYpos(x,y+150) Ltext.setXYpos(x,y+150) Rtext.setXYpos(x,y+150) b.setXYpos(x,y+150)
def scatterObjects(): ''' Places an object on each selected vertex. The new Scene node gets user knobs to control the new objects. args: obj - class of object to scatter (default = Card2) ''' # pop up a panel to ask for the desired object type # the dictionary maps the name in the panel to the actual class used typeDict = dict(Axis='Axis', Card='Card2', Sphere='Sphere', Cylinder='Cylinder', Cube='Cube') # create the initial panel and give it a title p = nuke.Panel('Pick object type to scatter') # add a drop down list with the dictionary's keys as choices p.addEnumerationPulldown('object', ' '.join(typeDict.keys())) # adjust the panel's width a bit p.setWidth(250) # if the user confirms the dialogsave the choice for later, otherwise do nothing if p.show(): objType = typeDict[p.value('object')] else: return vsel = nukescripts.snap3d.getSelection() sc = nuke.nodes.Scene() # add user knobs to control new nodes: offsetKnob = nuke.XYZ_Knob('offset') sc.addKnob(offsetKnob) scaleKnob = nuke.Double_Knob('scale') scaleKnob.setValue(1) sc.addKnob(scaleKnob) for i, v in enumerate(vsel): obj = eval('nuke.nodes.%s()' % objType) # assign expressions to link to scene node's user knobs obj['translate'].setExpression( '%s + %s.offset' % (v.position.x, sc.name()), 0) obj['translate'].setExpression( '%s + %s.offset' % (v.position.y, sc.name()), 1) obj['translate'].setExpression( '%s + %s.offset' % (v.position.z, sc.name()), 2) obj['uniform_scale'].setExpression('%s.scale' % sc.name()) sc.setInput(i, obj) sc.setInput(i + 1, nuke.thisNode()) nuke.connectViewer(1, sc)
def connect_selected_to_viewer(inputIndex): """Connects the selected node to the given viewer input index, ignoring errors if no node is selected.""" selection = None try: selection = nuke.selectedNode() except ValueError: # no node selected pass if selection is not None and selection.Class() == 'Viewer': selection = None nuke.connectViewer(inputIndex, selection)
def createShadowNodeTree(): """ This method creates all the necessary nodes needed for a shadow pass. This is basically like a preset which is followed in every similar scenario :return: """ node = nuke.toNode("shadowRead") node['selected'].setValue(True) nuke.createNode('Shuffle') nuke.createNode('Grade') nuke.createNode('Premult') blurNode = nuke.createNode('Blur') blurNode.knob('name').setValue('blurNode') node['selected'].setValue(False) bmNode = nuke.createNode('Blur') bmNode.knob('name').setValue('blurMaskGrade') nuke.nodes.Merge(name="finalMerge", inputs=[nuke.toNode("blurMaskGrade"), nuke.toNode("beautyGrade")]) nuke.connectViewer(0, nuke.toNode("finalMerge"))
def PlusCrop(): #Variables target = nuke.selectedNode() bbox = target.bbox() origname = target.name() #Creating the crop pluscrop = nuke.nodes.Crop(name=(origname + '_Crop'), reformat=1) pluscrop.setInput(0, target) #Setting values through expression pluscrop['box'].setExpression("input0.bbox.x()", 0) pluscrop['box'].setExpression("input0.bbox.y()", 1) pluscrop['box'].setExpression("input0.bbox.r()", 2) pluscrop['box'].setExpression("input0.bbox.t()", 3) #Selecting the new crop node for each in nuke.allNodes(): each.knob("selected").setValue(False) pluscrop.knob('selected').setValue(True) pluscrop.showControlPanel() nuke.connectViewer(0, pluscrop)
def togglePreviousNode(): global main global prev av = nuke.activeViewer() try: ai = av.activeInput() avn = av.node() curr = avn.input(ai) try: if main: if not (curr == main or curr == prev): del main except: main = avn.input(ai) if main == curr: prev = curr.input(0) nuke.connectViewer(ai, prev) else: nuke.connectViewer(ai, main) prev = main.input(0) del main except: print 'no active viewer'
def submit(self): """Does the work to submit the current Nuke script to Zync, given that the parameters on the dialog are set.""" selected_write_names = [] selected_write_nodes = [] for k in self.writeNodes: if k.value(): selected_write_names.append(k.label()) selected_write_nodes.append(nuke.toNode(k.label())) active_viewer = nuke.activeViewer() if active_viewer: viewer_input = active_viewer.activeInput() if viewer_input is None: viewed_node = None else: viewed_node = active_viewer.node().input(viewer_input) else: viewer_input, viewed_node = None, None script_path = nuke.root().knob('name').getValue() new_script = self.maybe_correct_path_separators(script_path) write_node_to_user_path_map = dict() read_dependencies = [] with WriteChanges(new_script): # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only run on versions other than those. if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8: # Remove all nodes that aren't connected to the Write nodes being rendered. select_deps(selected_write_nodes) for node in nuke.allNodes(): if node.isSelected(): node.setSelected(False) else: node.setSelected(True) nuke.nodeDelete() # Freeze expressions on all nodes. Catch errors for Nuke versions that don't support the recurseGroups option. try: node_list = nuke.allNodes(recurseGroups=True) except: node_list = nuke.allNodes() for node in node_list: freeze_node(node) _collect_write_node_paths(selected_write_names, write_node_to_user_path_map) read_nodes = [ read_node for read_node in node_list if read_node.Class() in READ_NODE_CLASSES ] _collect_read_node_paths(read_nodes, read_dependencies) # reconnect the viewer if viewer_input is not None and viewed_node is not None: nuke.connectViewer(viewer_input, viewed_node) # exec before render # nuke.callbacks.beforeRenders try: render_params = self.get_params() if render_params is None: return render_params['scene_info'][ 'write_node_to_output_map'] = write_node_to_user_path_map render_params['scene_info']['files'] = read_dependencies self.zync_conn.submit_job('nuke', new_script, ','.join(selected_write_names), render_params) except zync.ZyncPreflightError as e: raise Exception('Preflight Check Failed:\n\n%s' % (str(e), )) nuke.message('Job submitted to ZYNC.')
def display_node(node_name): node = nuke.toNode(node_name) nuke.connectViewer(0, node)
def preCompForArnold(): # set a ordered list of input layer layerlist = ['indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection', 'refraction', 'AO', 'depth', 'MV', 'alpha'] gradelayers = ['indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection', 'refraction', 'AO'] # Get The Layers Of Selected Read Node orderedmerge = [] Read = nuke.selectedNode() layers = nuke.layers(Read) for i in layerlist: for n in layers: if i == n: orderedmerge.append(i) for o in orderedmerge: for l in layers: if l == o: layers.remove(l) layers.remove('rgba') layers.remove('rgb') orderedshow = layers ################Create Shuffle######################################## x = Read['xpos'].getValue() y = Read['ypos'].getValue() shufflegroup = [] gradegroup = [] dotYgroup = [] mergegroup = [] for k in orderedmerge: shuffle = nuke.nodes.Shuffle(name=k, postage_stamp=1, note_font_size=25) shuffle.setInput(0, Read) shuffle.knob('in').setValue(k) num = int(orderedmerge.index(k)) shuffle.setXYpos(int(x + 150 * num), int(y + 250)) shuffleX = shuffle['xpos'].getValue() shuffleY = shuffle['ypos'].getValue() shufflegroup.append(shuffle) ###Create Grade### if num < 7: gradenode = nuke.nodes.Grade(name=k, note_font_size=15) gradenode.setInput(0, shuffle) gradegroup.append(gradenode) else: pass ###Create Dot##### if num >= 1 and num < 7: dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25) dot.setInput(0, gradenode) dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num)) dotX = dot['xpos'].getValue() dotY = dot['ypos'].getValue() dotYgroup.append(dotY) elif num > 6: dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25) dot.setInput(0, shuffle) dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num)) dotX = dot['xpos'].getValue() dotY = dot['ypos'].getValue() dotYgroup.append(dotY) ###Create Merge#### if num < 1: pass elif num > 0 and num < 2: merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[gradegroup[0], dot], note_font_size=15) merge.setXYpos(int(x), int(dotY - 6)) mergegroup.append(merge) elif num > 1 and num < 6: merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(merge) merge.setXYpos(int(x), int(dotY - 6)) elif num > 5 and num < 7: merge = nuke.nodes.Merge(name=k, operation='multiply', mix=0.15, inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(merge) merge.setXYpos(int(x), int(dotY - 6)) elif num > 6 and num < 8: copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='depth.Z', inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(copy) copy.setXYpos(int(x), int(dotY - 14)) elif num > 7 and num < 9: copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='MV.red', from1='rgba.green', to1='MV.green', inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(copy) copy.setXYpos(int(x), int(dotY - 26)) elif num > 8 and num < 10: copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='rgba.alpha', inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(copy) copy.setXYpos(int(x), int(dotY - 14)) ###Create show Layers#### for element in orderedshow: num += 1 shuffle = nuke.nodes.Shuffle(name=element, postage_stamp=1, note_font_size=25) shuffle.setInput(0, Read) shuffle.knob('in').setValue(element) shuffle.setXYpos(int(x + 150 * num), int(y + 250)) nuke.connectViewer(0, mergegroup[-1])
ct['format'].setValue('C4D Format') ct.setName("BackGround") sc = nuke.nodes.Scene() sc.setName("C4DScene") rnd = nuke.nodes.ScanlineRender() rnd.setInput(1, sc) rnd.setInput(2, cam2) rnd.setInput(0, ct) m = nuke.nodes.Merge2(operation='plus', inputs=[lastmerge, rnd]) xPos = rnd.xpos() yPos = rnd.ypos() ct.setYpos(yPos - 24) ct.setXpos(xPos - 150) sc.setXpos(xPos + 150) sc.setYpos(yPos - 21) cam2.setXpos(xPos + 10) return m m = Built3dScene(cam1, cam2) nuke.delete(cam1) nuke.connectViewer(0, m) v = nuke.toNode("Viewer1") mPosX = m.xpos() mPosY = m.ypos() v.setXpos(mPosX) v.setYpos(mPosY + 50) #################### end = nuke.message("AutoComp done.\nSequence is " + str(lf - ff + 1) + " frames.")
def submit(self, username=None, password=None): """ Does the work to submit the current Nuke script to Zync, given that the parameters on the dialog are set. """ if self.existing_project.value().strip() == '' and self.new_project.value().strip() == '': nuke.message('Project name cannot be blank. Please either choose ' + 'an existing project from the dropdown or enter the desired ' + 'project name in the New Project field.') return if self.skip_check.value(): skip_answer = nuke.ask('You\'ve asked Zync to skip the file check ' + 'for this job. If you\'ve added new files to your script this ' + 'job WILL error. Your nuke script will still be uploaded. Are ' + 'you sure you want to continue?') if not skip_answer: return # prompt for login msg = 'Zync Login' pw_prompt = PasswordPrompt(title=msg, user_default=self.usernameDefault) try: login_type, user, pw = pw_prompt.get_authentication_info() except Exception: msg = 'You must have a Zync account to submit a job.' raise Exception(msg) selected_write_names = [] selected_write_nodes = [] for k in self.writeNodes: if k.value(): selected_write_names.append(k.label()) selected_write_nodes.append(nuke.toNode(k.label())) active_viewer = nuke.activeViewer() if active_viewer: viewer_input = active_viewer.activeInput() if viewer_input == None: viewed_node = None else: viewed_node = active_viewer.node().input(viewer_input) else: viewer_input, viewed_node = None, None new_script = ZYNC.generate_file_path(nuke.root().knob('name').getValue()) with WriteChanges(new_script): # The WriteChanges context manager allows us to save the # changes to the current session to the given script, leaving # the current session unchanged once the context manager is # exited. preflight_result = preflight() # # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only # run on versions other than those. # if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8: # # Remove all nodes that aren't connected to the Write # nodes being rendered. # select_deps(selected_write_nodes) for node in nuke.allNodes(): if node.isSelected(): node.setSelected(False) else: node.setSelected(True) nuke.nodeDelete() # # Freeze expressions on all nodes. Catch errors for Nuke # versions that don't support the recurseGroups option. # try: node_list = nuke.allNodes(recurseGroups=True) except: node_list = nuke.allNodes() for node in node_list: freeze_node(node) if not preflight_result: return # reconnect the viewer if viewer_input != None and viewed_node != None: nuke.connectViewer(viewer_input, viewed_node) # exec before render #nuke.callbacks.beforeRenders try: if login_type == 'google': ZYNC.login_with_google() else: ZYNC.login(username=user, password=pw) except zync.ZyncAuthenticationError as e: raise Exception('Zync Login Failed:\n\n%s' % (str(e),)) try: render_params = self.get_params() if render_params == None: return ZYNC.submit_job('nuke', new_script, ','.join(selected_write_names), render_params) except zync.ZyncPreflightError as e: raise Exception('Preflight Check Failed:\n\n%s' % (str(e),)) nuke.message('Job submitted to ZYNC.')
def preCompForArnold(): # set a ordered list of input layer layerlist = [ 'indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection', 'refraction', 'AO', 'depth', 'MV', 'alpha' ] gradelayers = [ 'indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection', 'refraction', 'AO' ] # Get The Layers Of Selected Read Node orderedmerge = [] Read = nuke.selectedNode() layers = nuke.layers(Read) for i in layerlist: for n in layers: if i == n: orderedmerge.append(i) for o in orderedmerge: for l in layers: if l == o: layers.remove(l) layers.remove('rgba') layers.remove('rgb') orderedshow = layers ################Create Shuffle######################################## x = Read['xpos'].getValue() y = Read['ypos'].getValue() shufflegroup = [] gradegroup = [] dotYgroup = [] mergegroup = [] for k in orderedmerge: shuffle = nuke.nodes.Shuffle(name=k, postage_stamp=1, note_font_size=25) shuffle.setInput(0, Read) shuffle.knob('in').setValue(k) num = int(orderedmerge.index(k)) shuffle.setXYpos(int(x + 150 * num), int(y + 250)) shuffleX = shuffle['xpos'].getValue() shuffleY = shuffle['ypos'].getValue() shufflegroup.append(shuffle) ###Create Grade### if num < 7: gradenode = nuke.nodes.Grade(name=k, note_font_size=15) gradenode.setInput(0, shuffle) gradegroup.append(gradenode) else: pass ###Create Dot##### if num >= 1 and num < 7: dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25) dot.setInput(0, gradenode) dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num)) dotX = dot['xpos'].getValue() dotY = dot['ypos'].getValue() dotYgroup.append(dotY) elif num > 6: dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25) dot.setInput(0, shuffle) dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num)) dotX = dot['xpos'].getValue() dotY = dot['ypos'].getValue() dotYgroup.append(dotY) ###Create Merge#### if num < 1: pass elif num > 0 and num < 2: merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[gradegroup[0], dot], note_font_size=15) merge.setXYpos(int(x), int(dotY - 6)) mergegroup.append(merge) elif num > 1 and num < 6: merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(merge) merge.setXYpos(int(x), int(dotY - 6)) elif num > 5 and num < 7: merge = nuke.nodes.Merge(name=k, operation='multiply', mix=0.15, inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(merge) merge.setXYpos(int(x), int(dotY - 6)) elif num > 6 and num < 8: copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='depth.Z', inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(copy) copy.setXYpos(int(x), int(dotY - 14)) elif num > 7 and num < 9: copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='MV.red', from1='rgba.green', to1='MV.green', inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(copy) copy.setXYpos(int(x), int(dotY - 26)) elif num > 8 and num < 10: copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='rgba.alpha', inputs=[mergegroup[num - 2], dot], note_font_size=15) mergegroup.append(copy) copy.setXYpos(int(x), int(dotY - 14)) ###Create show Layers#### for element in orderedshow: num += 1 shuffle = nuke.nodes.Shuffle(name=element, postage_stamp=1, note_font_size=25) shuffle.setInput(0, Read) shuffle.knob('in').setValue(element) shuffle.setXYpos(int(x + 150 * num), int(y + 250)) nuke.connectViewer(0, mergegroup[-1])
def buildScene(): # Assemble NK scene dataShotDic = buildShotDic() exrPath = dataShotDic['EXR'] endFrame = dataShotDic['endFrame'] # Define Pathes for Write Nodes exrPathFull = '{0}{1}/{2}/SHOT_{3}/MASTER/{4}'.format( root3D, codePart, codeSequence, codeShot, exrPath) dpxPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/v{5}/E{1}_S{2}_v{5}.%04d.dpx'.format( codePart, codeSequence, codeShot, rootRND, 'DPX', '[knob VERSION.label]') movPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/E{1}_S{2}_v{5}.mov'.format( codePart, codeSequence, codeShot, rootRND, 'MOV', '[knob VERSION.label]') nameBase = 'E{0}_S{1}'.format(codeSequence, codeShot) reader = nuke.nodes.Read(name='REA_E{0}_S{1}'.format( codeSequence, codeShot), file=exrPathFull, first=101, last=endFrame, xpos=0, ypos=0) #creating Reader Node dot_A = nuke.nodes.Dot(name='DOT', xpos=34, ypos=250) dot_A.setInput(0, reader) dot_B = nuke.nodes.Dot(name='DOT', xpos=184, ypos=250) dot_B.setInput(0, dot_A) verser = nuke.nodes.StickyNote( name="VERSION", xpos=0, ypos=380) # Node to DRIVE VESIONS of Nuke renders verser['label'].setValue('001') # Create WRITE nodes writeDPX = nuke.nodes.Write(name='DPX_E{0}_S{1}'.format( codeSequence, codeShot), file=dpxPathFull, file_type='dpx', colorspace='Cineon', first=101, last=endFrame, xpos=0, ypos=300) writeDPX.setInput(0, dot_A) writeDPX['beforeRender'].setValue( "if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))" ) # Create folder for writer output, if its not exists writeMOV = nuke.nodes.Write(name='MOV_E{0}_S{1}'.format( codeSequence, codeShot), file=movPathFull, file_type='dpx', colorspace='sRGB', first=101, last=endFrame, xpos=150, ypos=300) writeMOV.setInput(0, dot_B) writeMOV['beforeRender'].setValue( "if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))" ) # Create folder for writer output, if its not exists # Setup NK scene view = nuke.toNode('Viewer1') view['xpos'].setValue(-140) view['ypos'].setValue(30) nuke.knob('root.first_frame', str(frameStart)) nuke.knob('root.last_frame', endFrame) nuke.connectViewer(0, reader)
def submit(self): """ Does the work to submit the current Nuke script to Zync, given that the parameters on the dialog are set. """ selected_write_names = [] selected_write_nodes = [] for k in self.writeNodes: if k.value(): selected_write_names.append(k.label()) selected_write_nodes.append(nuke.toNode(k.label())) active_viewer = nuke.activeViewer() if active_viewer: viewer_input = active_viewer.activeInput() if viewer_input == None: viewed_node = None else: viewed_node = active_viewer.node().input(viewer_input) else: viewer_input, viewed_node = None, None new_script = self.zync_conn.generate_file_path(nuke.root().knob('name').getValue()) with WriteChanges(new_script): # The WriteChanges context manager allows us to save the # changes to the current session to the given script, leaving # the current session unchanged once the context manager is # exited. preflight_result = preflight() # # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only # run on versions other than those. # if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8: # # Remove all nodes that aren't connected to the Write # nodes being rendered. # select_deps(selected_write_nodes) for node in nuke.allNodes(): if node.isSelected(): node.setSelected(False) else: node.setSelected(True) nuke.nodeDelete() # # Freeze expressions on all nodes. Catch errors for Nuke # versions that don't support the recurseGroups option. # try: node_list = nuke.allNodes(recurseGroups=True) except: node_list = nuke.allNodes() for node in node_list: freeze_node(node) if not preflight_result: return # reconnect the viewer if viewer_input != None and viewed_node != None: nuke.connectViewer(viewer_input, viewed_node) # exec before render #nuke.callbacks.beforeRenders try: render_params = self.get_params() if render_params == None: return self.zync_conn.submit_job('nuke', new_script, ','.join(selected_write_names), render_params) except zync.ZyncPreflightError as e: raise Exception('Preflight Check Failed:\n\n%s' % (str(e),)) nuke.message('Job submitted to ZYNC.')
def submit(self, username=None, password=None): """ Does the work to submit the current Nuke script to ZYNC, given that the parameters on the dialog are set. TODO: factor the bulk of this out of the ZyncRenderPanel object """ if self.existing_project.value().strip( ) == '' and self.new_project.value().strip() == '': nuke.message( 'Project name cannot be blank. Please either choose an existing project from the dropdown or enter the desired project name in the New Project field.' ) return if self.skip_check.value(): skip_answer = nuke.ask( "You've asked ZYNC to skip the file check for this job. If you've added new files to your script this job WILL error. Your nuke script will still be uploaded. Are you sure you want to continue?" ) if not skip_answer: return if not username and not password: if hasattr(nuke, 'zync_creds') and nuke.zync_creds.get('user'): # get username and password user = nuke.zync_creds.get('user') pw = nuke.zync_creds.get('pw') else: # prompt username and password: msg = 'Enter your ZYNC Render Username/Password' pw_prompt = PasswordPrompt(title=msg, user_default=self.usernameDefault) try: user, pw = pw_prompt.get_password() except Exception: msg = 'You must have a ZYNC account to submit!' raise Exception(msg) else: nuke.zync_creds = dict(user=user, pw=pw) #selected_write = self.writeListNames[int(self.writeNode.getValue())] selected_write_names = [] selected_write_nodes = [] for k in self.writeNodes: if k.value(): selected_write_names.append(k.label()) selected_write_nodes.append(nuke.toNode(k.label())) active_viewer = nuke.activeViewer() if active_viewer: viewer_input = active_viewer.activeInput() if viewer_input == None: viewed_node = None else: viewed_node = active_viewer.node().input(viewer_input) else: viewer_input, viewed_node = None, None new_script = generate_script_path() with WriteChanges(new_script): # The WriteChanges context manager allows us to save the # changes to the current session to the given script, leaving # the current session unchanged once the context manager is # exited. preflight_result = preflight() # # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only # run on versions other than those. # if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8: # # Remove all nodes that aren't connected to the Write # nodes being rendered. # select_deps(selected_write_nodes) for node in nuke.allNodes(): if node.isSelected(): node.setSelected(False) else: node.setSelected(True) nuke.nodeDelete() # # Freeze expressions on all nodes. Catch errors for Nuke # versions that don't support the recurseGroups option. # try: node_list = nuke.allNodes(recurseGroups=True) except: node_list = nuke.allNodes() for node in node_list: freeze_node(node) if not preflight_result: return # reconnect the viewer if viewer_input != None and viewed_node != None: nuke.connectViewer(viewer_input, viewed_node) # exec before render #nuke.callbacks.beforeRenders try: ZYNC.login(username=user, password=pw) except zync.ZyncAuthenticationError as e: nuke.zync_creds['user'] = None nuke.zync_creds['pw'] = None raise Exception('ZYNC Login Failed:\n\n%s' % (str(e), )) try: render_params = self.get_params() if render_params == None: return ZYNC.submit_job('nuke', new_script, ','.join(selected_write_names), render_params) except zync.ZyncPreflightError as e: raise Exception('Preflight Check Failed:\n\n%s' % (str(e), )) nuke.message('Job submitted to ZYNC.')
def watermark_proc(in_node, w_type, w_text, w_file, w_path): in_node_name = in_node['name'].getValue() with nuke.Root(): watermark = nuke.createNode('dushyant_info_watermark_node') print watermark is_text = False if w_type == 'text': is_text = True elif w_type == 'image': is_text = False print is_text watermark.setName("%s_Watermark" % in_node_name) #Setting knobs # calling nodes from the Gizmo w_read = nuke.toNode('%s.watermark_image' % watermark.name()) w_write = nuke.toNode('%s.Write' % watermark.name()) print w_write # Processing write node paths read_file = in_node['file'].getValue() basename = os.path.basename(read_file) if w_path == 'None': write_file = '%s/watermark/%s' % (os.path.dirname(read_file), basename) else: write_file = os.path.join( w_path, os.path.splitext(basename)[0].split('.')[0], basename) w_write['file'].fromScript(write_file) createWriteDirs(w_write) # Setting Input/Output # Adding root I/O watermark.setInput(0, in_node) # Setting watermark defaults if w_type == 'text': watermark['w_text_knob'].setEnabled(True) watermark['wm_file'].setEnabled(False) watermark['opt_knob'].setValue(0) watermark['w_text_knob'].setValue( w_text) #This is the text knob string on group node watermark['wm_file'].setValue('') w_read['file'].setValue('') watermark['translate'].setValue( [nuke.Root().width() / 2, -nuke.Root().height() / 2]) watermark['rotate'].setValue(34) watermark['scale'].setValue(6.3) nuke.toNode('%s.Text1' % watermark.name())['box'].setT( nuke.Root().height()) nuke.toNode('%s.Text1' % watermark.name())['box'].setY(nuke.Root().height() - 101) elif w_type == 'image': watermark['wm_file'].setEnabled(True) watermark['w_text_knob'].setEnabled(False) watermark['opt_knob'].setValue(1) watermark['wm_file'].fromScript(w_file) w_read['file'].fromScript('[value parent.wm_file]') watermark['translate'].setValue([0, 0]) watermark['rotate'].setValue(0) watermark['scale'].setValue(1) watermark['tiles'].setValue(7.4) watermark['opacity'].setValue(0.185) nuke.connectViewer(0, watermark)
def submit(self, username=None, password=None): """ Does the work to submit the current Nuke script to ZYNC, given that the parameters on the dialog are set. TODO: factor the bulk of this out of the ZyncRenderPanel object """ if self.existing_project.value().strip() == '' and self.new_project.value().strip() == '': nuke.message('Project name cannot be blank. Please either choose an existing project from the dropdown or enter the desired project name in the New Project field.') return if self.skip_check.value(): skip_answer = nuke.ask( "You've asked ZYNC to skip the file check for this job. If you've added new files to your script this job WILL error. Your nuke script will still be uploaded. Are you sure you want to continue?" ) if not skip_answer: return if not username and not password: if hasattr(nuke, 'zync_creds') and nuke.zync_creds.get('user'): # get username and password user = nuke.zync_creds.get('user') pw = nuke.zync_creds.get('pw') else: # prompt username and password: msg = 'Enter your ZYNC Render Username/Password' pw_prompt = PasswordPrompt( title=msg, user_default=self.usernameDefault ) try: user, pw = pw_prompt.get_password() except Exception: msg = 'You must have a ZYNC account to submit!' raise Exception(msg) else: nuke.zync_creds = dict(user=user, pw=pw) #selected_write = self.writeListNames[int(self.writeNode.getValue())] selected_write_names = [] selected_write_nodes = [] for k in self.writeNodes: if k.value(): selected_write_names.append( k.label() ) selected_write_nodes.append( nuke.toNode( k.label() ) ) active_viewer = nuke.activeViewer() if active_viewer: viewer_input = active_viewer.activeInput() if viewer_input == None: viewed_node = None else: viewed_node = active_viewer.node().input(viewer_input) else: viewer_input, viewed_node = None, None new_script = generate_script_path() with WriteChanges(new_script): # The WriteChanges context manager allows us to save the # changes to the current session to the given script, leaving # the current session unchanged once the context manager is # exited. preflight_result = preflight() # # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only # run on versions other than those. # if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8: # # Remove all nodes that aren't connected to the Write # nodes being rendered. # select_deps(selected_write_nodes) for node in nuke.allNodes(): if node.isSelected(): node.setSelected(False) else: node.setSelected(True) nuke.nodeDelete() # # Freeze expressions on all nodes. Catch errors for Nuke # versions that don't support the recurseGroups option. # try: node_list = nuke.allNodes(recurseGroups=True) except: node_list = nuke.allNodes() for node in node_list: freeze_node(node) if not preflight_result: return # reconnect the viewer if viewer_input != None and viewed_node != None: nuke.connectViewer(viewer_input, viewed_node) # exec before render #nuke.callbacks.beforeRenders try: ZYNC.login( username=user, password=pw ) except zync.ZyncAuthenticationError as e: nuke.zync_creds['user'] = None nuke.zync_creds['pw'] = None raise Exception('ZYNC Login Failed:\n\n%s' % (str(e),)) try: render_params = self.get_params() if render_params == None: return ZYNC.submit_job('nuke', new_script, ','.join( selected_write_names ), render_params) except zync.ZyncPreflightError as e: raise Exception('Preflight Check Failed:\n\n%s' % (str(e),)) nuke.message('Job submitted to ZYNC.')
def submit(self): """Does the work to submit the current Nuke script to Zync, given that the parameters on the dialog are set.""" selected_write_names = [] selected_write_nodes = [] for k in self.writeNodes: if k.value(): selected_write_names.append(k.label()) selected_write_nodes.append(nuke.toNode(k.label())) active_viewer = nuke.activeViewer() if active_viewer: viewer_input = active_viewer.activeInput() if viewer_input is None: viewed_node = None else: viewed_node = active_viewer.node().input(viewer_input) else: viewer_input, viewed_node = None, None script_path = nuke.root().knob('name').getValue() new_script = self.maybe_correct_path_separators(script_path) write_node_to_user_path_map = dict() read_dependencies = [] with WriteChanges(new_script): # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only run on versions other than those. if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8: # Remove all nodes that aren't connected to the Write nodes being rendered. select_deps(selected_write_nodes) for node in nuke.allNodes(): if node.isSelected(): node.setSelected(False) else: node.setSelected(True) nuke.nodeDelete() # Freeze expressions on all nodes. Catch errors for Nuke versions that don't support the recurseGroups option. try: node_list = nuke.allNodes(recurseGroups=True) except: node_list = nuke.allNodes() for node in node_list: freeze_node(node) _collect_write_node_paths(selected_write_names, write_node_to_user_path_map) read_nodes = [read_node for read_node in node_list if read_node.Class() == 'Read'] _collect_read_node_paths(read_nodes, read_dependencies) # reconnect the viewer if viewer_input is not None and viewed_node is not None: nuke.connectViewer(viewer_input, viewed_node) # exec before render # nuke.callbacks.beforeRenders try: render_params = self.get_params() if render_params is None: return render_params['scene_info']['write_node_to_output_map'] = write_node_to_user_path_map render_params['scene_info']['files'] = read_dependencies self.zync_conn.submit_job('nuke', new_script, ','.join(selected_write_names), render_params) except zync.ZyncPreflightError as e: raise Exception('Preflight Check Failed:\n\n%s' % (str(e),)) nuke.message('Job submitted to ZYNC.')
def watermark_proc(in_node, w_type, w_text, w_file, w_path): in_node_name = in_node['name'].getValue() with nuke.Root(): watermark = nuke.createNode('dushyant_info_watermark_node') print watermark is_text = False if w_type == 'text': is_text = True elif w_type == 'image': is_text = False print is_text watermark.setName( "%s_Watermark" % in_node_name ) #Setting knobs # calling nodes from the Gizmo w_read = nuke.toNode( '%s.watermark_image' % watermark.name() ) w_write = nuke.toNode( '%s.Write' % watermark.name() ) print w_write # Processing write node paths read_file = in_node['file'].getValue() basename = os.path.basename(read_file) if w_path == 'None': write_file = '%s/watermark/%s' % ( os.path.dirname(read_file), basename ) else: write_file = os.path.join( w_path, os.path.splitext(basename)[0].split('.')[0], basename ) w_write['file'].fromScript(write_file) createWriteDirs(w_write) # Setting Input/Output # Adding root I/O watermark.setInput(0, in_node) # Setting watermark defaults if w_type == 'text': watermark['w_text_knob'].setEnabled(True) watermark['wm_file'].setEnabled(False) watermark['opt_knob'].setValue(0) watermark['w_text_knob'].setValue(w_text) #This is the text knob string on group node watermark['wm_file'].setValue('') w_read['file'].setValue('') watermark['translate'].setValue([nuke.Root().width()/2, -nuke.Root().height()/2]) watermark['rotate'].setValue(34) watermark['scale'].setValue(6.3) nuke.toNode('%s.Text1' % watermark.name())['box'].setT(nuke.Root().height()) nuke.toNode('%s.Text1' % watermark.name())['box'].setY(nuke.Root().height()-101) elif w_type == 'image': watermark['wm_file'].setEnabled(True) watermark['w_text_knob'].setEnabled(False) watermark['opt_knob'].setValue(1) watermark['wm_file'].fromScript(w_file) w_read['file'].fromScript('[value parent.wm_file]') watermark['translate'].setValue([0, 0]) watermark['rotate'].setValue(0) watermark['scale'].setValue(1) watermark['tiles'].setValue(7.4) watermark['opacity'].setValue(0.185) nuke.connectViewer( 0, watermark )
def addFrameNow(): AddFrame = nuke.nodes.addFrame(skipFrame=nuke.frame(), inputs=nuke.selectedNodes()) nuke.connectViewer(0, AddFrame) AddFrame.selectOnly()