Nuke Python Temp
Jump to navigation
Jump to search
Switch off heavy nodes
Simple
Will toggle on/off all the nodes in the list
disableList = ['Defocus' , 'VectorBlur', 'iBlur', 'Convolve', 'MagicDefocus.gizmo']
toggle = -1
nodes = nuke.selectedNodes()
if not nodes:
nodes = nuke.allNodes()
for n in nodes:
if n.Class() in disableList:
if toggle == -1:
toggle = 1.0 if n['disable'].getValue() == 0.0 else 0.0
n['disable'].setValue(toggle)
More Subtle
Creates a switch control linking either to disable knobs or multiplies a value by the switch node (like the Transform's 'motionblur' knob). Because how the fuck did the Foundry not add that by default ? Right now still in WIP because i'm not happy about how it still gives you an expression error when you delete the switch node. TBD
# this will create a global control switch to enable/disable 'slow' nodes
# or 'disable' knobs by multiplying them by the switch value
slownodes = {
'Transform':'motionblur',
'MagicDefocus.gizmo':'disable',
'VectorBlur2':'disable',
'Convolve':'disable'
}
#use the following code to get the selected nodes class types if it's not obvious
#print('\n'.join([n.name()+' > '+n.Class() for n in nuke.selectedNodes()]))
nuke.Undo.name("Add Slow Switch")
nuke.Undo.begin()
nodes = []
allSelection = nuke.selectedNodes()
for nodetype, knob in slownodes.items():
nodes = nuke.selectedNodes(nodetype)
if not nodes and not allSelection:
nodes = nuke.allNodes(nodetype)
if nodes:
s = nuke.toNode('SlowNodesSwitch')
if not s:
s = nuke.nodes.Switch(name='SlowNodesSwitch',which='!disable',tile_color=16728063)
s['disable'].setValue(1)
selectedNodes = allSelection
if not allSelection:
selectedNodes = nodes
xPos = [int(n['xpos'].value()) for n in selectedNodes]
yPos = [int(n['ypos'].value()) for n in selectedNodes]
bbox = [[min(xPos),max(xPos)],[min(yPos),max(yPos)]]
s.setXYpos(bbox[0][0]-200,bbox[1][1]) # bottomleft of selected nodes?
for node in nodes:
print(' '+node.name()+'>')
if knob == 'disable':
node['disable'].setExpression('!parent.SlowNodesSwitch.which')
#clean things up if we delete this node. not cleanest code ie it still prompts expression errors and
#node names can't be changed
destroyCode = '\nnuke.toNode(\''+node.name()+'\')[\'disable\'].clearAnimated()'
destroyCode += '\nnuke.toNode(\''+node.name()+'\')[\'disable\'].setValue(0)'
s['onDestroy'].setValue(s['onDestroy'].value()+destroyCode)
else:
# multiply knob by 0 to keep value when at 1
curKnob = node[knob]
if not curKnob.hasExpression():
value = curKnob.value()
if value != 0:
curKnob.setExpression( str(value)+' * parent.SlowNodesSwitch.which')
destroyCode = '\nnuke.toNode(\''+node.name()+'\')[\''+ knob +'\'].clearAnimated()'
destroyCode += '\nnuke.toNode(\''+node.name()+'\')[\''+ knob +'\'].setValue('+str(value)+')'
s['onDestroy'].setValue(s['onDestroy'].value()+destroyCode)
else:
print(' Skipping {}.{}, already at 0'.format(node.name(),knob))
else:
print(' Skipping {}.{}, already has an expression: {}'.format(node.name(),knob,curKnob.toScript()))
del nodes
nuke.Undo.end()
#print('\n'.join([n.name()+' > '+n.Class() for n in nuke.selectedNodes()]))