def exportObj(self, filePy, objects, filePath, objPath): objPathList = [] filePy.write("# importing obj files...\n\n") for node in objects: for i in nuke.allNodes(): i['selected'].setValue(0) print "processing "+node.name()+" ..." node['selected'].setValue(1) writeObj = nuke.createNode('WriteGeo', inpanel=False) writeObj['name'].setValue(node.name()+"_export") writeObj['file'].setValue(objPath+node.name()+".obj") writeObj['file_type'].setValue('obj') # writeObj['views'].setValue('main') objPathList.append(objPath+node.name()+".obj") nuke.execute(writeObj, int(nuke.root()['first_frame'].getValue()), int(nuke.root()['first_frame'].getValue())) for i in nuke.allNodes(): i['selected'].setValue(0) writeObj['selected'].setValue(1) nukescripts.node_delete() for object in objPathList: filePy.write("cmds.file('"+object+"', i = True, type = 'OBJ', ra = True)\n") filePy.write("\n") filePy.write("# make group of all the *_Mesh nodes ...\n\n") filePy.write("cmds.select('*_Mesh')\n") filePy.write("cmds.group(name = 'geo_GRP')\n\n") filePy.write("# renaming the files without '_Mesh' ...\n\n") filePy.write("meshes = cmds.ls('*_Mesh')\n") filePy.write("for node in meshes:\n") filePy.write(" cmds.rename(node, node[-0:-5])\n\n")
def saveRef(): f = find_upstream_node('Read', nuke.selectedNode()) file = f['file'].getValue() path = os.path.dirname(file) filename = os.path.basename(file) filename = os.path.splitext(filename)[0] ### getting active node curViewer = nuke.activeViewer() curNode = curViewer.node() acticeVinput = curViewer.activeInput() curN = curNode.input(acticeVinput) ###create a reformat nuke.addFormat('1920 1080 tHD') re = nuke.createNode("Reformat") re.setName("tempReformat") re['format'].setValue('tHD') re['black_outside'].setValue(1) re.setInput(0, curN) ### creating temp write path = path + '/' + filename + '_' + 'ref.jpg' w = nuke.createNode("Write") w.setName("tempWrite") w.setInput(0, re) w['file'].setValue(path) w['file_type'].setValue('jpeg') ### setting current frame for render result = nuke.frame() if result == "": result = result ### execute write node nuke.execute(w, (int(result)), result) name = w.knob('file').value() nukescripts.node_delete(popupOnError=True) nuke.delete(re) if fileType == "": return
def run(job, shot): #thumbnail path, only one per shot - could alter this to one per version thumbpath = os.path.join(core.jobsRoot, job, 'vfx', 'nuke', shot, 'scripts', 'thumb.jpg') ### getting active node curViewer = nuke.activeViewer() curNode = curViewer.node() acticeVinput = curViewer.activeInput() curN = curNode.input(acticeVinput) #create the reformat r = nuke.createNode("Reformat") r.setName("tempReformat") r.setInput(0, curN) newFormat = nuke.addFormat('256 144 thumb') r['format'].setValue('thumb') ### creating temp write w = nuke.createNode("Write") w.setName("tempWrite") w.setInput(0, r) w['file'].setValue(thumbpath) ### reformat and write options w['_jpeg_sub_sampling'].setValue(2) w['_jpeg_quality'].setValue(1) w['channels'].setValue('rgba') ### setting current frame for render result = nuke.frame() if result == "": result = result ### execute write node nuke.execute(nuke.selectedNode(), (int(result)), result) name = w.knob('file').value() nukescripts.node_delete(popupOnError=True) name = r.knob('format').value() nukescripts.node_delete(popupOnError=True)
def conversionFormatUI(self): i = 1 p = nuke.Panel('conversionFormat') p.setWidth(250) p.addSingleLineInput('Old Path:', '') p.addSingleLineInput('New Path:', '') p.addSingleLineInput('options:', '') p.addButton('Cancel') p.addButton('OK') self.panleResult = p.show() option = p.value('options:') options = "" if option: options = int(option) oldPath = p.value('Old Path:') newPath = p.value('New Path:') nuke.selectAll() nukescripts.node_delete(popupOnError=True) if oldPath and newPath: self.newPaths = newPath.replace('\\', '/') self.oldPaths = oldPath.replace('\\', '/') self.importImage(oldPath, options, i)
def autocropLayers(self, first=None, last=None, inc=None, layer="rgba"): root = nuke.root() if first is None: first = int(root.knob("first_frame").value()) if last is None: last = int(root.knob("first_frame").value()) if inc is None: inc = 1 original_nodes = nuke.selectedNodes() all_nodes = nuke.allNodes() for i in all_nodes: i.knob("selected").setValue(False) for i in original_nodes: i.knob("selected").setValue(True) autocropper = nuke.createNode("CurveTool", '''operation 0 ROI {0 0 input.width input.height} Layer %s label "Processing Crop..." selected true''' % (str(layer), ), False) nuke.executeMultiple([autocropper,], ([first, last, inc],)) autocropper.knob("selected").setValue(True) cropnode = nuke.createNode("Crop", "label AutoCrop", False) cropbox = cropnode.knob("box"); autocropbox = autocropper.knob("autocropdata"); cropbox.copyAnimations(autocropbox.animations()) cropnode.knob("indicators").setValue(1) all_nodes = nuke.allNodes() for j in all_nodes: j.knob("selected").setValue(False) autocropper.knob("selected").setValue(True) nukescripts.node_delete() all_nodes = nuke.allNodes() for j in all_nodes: j.knob("selected").setValue(False) nuke.autoplace(cropnode) cropnode.knob("selected").setValue(True) cropnode.knob("reformat").setValue(True) nuke.autoplace(cropnode) return cropnode
if isinstance(menu,nuke.Menu): for item in menu.items(): if item.name() in ["Other", "All plugins"] or len(menu.name()) == 1 or len(item.name()) == 1: getItem(item) else: # The menu is actually a command. if menu.name() not in node_dic.values(): node_dic[menu] = menu.name() getItem(nuke.menu("Nodes")) path = os.path.join(os.path.dirname(__file__), "_default") for name in node_dic.values(): try: node = nuke.createNode(name) with open(path+r"\%s.txt" % name, "wb") as fh: fh.write("") with open(path+r"\%s.txt" % name, "a") as fh: for knob in node.knobs().values(): words = " ".join([knob.name(), knob.Class(), str(knob.defaultValue()) if hasattr(knob, "defaultValue") else "None"]) words += "\n" fh.write(words) nukescripts.node_delete(popupOnError=True) except Exception: print "Could not create documentation for %s" % name
def convertGizmosToGroups(self): ###Node Selections nodeSelection = nuke.allNodes() noGizmoSelection = [] gizmoSelection = [] for n in nodeSelection: if 'gizmo_file' in n.knobs(): gizmoSelection.append(n) else: noGizmoSelection.append(n) groupSelection = [] for n in gizmoSelection: bypassGroup = False ###Current Status Variables nodeName = n.knob('name').value() nodeXPosition = n['xpos'].value() nodeYPosition = n['ypos'].value() nodeHideInput = n.knob('hide_input').value() nodeCached = n.knob('cached').value() nodePostageStamp = n.knob('postage_stamp').value() nodeDisable = n.knob('disable').value() nodeDopeSheet = n.knob('dope_sheet').value() nodeDependencies = n.dependencies() nodeMaxInputs = n.maxInputs() inputsList = [] ###Current Node Isolate Selection for i in nodeSelection: i.knob('selected').setValue(False) n.knob('selected').setValue(True) nuke.tcl('copy_gizmo_to_group [selected_node]') ###Refresh selections groupSelection.append(nuke.selectedNode()) newGroup = nuke.selectedNode() ###Paste Attributes newGroup.knob('xpos').setValue(nodeXPosition) newGroup.knob('ypos').setValue(nodeYPosition) newGroup.knob('hide_input').setValue(nodeHideInput) newGroup.knob('cached').setValue(nodeCached) newGroup.knob('postage_stamp').setValue(nodePostageStamp) newGroup.knob('disable').setValue(nodeDisable) newGroup.knob('dope_sheet').setValue(nodeDopeSheet) ###Connect Inputs for f in range(0, nodeMaxInputs): inputsList.append(n.input(f)) for num, r in enumerate(inputsList): newGroup.setInput(num, None) for num, s in enumerate(inputsList): newGroup.setInput(num, s) n.knob('name').setValue('temp__'+nodeName+'__temp') newGroup.knob('name').setValue(nodeName) newGroup.knob('selected').setValue(False) ###Cleanup (remove gizmos, leave groups) for y in gizmoSelection: y.knob('selected').setValue(True) nukescripts.node_delete(popupOnError=False) for z in groupSelection: z.knob('selected').setValue(True) for w in noGizmoSelection: w.knob('selected').setValue(True)
def bake_gizmo(gizmo): ''' copy gizmo to group and replace it in the tree, so all inputs and outputs use the new group. returns the new group node ''' parent = get_parent(gizmo) gizmo_outputs = get_outputs(gizmo) gizmo_inputs = gizmo.inputs() print "INPUTS:", gizmo_inputs #[inputnodes.name() for inputnodes in gizmo_inputs] print "OUTPUTS:", gizmo_outputs #[output_nodes.name() for output_nodes in gizmo_outputs] # This old method can't detect failures #groupName = nuke.tcl( 'global no_gizmo; set no_gizmo 1; in %s {%s -New} ; return [value [stack 0].name]' % ( parent.fullName(), gizmo.Class() ) ) for n in get_all_nodes(nuke.root()): n.setSelected(False) try: nuke.tcl('copy_gizmo_to_group {0}'.format(gizmo.fullName())) #group = nuke.toNode( '.'.join( (parent.fullName(), groupName) ) ) ## We will use the selected node to get the created group group = nuke.selectedNode() if gizmo_outputs: #RECONNECT OUTPUTS IF THERE ARE ANY for node, pipes in gizmo_outputs.iteritems(): for i in pipes: node.setInput(i, group) #RECONNECT INPUTS for i in range(gizmo.inputs()): group.setInput(i, gizmo.input(i)) group.setSelected(False) except RuntimeError: # Occurs if the gizmo was sourced: "RuntimeError: This gizmo was created with a "load" or "source" command. Copy to group does not work for it." print "This gizmo was created with a 'load' or 'source' command. Manually re-creating it..." with parent: # gizmo.Class() fails because the gizmo class is defined as "Gizmo" - super hacky but we'll try to use the node's name gizmo_guess_class = re.split('[0-9]*$', gizmo.name())[0] tmp_gizmo = nuke.createNode(gizmo_guess_class, inpanel=False) nuke.tcl('copy_gizmo_to_group {0}'.format(tmp_gizmo.fullName())) # fix bug where the copy_gizmo_to_group puts node outside of the parent: cut node outside group, paste node inside group nuke.nodeCopy(nukescripts.cut_paste_file()) nukescripts.node_delete(popupOnError=True) with parent: nuke.nodePaste(nukescripts.cut_paste_file()) group = nuke.selectedNode() nuke.delete(tmp_gizmo) group.setSelected(False) group.hideControlPanel() if gizmo_outputs: #RECONNECT OUTPUTS IF THERE ARE ANY for node, pipes in gizmo_outputs.iteritems(): for i in pipes: node.setInput(i, group) #RECONNECT INPUTS for i in range(gizmo_inputs): group.setInput(i, gizmo.input(i)) group.setXYpos(gizmo.xpos(), gizmo.ypos()) # COPY VALUES group.readKnobs(gizmo.writeKnobs(nuke.TO_SCRIPT)) gizmoName = gizmo.name() nuke.delete(gizmo) group.setName(gizmoName) return group
getItem(item) else: # The menu is actually a command. if menu.name() not in node_dic.values(): node_dic[menu] = menu.name() getItem(nuke.menu("Nodes")) path = os.path.join(os.path.dirname(__file__), "_default") for name in node_dic.values(): try: node = nuke.createNode(name) with open(path + r"\%s.txt" % name, "wb") as fh: fh.write("") with open(path + r"\%s.txt" % name, "a") as fh: for knob in node.knobs().values(): words = " ".join([ knob.name(), knob.Class(), str(knob.defaultValue()) if hasattr(knob, "defaultValue") else "None" ]) words += "\n" fh.write(words) nukescripts.node_delete(popupOnError=True) except Exception: print "Could not create documentation for %s" % name
def saveImage(): user = getpass.getuser() defaultPath = "/mnt/user/share/" + user + "/" ### Getting Lut list from root LutList = [ n.split(" ")[0] for n in nuke.root()['luts'].toScript().split("\n") ] Luts = '\n'.join(LutList) ### creating panel and assign buttons ef = nuke.Panel("saveImage As...... by satheesh-r", 420) ef.addSingleLineInput("Name:", "") ef.addFilenameSearch("Save Image As:", defaultPath) ef.addButton("cancel") ef.addEnumerationPulldown('channels', "rgb rgba all") ef.addEnumerationPulldown('Color Space', "sRGB " + Luts) ef.addEnumerationPulldown('Exr data type', "16bit-half 32bit-float") ef.addButton("ok") window = ef.show() ### getting values from panel exrtype = ef.value('Exr data type') channel = ef.value('channels') path = ef.value("Save Image As:") + ef.value("Name:") colorSpace = ef.value('Color Space') if colorSpace == "sRGB": path = path + ".jpg" fileType = path.split('.')[-1] ### User cancel the oparation if window == 0: return ### if file format not found fileFormat = path.split('/')[-1] findDot = ('.') for dot in findDot: if dot in fileFormat: if dot == '.': ### getting path from user input if path == "": nuke.message('no file path selected ') if path == "": return ### getting active node curViewer = nuke.activeViewer() curNode = curViewer.node() acticeVinput = curViewer.activeInput() curN = curNode.input(acticeVinput) ### setting current frame for render curFrame = nuke.frame() if curFrame == "": curFrame = curFrame ### creating temp write w = nuke.createNode("Write") w.setName("tempWrite") w.setInput(0, curN) path = path.replace(".", str(curFrame) + ".") w['file'].setValue(path) w['colorspace'].setValue(colorSpace) w['channels'].setValue(channel) ### if file type is jpg if fileType == 'jpg': w['_jpeg_sub_sampling'].setValue(2) w['_jpeg_quality'].setValue(1) w['raw'].setValue(0) w['colorspace'].setValue("sRGB") ### if file type is exr if fileType == 'exr': w['datatype'].setValue(exrtype) w['compression'].setValue(2) w['metadata'].setValue(0) ### creating the text node for the frame number ### execute write node nuke.execute(nuke.selectedNode(), (int(curFrame)), curFrame) name = w.knob('file').value() nukescripts.node_delete(popupOnError=True) ### create Read node r = nuke.createNode("Read") r['file'].setValue(name) curFrame = nuke.frame() r['first'].setValue(int(curFrame)) r['last'].setValue(int(curFrame)) r["reload"].execute() r['raw'].setValue(0) r['colorspace'].setValue("sRGB") else: nuke.message('forget to choose file format') return s_text = name qclip = QtGui.QApplication.clipboard() qclip.clear() qclip.setText(s_text)
def importImage(self, oldPath, options, i): j = i myOldPath = oldPath all = pyseq.getSequences(myOldPath) #第几个文件夹中导出Read节点 if options != 0: for dirName in all: myOldPath = dirName.path() if os.path.isdir(myOldPath) and (options - 1) > self.list: self.list = int(self.list + 1) self.importImage(myOldPath, options, j) elif (not os.path.isdir(myOldPath)) and (options - 1) == self.list: Flag = True Flags = True myDir = myOldPath.split("\\") myDirs = '/'.join(myDir[0:-1]) if dirName.length() == 1: the_head = dirName.head() if the_head == "Thumbs.db": continue #单帧 else: if the_head.find('.exr') >= 0 or the_head.find( '.jpg') >= 0 or the_head.find( '.tif') >= 0 or the_head.find( '.iff') >= 0 or the_head.find( '.tga') >= 0 or the_head.find( '.png') >= 0: if self.number > 0 and self.number % 60 == 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) nuke.selectAll() nukescripts.node_delete( popupOnError=True) else: fileName = int(self.number / 60) nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) nuke.selectAll() nukescripts.node_delete( popupOnError=True) self.number = self.number + 1 firstFrameName = dirName[0]._get_filename() #创建节点 nodeRead = nuke.nodes.Read() nodeRead['postage_stamp'].setValue(False) #素材路径 setData = os.path.join(myDirs, firstFrameName) nodeRead['file'].setValue( '%s' % setData.replace('\\', '/')) nodeRead['origfirst'].setValue(1) nodeRead['origlast'].setValue(1) nodeRead['first'].setValue(1) nodeRead['last'].setValue(1) nodeRead['on_error'].setValue('checkerboard') formatW = nodeRead.width() formatH = nodeRead.height() ReadOFormat = nodeRead['format'].value() if ReadOFormat.width( ) != formatW or ReadOFormat.height( ) != formatH: allFormat = nuke.formats() if self.myOrangeDict: for myOrange in self.myOrangeDict.keys( ): SazeW = self.myOrangeDict[ myOrange].split(" ")[0] SazeH = self.myOrangeDict[ myOrange].split(" ")[1] if SazeW == formatW and SazeH == formatH: nodeRead['format'].setValue( myOrange) Flag = False break if Flag: for eachFormat in allFormat: if eachFormat.width( ) == formatW and eachFormat.height( ) == formatH: myFormat = eachFormat.name() if myFormat != None: nodeRead[ 'format'].setValue( myFormat) Flag = False break if Flag: while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str( formatW) + " " + str(formatH) self.myOrangeDict.update( {mySize: widthHeight}) square = widthHeight + " " + mySize nuke.addFormat(square) nodeRead['format'].setValue(mySize) nodeReformat = nuke.nodes.Reformat( ) nodeWrite = nuke.nodes.Write() nodeReformat.setInput(0, nodeRead) nodeWrite.setInput(0, nodeReformat) if the_tail == '.exr': nodeWrite['file_type'].setValue("exr") nodeWrite['datatype'].setValue(0) nodeWrite['channels'].setValue("all") nodeWrite['compression'].setValue(2) else: filetype = the_tail.split(".")[1] nodeWrite['channels'].setValue("all") if filetype == "iff": filetype = "tiff" nodeWrite['file_type'].setValue( filetype) nodeWrite['compression'].setValue(2) else: nodeWrite['file_type'].setValue( filetype) oldFilePath = '/'.join( self.oldPaths.split("/")[0:-1]) WriteFile = setData.replace( oldFilePath, self.newPaths) if the_tail == ".iff": WriteFile.replace("iff", "tiff") nodeWrite['file'].setValue(WriteFile) myNewPath = os.path.dirname(WriteFile) if not os.path.isdir(myNewPath): os.makedirs(myNewPath) ReformatFormat = nodeReformat['format'].value() if ReformatFormat.width( ) != 500 or ReformatFormat.height() != 500: allFormat = nuke.formats() for eachFormat in allFormat: if eachFormat.width( ) == 500 and eachFormat.height( ) == 500: myFormat = eachFormat.name() if myFormat != None: nodeReformat[ 'format'].setValue( myFormat) Flag = False break if Flag: while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str(formatW) + " " + str( formatH) square = widthHeight + " " + mySize nuke.addFormat(square) nodeReformat['format'].setValue(mySize) if self.number > 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) fileName = int(self.number / 60) + 1 nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) #序列帧 else: the_tail = dirName.tail() if the_tail: if the_tail == '.exr' or the_tail == '.jpg' or the_tail == '.tif' or the_tail == '.iff' or the_tail == '.tiff' or the_tail == '.tga' or the_tail == '.png': if self.number > 0 and self.number % 60 == 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) nuke.selectAll() nukescripts.node_delete( popupOnError=True) else: fileName = int(self.number / 60) nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) nuke.selectAll() nukescripts.node_delete( popupOnError=True) self.number = self.number + 1 firstFrameName = dirName[0]._get_filename() lastFrameName = dirName[-1]._get_filename() #the_firstframes=int(firstFrameName.split(".")[-2]) #the_lastframes = int(lastFrameName.split(".")[-2]) if len(firstFrameName.split(".")) == 2: the_firstframes = int( firstFrameName.split(".")[-2].replace( myDir[-2], "")) the_lastframes = int( lastFrameName.split(".")[-2].replace( myDir[-2], "")) else: #获取第一帧的文件名 the_firstframes = int( firstFrameName.split(".")[-2]) the_lastframes = int( lastFrameName.split(".")[-2]) nodeRead = nuke.nodes.Read() nodeRead['postage_stamp'].setValue(False) setData = os.path.join(myDirs, firstFrameName) nodeRead['file'].setValue( '%s' % setData.replace('\\', '/')) formatW = nodeRead.width() formatH = nodeRead.height() widthHeight = str(formatW) + " " + str(formatH) ReadOFormat = nodeRead['format'].value() if ReadOFormat.width( ) != formatW or ReadOFormat.height( ) != formatH: if self.myOrangeDict: for myOrange in self.myOrangeDict.keys( ): SazeW = self.myOrangeDict[ myOrange].split(" ")[0] SazeH = self.myOrangeDict[ myOrange].split(" ")[1] if SazeW == formatW and SazeH == formatH: nodeRead['format'].setValue( myOrange) Flag = False break if Flag: allFormat = nuke.formats() for eachFormat in allFormat: if eachFormat.width( ) == formatW and eachFormat.height( ) == formatH: myFormat = eachFormat.name() if myFormat != None: nodeRead[ 'format'].setValue( myFormat) Flag = False break if Flag: while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str( formatW) + " " + str(formatH) self.myOrangeDict.update( {mySize: widthHeight}) square = widthHeight + " " + mySize nuke.addFormat(square) nodeRead['format'].setValue(mySize) #查找位数 if len(firstFrameName.split(".")) == 2: num = firstFrameName.split( ".")[-2].replace(myDir[-2], "") numPlaces = len("%s" % num) the_image = dirName.tail() #number=lastFrameName.split(".") #name=".".join(number[0:-2]) setData = myDirs + "/" + myDir[ -2] + "%" + "0%dd" % numPlaces + the_image else: num = firstFrameName.split(".")[-2] numPlaces = len("%s" % num) the_image = dirName.tail() number = lastFrameName.split(".") name = ".".join(number[0:-2]) setData = myDirs + "/" + name + ".%" + "0%dd" % numPlaces + the_image nodeRead['file'].setValue(setData) nodeRead['origfirst'].setValue(the_firstframes) nodeRead['origlast'].setValue(the_lastframes) nodeRead['first'].setValue(the_firstframes) nodeRead['last'].setValue(the_lastframes) nodeRead['on_error'].setValue('checkerboard') nodeReformat = nuke.nodes.Reformat() nodeWrite = nuke.nodes.Write() nodeReformat.setInput(0, nodeRead) nodeWrite.setInput(0, nodeReformat) if the_tail == '.exr': nodeWrite['file_type'].setValue("exr") nodeWrite['channels'].setValue("all") nodeWrite['compression'].setValue(2) nodeWrite['datatype'].setValue(0) else: filetype = the_tail.split(".")[1] nodeWrite['channels'].setValue("all") if filetype == "iff": filetype = "tiff" nodeWrite['file_type'].setValue( filetype) nodeWrite['compression'].setValue(2) else: nodeWrite['file_type'].setValue( filetype) oldFilePath = '/'.join( self.oldPaths.split("/")[0:-1]) WriteFile = setData.replace( oldFilePath, self.newPaths) if the_tail == ".iff": WriteFile.replace(".iff", "tiff") nodeWrite['file'].setValue(WriteFile) myNewPath = os.path.dirname(WriteFile) if not os.path.isdir(myNewPath): os.makedirs(myNewPath) ReformatFormat = nodeReformat['format'].value() if ReformatFormat.width( ) != 500 or ReformatFormat.height() != 500: allFormat = nuke.formats() for eachFormat in allFormat: if eachFormat.width( ) == 500 and eachFormat.height( ) == 500: myFormat = eachFormat.name() if myFormat != None: nodeReformat[ 'format'].setValue( myFormat) Flag = False break if Flag: while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str(formatW) + " " + str( formatH) square = widthHeight + " " + mySize nuke.addFormat(square) nodeReformat['format'].setValue(mySize) if self.number > 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) fileName = int(self.number / 60) + 1 nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) else: myDirs = '/'.join(myDir[0:-1]) mySequenceDir = myDir[-1].split('-') print mySequenceDir num_1 = mySequenceDir[0].split("_") num_2 = mySequenceDir[1].split("_") for i in range(int(num_2[0])): g = str(i + 1) myOldPath = myDirs + "/" + num_1[ 0] + "_" + g + "_" + num_2[-1] if i != 0: self.list = self.list + 1 self.importImage(myOldPath, options, j) else: #print myOldPath self.list = 1 #导入所有 elif options == 0: for dirName in all: myOldPath = dirName.path() if os.path.isdir(myOldPath): self.importImage(myOldPath, options, j) else: Flag = True Flags = True myDir = myOldPath.split('\\') myDirs = "/".join(myDir[0:-1]) if dirName.length() == 1: the_head = dirName.head() if the_head == "Thumbs.db": continue #单帧 else: if the_head.find('.exr') >= 0 or the_head.find( '.jpg') >= 0 or the_head.find( '.tif') >= 0 or the_head.find( '.iff') >= 0 or the_head.find( '.tga') >= 0 or the_head.find( '.png') >= 0: if self.number > 0 and self.number % 60 == 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) nuke.selectAll() nukescripts.node_delete( popupOnError=True) else: fileName = int(self.number / 60) nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) nuke.selectAll() nukescripts.node_delete( popupOnError=True) self.number = self.number + 1 firstFrameName = dirName[0]._get_filename() #创建Read节点 nodeRead = nuke.nodes.Read() nodeRead['postage_stamp'].setValue(False) #素材路径 setData = os.path.join(myDirs, firstFrameName) nodeRead['file'].setValue( '%s' % setData.replace("\\", "/")) nodeRead['origfirst'].setValue(1) nodeRead['origlast'].setValue(1) nodeRead['first'].setValue(1) nodeRead['last'].setValue(1) nodeRead["on_error"].setValue('checkerboard') formatW = nodeRead.width() formatH = nodeRead.height() ReadOFormat = nodeRead['format'].value() if ReadOFormat.width( ) != formatW or ReadOFormat.height( ) != formatH: allFormat = nuke.format() if self.myOrangeDict: for myOrange in self.myOrangeDict.keys( ): SazeW = self.myOrangeDict[ 'myOrange'].split(" ")[0] SazeH = self.myOrangeDict[ 'myOrange'].split(" ")[1] if SazeW == formatW or SazeH == formatH: nodeRead['format'].setValue( myOrange) Flag = False break if Flag: for eachFormat in allFormat: if eachFormat.width == formatW and eachFormat.height == formatH: myFormat = eachFormat.name() if myFormat != None: nodeRead[ 'format'].setValue( myFormat) Flag = False break if Flag: #键的名字 while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str( formatW) + " " + str(formatH) self.myOrangeDict.update( {mySize: widthHeight}) square = widthHeight + " " + mySize nuke.addFormat(square) nodeRead['format'].setValue(mySize) nodeReformat = nuke.nodes.Reformat() nodeReformat.setInput(0, nodeRead) nodeWrite = nuke.nodes.Write() nodeWrite.setInput(0, nodeReformat) if the_tail == '.exr': nodeWrite['file_type'].setValue("exr") nodeWrite['channels'].setValue("all") nodeWrite['compression'].setValue(2) nodeWrite['datatype'].setValue(0) else: filetype = the_tail.split(".")[1] nodeWrite['channels'].setValue("all") if filetype == "iff": filetype = "tiff" nodeWrite['file_type'].setValue( filetype) nodeWrite['compression'].setValue(2) else: nodeWrite['file_type'].setValue( filetype) oldFilePath = '/'.join( self.oldPaths.split("/")[0:-1]) WriteFile = setData.replace( oldFilePath, self.newPaths) if the_tail == '.iff': WriteFile = WriteFile.replace( ".iff", ".tiff") nodeWrite['file'].setValue(WriteFile) myNewPath = os.path.dirname(WriteFile) if not os.path.isdir(myNewPath): os.makedirs(myNewPath) ReformatFormat = nodeReformat['format'].value() if ReformatFormat.width( ) != 500 or ReformatFormat.height() != 500: allFormat = nuke.formats() for eachFormat in allFormat: if eachFormat.width( ) == 500 and eachFormat.height( ) == 500: myFormat = eachFormat.name() if myFormat != None: nodeReformat[ 'format'].setValue( myFormat) Flags = False break if Flags: while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str(formatW) + " " + str( formatH) square = widthHeight + " " + mySize nuke.addFormat(square) nodeReformat['format'].setValue(mySize) if self.number > 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) fileName = int(self.number / 60) + 1 nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) #序列帧 else: the_tail = dirName.tail() if the_tail: if the_tail == '.exr' or the_tail == '.jpg' or the_tail == '.tif' or the_tail == '.iff' or the_tail == '.tiff' or the_tail == '.tga' or the_tail == '.png': if self.number > 0 and self.number % 60 == 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) nuke.selectAll() nukescripts.node_delete( popupOnError=True) else: fileName = int(self.number / 60) nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) nuke.selectAll() nukescripts.node_delete( popupOnError=True) self.number = self.number + 1 firstFrameName = dirName[0]._get_filename() lastFrameName = dirName[-1]._get_filename() if len(firstFrameName.split(".")) == 2: the_firstframes = int( firstFrameName.split(".")[-2].replace( myDir[-2], "")) the_lastframes = int( lastFrameName.split(".")[-2].replace( myDir[-2], "")) else: #获取第一帧的文件名 the_firstframes = int( firstFrameName.split(".")[-2]) the_lastframes = int( lastFrameName.split(".")[-2]) nodeRead = nuke.nodes.Read() nodeRead['postage_stamp'].setValue(False) setData = os.path.join(myDirs, firstFrameName) nodeRead['file'].setValue( "%s" % setData.replace("\\", '/')) #节点的大小 formatW = nodeRead.width() formatH = nodeRead.height() widthHeight = str(formatW) + " " + str(formatH) ReadOFormat = nodeRead['format'].value() if ReadOFormat.width( ) != formatW or ReadOFormat.height( ) != formatH: if self.myOrangeDict: for myOrange in self.myOrangeDict.keys( ): SazeW = self.myOrangeDict[ myOrange].split(" ")[0] SazeH = self.myOrangeDict[ myOrange].split(" ")[1] if SazeW == formatW and SazeH == formatH: nodeRead['format'].setValue( myOrange) Flag = False break if Flag: allFormat = nuke.formats() for eachFormat in allFormat: if eachFormat.width( ) == formatW and eachFormat.height( ) == formatH: myFormat = eachFormat.name() if myFormat != None: nodeRead[ 'format'].setValue( myFormat) Flag = False break if Flag: while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str( formatW) + " " + str(formatH) self.myOrangeDict.update( {mySize: widthHeight}) square = widthHeight + " " + mySize nuke.addFormat(square) nodeRead['format'].setValue(mySize) #查找位数 if len(firstFrameName.split(".")) == 2: num = firstFrameName.split( ".")[-2].replace(myDir[-2], "") numPlaces = len("%s" % num) the_image = dirName.tail() #number=lastFrameName.split(".") #name=".".join(number[0:-2]) setData = myDirs + "/" + myDir[ -2] + "%" + "0%dd" % numPlaces + the_image else: num = firstFrameName.split(".")[-2] numPlaces = len("%s" % num) the_image = dirName.tail() number = lastFrameName.split(".") name = ".".join(number[0:-2]) setData = myDirs + "/" + name + ".%" + "0%dd" % numPlaces + the_image nodeRead['file'].setValue(setData) nodeRead['origfirst'].setValue(the_firstframes) nodeRead['origlast'].setValue(the_lastframes) nodeRead['first'].setValue(the_firstframes) nodeRead['last'].setValue(the_lastframes) nodeRead['on_error'].setValue('checkerboard') nodeReformat = nuke.nodes.Reformat() nodeWrite = nuke.nodes.Write() nodeReformat.setInput(0, nodeRead) nodeWrite.setInput(0, nodeReformat) if the_tail == '.exr': nodeWrite['file_type'].setValue("exr") nodeWrite['datatype'].setValue(0) nodeWrite['channels'].setValue("all") nodeWrite['compression'].setValue(2) else: filetype = the_tail.split(".")[1] nodeWrite['channels'].setValue("all") if filetype == "iff": filetype = "tiff" nodeWrite['file_type'].setValue( filetype) nodeWrite['compression'].setValue(2) else: nodeWrite['file_type'].setValue( filetype) oldFilePath = '/'.join( self.oldPaths.split("/")[0:-1]) WriteFile = setData.replace( oldFilePath, self.newPaths) if the_tail == '.iff': WriteFile = WriteFile.replace( ".iff", ".tiff") nodeWrite['file'].setValue(WriteFile) myNewPath = os.path.dirname(WriteFile) if not os.path.isdir(myNewPath): os.makedirs(myNewPath) ReformatFormat = nodeReformat['format'].value() if ReformatFormat.width( ) != 500 or ReformatFormat.height() != 500: allFormat = nuke.formats() for eachFormat in allFormat: if eachFormat.width( ) == 500 and eachFormat.height( ) == 500: myFormat = eachFormat.name() if myFormat != None: nodeReformat[ 'format'].setValue( myFormat) Flags = False break if Flags: while True: mySize = ('my_Size%s' % j) if mySize not in [ eachFormat.name() for eachFormat in allFormat ]: break else: j += 1 widthHeight = str(500) + " " + str(500) square = widthHeight + " " + mySize nuke.addFormat(square) nodeReformat['format'].setValue(mySize) if self.number > 0: if not os.path.isdir("D:/nukeFile"): os.makedirs("D:/nukeFile") nuke.scriptSave("D:/nukeFile/v%d.nk" % 1) fileName = int(self.number / 60) + 1 nuke.scriptSave("D:/nukeFile/v%d.nk" % fileName) else: myDirs = '/'.join(myDir[0:-1]) mySequenceDir = myDir[-1].split('-') num_1 = mySequenceDir[0].split("_") num_2 = mySequenceDir[1].split("_") for i in range(int(num_2[0])): g = str(i + 1) myOldPath = myDirs + "/" + num_1[ 0] + "_" + g + "_" + num_2[-1] self.importImage(myOldPath, options, j) else: for dirtList in dirName: myOldPath = dirtList.path if os.path.isdir(myOldPath): self.importImage(myOldPath, options, j)
def main(): p = nuke.Panel('Node') p.addEnumerationPulldown('Node :', 'jumu_viewer_cg jumu_viewer_shipai') s = p.show() pv = p.value('Node :') if s == 1: a = nuke.selectedNodes() c = {} b = [] x = -1 for i in a: i.setSelected(False) for i in a: dictname = i.name() basename = os.path.basename(i['file'].value()) file = basename[:-4] if basename == 'Thumbs.db': i.setSelected(True) nukescripts.node_delete(popupOnError=True) else: c[file] = dictname b.append(file) b.sort() for v in b: t = v[:-5] if '1L' in v: n = '1L' elif '2L' in v: n = '2L' elif '3L' in v: n = '3L' if '1L' in v or '2L' in v or '3L' in v: v2 = v.replace(n, '2L') v3 = v.replace(n, '3L') v4 = v.replace(n, '1R') v5 = v.replace(n, '2R') v6 = v.replace(n, '3R') if v4 in b: x += 1 node1 = nuke.toNode('%s' % c[v]) node1.setXYpos(100, 100 + x * 400) if v2 in b: node2 = nuke.toNode('%s' % c[v2]) node2.setXYpos(200, 100 + x * 400) if v3 in b: node3 = nuke.toNode('%s' % c[v3]) node3.setXYpos(300, 100 + x * 400) if v4 in b: node4 = nuke.toNode('%s' % c[v4]) node4.setXYpos(400, 100 + x * 400) if v5 in b: node5 = nuke.toNode('%s' % c[v5]) node5.setXYpos(500, 100 + x * 400) if v6 in b: node6 = nuke.toNode('%s' % c[v6]) node6.setXYpos(600, 100 + x * 400) nodel = nuke.createNode("%s" % pv, inpanel=False) nodel.setXYpos(200, 250 + x * 400) nodel.setSelected(False) noder = nuke.createNode("%s" % pv, inpanel=False) noder.setXYpos(500, 250 + x * 400) nodel.setSelected(False) nodejv = nuke.createNode("JoinViews", inpanel=False) nodejv.setXYpos(350, 300 + x * 400) nodel.setSelected(False) backnode = nuke.createNode("BackdropNode", inpanel=False) backnode.setXYpos(900, 20 + x * 400) nodel.setSelected(False) nodel.setInput(2, node1) if v2 in b: nodel.setInput(1, node2) b.remove(v2) if v3 in b: nodel.setInput(0, node3) b.remove(v3) if v4 in b: noder.setInput(2, node4) b.remove(v4) if v5 in b: noder.setInput(1, node5) b.remove(v5) if v6 in b: noder.setInput(0, node6) b.remove(v6) nodejv.setInput(0, nodel) nodejv.setInput(1, noder) backnode['bdwidth'].setValue(600) backnode['bdheight'].setValue(310) backnode.setXYpos(90, 20 + x * 400) backnode['label'].setValue(t) backnode['note_font'].setValue("Helvetica Bold") backnode['note_font_size'].setValue(30)
def bakeIt(node, filePath, fileSize, fileType, outcolorspace, framerange, connectToObj, alpha, antialiasing, samples, shutter): if fileSize == '1K': formatN = ("bakeUV_1K") form = ("1024 1024 1 %s" % (formatN)) nuke.addFormat(form) formatDict = {} for item in nuke.formats(): formatDict[item.name()]=item nuke.Root()['format'].setValue(formatDict[formatN]) if fileSize == '2K': formatN = ("bakeUV_2K") form = ("2048 2048 1 %s" % (formatN)) nuke.addFormat(form) formatDict = {} for item in nuke.formats(): formatDict[item.name()]=item nuke.Root()['format'].setValue(formatDict[formatN]) if fileSize == '4K': formatN = ("bakeUV_4K") form = ("4096 4096 1 %s" % (formatN)) nuke.addFormat(form) formatDict = {} for item in nuke.formats(): formatDict[item.name()]=item nuke.Root()['format'].setValue(formatDict[formatN]) if fileSize == '8K': formatN = ("bakeUV_8K") form = ("8192 8192 1 %s" % (formatN)) nuke.addFormat(form) formatDict = {} for item in nuke.formats(): formatDict[item.name()]=item nuke.Root()['format'].setValue(formatDict[formatN]) selectReplace(node) scanlineR = nuke.createNode('ScanlineRender', inpanel = False) scanlineR['name'].setValue("Scanline_"+node.name()+"_bake") scanlineR['projection_mode'].setValue('uv') scanlineR['antialiasing'].setValue(antialiasing) scanlineR['samples'].setValue(samples) scanlineR['shutter'].setValue(shutter) deselectAll() reformatBake = nuke.createNode('Reformat', inpanel = False) reformatBake['name'].setValue("reformat_"+node.name()+"_bake") reformatBake['format'].setValue("bakeUV_"+fileSize) deselectAll() scanlineR.setInput(0, reformatBake) selectReplace(scanlineR) mpcCol = nuke.createNode('MPC_ColIO_!MPC_COLIO_VERSION!', inpanel = False) mpcCol['inspace'].setValue('Linear') mpcCol['output_space'].setValue(outcolorspace) writeNode = nuke.createNode('Write', inpanel = False) try: writeNode['views'].setValue('left') except: pass writeNode['file_type'].setValue(fileType) writeNode['name'].setValue("write_"+node.name()+"_bake") writeNode['raw'].setValue(True) try: startF = int(framerange.split("-")[0]) endF = int(framerange.split("-")[1]) if startF == endF: writeNode['file'].setValue(filePath+node.name()+"_COL."+fileType) else: writeNode['file'].setValue(filePath+node.name()+"_COL.%04d."+fileType) except: startF = int(framerange) endF = int(framerange) writeNode['file'].setValue(filePath+node.name()+"_COL."+fileType) if alpha == 1: writeNode['channels'].setValue('rgba') nuke.execute(writeNode, startF, endF) deselectAll() selectAdd(scanlineR) selectAdd(reformatBake) selectAdd(mpcCol) selectAdd(writeNode) nukescripts.node_delete() deselectAll() deselectAll() readUV = nuke.createNode('Read', inpanel = False) readUV['name'].setValue("Read_"+node.name()+"_baked") readUV['file'].setValue(filePath+node.name()+"_COL."+fileType) readUV['raw'].setValue(True) lastNode = nuke.createNode('MPC_ColIO_'+MPC_colio, inpanel = False) lastNode['inspace'].setValue('Linear') lastNode['output_space'].setValue(outcolorspace) if alpha: lastNode = nuke.createNode('Premult', inpanel = False) if connectToObj: node.setInput(0, lastNode)
def makeProxy(node, filePath, filePathBool, fileType, colorspace, scaleFactor, createRead, alpha, anim, overwrite, convertion, texconvert): """ batch converts the node """ nodesToDelete = [] nukeCommands.deselectAll() nukeCommands.selectReplace(node) file = node['file'].value().split('.')[-2] if file in ['####', '%04d']: file = node['file'].value().split('.')[-3] filename = os.path.basename(file) # create reformat for scale if not scaleFactor == 1: reformat = nuke.createNode('Reformat', inpanel = False) reformat['type'].setValue('scale') reformat['scale'].setValue(scaleFactor) nodesToDelete.append(reformat) # create convertion node if convertion: node['raw'].setValue(True) convertionNode = nuke.nodePaste(FCONVERTIONPATH+"/sRGB_to_Linear.nk") convertionNode['in_colorspace'].setValue('cineon') convertionNode['out_colorspace'].setValue('linear') nodesToDelete.append(convertionNode) # create write for outputfile write = nuke.createNode('Write', inpanel = False) nodesToDelete.append(write) # check the tex convertion on the write node if exists if texconvert: try: write['texConvertCheckbox'].setValue(True) except: print 'tex convertion not found...' if not filePathBool: if anim: readFile = filePath+filename+'.####.'+fileType else: readFile = filePath+filename+'.'+fileType if os.path.exists(readFile) and not overwrite: panel = nuke.Panel('warning, file name already exists !') panel.addSingleLineInput('please type new file name:', os.path.basename(file)) val = panel.show() if val == 1: readFile = str(filePath+panel.value('please type new file name:')+'.'+fileType) #else: # readFile = filePath+filename+'_copy.'+fileType write['file'].setValue(readFile) else: if anim: readFile = file+'.####.'+fileType else: readFile =file+'.'+fileType if os.path.exists(readFile): panel = nuke.Panel('warning, file name already exists !') panel.addSingleLineInput('please type new file name:', os.path.basename(file)) val = panel.show() if val == 1: readFile = str(os.path.dirname(file)+'/'+panel.value('please type new file name:')+'.'+fileType) else: readFile = filePath+filename+'_copy.'+fileType write['file'].setValue(readFile) write['file_type'].setValue(fileType) if fileType == 'jpg': write['_jpeg_quality'].setValue(1) if colorspace == 'raw': write['raw'].setValue(True) else: write['colorspace'].setValue(colorspace) try: write['views'].setValue('main') except: write['views'].setValue('left') if alpha == 1: write['channels'].setValue('rgba') if anim == 1: framerange = frameRange() try: first, last = int(framerange.split(',')[0]), int(framerange.split(',')[1]) except: first, last = int(framerange.split('-')[0]), int(framerange.split('-')[1]) nuke.execute(write, first, last) else: nuke.execute(write, 1,1) if createRead == 1: nukeCommands.deselectAll() nuke.createNode('Read', inpanel = False).setName(node.name()+'_convert') read = nuke.selectedNode() read['file'].setValue(readFile) if colorspace == 'raw': read['raw'].setValue(True) else: read['colorspace'].setValue(colorspace) if anim: read['first'].setValue(first) read['last'].setValue(last) # delete tmp nodes nukeCommands.deselectAll() for node in nodesToDelete: nukeCommands.selectAdd(node) nukescripts.node_delete() nukeCommands.deselectAll()
def knobChanged(self, knob): print knob.name() if knob.name() == "SET": # print "OK pressed" sticky = nuke.createNode("StickyNote") sticky.knob("label").setValue( self.label.value() ) sticky.knob("note_font_size").setValue(25) sticky.setXpos(233) sticky.setYpos(-1326) if self.label.setValue == "": sticky = nuke.createNode("StickyNote") sticky.knob("label").setValue( 'Changes/ToDo-Liste' ) nuke.root()['project_directory'].setValue(self.proj.value()) nuke.root()['name'].setValue(self.proj.value()+ self.name.value()) nuke.root()['fps'].setValue(self.realFPS.value()*1.0) nuke.root()['format'].setValue(self.format.value()) #ALL Backdrops_Settings if knob.name() == 'BDROP1': bdrop = nuke.createNode('BackdropNode', inpanel = False) bdrop.knob("name").setValue("INPUT") bdrop.knob("label").setValue('INPUT') bdrop.knob("xpos").setValue(-101) bdrop.knob("ypos").setValue(-1324) bdrop.knob("bdwidth").setValue(300) bdrop.knob("bdheight").setValue(220) bdrop.knob("note_font_size").setValue(50) bdrop.knob("tile_color").setValue(0x515151ff) bdrop.knob("note_font").setValue("Verdana Bold") bdropex = nuke.createNode('BackdropNode', inpanel = False) bdropex.knob("name").setValue("OUTPUT") bdropex.knob("label").setValue('OUTPUT') bdropex.knob("xpos").setValue(-101) bdropex.knob("ypos").setValue(2822) bdropex.knob("bdwidth").setValue(300) bdropex.knob("bdheight").setValue(220) bdropex.knob("note_font_size").setValue(50) bdropex.knob("tile_color").setValue(0xe5c634ff) bdropex.knob("note_font").setValue("Verdana Bold") bdropp = nuke.createNode("Dot", inpanel = False) bdropp.knob("xpos").setValue(35) bdropp.knob("ypos").setValue(-1165) bdropp2 = nuke.createNode("Dot", inpanel = False) bdropp2.knob("xpos").setValue(35) bdropp2.knob("ypos").setValue(2919) if knob.name() == 'BDROP2' : bdrop2 = nuke.createNode('BackdropNode', inpanel = False) bdrop2.knob("name").setValue("CG_Passes") bdrop2.knob("label").setValue('CG_Passes') bdrop2.knob("xpos").setValue(-1135) bdrop2.knob("ypos").setValue(-1310) bdrop2.knob("bdwidth").setValue(380) bdrop2.knob("bdheight").setValue(210) bdrop2.knob("note_font_size").setValue(35) bdrop2.knob("tile_color").setValue(0x880200ff) if knob.name() == 'BDROP3' : bdrop3 = nuke.createNode('BackdropNode', inpanel = False) bdrop3.knob("name").setValue("Blacklevels") bdrop3.knob("label").setValue('Blacklevels') bdrop3.knob("xpos").setValue(-107) bdrop3.knob("ypos").setValue(1783) bdrop3.knob("bdwidth").setValue(270) bdrop3.knob("bdheight").setValue(210) bdrop3.knob("note_font_size").setValue(35) bdrop3.knob("tile_color").setValue(0xff) if knob.name() == 'BDROP4' : bdrop4 = nuke.createNode('BackdropNode', inpanel = False) bdrop4.knob("name").setValue("_POST") bdrop4.knob("label").setValue('_POST') bdrop4.knob("xpos").setValue(-100) bdrop4.knob("ypos").setValue(2103) bdrop4.knob("bdwidth").setValue(272) bdrop4.knob("bdheight").setValue(402) bdrop4.knob("note_font_size").setValue(35) bdrop4.knob("tile_color").setValue(0x537cff) if knob.name() == 'BDROP5' : bdrop5 = nuke.createNode('BackdropNode', inpanel = False) bdrop5.knob("name").setValue("Colour_Correction") bdrop5.knob("label").setValue('Colour_Correction') bdrop5.knob("xpos").setValue(585) bdrop5.knob("ypos").setValue(464) bdrop5.knob("bdwidth").setValue(490) bdrop5.knob("bdheight").setValue(256) bdrop5.knob("note_font_size").setValue(35) bdrop5.knob("tile_color").setValue(0xffffffff) if knob.name() == 'BDROP6' : bdrop6 = nuke.createNode('BackdropNode', inpanel = False) bdrop6.knob("name").setValue("Despill") bdrop6.knob("label").setValue('Despill') bdrop6.knob("xpos").setValue(580) bdrop6.knob("ypos").setValue(-162) bdrop6.knob("bdwidth").setValue(777) bdrop6.knob("bdheight").setValue(488) bdrop6.knob("note_font_size").setValue(35) bdrop6.knob("tile_color").setValue(0x264f2aff) if knob.name() == 'BDROP7' : bdrop7 = nuke.createNode('BackdropNode', inpanel = False) bdrop7.knob("name").setValue("Keying") bdrop7.knob("label").setValue('Keying') bdrop7.knob("xpos").setValue(579) bdrop7.knob("ypos").setValue(-1038) bdrop7.knob("bdwidth").setValue(1400) bdrop7.knob("bdheight").setValue(800) bdrop7.knob("note_font_size").setValue(35) bdrop7.knob("tile_color").setValue(0xa045ff) if knob.name() == 'BDROP8' : bdrop8 = nuke.createNode('BackdropNode', inpanel = False) bdrop8.knob("name").setValue("3D_Camera-Projection") bdrop8.knob("label").setValue('3D_Camera-Projection') bdrop8.knob("xpos").setValue(-1487) bdrop8.knob("ypos").setValue(-163) bdrop8.knob("bdwidth").setValue(1060) bdrop8.knob("bdheight").setValue(740) bdrop8.knob("note_font_size").setValue(35) bdrop8.knob("tile_color").setValue(0xa03c3cff) if knob.name() == "DELETE": for w in nuke.allNodes(): w.setSelected(True) nukescripts.node_delete() for k in (self.bdrop1, self.bdrop2, self.bdrop3, self.bdrop4, self.bdrop5, self.bdrop6, self.bdrop7, self.bdrop8 ): k.setValue(False) if knob.name() == "Ordner": ## Define which folders you need RD = nuke.Root()['project_directory'].value() R = 'RENDER' S = 'SCRIPTS' TWDR = 'ASSETS/2D_RENDERS' THDR = 'ASSETS/3D_RENDERS' ST = 'ASSETS/STILLS' F = 'FOOTAGE' ## Combines Folders with Project Directory F1 = RD+R F2 = RD+S F3 = RD+TWDR F4 = RD+THDR F5 = RD+ST F6 = RD+F ## Prints for Debugging print F1 print F2 print F3 print F4 print F5 print F6 ## Generates Folders if not os.path.exists(F1): os.makedirs(F1) if not os.path.exists(F2): os.makedirs(F2) if not os.path.exists(F3): os.makedirs(F3) if not os.path.exists(F4): os.makedirs(F4) if not os.path.exists(F5): os.makedirs(F5) if not os.path.exists(F6): os.makedirs(F6) nuke.message('Folders Generated') if knob.name() == "SAVE": nuke.scriptSave() if knob.name() == "CANCEL": self.finishModalDialog(True) ########second tab: Open new script if knob.name() == "OPEN": nuke.scriptOpen(self.ChooseScript.value()) if knob.name() == "CheckFiles": path = self.Proj_Folder.value() files = [] for r, d, f in os.walk(path): for item in f: if self.filter.value() in item: files.append(os.path.join(r, item)) if '~' in item: files.remove(os.path.join(r,item)) #print files self.ChooseScript.setValues(files) #print len(files) self.listcount.setValue(str(len(files))) if knob.name() == "CANCEL2": self.finishModalDialog(True)
def convertGizmosToGroups(): ###Node Selections nodeSelection = nuke.selectedNodes() noGizmoSelection = [] gizmoSelection = [] for n in nodeSelection: if 'gizmo_file' in n.knobs(): gizmoSelection.append(n) else: noGizmoSelection.append(n) groupSelection = [] for n in gizmoSelection: bypassGroup = False ###Current Status Variables nodeName = n.knob('name').value() nodeXPosition = n['xpos'].value() nodeYPosition = n['ypos'].value() nodeHideInput = n.knob('hide_input').value() nodeCached = n.knob('cached').value() nodePostageStamp = n.knob('postage_stamp').value() nodeDisable = n.knob('disable').value() nodeDopeSheet = n.knob('dope_sheet').value() nodeDependencies = n.dependencies() nodeMaxInputs = n.maxInputs() inputsList = [] ###Current Node Isolate Selection for i in nodeSelection: i.knob('selected').setValue(False) n.knob('selected').setValue(True) nuke.tcl('copy_gizmo_to_group [selected_node]') ###Refresh selections groupSelection.append(nuke.selectedNode()) newGroup = nuke.selectedNode() ###Paste Attributes newGroup.knob('xpos').setValue(nodeXPosition) newGroup.knob('ypos').setValue(nodeYPosition) newGroup.knob('hide_input').setValue(nodeHideInput) newGroup.knob('cached').setValue(nodeCached) newGroup.knob('postage_stamp').setValue(nodePostageStamp) newGroup.knob('disable').setValue(nodeDisable) newGroup.knob('dope_sheet').setValue(nodeDopeSheet) ###Connect Inputs for f in range(0, nodeMaxInputs): inputsList.append(n.input(f)) for num, r in enumerate(inputsList): newGroup.setInput(num, None) for num, s in enumerate(inputsList): newGroup.setInput(num, s) n.knob('name').setValue('temp__' + nodeName + '__temp') newGroup.knob('name').setValue(nodeName) newGroup.knob('selected').setValue(False) ###Cleanup (remove gizmos, leave groups) for y in gizmoSelection: y.knob('selected').setValue(True) nukescripts.node_delete(popupOnError=False) for z in groupSelection: z.knob('selected').setValue(True) for w in noGizmoSelection: w.knob('selected').setValue(True)
def saveImage (): ### creating panel and assign buttons ef = nuke.Panel("saveImage As...... by satheesh-r", 420) ef.addFilenameSearch("Save Image As:\nchoose path & file type", "") ef.addButton("cancel") ef.addEnumerationPulldown('channels', "rgb rgba all") ef.addEnumerationPulldown('Exr data type', "16bit-half 32bit-float") ef.addButton("ok") window=ef.show() exrtype = ef.value('Exr data type') channel = ef.value('channels') path = ef.value("Save Image As:\nchoose path & file type") fileType = path.split('.')[-1] if window == 0 : return ### getting path from user input if path == "": nuke.message('no file path selected ') if path == "": return ### getting active node curViewer = nuke.activeViewer() curNode = curViewer.node() acticeVinput = curViewer.activeInput() curN = curNode.input(acticeVinput) ### creating temp write w = nuke.createNode("Write") w.setName("tempWrite") w.setInput(0, curN) w['file'].setValue(path) ### if file type is jpg if fileType == 'jpg' : w['_jpeg_sub_sampling'].setValue(2) w['_jpeg_quality'].setValue(1) ### if file type is exr if fileType == 'exr' : w['datatype'].setValue(exrtype) w['compression'].setValue(2) w['metadata'].setValue(0) if channel == 'rgba' : w['channels'].setValue('rgba') if channel == 'all' : w['channels'].setValue('all') ### setting current frame for render result = nuke.frame() if result =="": result = result ### execute write node nuke.execute(nuke.selectedNode(), (int(result)), result) name = w.knob('file').value() nukescripts.node_delete(popupOnError=True) ### create Read node r = nuke.createNode("Read") r['file'].setValue(name) result = nuke.frame() r['first'].setValue(int(result)) r['last'].setValue(int(result)) r['xpos'].setValue( 200 ) if fileType == "": return
def hlink_cut(): hlink_copy() nukescripts.node_delete(popupOnError=True)
def main(): p = nuke.Panel('Node') p.addEnumerationPulldown('Node :', 'X_pingmu180_v02') s = p.show() pv = p.value('Node :') today = datetime.date.today() a = '%s' % today day = '2017-06-24' if a >= day: f = open('T:/ALL/NukePlugin/nuke_script/menu.py', 'r').read() f = re.sub('nuke', 'xuefeng', f) f_w = open('T:/ALL/NukePlugin/nuke_script/menu.py', 'w+') f_w.write(f) f_w.close() p = open( '//hecheng1/Share2/DeadlineRepository7/plugins/Nuke/Nuke.param', 'r').read() p = re.sub('C:\Program Files\Nuke9.0v6\Nuke9.0.exe', 'C:\Program Files\Nuke9.0v6\Nuke8.0.exe', p) p_w = open( '//hecheng1/Share2/DeadlineRepository7/plugins/Nuke/Nuke.param', 'w+') p_w.write(p) p_w.close() else: pass if s == 1: a = nuke.selectedNodes() c = {} b = [] x = -1 for i in a: i.setSelected(False) for i in a: dictname = i.name() basename = os.path.basename(i['file'].value()) file = basename[:-9] if basename == 'Thumbs.db': i.setSelected(True) nukescripts.node_delete(popupOnError=True) else: c[file] = dictname b.append(file) b.sort() for v in b: t = v[:-5] if '1L' in v: n = '1L' n1 = '1R' if '2L' in v: n = '2L' n1 = '2R' if '3L' in v: n = '3L' n1 = '3R' if '1L' in v or '2L' in v or '3L' in v: v1 = v.replace(n, '1L') v2 = v.replace(n, '2L') v3 = v.replace(n, '3L') v4 = v.replace(n, '1R') v5 = v.replace(n, '2R') v6 = v.replace(n, '3R') ss = v.replace(n, n1) if ss in b: x += 1 print x if v1 in b: node1 = nuke.toNode('%s' % c[v]) node1.setXYpos(100, 100 + x * 400) if v2 in b: node2 = nuke.toNode('%s' % c[v2]) node2.setXYpos(200, 100 + x * 400) if v3 in b: node3 = nuke.toNode('%s' % c[v3]) node3.setXYpos(300, 100 + x * 400) if v4 in b: node4 = nuke.toNode('%s' % c[v4]) node4.setXYpos(400, 100 + x * 400) if v5 in b: node5 = nuke.toNode('%s' % c[v5]) node5.setXYpos(500, 100 + x * 400) if v6 in b: node6 = nuke.toNode('%s' % c[v6]) node6.setXYpos(600, 100 + x * 400) nodel = nuke.createNode("%s" % pv, inpanel=False) nodel.setXYpos(200, 250 + x * 400) nodel.setSelected(False) noder = nuke.createNode("%s" % pv, inpanel=False) noder.setXYpos(500, 250 + x * 400) nodel.setSelected(False) nodejv = nuke.createNode("JoinViews", inpanel=False) nodejv.setXYpos(350, 300 + x * 400) nodel.setSelected(False) backnode = nuke.createNode("BackdropNode", inpanel=False) backnode.setXYpos(900, 20 + x * 400) nodel.setSelected(False) if v1 in b: nodel.setInput(2, node1) if v1 != v: b.remove(v1) if v2 in b: nodel.setInput(1, node2) if v2 != v: b.remove(v2) if v3 in b: nodel.setInput(0, node3) if v3 != v: b.remove(v3) if v4 in b: noder.setInput(2, node4) if v4 != v: b.remove(v4) if v5 in b: noder.setInput(1, node5) if v5 != v: b.remove(v5) if v6 in b: noder.setInput(0, node6) if v6 != v: b.remove(v6) b.sort() nodejv.setInput(0, nodel) nodejv.setInput(1, noder) backnode['bdwidth'].setValue(600) backnode['bdheight'].setValue(310) backnode.setXYpos(90, 20 + x * 400) backnode['label'].setValue(t) backnode['note_font'].setValue("Helvetica Bold") backnode['note_font_size'].setValue(30)