top of page

LIGHT BLUR

  • jnietomonco
  • Feb 8, 2023
  • 1 min read

LightBlur is a tool made by Mark Nettleton and Jason Billington. It creates several blurs from largest to smallest, halving the amount of blur each time. It creates a diffused/glowy feeling.


ree

Expand LightBlur


Group {
 inputs 0
 name lightBlur
 help "Builds a stack of blurs from largest to smallest, halving the kernel each\ntime, then adds them together"
 onCreate "\nif nuke.thisNode()\['f_created'].getValue()==True:\n    nuke.thisNode()\['f_created'].setValue(False)\n    nuke.thisNode().showControlPanel()"
 tile_color 0xff7e21ff
 note_font "Bitstream Vera Sans"
 selected true
 xpos 103
 ypos -57
 addUserKnob {20 LightBlur}
 addUserKnob {41 channels T Dissolve_chans.channels}
 addUserKnob {14 size l blur t "Blur amount" R 1 100}
 addUserKnob {7 bias t "Emphasise large or small blurs" R 0 10}
 bias 1
 addUserKnob {7 minBlur l "minimum blur" t "Minimum blur used for output" R 0 100}
 minBlur 1
 addUserKnob {3 steps t "Number of blur steps to use. 10 is max. Removes blur from minimum to maximum."}
 steps 10
 addUserKnob {6 do_normalize l normalize t "Divide by number of accumulated blurs" +STARTLINE}
 addUserKnob {6 clampAlpha l "clamp alpha" t "Clamp the alpha to 1" +STARTLINE}
 addUserKnob {41 crop l "crop to format" T masterBlur.crop}
 addUserKnob {41 which l mix t "mix between original and lightblurred image" T Dissolve_chans.which}
 addUserKnob {6 mask l mask/lightwrap +STARTLINE}
 addUserKnob {20 blurTab l Blur}
 addUserKnob {41 filter T masterBlur.filter}
 addUserKnob {41 quality l "" -STARTLINE T masterBlur.quality}
 addUserKnob {20 Version}
 addUserKnob {26 "" l Help: T "Light Blur builds a stack of blurs from largest to smallest,\nhalves the kernel each time, and then adds them together."}
 addUserKnob {26 ""}
 addUserKnob {32 MoreHelp l "More Help" T "start http://lois4/document/nuke-light-blur-gizmo-help/" +STARTLINE}
 addUserKnob {26 ""}
 addUserKnob {26 VersionRelease l "Version Release:" T 4.0}
 addUserKnob {26 re l ReleaseNotes T "Removed mask. Crop on by default."}
 addUserKnob {26 "" l Authors: T "Mark Nettleton (mnettleton) and Jason Billington (jbillington)"}
 addUserKnob {26 le l "Last Edit by:" T "Mark Nettleton (mnettleton)"}
 addUserKnob {26 ReleaseDate l "Release Date:" T 10/17/13}
 addUserKnob {6 f_created l "First Created_" +INVISIBLE +STARTLINE}
 f_created true
}
 Input {
  inputs 0
  name Input
  xpos 304
  ypos -899
 }
 Dot {
  name INPUT
  label INPUT
  note_font_size 16
  xpos 332
  ypos -723
 }
set N461f0800 [stack 0]
add_layer {normalize normalize.red normalize.green normalize.blue normalize.alpha}
 Shuffle {
  red white
  green white
  blue white
  alpha white
  out normalize
  name Shuffle1
  label "add Normalize"
  xpos 73
  ypos -727
 }
set N461f0100 [stack 0]
 Blur {
  size {{parent.size.w} {parent.size.h}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur1
  xpos -305
  ypos -727
 }
set N498f900 [stack 0]
 Multiply {
  value {{Blur1.size>1?1:0}}
  name Multiply1
  xpos -415
  ypos -727
 }
 Multiply {
  value {{Blur1.size>(parent.minBlur)?1:0}}
  name Multiply18
  label "Less than Parent.MinBlur = off"
  xpos -415
  ypos -670
 }
 Blur {
  inputs 0
  size 41
  name masterBlur
  tile_color 0xff0000ff
  xpos -628
  ypos -631
 }
 Input {
  inputs 0
  name mask
  xpos -815
  ypos 1311
  number 1
 }
set N498cf00 [stack 0]
 Dot {
  name Dot4
  xpos -552
  ypos 1315
 }
 Invert {
  name Invert1
  xpos -586
  ypos 1369
 }
push 0
push $N498cf00
 Dot {
  name Dot5
  xpos -781
  ypos 1445
 }
 Group {
  inputs 3
  name EdgeOutline1
  onCreate "\nif nuke.thisNode()\['f_created'].getValue()==True:\n    nuke.thisNode()\['f_created'].setValue(False)\n    nuke.thisNode().showControlPanel()"
  knobChanged "\nif nuke.thisKnob().name() == \"erode_type\": \n    if nuke.thisKnob().getValue() == 0:\n        nuke.thisNode().knob('erode_size').setVisible(False)\n        nuke.thisNode().knob('dilate_size').setVisible(True)\n    if nuke.thisKnob().getValue() == 1:\n        nuke.thisNode().knob('dilate_size').setVisible(False)\n        nuke.thisNode().knob('erode_size').setVisible(True)\n"
  tile_color 0xe5804bff
  xpos -586
  ypos 1441
  addUserKnob {20 User}
  addUserKnob {26 author -STARTLINE +INVISIBLE T "Javier Nieto Moncó 2020"}
  addUserKnob {41 edgedetector l "edge detector" T EdgeDetect9.edgedetector}
  addUserKnob {41 threshold l Threshold T EdgeDetect9.threshold}
  addUserKnob {68 erode_type l "Erode Type" t "Choose the erode type you want to use:\n<b> Dilate</b> will use an Erode (fast) node.\n<b> Erode Blur</b> will use an Erode (blur) node." M {Dilate "Erode Blur" "" "" "" "" ""}}
  addUserKnob {7 dilate_size l Size t "This knob controls the size of the erode." R -20 20}
  dilate_size 2
  addUserKnob {7 erode_size l Size t "This knob controls the size of the erode." +HIDDEN R -20 20}
  addUserKnob {41 blackpoint l Blackpoint T Grade77.blackpoint}
  addUserKnob {41 whitepoint l Whitepoint T Grade77.whitepoint}
  addUserKnob {7 edgeBlur_size l "Edge Blur" t "Amount of blur applied to the edge." R 0 100}
  edgeBlur_size 3
  addUserKnob {7 blur_size l Blur t "This knob controls the general blur applied to the input." R 0 100}
  blur_size 25
  addUserKnob {26 ""}
  addUserKnob {7 mix}
  mix 1
  addUserKnob {22 removeEnable l "Enable Remove" t "Enables a new input that you can use to cut a portion of the node's result out.\n\nUseful when you just want the effect on the outside for example. You use the matte as this input and it will cut that shape out of the result." +HIDDEN T "nuke.thisNode().knob('removeDisable').setVisible(True)\nnuke.thisNode().knob('removeEnable').setVisible(False)\n\n\n\ndef deselectAll():\n    for node in nuke.allNodes():\n        node\['selected'].setValue(False)\n\ndeselectAll()\n\nnuke.nodes.Input(name='remove', xpos=146.0, ypos=24.0, selected=True)\nnewInput = nuke.selectedNode()\n\ndeselectAll()\n\nfor node in nuke.allNodes():\n    if node\['name'].getValue() == 'REMOVE_REF_DOT':\n        node\['selected'].setValue(True)\nnuke.selectedNode().setInput(0, newInput)\n\ndeselectAll()\n\nfor node in nuke.allNodes():\n    if node\['name'].getValue() == 'RemoveStencil':\n        node\['disable'].setValue(False)" +STARTLINE}
  addUserKnob {22 removeDisable l "Disable Remove" t "Disables the remove input." -STARTLINE T "nuke.thisNode().knob('removeEnable').setVisible(True)\nnuke.thisNode().knob('removeDisable').setVisible(False)\n\nfor node in nuke.allNodes():\n    node\['selected'].setValue(False)\n    if node.Class() == 'Input':\n        node\['selected'].setValue(True)\n        for inputs in nuke.selectedNodes():\n            if not inputs\['name'].getValue() == 'remove':\n                inputs\['selected'].setValue(False)\n\n#xPos = nuke.selectedNode()\['xpos'].getValue()\n#yPos = nuke.selectedNode()\['ypos'].getValue()\n\nnukescripts.node_delete(popupOnError=True)\n\nfor node in nuke.allNodes():\n    if node\['name'].getValue() == 'RemoveStencil':\n        node\['disable'].setValue(True)"}
  addUserKnob {6 mask -STARTLINE}
  addUserKnob {6 f_created l "First Created?" +INVISIBLE +STARTLINE}
 }
  Input {
   inputs 0
   name mask
   xpos -403
   ypos 217
   number 1
  }
  Dot {
   name Dot509
   xpos -369
   ypos 290
  }
  Input {
   inputs 0
   name remove
   xpos 146
   ypos 24
   number 2
  }
  Dot {
   name REMOVE_REF_DOT
   xpos 180
   ypos 164
  }
  Input {
   inputs 0
   name Input
   xpos -76
   ypos -317
  }
  Shuffle {
   in alpha
   name Shuffle151
   label "\[value in]"
   xpos -76
   ypos -277
  }
  EdgeDetectWrapper {
   name EdgeDetect9
   xpos -76
   ypos -241
  }
set N4958100 [stack 0]
  Dot {
   name Dot1
   xpos -227
   ypos -232
  }
  Erode {
   channels rgba
   size {{parent.erode_size}}
   name Erode51
   xpos -261
   ypos -97
  }
push $N4958100
  Dilate {
   channels rgba
   size {{parent.dilate_size}}
   name Dilate10
   xpos -76
   ypos -161
  }
  Switch {
   inputs 2
   which {{parent.erode_type}}
   name Switch1
   xpos -76
   ypos -97
  }
  Grade {
   black_clamp false
   maskChannelInput -rgba.alpha
   unpremult -rgba.alpha
   name Grade77
   xpos -76
   ypos -35
  }
  Clamp {
   maskChannelInput -rgba.alpha
   unpremult -rgba.alpha
   name Clamp18
   xpos -76
   ypos -11
  }
  EdgeBlur {
   channels rgba
   size {{parent.edgeBlur_size}}
   name EdgeBlur21
   xpos -76
   ypos 25
  }
  Blur {
   channels rgba
   size {{parent.blur_size}}
   maskChannelInput -rgba.alpha
   name Blur148
   xpos -76
   ypos 61
  }
  Merge2 {
   inputs 2
   operation stencil
   maskChannelInput -rgba.alpha
   name RemoveStencil
   xpos -76
   ypos 161
  }
  Merge2 {
   inputs 2
   operation mask
   maskChannelInput -rgba.alpha
   name Merge252
   xpos -76
   ypos 287
   disable {{!parent.mask}}
  }
  Shuffle {
   in alpha
   name Shuffle152
   label "\[value in]"
   xpos -76
   ypos 345
  }
  Multiply {
   value {{parent.mix}}
   maskChannelInput -rgba.alpha
   unpremult -rgba.alpha
   name Multiply44
   label "\[value value]"
   xpos -76
   ypos 381
  }
  Output {
   name Output1
   xpos -76
   ypos 497
  }
 end_group
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur9.size/2)) >= 0 ? (parent.minBlur - (parent.Blur9.size/2)) + (parent.Blur9.size/2) : abs(parent.minBlur - (parent.Blur9.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur9.size/2)) >= 0 ? (parent.minBlur - (parent.Blur9.size/2)) + (parent.Blur9.size/2) : abs(parent.minBlur - (parent.Blur9.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur10
  xpos -107
  ypos 915
 }
 Multiply {
  value {{Blur10.size>1?1:0}}
  name Multiply27
  label "BlurSize less than 0 = off"
  xpos -107
  ypos 962
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply10
  label steps
  xpos -107
  ypos 1019
 }
 Multiply {
  value {{Plus8.mix>1?Plus8.mix:1}}
  name Multiply29
  label "bias fix"
  xpos -195
  ypos 1019
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur8.size/2)) >= 0 ? (parent.minBlur - (parent.Blur8.size/2)) + (parent.Blur8.size/2) : abs(parent.minBlur - (parent.Blur8.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur8.size/2)) >= 0 ? (parent.minBlur - (parent.Blur8.size/2)) + (parent.Blur8.size/2) : abs(parent.minBlur - (parent.Blur8.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur9
  xpos -104
  ypos 696
 }
 Multiply {
  value {{Blur9.size>1?1:0}}
  name Multiply9
  label "BlurSize less than 0 = off"
  xpos -104
  ypos 734
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply11
  label steps
  xpos -104
  ypos 791
 }
 Multiply {
  value {{Plus7.mix>1?Plus7.mix:1}}
  name Multiply26
  label "bias fix"
  xpos -195
  ypos 791
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur7.size/2)) >= 0 ? (parent.minBlur - (parent.Blur7.size/2)) + (parent.Blur7.size/2) : abs(parent.minBlur - (parent.Blur7.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur7.size/2)) >= 0 ? (parent.minBlur - (parent.Blur7.size/2)) + (parent.Blur7.size/2) : abs(parent.minBlur - (parent.Blur7.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur8
  xpos -105
  ypos 471
 }
 Multiply {
  value {{Blur8.size>1?1:0}}
  name Multiply8
  label "BlurSize less than 0 = off"
  xpos -105
  ypos 509
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply12
  label steps
  xpos -105
  ypos 566
 }
 Multiply {
  value {{Plus6.mix>1?Plus6.mix:1 i}}
  name Multiply25
  label "bias fix"
  xpos -201
  ypos 566
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur6.size/2)) >= 0 ? (parent.minBlur - (parent.Blur6.size/2)) + (parent.Blur6.size/2) : abs(parent.minBlur - (parent.Blur6.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur6.size/2)) >= 0 ? (parent.minBlur - (parent.Blur6.size/2)) + (parent.Blur6.size/2) : abs(parent.minBlur - (parent.Blur6.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur7
  xpos -105
  ypos 288
 }
 Multiply {
  value {{Blur7.size>1?1:0 i}}
  name Multiply7
  label "BlurSize less than 0 = off"
  xpos -105
  ypos 326
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply13
  label steps
  xpos -105
  ypos 383
 }
 Multiply {
  value {{Plus5.mix>1?Plus5.mix:1 i}}
  name Multiply24
  label "bias fix"
  xpos -206
  ypos 383
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur5.size/2)) >= 0 ? (parent.minBlur - (parent.Blur5.size/2)) + (parent.Blur5.size/2) : abs(parent.minBlur - (parent.Blur5.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur5.size/2)) >= 0 ? (parent.minBlur - (parent.Blur5.size/2)) + (parent.Blur5.size/2) : abs(parent.minBlur - (parent.Blur5.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur6
  xpos -105
  ypos 96
 }
 Multiply {
  value {{Blur6.size>1?1:0 i}}
  name Multiply6
  label "BlurSize less than 0 = off"
  xpos -105
  ypos 134
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply14
  label steps
  xpos -105
  ypos 191
 }
 Multiply {
  value {{Plus4.mix>1?Plus4.mix:1 i}}
  name Multiply23
  label "bias fix"
  xpos -200
  ypos 191
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur4.size/2)) >= 0 ? (parent.minBlur - (parent.Blur4.size/2)) + (parent.Blur4.size/2) : abs(parent.minBlur - (parent.Blur4.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur4.size/2)) >= 0 ? (parent.minBlur - (parent.Blur4.size/2)) + (parent.Blur4.size/2) : abs(parent.minBlur - (parent.Blur4.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur5
  xpos -105
  ypos -103
 }
 Multiply {
  value {{Blur5.size>1?1:0 i}}
  name Multiply5
  label "BlurSize less than 0 = off"
  xpos -105
  ypos -65
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply15
  label steps
  xpos -105
  ypos -8
 }
 Multiply {
  value {{Plus3.mix>1?Plus3.mix:1}}
  name Multiply22
  label "bias fix"
  xpos -203
  ypos -8
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur3.size/2)) >= 0 ? (parent.minBlur - (parent.Blur3.size/2)) + (parent.Blur3.size/2) : abs(parent.minBlur - (parent.Blur3.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur3.size/2)) >= 0 ? (parent.minBlur - (parent.Blur3.size/2)) + (parent.Blur3.size/2) : abs(parent.minBlur - (parent.Blur3.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur4
  xpos -106
  ypos -282
 }
 Multiply {
  value {{Blur4.size>1?1:0}}
  name Multiply4
  label "BlurSize less than 0 = off"
  xpos -106
  ypos -249
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply16
  label steps
  xpos -106
  ypos -199
 }
 Multiply {
  value {{Plus2.mix>1?Plus2.mix:1 i}}
  name Multiply21
  label "bias fix"
  xpos -205
  ypos -201
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur2.size/2)) >= 0 ? (parent.minBlur - (parent.Blur2.size/2)) + (parent.Blur2.size/2) : abs(parent.minBlur - (parent.Blur2.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur2.size/2)) >= 0 ? (parent.minBlur - (parent.Blur2.size/2)) + (parent.Blur2.size/2) : abs(parent.minBlur - (parent.Blur2.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur3
  xpos -104
  ypos -483
 }
 Multiply {
  value {{Blur2.size>1?1:0}}
  name Multiply3
  label "BlurSize less than 0 = off"
  xpos -104
  ypos -445
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply17
  label steps
  xpos -104
  ypos -398
 }
 Multiply {
  value {{Plus1.mix>1?Plus1.mix:1}}
  name Multiply20
  label "bias fix"
  xpos -210
  ypos -398
 }
push $N461f0100
 Blur {
  size {{"(parent.minBlur - (parent.Blur1.size/2)) >= 0 ? (parent.minBlur - (parent.Blur1.size/2)) + (parent.Blur1.size/2) : abs(parent.minBlur - (parent.Blur1.size/2)) + parent.minBlur"} {"(parent.minBlur - (parent.Blur1.size/2)) >= 0 ? (parent.minBlur - (parent.Blur1.size/2)) + (parent.Blur1.size/2) : abs(parent.minBlur - (parent.Blur1.size/2)) + parent.minBlur"}}
  filter {{parent.masterBlur.filter}}
  quality {{parent.masterBlur.quality}}
  crop {{parent.masterBlur.crop}}
  name Blur2
  xpos -101
  ypos -676
 }
 Multiply {
  value {{Blur2.size>1?1:0}}
  name Multiply2
  label "BlurSize less than 0 = off"
  xpos -101
  ypos -638
 }
 Multiply {
  value {{"parent.steps >= \[python nuke.thisNode().input(0).input(0).name()\\\[4:\\]] ? 1 : 0"}}
  name Multiply28
  label steps
  xpos -101
  ypos -582
 }
 Multiply {
  value {{Plus.mix>1?Plus.mix:1}}
  name Multiply19
  label "bias fix"
  xpos -202
  ypos -582
 }
push $N498f900
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{1/(parent.bias*1)}}
  name Plus
  xpos -305
  ypos -570
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus.mix/parent.bias}}
  name Plus1
  selected true
  xpos -305
  ypos -384
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus1.mix/(parent.bias) i}}
  name Plus2
  xpos -305
  ypos -187
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus2.mix/(parent.bias) i}}
  name Plus3
  xpos -305
  ypos 6
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus3.mix/(parent.bias) i}}
  name Plus4
  xpos -305
  ypos 205
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus4.mix/(parent.bias) i}}
  name Plus5
  xpos -305
  ypos 397
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus5.mix/(parent.bias) i}}
  name Plus6
  xpos -305
  ypos 580
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus6.mix/(parent.bias)}}
  name Plus7
  xpos -305
  ypos 803
 }
 Merge2 {
  inputs 2
  operation plus
  also_merge normalize
  mix {{Plus6.mix/(parent.bias)}}
  name Plus8
  xpos -305
  ypos 1031
 }
set N49c8800 [stack 0]
 Dot {
  name Dot3
  xpos -196
  ypos 1127
 }
push $N49c8800
 Dot {
  name Dot2
  xpos -271
  ypos 1124
 }
 Merge2 {
  inputs 2
  operation divide
  Bchannels normalize
  name Merge1
  label Normalize
  xpos -305
  ypos 1208
  disable {{!parent.do_normalize}}
 }
 Remove {
  channels normalize
  name Remove1
  xpos -305
  ypos 1269
 }
 Clamp {
  channels alpha
  name Clamp1
  xpos -305
  ypos 1337
  disable {{parent.clampAlpha-1 i x25 1}}
 }
 Merge2 {
  inputs 2
  operation mask
  name Merge2
  xpos -305
  ypos 1441
  disable {{!parent.mask}}
 }
push $N461f0800
 Dot {
  name Dot1
  xpos 324
  ypos 1577
 }
 Dissolve {
  inputs 2
  channels rgb
  which 1
  maskChannelMask none
  name Dissolve_chans
  label channels_todo
  xpos -305
  ypos 1567
 }
 Output {
  name Output
  xpos -305
  ypos 1644
 }
end_group


Javier Nieto Moncó © 2025

  • linkedin
  • vimeo
  • generic-social-link
bottom of page