From 7bf758a0a6a51483206ebe0083a900e72bb781ef Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Fri, 2 Aug 2019 10:44:32 +0100 Subject: [PATCH] Fix publishing for new write instances. - All nodes in in the group are collected in the instance. - Fix fetching the write node from the group nodes. - Ensure output directory exists. Can be done with newer write nodes in Nuke, this makes it backwards compatible if needed. --- pype/plugins/nuke/publish/collect_instances.py | 9 ++++++++- pype/plugins/nuke/publish/collect_writes.py | 10 +++++----- pype/plugins/nuke/publish/extract_render_local.py | 10 +++++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/pype/plugins/nuke/publish/collect_instances.py b/pype/plugins/nuke/publish/collect_instances.py index 8d770ef0b5..2addc2c828 100644 --- a/pype/plugins/nuke/publish/collect_instances.py +++ b/pype/plugins/nuke/publish/collect_instances.py @@ -46,7 +46,14 @@ class CollectNukeInstances(pyblish.api.ContextPlugin): # Create instance instance = context.create_instance(subset) - instance.add(node) + instance.append(node) + + # Add all nodes in group instances. + if node.Class() == "Group": + node.begin() + for i in nuke.allNodes(): + instance.append(i) + node.end() family = avalon_knob_data["families"] if node["render"].value(): diff --git a/pype/plugins/nuke/publish/collect_writes.py b/pype/plugins/nuke/publish/collect_writes.py index f98a3a0f7d..00f0a7773b 100644 --- a/pype/plugins/nuke/publish/collect_writes.py +++ b/pype/plugins/nuke/publish/collect_writes.py @@ -15,12 +15,12 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): def process(self, instance): - # if not instance.data["publish"]: - # continue + node = None + for x in instance: + if x.Class() == "Write": + node = x - node = instance[0] - - if node.Class() != "Write": + if node is None: return self.log.debug("checking instance: {}".format(instance)) diff --git a/pype/plugins/nuke/publish/extract_render_local.py b/pype/plugins/nuke/publish/extract_render_local.py index 2b185720a6..3e3c7c6f57 100644 --- a/pype/plugins/nuke/publish/extract_render_local.py +++ b/pype/plugins/nuke/publish/extract_render_local.py @@ -20,7 +20,10 @@ class NukeRenderLocal(pype.api.Extractor): families = ["render.local"] def process(self, instance): - node = instance[0] + node = None + for x in instance: + if x.Class() == "Write": + node = x self.log.debug("instance collected: {}".format(instance.data)) @@ -32,6 +35,11 @@ class NukeRenderLocal(pype.api.Extractor): self.log.info("Start frame: {}".format(first_frame)) self.log.info("End frame: {}".format(last_frame)) + # Ensure output directory exists. + directory = os.path.dirname(node["file"].value()) + if not os.path.exists(directory): + os.makedirs(directory) + # Render frames nuke.execute( node_subset_name,