diff --git a/openpype/hosts/nuke/api/lib.py b/openpype/hosts/nuke/api/lib.py index f2872675ca2..b1d76e7d519 100644 --- a/openpype/hosts/nuke/api/lib.py +++ b/openpype/hosts/nuke/api/lib.py @@ -893,15 +893,27 @@ def get_imageio_input_colorspace(filename): def get_view_process_node(): reset_selection() - ipn_orig = None - for v in nuke.allNodes(filter="Viewer"): - ipn = v['input_process_node'].getValue() - if "VIEWER_INPUT" not in ipn: - ipn_orig = nuke.toNode(ipn) - ipn_orig.setSelected(True) - - if ipn_orig: - return duplicate_node(ipn_orig) + ipn_node = None + for v_ in nuke.allNodes(filter="Viewer"): + ipn = v_['input_process_node'].getValue() + ipn_node = nuke.toNode(ipn) + if ipn_node: + if ipn == "VIEWER_INPUT": + # since it is set by default we can ignore it + # nobody usually use this + continue + else: + # in case a Viewer node is transfered from + # different workfile with old values + raise NameError(( + "Input process node name '{}' set in " + "Viewer '{}' is does't exists in nodes" + ).format(ipn, v_.name())) + + ipn_node.setSelected(True) + + if ipn_node: + return duplicate_node(ipn_node) def on_script_load(): diff --git a/openpype/hosts/nuke/api/plugin.py b/openpype/hosts/nuke/api/plugin.py index abf9144c5b2..d3f8357f7d4 100644 --- a/openpype/hosts/nuke/api/plugin.py +++ b/openpype/hosts/nuke/api/plugin.py @@ -8,11 +8,6 @@ from collections import OrderedDict, defaultdict from abc import abstractmethod -from openpype.client import ( - get_asset_by_name, - get_subsets, -) - from openpype.settings import get_current_project_settings from openpype.lib import ( BoolDef, @@ -94,15 +89,36 @@ def add_info_knob(self, node): """) node.addKnob(info_knob) - def check_existing_subset(self, subset_name, instance_data): - """Check if existing subset name already exists.""" - exists = False + def check_existing_subset(self, subset_name): + """Make sure subset name is unique. + + It search within all nodes recursively + and checks if subset name is found in + any node having instance data knob. + + Arguments: + subset_name (str): Subset name + """ + for node in nuke.allNodes(recurseGroups=True): + # make sure testing node is having instance knob + if INSTANCE_DATA_KNOB not in node.knobs().keys(): + continue node_data = get_node_data(node, INSTANCE_DATA_KNOB) - if subset_name in node_data.get("subset"): - exists = True - return exists + if not node_data: + # a node has no instance data + continue + + # test if subset name is matching + if node_data.get("subset") == subset_name: + raise NukeCreatorError( + ( + "A publish instance for '{}' already exists " + "in nodes! Please change the variant " + "name to ensure unique output." + ).format(subset_name) + ) def create_instance_node( self, @@ -161,10 +177,7 @@ def create(self, subset_name, instance_data, pre_create_data): self.set_selected_nodes(pre_create_data) # make sure subset name is unique - if self.check_existing_subset(subset_name, instance_data): - raise NukeCreatorError( - ("subset {} is already published" - "definition.").format(subset_name)) + self.check_existing_subset(subset_name) try: instance_node = self.create_instance_node( @@ -314,10 +327,7 @@ def create(self, subset_name, instance_data, pre_create_data): self.set_selected_nodes(pre_create_data) # make sure subset name is unique - if self.check_existing_subset(subset_name, instance_data): - raise NukeCreatorError( - ("subset {} is already published" - "definition.").format(subset_name)) + self.check_existing_subset(subset_name) instance_node = self.create_instance_node( subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_backdrop.py b/openpype/hosts/nuke/plugins/create/create_backdrop.py index ebc66e95a77..efed1a14938 100644 --- a/openpype/hosts/nuke/plugins/create/create_backdrop.py +++ b/openpype/hosts/nuke/plugins/create/create_backdrop.py @@ -43,10 +43,8 @@ def create_instance_node( return created_node def create(self, subset_name, instance_data, pre_create_data): - if self.check_existing_subset(subset_name, instance_data): - raise NukeCreatorError( - ("Subset name '{}' is already used. " - "Please specify different Variant.").format(subset_name)) + # make sure subset name is unique + self.check_existing_subset(subset_name) instance = super(CreateBackdrop, self).create( subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_camera.py b/openpype/hosts/nuke/plugins/create/create_camera.py index dc4a30f513d..5553645af68 100644 --- a/openpype/hosts/nuke/plugins/create/create_camera.py +++ b/openpype/hosts/nuke/plugins/create/create_camera.py @@ -44,10 +44,8 @@ def create_instance_node( return created_node def create(self, subset_name, instance_data, pre_create_data): - if self.check_existing_subset(subset_name, instance_data): - raise NukeCreatorError( - ("Subset name '{}' is already used. " - "Please specify different Variant.").format(subset_name)) + # make sure subset name is unique + self.check_existing_subset(subset_name) instance = super(CreateCamera, self).create( subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_gizmo.py b/openpype/hosts/nuke/plugins/create/create_gizmo.py index 1869874e226..e3ce70dd594 100644 --- a/openpype/hosts/nuke/plugins/create/create_gizmo.py +++ b/openpype/hosts/nuke/plugins/create/create_gizmo.py @@ -45,10 +45,8 @@ def create_instance_node( return created_node def create(self, subset_name, instance_data, pre_create_data): - if self.check_existing_subset(subset_name, instance_data): - raise NukeCreatorError( - ("Subset name '{}' is already used. " - "Please specify different Variant.").format(subset_name)) + # make sure subset name is unique + self.check_existing_subset(subset_name) instance = super(CreateGizmo, self).create( subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_model.py b/openpype/hosts/nuke/plugins/create/create_model.py index 53b3a582880..08a53abca2a 100644 --- a/openpype/hosts/nuke/plugins/create/create_model.py +++ b/openpype/hosts/nuke/plugins/create/create_model.py @@ -45,10 +45,8 @@ def create_instance_node( return created_node def create(self, subset_name, instance_data, pre_create_data): - if self.check_existing_subset(subset_name, instance_data): - raise NukeCreatorError( - ("Subset name '{}' is already used. " - "Please specify different Variant.").format(subset_name)) + # make sure subset name is unique + self.check_existing_subset(subset_name) instance = super(CreateModel, self).create( subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_source.py b/openpype/hosts/nuke/plugins/create/create_source.py index 35fe42c16b9..06cf4e6cbf5 100644 --- a/openpype/hosts/nuke/plugins/create/create_source.py +++ b/openpype/hosts/nuke/plugins/create/create_source.py @@ -49,10 +49,7 @@ def create(self, subset_name, instance_data, pre_create_data): _subset_name = subset_name + node_name # make sure subset name is unique - if self.check_existing_subset(_subset_name, instance_data): - raise NukeCreatorError( - ("subset {} is already published" - "definition.").format(_subset_name)) + self.check_existing_subset(_subset_name) instance_node = self.create_instance_node( _subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_write_image.py b/openpype/hosts/nuke/plugins/create/create_write_image.py index cf70063abc5..1e23b3ad7f9 100644 --- a/openpype/hosts/nuke/plugins/create/create_write_image.py +++ b/openpype/hosts/nuke/plugins/create/create_write_image.py @@ -118,10 +118,7 @@ def create(self, subset_name, instance_data, pre_create_data): self.set_selected_nodes(pre_create_data) # make sure subset name is unique - if self.check_existing_subset(subset_name, instance_data): - raise napi.NukeCreatorError( - ("subset {} is already published" - "definition.").format(subset_name)) + self.check_existing_subset(subset_name) instance_node = self.create_instance_node( subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_write_prerender.py b/openpype/hosts/nuke/plugins/create/create_write_prerender.py index daa2319c4b1..a15f362dd11 100644 --- a/openpype/hosts/nuke/plugins/create/create_write_prerender.py +++ b/openpype/hosts/nuke/plugins/create/create_write_prerender.py @@ -133,10 +133,7 @@ def create(self, subset_name, instance_data, pre_create_data): self.set_selected_nodes(pre_create_data) # make sure subset name is unique - if self.check_existing_subset(subset_name, instance_data): - raise napi.NukeCreatorError( - ("subset {} is already published" - "definition.").format(subset_name)) + self.check_existing_subset(subset_name) instance_node = self.create_instance_node( subset_name, diff --git a/openpype/hosts/nuke/plugins/create/create_write_render.py b/openpype/hosts/nuke/plugins/create/create_write_render.py index 85133458d10..481d1d22016 100644 --- a/openpype/hosts/nuke/plugins/create/create_write_render.py +++ b/openpype/hosts/nuke/plugins/create/create_write_render.py @@ -122,10 +122,7 @@ def create(self, subset_name, instance_data, pre_create_data): self.set_selected_nodes(pre_create_data) # make sure subset name is unique - if self.check_existing_subset(subset_name, instance_data): - raise napi.NukeCreatorError( - ("subset {} is already published" - "definition.").format(subset_name)) + self.check_existing_subset(subset_name) instance_node = self.create_instance_node( subset_name, diff --git a/openpype/hosts/nuke/plugins/publish/extract_render_local.py b/openpype/hosts/nuke/plugins/publish/extract_render_local.py index 811b2d4ffbb..81fe8cd528a 100644 --- a/openpype/hosts/nuke/plugins/publish/extract_render_local.py +++ b/openpype/hosts/nuke/plugins/publish/extract_render_local.py @@ -33,12 +33,10 @@ def process(self, instance): if x.Class() == "Write": node = x - self.log.debug("instance collected: {}".format(instance.data)) - first_frame = instance.data.get("frameStartHandle", None) last_frame = instance.data.get("frameEndHandle", None) - node_subset_name = instance.data.get("name", None) + node_subset_name = instance.data["subset"] self.log.info("Starting render") self.log.info("Start frame: {}".format(first_frame)) @@ -65,7 +63,7 @@ def process(self, instance): # Render frames nuke.execute( - node_subset_name, + str(node_subset_name), int(first_frame), int(last_frame) ) diff --git a/openpype/hosts/nuke/plugins/publish/validate_output_resolution.py b/openpype/hosts/nuke/plugins/publish/validate_output_resolution.py index 70451ebc959..dbcd216a84c 100644 --- a/openpype/hosts/nuke/plugins/publish/validate_output_resolution.py +++ b/openpype/hosts/nuke/plugins/publish/validate_output_resolution.py @@ -23,7 +23,7 @@ class ValidateOutputResolution( order = pyblish.api.ValidatorOrder optional = True families = ["render"] - label = "Write Resolution" + label = "Write resolution" hosts = ["nuke"] actions = [RepairAction] diff --git a/openpype/plugins/publish/collect_from_create_context.py b/openpype/plugins/publish/collect_from_create_context.py index 9a740c10cd7..d3398c885ed 100644 --- a/openpype/plugins/publish/collect_from_create_context.py +++ b/openpype/plugins/publish/collect_from_create_context.py @@ -37,7 +37,6 @@ def process(self, context): context.data["projectName"] = project_name for created_instance in create_context.instances: - self.log.info(f"created_instance:: {created_instance}") instance_data = created_instance.data_to_store() if instance_data["active"]: thumbnail_path = thumbnail_paths_by_instance_id.get(