diff --git a/openpype/hosts/nuke/api/pipeline.py b/openpype/hosts/nuke/api/pipeline.py index fcc3becd2d..2871f8afbc 100644 --- a/openpype/hosts/nuke/api/pipeline.py +++ b/openpype/hosts/nuke/api/pipeline.py @@ -564,6 +564,9 @@ def list_instances(creator_id=None): if creator_id and instance_data["creator_identifier"] != creator_id: continue + # node name could change, so update subset name data + _update_subset_name_data(instance_data, node) + if "render_order" not in node.knobs(): subset_instances.append((node, instance_data)) continue @@ -589,6 +592,25 @@ def list_instances(creator_id=None): return ordered_instances +def _update_subset_name_data(instance_data, node): + """Update subset name data in instance data. + + Args: + instance_data (dict): instance creator data + node (nuke.Node): nuke node + """ + # make sure node name is subset name + old_subset_name = instance_data["subset"] + old_variant = instance_data["variant"] + subset_name_root = old_subset_name.replace(old_variant, "") + + new_subset_name = node.name() + new_variant = new_subset_name.replace(subset_name_root, "") + + instance_data["subset"] = new_subset_name + instance_data["variant"] = new_variant + + def remove_instance(instance): """Remove instance from current workfile metadata. diff --git a/openpype/hosts/nuke/api/plugin.py b/openpype/hosts/nuke/api/plugin.py index cfdb407d26..4a7bb03216 100644 --- a/openpype/hosts/nuke/api/plugin.py +++ b/openpype/hosts/nuke/api/plugin.py @@ -212,9 +212,20 @@ class NukeCreator(NewCreator): created_instance["creator_attributes"].pop(key) def update_instances(self, update_list): - for created_inst, _changes in update_list: + for created_inst, changes in update_list: instance_node = created_inst.transient_data["node"] + changed_keys = { + key: changes[key].new_value + for key in changes.changed_keys + } + + # update instance node name if subset name changed + if "subset" in changed_keys: + instance_node["name"].setValue( + changed_keys["subset"] + ) + # in case node is not existing anymore (user erased it manually) try: instance_node.fullName()