Seeing as I’ve found very little reference for the use of python in nuke on the web I thought I’d create this post and add to it with little code snippets.
If anyone has some cool snippets to share please feel free to leave them in a comment below.
disable “postage stamps” on only “Read” nodes
for a in nuke.allNodes(): if a.Class()=='Read': a['postage_stamp'].setValue(0)
disable “postage stamps” on all nodes
for a in nuke.allNodes(): try: a['postage_stamp'].setValue(0) except: pass
“unhide” all nodes’ inputs – useful when receiving a sneaky comp/lighting script
for a in nuke.allNodes(): try: a['hide_input'].setValue(0) except: pass
change the “first” frame of all selected nodes that are “Read” nodes:
(example changes the first frame to 1018)
for a in nuke.selectedNodes(): if a.Class() == 'Read': a['first'].setValue(1018)
print a selected nodes’ methods
import struct node = nuke.selectedNode() for a in node['lookup'].animations(): print dir(a)
print inputs (dependencies) of a selected node:
for a in nuke.selectedNode().dependencies(): print a.name()
print outputs (dependents) of a selected node:
for a in nuke.selectedNode().dependent(): print a.name()
find all the TimeOffset nodes in a Group called “Group2″, and change the value of each offset based on it’s position in the array of found time offsets
tos = [] for a in nuke.toNode('Group2').nodes(): if a.Class()=='TimeOffset': tos.append(a) for b in tos: b['time_offset'].setValue(tos.index(b))
set the ‘bbox’ for any selected Merge, Keymix & Copy nodes to “B”
for a in nuke.selectedNodes(): classTypes = ['Merge' , 'Keymix', 'Copy', ] for n in classTypes: if n in a.Class(): for p in a['bbox'].values(): if 'B' in p: a['bbox'].setValue(a['bbox'].values().index(p))
remove all animation from a selected nodes
for a in nuke.selectedNode().knobs(): nuke.selectedNode()[a].clearAnimated()
add keyframes – animate a mix
for a in nuke.selectedNodes(): a['mix'].setAnimated() a['mix'].setValueAt(1,nuke.frame()) a['mix'].setValueAt(0,(nuke.frame() - 1))
half the colour value of all the Constant nodes in a script
for a in nuke.allNodes(): if a.Class() == "Constant": a['color'].setValue(a['color'].value()[0] / 2 , 0) a['color'].setValue(a['color'].value()[1] / 2 , 1) a['color'].setValue(a['color'].value()[2] / 2 , 2)
find all the transform nodes in a script, and if their input is a Crop, set the ‘scale’ value to be twice it’s current value (also checks if the scale is a list/array or a float)
for a in nuke.allNodes(): if a.Class() == "Transform": if a.input(0).Class() == "Crop": x = a['scale'].value() if type(x).__name__ == 'list': a['scale'].setValue(x[0] * 2 , 0) a['scale'].setValue(x[1] * 2 , 1) if type(x).__name__ == 'float': a['scale'].setValue(x*2)
set all the gain values of all ColorCorrect nodes to be twice their current value
for a in nuke.allNodes(): if a.Class() == "ColorCorrect": a['gain'].setValue(a['gain'].value() * 2)
print files with ‘mov’ in filename
for a in nuke.allNodes(): if 'Read' in a['name'].value(): if 'mov' in a['file'].value(): print a['file'].value()
change font size of all “write” nodes in script
for a in nuke.selectedNodes(): if "Write" in a['name'].value(): a['note_font_size'].setValue(60)
create 20 constants with incrementing colour values
def makeConstants(amount): for i in range(amount): a= nuke.nodes.Constant() color= float( float(i) / float(amount) ) a['color'].setValue(color) makeConstants(20)
change the name of all Text nodes to contents the text “message”
for a in nuke.allNodes(): if a.Class()=='Text': a.setName(a['message'].value())
some helpful code:
http://francoislord.com/blog/tag/python
Changing the value of a specific node in a group through python?
http://www.gfxtalk.com/forum/showthread.php?p=91701
Hey Adam, nice one – I was doing some post Sucker experimenting with Nuke+python, found this then realised it was you.
Cheers,
AC.
Thanks Chapman!
Found some cool nuke python trickery?
If you do feel free to put something up as a comment on this post!
Hope all is well back in Sydney!
How do you disable Read node thumbnails only?
Thanks.
Hey Steve sorry for the delay, am currently doing some travel in Mexico.
Try this:
for a in nuke.allNodes():
if a.Class()==’Read’:
a['postage_stamp'].setValue(0)
#Set Read Nodes Missing Frames Nearest Frame
r = nuke.selectedNodes()
for i in r:
i['on_error'].setValue(“nearest_frame”)
#Set Shuffle Nodes Write Their Incoming Channels Out
s = nuke.allNodes(‘Shuffle’)
for i in s:
i['label'].setValue(“[value in]“)
Nice one Agoston!
Thanks for your code!
Great work Adam,
being late for the party, found out your nuke forum now only.
I have a query:
How to get the paths in Read nodes and if anyone updated, how to reload that again in the scene, without reloading the whole scene
getting paths of all read nodes
for n in nuke.allNodes():
if n.Class() == ‘Read’:
print n['name'].value() + ‘ : ‘ + n['file'].value()