State:Closed|icon_bug|icon_nuke|database:public|Resolution:Fixed|TargetRelease:12.0v5|BugID:422859|
Problem summary
Nuke crashes when exporting Transform (stabilize) and Transform (match-move) Transform nodes from a Tracker4 node
All other exports don't crash Nuke
Customer reported version
nuke.12.0v4
Customer reported platform
centos8
Steps to reproduce
1) Open Nuke 12.0v4
2) Create a Tracker node
3) In the export options, select Transform (stabilize) or Transform (match-move), and press Export, Nuke crashes
Expected behaviour
For the expression linked transform
Actual behaviour
Nuke Crashed
Workaround
Create the Transform node and add the equivalent expressions into the knobs. This can be done manually, or by using the basic example code below:
Select the Tracker node, the run the below code to create a Transform (stabilize):
n = nuke.selectedNode()
if n.Class() == "Tracker4":
t = nuke.nodes.Transform()
t.setName("Transform_Stabilize1")
t["translate"].setExpression("(!invert) ? Tracker1.translate.x : -Tracker1.translate.x".replace("Tracker1", n.name()), 0)
t["translate"].setExpression("(!invert) ? Tracker1.translate.y : -Tracker1.translate.y".replace("Tracker1", n.name()), 1)
t["rotate"].setExpression("(!invert) ? Tracker1.rotate : -Tracker1.rotate".replace("Tracker1", n.name()))
t["scale"].setSingleValue(False)
t["scale"].setExpression("(!invert) ? Tracker1.scale.w : 1/Tracker1.scale.w".replace("Tracker1", n.name()), 0)
t["scale"].setExpression("(!invert) ? Tracker1.scale.h : 1/Tracker1.scale.h".replace("Tracker1", n.name()), 1)
t["center"].setExpression("(!invert) ? Tracker1.center.x : Tracker1.center.x + Tracker1.translate.x".replace("Tracker1", n.name()), 0)
t["center"].setExpression("(!invert) ? Tracker1.center.y : Tracker1.center.y + Tracker1.translate.y".replace("Tracker1", n.name()), 1)
t["filter"].setExpression("Tracker1.filter".replace("Tracker1", n.name()))
t.addKnob(nuke.Enumeration_Knob("transform", "transform", ["stabilize", "match-move"]))
t.addKnob(nuke.Enumeration_Knob("src_transform", "src transform", ["none", "stabilize", "stabilize 1-pt", "match-move", "match-move 1-pt", "remove jitter"]))
t["src_transform"].setExpression("Tracker1.transform".replace("Tracker1", n.name()))
t.addKnob(nuke.Boolean_Knob("invert", "invert"))
t["invert"].setFlag(nuke.ENDLINE)
t["invert"].setExpression("[python -execlocal srcTransformKnob\\ =\\ nuke.thisNode()\\['src\\_transform'\\]\\nsrcTransformName\\ =\\ srcTransformKnob.enumName(int(srcTransformKnob.getValue()))\\ndestTransform\\ =\\ nuke.thisNode()\\['transform'\\].getValue()\\nsrcTransformIsStabilize\\ =\\ (srcTransformName.find('stabilize')==0\\ or\\ srcTransformName.find('remove\\ jitter')==0)\\ninvertDueToDestStabilize\\ =\\ (destTransform\\ ==\\ 0\\ and\\ not\\ srcTransformIsStabilize)\\ninvertDueToSrcStabilize\\ =\\ (destTransform\\ ==\\ 1\\ and\\ srcTransformIsStabilize)\\nret\\ =\\ (invertDueToDestStabilize\\ or\\ invertDueToSrcStabilize)]")
Select the Tracker node, the run the below code to create a Transform (match-move):
n = nuke.selectedNode()
if n.Class() == "Tracker4":
t = nuke.nodes.Transform()
t.setName("Transform_MatchMove1")
t["translate"].setExpression("(!invert) ? Tracker1.translate.x : -Tracker1.translate.x".replace("Tracker1", n.name()), 0)
t["translate"].setExpression("(!invert) ? Tracker1.translate.y : -Tracker1.translate.y".replace("Tracker1", n.name()), 1)
t["rotate"].setExpression("(!invert) ? Tracker1.rotate : -Tracker1.rotate".replace("Tracker1", n.name()))
t["scale"].setSingleValue(False)
t["scale"].setExpression("(!invert) ? Tracker1.scale.w : 1/Tracker1.scale.w".replace("Tracker1", n.name()), 0)
t["scale"].setExpression("(!invert) ? Tracker1.scale.h : 1/Tracker1.scale.h".replace("Tracker1", n.name()), 1)
t["center"].setExpression("(!invert) ? Tracker1.center.x : Tracker1.center.x + Tracker1.translate.x".replace("Tracker1", n.name()), 0)
t["center"].setExpression("(!invert) ? Tracker1.center.y : Tracker1.center.y + Tracker1.translate.y".replace("Tracker1", n.name()), 1)
t["filter"].setExpression("Tracker1.filter".replace("Tracker1", n.name()))
t.addKnob(nuke.Enumeration_Knob("transform", "transform", ["stabilize", "match-move"]))
t["transform"].setValue("match-move")
t.addKnob(nuke.Enumeration_Knob("src_transform", "src transform", ["none", "stabilize", "stabilize 1-pt", "match-move", "match-move 1-pt", "remove jitter"]))
t["src_transform"].setExpression("Tracker1.transform".replace("Tracker1", n.name()))
t.addKnob(nuke.Boolean_Knob("invert", "invert"))
t["invert"].setFlag(nuke.ENDLINE)
t["invert"].setExpression("[python -execlocal srcTransformKnob\\ =\\ nuke.thisNode()\\['src\\_transform'\\]\\nsrcTransformName\\ =\\ srcTransformKnob.enumName(int(srcTransformKnob.getValue()))\\ndestTransform\\ =\\ nuke.thisNode()\\['transform'\\].getValue()\\nsrcTransformIsStabilize\\ =\\ (srcTransformName.find('stabilize')==0\\ or\\ srcTransformName.find('remove\\ jitter')==0)\\ninvertDueToDestStabilize\\ =\\ (destTransform\\ ==\\ 0\\ and\\ not\\ srcTransformIsStabilize)\\ninvertDueToSrcStabilize\\ =\\ (destTransform\\ ==\\ 1\\ and\\ srcTransformIsStabilize)\\nret\\ =\\ (invertDueToDestStabilize\\ or\\ invertDueToSrcStabilize)]")
Reproduced by support
This bug has been reproduced in:
Nuke 12.0v4 - Windows 10, CentOS 7.7, macOS 10.13 - regression
Unable to reproduce bug in:
Nuke 12.0v3 - Windows 10, CentOS 7.7, macOS 10.13
Earliest version tested
Nuke 12.0v3 - This issue doesn't appear in this version and has regressed
We're sorry to hear that
Please tell us why