DerekVFX LogoDerekVFX

Blog

Nuke

Projects

Photography

Filmography

OCIO.ccExternal link

DerekVFX LogoDerekVFX

©2009 - 2026 DerekVFX

ContactIMDBLinkedInGitHubOCIO.ccExternal link
←ToolSets / Merge

Ultimerge

Merge2025-01-13ToolSets/merge/ultimerge.nk
View on GitHub

FG/BG edge integrator: blend edges, bleed BG color into the fringe, and optional wrap-all light wrap.

Ultimerge is a light-wrap style edge tool on FG + BG (+ mask). Sections cover Blend Edges (blur size/mix), Bleed Color (edge color pull from BG), and Wrap All (broader wrap size/mix).

Effect-only mode outputs just the wrap contribution. Works in log on the BG path for softer edge grades. Use when the cutout is fine but the silhouette still feels pasted on.

Script Code

set cut_paste_input [stack 0]
version 12.1 v4
push $cut_paste_input
Group {
name Ultimerge
tile_color 0x421010ff
selected true
xpos -1140
ypos 1066
addUserKnob {20 User l Ultimerge}
addUserKnob {26 blendEdges l "Blend Edges"}
addUserKnob {41 size T Blur1.size}
addUserKnob {41 mix_1 l mix T matchEdges.mix}
addUserKnob {26 color l "Bleed Color"}
addUserKnob {41 size_1 l size T Group2.size}
addUserKnob {7 color_amount l amount}
color_amount 1
addUserKnob {26 wa l "Wrap All"}
addUserKnob {41 size_2 l size T Group1.size}
addUserKnob {41 mix_2 l mix T wrap.mix}
addUserKnob {26 ""}
addUserKnob {6 effectOnly l "effect only" +STARTLINE}
addUserKnob {26 ""}
addUserKnob {26 lbl l "" t "v1.0 Jan 23, 2019 - Created\nv1.1 Jan 23. 2019 - Fixed Channels\nv1.2 Jan 24. 2019 - Added log, regular over\nv1.3 Mar 12, 2019 - Added Merge Options\nv1.4 Mar 14, 2019 - Removed Merging, only affects fg" +STARTLINE T "Ultimerge v1.3"}
addUserKnob {22 btn l DerekVFX.ca T "nuke.tcl('start', 'https://derekvfx.ca')" +STARTLINE}
}
Input {
inputs 0
name FG
xpos 148
ypos -505
}
AddChannels {
channels alpha
name AddChannels1
xpos 148
ypos -337
}
Dot {
name Dot6
note_font_size 40
xpos 182
ypos -219
}
set Ndda2800 [stack 0]
Dot {
name Dot10
note_font_size 40
xpos 182
ypos -47
}
set Ndda2400 [stack 0]
Unpremult {
name Unpremult1
xpos 148
ypos 84
}
set Ndda2000 [stack 0]
Dot {
name Dot9
note_font_size 40
xpos 391
ypos 88
}
Dot {
name Dot14
note_font_size 40
xpos 391
ypos 980
}
set Nddcf800 [stack 0]
Input {
inputs 0
name mask
xpos 23
ypos 1018
number 2
}
push $Ndda2800
Invert {
name Invert1
xpos -382
ypos -229
}
Input {
inputs 0
name BG
xpos -183
ypos -413
number 1
}
Shuffle {
alpha white
name Shuffle1
label "\[value in]"
xpos -183
ypos -125
}
set Nddce800 [stack 0]
Colorspace {
colorspace_out AlexaV3LogC
name Colorspace3
xpos -312
ypos -119
}
set Cddce400 [stack 0]
Copy {
inputs 2
from0 rgba.alpha
to0 rgba.alpha
name Copy1
xpos -382
ypos -65
}
Premult {
name Premult2
xpos -382
ypos 31
}
Dot {
name Dot5
note_font_size 40
xpos -348
ypos 103
}
set Nddf3800 [stack 0]
Dot {
name Dot4
note_font_size 40
xpos -533
ypos 103
}
Group {
name Group1
xpos -567
ypos 300
addUserKnob {20 User}
addUserKnob {41 size T Blur2.size}
}
Input {
inputs 0
name Input1
xpos -796
ypos -148
}
Dot {
name Dot2
note_font_size 40
xpos -762
ypos -61
}
set Nddf2c00 [stack 0]
Blur {
channels rgba
size {{parent.Blur2.size*16}}
name Blur6
xpos -796
ypos 50
}
push $Nddf2c00
Blur {
channels rgba
size {{parent.Blur2.size*8}}
name Blur5
xpos -900
ypos 49
}
push $Nddf2c00
Blur {
channels rgba
size {{parent.Blur2.size*4}}
name Blur4
xpos -1010
ypos 42
}
push 0
push $Nddf2c00
Blur {
channels rgba
size {{parent.Blur2.size*2}}
name Blur3
xpos -1092
ypos 46
}
push $Nddf2c00
push $Nddf2c00
Blur {
inputs 1+1
channels rgba
size 5.3
name Blur2
xpos -1179
ypos 49
}
Merge2 {
inputs 5+1
operation under
bbox B
name Merge2
xpos -796
ypos 195
}
Output {
name Output1
xpos -796
ypos 258
}
end_group
Dot {
name Dot2
note_font_size 40
xpos -533
ypos 928
}
push $Nddf3800
Group {
name Group2
xpos -382
ypos 298
addUserKnob {20 User}
addUserKnob {41 size T Blur2.size}
}
Input {
inputs 0
name Input1
xpos -796
ypos -148
}
Dot {
name Dot2
note_font_size 40
xpos -762
ypos -61
}
set Nde1e400 [stack 0]
Blur {
channels rgba
size {{parent.Blur2.size*16}}
name Blur6
xpos -796
ypos 50
}
push $Nde1e400
Blur {
channels rgba
size {{parent.Blur2.size*8}}
name Blur5
xpos -900
ypos 49
}
push $Nde1e400
Blur {
channels rgba
size {{parent.Blur2.size*4}}
name Blur4
xpos -1010
ypos 42
}
push 0
push $Nde1e400
Blur {
channels rgba
size {{parent.Blur2.size*2}}
name Blur3
xpos -1092
ypos 46
}
push $Nde1e400
push $Nde1e400
Blur {
inputs 1+1
channels rgba
size 4
name Blur2
xpos -1179
ypos 49
}
Merge2 {
inputs 5+1
operation under
bbox B
name Merge2
xpos -796
ypos 195
}
Output {
name Output1
xpos -796
ypos 258
}
end_group
Clamp {
channels rgba
minimum 0.001
maximum 100
name Clamp1
xpos -382
ypos 486
}
Expression {
expr0 (1/(r*.3+g*.59+b*.11))*r
expr1 (1/(r*.3+g*.59+b*.11))*g
expr2 (1/(r*.3+g*.59+b*.11))*b
name Expression2
xpos -382
ypos 616
}
set Nde4e000 [stack 0]
Dot {
name Dot3
note_font_size 40
xpos -348
ypos 785
}
push $Nde4e000
push $Ndda2400
Dot {
name Dot11
note_font_size 40
xpos 45
ypos -47
}
set Ndeb9800 [stack 0]
push $Nddce800
Merge2 {
inputs 2
operation stencil
bbox B
name Merge3
xpos -183
ypos -51
}
Colorspace {
colorspace_out AlexaV3LogC
name Colorspace1
xpos -183
ypos 52
}
set Cdeb9000 [stack 0]
Blur {
channels rgba
size 100
name Blur1
label "\[value size] px"
xpos -183
ypos 78
}
set Cdeb8c00 [stack 0]
Colorspace {
colorspace_in AlexaV3LogC
name Colorspace2
xpos -183
ypos 116
}
set Cdeb8800 [stack 0]
Unpremult {
name Unpremult2
xpos -183
ypos 159
}
set Ndeb8400 [stack 0]
Expression {
expr3 4*(1-a)*a
name Expression1
label "\[knob expr3]"
xpos -183
ypos 254
}
Dot {
name Dot8
note_font_size 40
xpos -149
ypos 333
}
push $Ndeb8400
push $Ndeb9800
clone $Cdeb9000 {
xpos 11
ypos 47
selected false
}
clone $Cdeb8c00 {
xpos 11
ypos 73
selected false
}
clone $Cdeb8800 {
xpos 11
ypos 111
selected false
}
Unpremult {
name Unpremult3
xpos 11
ypos 164
}
Merge2 {
inputs 2
operation divide
bbox B
output {rgba.red rgba.green rgba.blue -rgba.alpha}
name Merge4
xpos 11
ypos 215
}
push $Ndda2000
Merge2 {
inputs 2+1
operation multiply
bbox B
output {rgba.red rgba.green rgba.blue -rgba.alpha}
mix 0.304
name matchEdges
xpos 148
ypos 329
}
clone $Cddce400 {
xpos 148
ypos 389
selected true
}
Dot {
name Dot7
note_font_size 40
xpos 182
ypos 442
}
set Ndf27c00 [stack 0]
Dot {
name Dot12
note_font_size 40
xpos 59
ypos 442
}
Saturation {
saturation {{-parent.color_amount+1}}
name Saturation1
xpos 25
ypos 543
}
Merge2 {
inputs 2
operation multiply
bbox B
output {rgba.red rgba.green rgba.blue -rgba.alpha}
mix {{parent.color_amount}}
name Merge6
xpos 25
ypos 616
}
push $Ndf27c00
Keymix {
inputs 3
channels rgb
bbox B
name bleedColor
xpos 148
ypos 781
}
Merge2 {
inputs 2
bbox B
output {rgba.red rgba.green rgba.blue -rgba.alpha}
mix 0.274
name wrap
xpos 148
ypos 924
}
Colorspace {
colorspace_in AlexaV3LogC
name Colorspace5
xpos 148
ypos 966
}
push $Nddcf800
Dot {
name Dot13
note_font_size 40
xpos 292
ypos 980
}
Dissolve {
inputs 2+1
channels rgb
which 1
name Dissolve1
label "\[value which]"
xpos 148
ypos 1103
}
set Ndf53c00 [stack 0]
Merge2 {
inputs 2
operation from
bbox B
output {rgba.red rgba.green rgba.blue -rgba.alpha}
name Merge1
xpos 357
ypos 1109
}
Dot {
name Dot1
note_font_size 40
xpos 391
ypos 1190
}
push $Ndf53c00
Switch {
inputs 2
which {{effectOnly}}
name Switch1
label "\[value which]"
xpos 148
ypos 1180
}
Premult {
name Premult3
xpos 148
ypos 1264
}
Output {
name Output1
xpos 148
ypos 1343
}
end_group