From 7fdc8b9951c73f1e1e68ecdd73f2c67ff461ea25 Mon Sep 17 00:00:00 2001 From: Vincent Ullmann Date: Fri, 10 Jul 2026 10:36:45 +0100 Subject: [PATCH 1/2] exclude camera node from maintained_selection --- client/ayon_nuke/plugins/load/load_camera.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/client/ayon_nuke/plugins/load/load_camera.py b/client/ayon_nuke/plugins/load/load_camera.py index efe7222ca8..3393243660 100644 --- a/client/ayon_nuke/plugins/load/load_camera.py +++ b/client/ayon_nuke/plugins/load/load_camera.py @@ -146,10 +146,14 @@ def update(self, container, context): # getting file path file = get_representation_path(repre_entity).replace("\\", "/") - with maintained_selection(): - camera_node = container["node"] - camera_node['selected'].setValue(True) - + camera_node = container["node"] + selected = camera_node["selected"] + + with maintained_selection( + # exclude from selection, since we will be recreating the node + # which will invalidate the reference to the object in memory + exclude_nodes=[camera_node], + ): # collect input output dependencies dependencies = camera_node.dependencies() dependent = camera_node.dependent() @@ -161,6 +165,7 @@ def update(self, container, context): # not adding animation keys properly xpos = camera_node.xpos() ypos = camera_node.ypos() + camera_node.selectOnly() nuke.nodeCopy("%clipboard%") camera_name = camera_node.name() nuke.delete(camera_node) @@ -178,6 +183,8 @@ def update(self, container, context): if camera_node is dpcy), 0) d.setInput(index, camera_node) + camera_node["selected"].setValue(selected) + # color node by correct color by actual version self.node_version_color( context["project"]["name"], version_entity, camera_node From 8939f315289acdebe39a9cba50ca01f5eb4bf503 Mon Sep 17 00:00:00 2001 From: Vincent Ullmann Date: Fri, 10 Jul 2026 10:37:05 +0100 Subject: [PATCH 2/2] simplify copy/paste workaround --- client/ayon_nuke/plugins/load/load_camera.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_nuke/plugins/load/load_camera.py b/client/ayon_nuke/plugins/load/load_camera.py index 3393243660..48f23bcce9 100644 --- a/client/ayon_nuke/plugins/load/load_camera.py +++ b/client/ayon_nuke/plugins/load/load_camera.py @@ -167,10 +167,10 @@ def update(self, container, context): ypos = camera_node.ypos() camera_node.selectOnly() nuke.nodeCopy("%clipboard%") - camera_name = camera_node.name() nuke.delete(camera_node) - nuke.nodePaste("%clipboard%") - camera_node = nuke.toNode(camera_name) + camera_node = nuke.nodePaste("%clipboard%") + if not camera_node: + raise RuntimeError("Failed to paste camera node") camera_node.setXYpos(xpos, ypos) # link to original input nodes