I'd like to create a global parameters in The Foundry Nuke UI to control a motion blur value and shutter's angle.
How to accomplish this by using Python?
Any help appreciated.
I have found quite simple and effective method to globally control MotionBlur
in Nuke – just using usual NoOp
node, serving as controller, and LinkerScript. Here's how it works in practice. Create, for testing, three Transform
nodes (every Transform node contains motionblur
, shutter
and shutter offset
knobs).
Run the LinkerScript internally in NUKE's Script Editor or externally via menu.py
file. Then select all the Transform
nodes and from NUKE's toolbar choose: Gizmos
– NoOp Controls Linker
. That's all. Now you can globally control MotionBlur
for all the Transform
nodes via NoOp
controller (motionblur
and shutter
properties are now linked through expressions).
Here's my LinkerScript:
import nuke
controller = nuke.nodes.NoOp()
# There are two identical parameters in parentheses :
# the 1st one is a real property's name, and the 2nd one is a label for GUI.
knobMB = nuke.Double_Knob('motionblur', 'motionblur')
knobSH = nuke.Double_Knob('shutter', 'shutter')
controller.addKnob(knobMB)
controller.addKnob(knobSH)
def linkNoOpControls():
for everyNode in nuke.selectedNodes():
everyNode['motionblur'].setExpression('NoOp1.motionblur')
everyNode['shutter'].setExpression('NoOp1.shutter')
toolbar = nuke.menu("Nodes")
gizmos = toolbar.addMenu("Gizmos", icon='LinkerIcon.png')
gizmos.addCommand("NoOp Controls Linker", 'linkNoOpControls()')
You should load a 24x24 pixels
PNG icon file for your new command in the toolbar.
P.S. Don't forget to drop your PNG icon file into a hidden .nuke
directory (if you use a Mac, as you said, its path is – /Users/<userName>/.nuke
), and adjust your menu.py
file accordingly (paste the necessary Python code).
For more details read a Nuke Directory Locations article.