From 66d0b1b25326a00926dc961728af1f054d2a9e0a Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 4 Nov 2019 19:28:39 +0100 Subject: [PATCH 1/2] feat(nuke): improving nuke features - loader reads fpath and convert to hashes in path - adding `review` knob to write - removing extract_frames.py to _unused plugins --- pype/nuke/lib.py | 4 ++++ .../extract_frames.py | 0 pype/plugins/nuke/load/load_sequence.py | 6 ++++++ pype/plugins/nuke/publish/collect_review.py | 21 ++++++++++++++----- pype/plugins/nuke/publish/collect_writes.py | 7 +++---- .../nuke/publish/extract_render_local.py | 1 + 6 files changed, 30 insertions(+), 9 deletions(-) rename pype/plugins/nuke/{publish => _publish_unused}/extract_frames.py (100%) diff --git a/pype/nuke/lib.py b/pype/nuke/lib.py index 7b0735234a..00a264c669 100644 --- a/pype/nuke/lib.py +++ b/pype/nuke/lib.py @@ -379,6 +379,10 @@ def add_rendering_knobs(node): knob = nuke.Boolean_Knob("render_farm", "Render on Farm") knob.setValue(False) node.addKnob(knob) + if "review" not in node.knobs(): + knob = nuke.Boolean_Knob("review", "Review") + knob.setValue(True) + node.addKnob(knob) return node diff --git a/pype/plugins/nuke/publish/extract_frames.py b/pype/plugins/nuke/_publish_unused/extract_frames.py similarity index 100% rename from pype/plugins/nuke/publish/extract_frames.py rename to pype/plugins/nuke/_publish_unused/extract_frames.py diff --git a/pype/plugins/nuke/load/load_sequence.py b/pype/plugins/nuke/load/load_sequence.py index 2946857e09..e1c75584d7 100644 --- a/pype/plugins/nuke/load/load_sequence.py +++ b/pype/plugins/nuke/load/load_sequence.py @@ -110,6 +110,7 @@ class LoadSequence(api.Loader): last += self.handle_end file = self.fname.replace("\\", "/") + log.info("file: {}\n".format(self.fname)) repr_cont = context["representation"]["context"] @@ -118,6 +119,11 @@ class LoadSequence(api.Loader): repr_cont["subset"], repr_cont["representation"]) + if "#" not in file: + frame = repr_cont.get("frame") + padding = len(frame) + file = file.replace(frame, "#"*padding) + # Create the Loader with the filename path set with viewer_update_and_undo_stop(): # TODO: it might be universal read to img/geo/camera diff --git a/pype/plugins/nuke/publish/collect_review.py b/pype/plugins/nuke/publish/collect_review.py index 0ab5424434..7e7cbedd6c 100644 --- a/pype/plugins/nuke/publish/collect_review.py +++ b/pype/plugins/nuke/publish/collect_review.py @@ -1,5 +1,5 @@ import pyblish.api - +import nuke class CollectReview(pyblish.api.InstancePlugin): """Collect review instance from rendered frames @@ -9,9 +9,20 @@ class CollectReview(pyblish.api.InstancePlugin): family = "review" label = "Collect Review" hosts = ["nuke"] - families = ["render", "render.local"] + families = ["render", "render.local", "render.farm"] def process(self, instance): - if instance.data["families"]: - instance.data["families"].append("review") - self.log.info("Review collected: `{}`".format(instance)) + + node = instance[0] + + if "review" not in node.knobs(): + knob = nuke.Boolean_Knob("review", "Review") + knob.setValue(True) + node.addKnob(knob) + + if not node["review"].value(): + return + + instance.data["families"].append("review") + instance.data['families'].append('ftrack') + self.log.info("Review collected: `{}`".format(instance)) diff --git a/pype/plugins/nuke/publish/collect_writes.py b/pype/plugins/nuke/publish/collect_writes.py index adfc5c69f0..fa92192563 100644 --- a/pype/plugins/nuke/publish/collect_writes.py +++ b/pype/plugins/nuke/publish/collect_writes.py @@ -65,7 +65,6 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): ) if 'render' in instance.data['families']: - instance.data['families'].append('ftrack') if "representations" not in instance.data: instance.data["representations"] = list() @@ -78,15 +77,15 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): try: collected_frames = os.listdir(output_dir) + if collected_frames: + representation['frameStart'] = "%0{}d".format( + len(str(last_frame))) % first_frame representation['files'] = collected_frames instance.data["representations"].append(representation) except Exception: instance.data["representations"].append(representation) self.log.debug("couldn't collect frames: {}".format(label)) - if 'render.local' in instance.data['families']: - instance.data['families'].append('ftrack') - # Add version data to instance version_data = { "handles": handle_start, diff --git a/pype/plugins/nuke/publish/extract_render_local.py b/pype/plugins/nuke/publish/extract_render_local.py index 29de347288..825db67e9d 100644 --- a/pype/plugins/nuke/publish/extract_render_local.py +++ b/pype/plugins/nuke/publish/extract_render_local.py @@ -58,6 +58,7 @@ class NukeRenderLocal(pype.api.Extractor): repre = { 'name': ext, 'ext': ext, + 'frameStart': "%0{}d".format(len(str(last_frame))) % first_frame, 'files': collected_frames, "stagingDir": out_dir, "anatomy_template": "render" From a188d37d624009ad018c29101c76734848afbee6 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 4 Nov 2019 19:37:33 +0100 Subject: [PATCH 2/2] fix(gloabal): validator didn't work properly --- .../global/publish/validate_custom_ftrack_attributes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pype/plugins/global/publish/validate_custom_ftrack_attributes.py b/pype/plugins/global/publish/validate_custom_ftrack_attributes.py index 0d0eb2a7f0..2386b359e4 100644 --- a/pype/plugins/global/publish/validate_custom_ftrack_attributes.py +++ b/pype/plugins/global/publish/validate_custom_ftrack_attributes.py @@ -46,7 +46,8 @@ class ValidateFtrackAttributes(pyblish.api.InstancePlugin): "Missing FTrack Task entity in context") host = pyblish.api.current_host() - to_check = context.data["presets"][host].get("ftrack_attributes") + to_check = context.data["presets"].get( + host, {}).get("ftrack_attributes") if not to_check: self.log.warning("ftrack_attributes preset not found") return