Time to cripple I mean disable node using expression
There are times when you have a Nuke script that feature really heavy nodes that affects specific frame range and you need it to automatically disable at specific frame range after it has done its job.
Problem here is that the process is not automated and Nuke will keep on processing the heavy nodes even if it doesn’t contribute to the overall rendering outside of the intended frame range.
You can easily use expression at the Disable knob to ensure the nodes get disable after meeting the condition. It doesn’t have to be a CPU/GPU heavy nodes, you can use the expression to toggle any nodes when it should be disable.
Although do take note that the default expression uses TCL. I’m unsure if you can use Python expression to achieve the same result but it should be not an issue as Nuke support Python. You just need to get the correct syntax and declaration for the respective script language.
Example 1 (Disabling after or before a frame)
Let’s say you need to disable from Frame 80 onwards. Add frame > 79 to the Disable knob expression. Nuke will automatically disable the node from Frame 80 onwards. You can also use frame < x to disable the node before x (where x is the frame number).
Example 2 (Disabling at specific frame range)
You need to disable a particular frame range. This can be done using inRange ( frame, x, y ) where x and y is the start and end frame respectively. So inRange ( frame, 20, 30) means the node will get disable from frame 20 to 30.
Sample Script
Copy and paste the following script into Nuke to see three quick samples that I created.
set cut_paste_input [stack 0] version 9.0 v5b17 ColorWheel { inputs 0 gamma 0.45 name ColorWheel1 selected true xpos 335 ypos -165 } Transform { rotate {{-(frame)}} center {1024 778} name Transform1 label "The wheel rotation\nis driven by\nexpression" note_font "Verdana Bold" note_font_size 20 note_font_color 0xffffffff selected true xpos 335 ypos -62 } set N4c29800 [stack 0] Dot { name Dot1 selected true xpos 236 ypos -21 } set N4b80400 [stack 0] GodRays { channels rgba scale 1.7 center {{curve x1 -735 x100 2360} {curve x1 2055 x100 2040}} name GodRays1 label "No expression\nfor Disable knob" selected true xpos 202 ypos 145 } push $N4c29800 clone node4b80000|Merge2|7276 Merge2 { inputs 2 operation plus mix {{curve x60 1 x70 0}} name Merge1 selected true xpos 335 ypos 158 } set C4b80000 [stack 0] push $N4b80400 Dot { name Dot2 selected true xpos 99 ypos -21 } GodRays { channels rgba scale 1.7 center {{curve x1 -735 x100 2360} {curve x1 2055 x100 2040}} name GodRays2 label "Disable from \nframe 71 onwards" note_font Verdana selected true xpos 65 ypos 250 disable {{"frame > 70"}} } push $N4c29800 Dot { name Dot4 selected true xpos 509 ypos -21 } clone $C4b80000 { inputs 2 xpos 475 ypos 261 selected true } push $cut_paste_input Roto { output alpha curves {{{v x3f99999a} {f 0} {n {layer Root {f 2097152} {t x44800000 x44428000} {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} {curvegroup Bezier4 512 bezier {{cc {f 8192} {px x41e80000 {0 0} {x44c59d31 x44316b84} {0 0} {0 0} {x44e5876e x44432d0d} {0 0} {0 0} {x44dfa314 x445ca6e8} {0 0} {0 0} {x44ccfaa1 x445679da} {0 0} {0 0} {x44c98ac2 x446775c1} {0 0} {0 0} {x44d5d128 x44730a3c} {0 0} {0 0} {x44d1e397 x448265e3} {0 0} {0 0} {x44c51f7e x447dd915} {0 0} {0 0} {x44c0b43b x4488f5c2} {0 0} {0 0} {x44cfecce x448f85a1} {0 0} {0 0} {x44c793f9 x44998ed9} {0 0} {0 0} {x44b1f95a x4492fef9} {0 0}}} idem} {tx x41e80000 x44d71d8a x448ed89e} {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn x41e80000 ltm x41e80000 tt x40800000}} {curvegroup Bezier3 512 bezier {{cc {f 8192} {px x41e80000 {0 0} {x4476f230 x448ba979} {0 0} {0 0} {x448e9f3d x44904b43} {0 0} {0 0} {x449ae5a3 x446b51ea} {0 0} {0 0} {x449dd7d0 x4493c49b} {0 0} {0 0} {x44ac92b2 x4496db22} {0 0} {0 0} {x44a8276e x444d3644} {0 0} {0 0} {x44ccfaa1 x4415a0c4} {0 0} {0 0} {x44b6e24f x440eae13} {0 0} {0 0} {x449dd7d0 x4434820b} {0 0} {0 0} {x44a7a9bc x43f5374a} {0 0} {0 0} {x44996c8d x43e8dd2c} {0 0}}} idem} {tx x41e80000 x44ada2e9 x446d1746} {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn x41e80000 ltm x41e80000 tt x40800000}} {curvegroup Bezier2 512 bezier {{cc {f 8192} {px x41e80000 {0 0} {x44218316 x4458cabf} {0 0} {0 0} {x4443e1ce x445be146} {0 0} {0 0} {x445785a5 x44197ced} {0 0} {0 0} {x4480dfc0 x441c9373} {0 0} {0 0} {x446e1ba9 x445fbd6f} {0 0} {0 0} {x4481db24 x446524dc} {0 0} {0 0} {x44928cce x43ea6870} {0 0} {0 0} {x444db3b9 x43e5c6a6} {0 0}}} idem} {tx x41e80000 x44792000 x44440000} {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn x41e80000 ltm x41e80000 tt x40800000}} {curvegroup Bezier1 512 bezier {{cc {f 8192} {px x41e80000 {0 0} {x42e78952 x445ca6e8} {0 0} {0 0} {x4365ae22 x438dc49a} {0 0} {0 0} {x43daee9e x438f4fdd} {0 0} {0 0} {x43afb95f x44251167} {0 0} {0 0} {x4417b12a x43a04bc4} {0 0} {0 0} {x443c06ab x43c24394} {0 0} {0 0} {x43f66d98 x44749580} {0 0} {0 0} {x43b98b4a x446c178c} {0 0} {0 0} {x43fc51f2 x44166665} {0 0} {0 0} {x437951f8 x446775c1} {0 0}}} idem} {tx x41e80000 x43f26666 x44274ccd} {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn x41e80000 ltm x41e80000 tt x40800000}}}}}} toolbox {selectAll { { selectAll str 1 ssx 1 ssy 1 sf 1 } { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } } } toolbar_brush_hardness 0.200000003 toolbar_source_transform_scale {1 1} toolbar_source_transform_center {1024 778} colorOverlay {0 0 0 0} lifetime_type "all frames" lifetime_start 29 lifetime_end 29 motionblur_shutter_offset_type centred source_black_outside true name Roto1 selected true xpos 1012 ypos -25 } Constant { inputs 0 channels rgb color {1 0.156805 0 0} color_panelDropped true name Constant1 selected true xpos 1128 ypos -119 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 selected true xpos 1128 ypos -25 } Premult { name Premult1 selected true xpos 1128 ypos 66 } ColorBars { inputs 0 name ColorBars2 selected true xpos 1340 ypos -110 } Merge2 { inputs 2 name Merge2 label "Disable using\ninRange" note_font "Verdana Bold" note_font_size 20 note_font_color 0xffffffff selected true xpos 1340 ypos 40 disable {{"inrange (frame, 20, 40)"}} } Viewer { inputs 2 frame 86 frame_range 1-100 name Viewer1 selected true xpos 475 ypos 456 } StickyNote { inputs 0 name StickyNote1 label "The Disabled GodRays\nshould render slightly\nfaster compared to\nnon-disabled GodRays\nas Nuke still calculate the\nGodRays even though it is\nnot visible on screen after\nthe Merge mix is set to 0.\n" note_font Verdana note_font_size 14 selected true xpos 564 ypos 20 } StickyNote { inputs 0 name StickyNote2 label Slow note_font "Verdana Bold" selected true xpos 384 ypos 126 } StickyNote { inputs 0 name StickyNote3 label Fast note_font "Verdana Bold Bold" selected true xpos 531 ypos 230 } ColorBars { inputs 0 name ColorBars1 selected true xpos -491 ypos -105 } Defocus { defocus {{curve x1 0 x80 100}} name Defocus1 label "Disable from\nframe 80 onwards" note_font "Verdana Bold" note_font_size 20 note_font_color 0xffffffff selected true xpos -491 ypos 12 disable {{"frame > 79"}} }