Nuke Python

From Antoine Vienne | Wiki
Revision as of 00:02, 8 June 2019 by Walter (talk | contribs) (Change specific attribute on all nodes)
Jump to navigation Jump to search

Nuke Python Scripts

Create multiple Writes nodes for multiples Reads - With RGBA channels activated

//Select Read nodes first

root_frame_path = "/YOUR_PATH"


nodes = nuke.selectedNodes()


for n in nodes:

    roto_name = n.name()

    n.setSelected(True)

    w = nuke.createNode( "Write" )

    write_name = roto_name.replace("Roto", "Write_")

    w.knob("name").setValue(write_name)

    image_path = "{root_frame_path}/{write_name}.png".format(root_frame_path=root_frame_path, write_name=write_name)

    w.knob("file").setValue(image_path)

for a in nuke.allNodes('Write'):

    a['channels'].setValue('rgba')

Change specific attribute on all nodes

//Works also with "selectedNodes"
//"render_mode" and "textured+wireframe" are examples of attributes to be changed.

sn = nuke.allNodes()

for n in sn:

        n.knob('render_mode').setValue("textured+wireframe")

Count selected nodes

len(nuke.selectedNodes())

Maxwell Render - Check .mxi sequence Sampling levels

//This script comes from the great Marc Dubrois.

def checkMXI_SL():
    '''takes mxi read node and checks its SLs metadata and outputs frames under certain treshold'''

    sl_threshold = 18.0
    txt = nuke.getInput('Print frames with SL below:', str(sl_threshold))
    if txt:
        sl_threshold = float(txt)
    output = ''

    task = nuke.ProgressTask("Checking MXI SLs") 
    task.setMessage("Progress")

    for node in nuke.selectedNodes():
        if node.Class() == 'Read':
            firstframe = int(node['first'].value())
            #lastframe = firstframe + 10
            lastframe = int(node['last'].value())
            for i in range(firstframe, lastframe):
                percentage = int(100.0*(i-firstframe)/(lastframe-firstframe))
                task.setProgress(percentage)
                if task.isCancelled(): 
                    break;

                sl = node.metadata('SAMPLING_LEVEL',i)
                if  sl < sl_threshold:
                        task.setMessage('Frame ['+str(i)+'] SL'+"{0:.1f}".format(sl))                        
                        logline = 'Frame ' + str(i) + ': ' + "{0:.2f}".format(sl) + '\n'
                        output = output + logline
            task.setProgress(100)
    del task

    p = nuke.Panel('Results')
    if output == '':
        output = 'All MXI are above or equal to '+str(sl_threshold)
    p.addNotepad('Results:',output)
    ret = p.show()

checkMXI_SL()