To Merge here: App Nuke
NUKE_PATH D:/myPath_for_nuke
import nuke nuke.pluginAddPath('D:/myPath_for_nuke')
import sys osMode = 'other' if sys.platform in ['win32','win64']: osMode = 'win' elif sys.platform == 'darwin': osMode = 'mac' elif sys.platform == 'linux2': osMode = 'linux' print("OS: {0}".format(osMode))
import nuke nuke.env['gui'] # print 1 or 0
import sys if nuke.NUKE_VERSION_STRING.startswith('9'): nuke.pluginAddPath('./9.0') # relative path sys.path.append('D:/myOtherPythonModulePath') # abs path
Nuke.exe replaceWritePaths.py other_args
# nuke main menu object nuke.menu('Nuke').addCommand('subMenuFolder/menuItemName','print("your python cmd example")', icon='/iconPath/toolName.png') # nuke gizmo menu object cur_menu = nuke.menu("Nodes").addMenu("myGiz", icon="myGizmo.png") cur_menu.addCommand('subMenuFolder/menuItemName','print("your python cmd example")', icon='/iconPath/toolName.png') # custom image formats nuke.addFormat("1280 768 0 0 1280 768 1 HD 1280 Square")
nuke.addBeforeRender(funcNameToDoBeforeRender) # it pass the write node as nuke.thisNode
"C:\pathToNuke\NukeVersion.exe" -nukex -i -F 1001-1020 -x "R:/pathToScript/myNukeScript.nk"
"C:\pathToNuke\NukeVersion.exe" -nukex -i -X ThatFinalWrite "R:/pathToScript/myNukeScript.nk" 1001-1020
# it automatically create xTool menu in menubar, # and create "CompHelper" menu item that call function string, with shortcut and icon import sys,os;myPath=r'D:\Dev\CompHelper' myPath in sys.path or sys.path.append(myPath);import CompHelper; cmd = nuke.menu('Nuke').addCommand("xTool/CompHelper", 'CompHelper.main()',icon=os.path.join(myPath,'icons','CompHelper.png')) cmd.setIcon(os.path.join(myPath,'icons','CompHelper.png'))
nuke.scriptSave( outScript ) curScript = nuke.toNode("root").name() nuke.scriptSaveAs("/scratch/snapshot.nk") nuke.scriptSaveAs(curScript)
knob.setEnabled(False) # lock with a flag nuke.selectedNode()[knob].setFlag(nuke.DISABLED) nuke.selectedNode()[knob].clearFlag(nuke.DISABLED)
common menu operation codes
# top menu and side bar menu obj nuke.menu("Nuke") nuke.toolbar("Nodes") # add menu and add cmd obj menubar = nuke.menu("Nuke") # main menu bar my_menu = menubar.addMenu("MyMenu") # menu object my_menu.addCommand("Test","print('Test')") # menu item; subFolder/Test for subfolder cmds menubar.addMenu("MyMenu") # Important, without a var to hold it, it becomes menuItem object instead of menu obj # get items of a ui object # list direct child UI object menubar.items() # return menu child with that name menubar.menu('MyMenu') # return menu or menuItem child w that name menubar.findItem('MyMenu') # loop method of listing name_item_child_list = [ [cur_item.name(), cur_item] for cur_item in menubar.items() ] print(name_item_child_list )
start = int(nuke.Root().knob('first_frame').value()) end = int(nuke.Root().knob('last_frame').value())
curFrame = nuke.frame() # get nuke.frame(1002) # goto
# import file to viewport nuke.nodePaste(in_filepath.replace('\\', '/')) # edit File nuke.scriptOpen(in_filepath.replace('\\', '/')) # save Selected as File nuke.nodeCopy(out_filepath) # save file as nuke.scriptSaveAs(out_filepath)
full_path = '' try: full_path = nuke.scriptName() except: nuke.message('No path found.')
nuke.knobDefault( 'Write.afterRender', 'import myFun;myFun.some_action()')
root = nuke.thisNode()
thisNode = nuke.thisNode()
my_node = nuke.createNode('Read') my_node['file'].fromUserText('/path/to/your/file.mov')
selected = [x for x in nuke.selectedNodes() if x.Class() == 'Read']
nuke_readNodes = [x for x in nuke.allNodes(recurseGroups=True) if x.Class() == 'Read'] self.memoData['nuke_path_list'] = [os.path.normpath(os.path.dirname(x['file'].value())) for x in nuke_readNodes]
def getNodeByClass(nodeClass, startNode): if startNode.Class() == nodeClass: yield startNode elif isinstance(startNode, nuke.Group): for child in startNode.nodes(): for foundNode in RecursiveFindNodes(nodeClass, child): yield foundNode allWriteNodes = [w for w in getNodeByClass('Write', nuke.root())]
# set after render python script cur_node.knob('afterRender').setValue("WriteToMov()") # call a python function after done rendering # call render nuke.execute( nodeName, firstFrame, lastFrame )
node.knob('knobChanged') nuke.addKnobChanged(function) nuke.removeKnobChanged(function)
Replace Single Line String to Multi Line Display
[regsub -all " / " [value noteStr] "\n"]
Use Express to Link StrValue to IntValue
example
# file attribute expression: [value rdir]/finals/[value shot]/NK_[value shot].%03d.dpx # get evaluate result print (nuke.thisNode()["file"].evaluate()) # mix python in tcl file "\[value nas_root]/\[value project]/\[value seq]/zup_renders/Comp/\[value RenderType]/\[value shot]_[value FileName]_v[python {str(int(nuke.thisNode()['ver'].value())).zfill(3)} ]/\[value shot]_[value FileName]_v[python {str(int(nuke.thisNode()['ver'].value())).zfill(3)} ].####.\[value file_type]" # use cmd knobChanged "\ncur=nuke.thisNode()\npathA = \[ cur\[each].value() for each in \['nas_root', 'project', 'seq'] ]\npathB = \['zup_renders/Comp', cur\['RenderType'].value() ]\nsegC = cur\['shot'].value()\nif cur\['FileName'].value() !='':\n segC+='_'+cur\['FileName'].value()\nsegC+='_v'+ str(int(cur\['ver'].value())).zfill(3)\npathD = \[ segC+'.####.'+cur\['file_type'].value() ]\ncur\['file'].setValue( '/'.join( pathA + pathB + \[segC] + pathD ) )\n"
nuke.thisNode().error()
[value error]
nuke.thisNode().input(0).error()
[value [topnode].error ]