# frameBlendMerge v1.8 by Richard Frazer
# www.richardfrazer.com/tools-tutorials/frameblendmerge/
Group {
name FrameBlendMerge
help http://richardfrazer.com/tools-tutorials/frameblendmerge/
knobChanged "nuke.thisNode().begin()\n\nt = nuke.thisNode()\n\ntname = t.name()\n\n#print ('tname: ' + tname)\n\n\n\nframestart = int(t\['framerangestart'].value())\nframeend = int(t\['framerangeend'].value())\n\np = -1000\n\nfor d in nuke.allNodes():\n if (d.Class() == 'FrameHold') or (d.Class() == 'Merge2'):\n nuke.delete(d) \n #else:\n # print (\"Ignore this\" + d.Class() )\n\n\nfor x in range(framestart, frameend):\n n = nuke.nodes.FrameHold() \n n\['name'].setValue( 'FrameHoldMerge' +str(x) )\n n\['first_frame'].setExpression( str(x)+\"+(parent.offset)\" )\n n.setXYpos( p, 600 )\n n.setInput(0, nuke.toNode( 'inputDot' ))\n p = p + 100\n\nnewMerge = nuke.nodes.Merge2()\nnewMerge\['name'].setValue( 'MergeFrames' )\nnewMerge.setXYpos( -900, 700 ) \n\ni = 0\n\nfor x in range(framestart, frameend):\n nname = 'FrameHoldMerge' +str(x)\n n = nuke.toNode( nname )\n if(i==2):\n i=i+1\n #print(\"connecting input \" + str(i))\n newMerge.setInput(i, nuke.toNode( nname ))\n i=i+1\n\nnewMerge.setInput(2, nuke.toNode( \"mask_dot\" ))\n\ntoperation = t\['operation'].value()\nnewMerge\['operation'].setValue( toperation )\n\no = nuke.toNode( 'OutputBlend' )\no.setInput(0, newMerge)\n\n\ntLabel = str(framestart) + \"-\" + str(frameend)\n\nt\['label'].setValue(tLabel)\n\n\nnuke.thisNode().end()\n\n\n\n\n"
label 1000-1005
selected true
xpos -1004
ypos 39
addUserKnob {20 User}
addUserKnob {4 operation M {atop average color-burn color-dodge conjoint-over copy difference disjoint-over divide exclusion from geometric hard-light hypot in mask matte max min minus multiply out over overlay plus screen soft-light stencil under xor}}
operation min
addUserKnob {26 ""}
addUserKnob {26 text2 l "" +STARTLINE T "Frame blend\n"}
addUserKnob {3 framerangestart l "Frame Range"}
framerangestart 1000
addUserKnob {3 framerangeend l "" -STARTLINE}
framerangeend 1005
addUserKnob {22 InputRange l "Input Range" -STARTLINE T "n = nuke.thisNode()\nf = n.firstFrame()\nl = n.lastFrame() \n\nn\['framerangestart'].setValue(f)\nn\['framerangeend'].setValue(l)"}
addUserKnob {3 offset}
offset {{frame-1000}}
addUserKnob {26 ""}
addUserKnob {26 textabout l "" +STARTLINE T "FrameBlendMerge v1.8 by Richard Frazer
\nwww.richardfrazer.com/tools-tutorials/frameblendmerge/\n"}
}
Input {
inputs 0
name Input
xpos -905
ypos 395
}
Dot {
name inputDot
xpos -871
ypos 495
}
set N38782be0 [stack 0]
FrameHold {
firstFrame {{1004+(parent.offset)}}
name FrameHoldMerge1004
xpos -600
ypos 600
}
push $N38782be0
FrameHold {
firstFrame {{1003+(parent.offset)}}
name FrameHoldMerge1003
xpos -700
ypos 600
}
push $N38782be0
FrameHold {
firstFrame {{1002+(parent.offset)}}
name FrameHoldMerge1002
xpos -800
ypos 600
}
Input {
inputs 0
name Mask
xpos -1349
ypos 579
number 1
}