diff --git a/pype/nuke/lib.py b/pype/nuke/lib.py index 82244afdb5..9fddee5490 100644 --- a/pype/nuke/lib.py +++ b/pype/nuke/lib.py @@ -378,6 +378,14 @@ def add_rendering_knobs(node): return node +def add_deadline_tab(node): + node.addKnob(nuke.Tab_Knob("Deadline")) + + knob = nuke.Int_Knob("deadlineChunkSize", "Chunk Size") + knob.setValue(1) + node.addKnob(knob) + + def set_viewers_colorspace(viewer): ''' Adds correct colorspace to viewer diff --git a/pype/plugins/nuke/create/create_write.py b/pype/plugins/nuke/create/create_write.py index 03107238b5..51ffa9e986 100644 --- a/pype/plugins/nuke/create/create_write.py +++ b/pype/plugins/nuke/create/create_write.py @@ -1,7 +1,7 @@ from collections import OrderedDict import avalon.api import avalon.nuke -from pype.nuke.lib import create_write_node +from pype.nuke.lib import create_write_node, add_deadline_tab from pype import api as pype from pypeapp import config @@ -51,7 +51,7 @@ class CreateWriteRender(avalon.nuke.Creator): node = 'write' instance = nuke.toNode(self.data["subset"]) - + node = None if not instance: write_data = { "class": node, @@ -69,9 +69,10 @@ class CreateWriteRender(avalon.nuke.Creator): write_data.update({ "fpath_template": "{work}/renders/nuke/{subset}/{subset}.{frame}.{ext}"}) - create_write_node(self.data["subset"], write_data) + node = create_write_node(self.data["subset"], write_data) - return + # Deadline tab. + add_deadline_tab(node) class CreateWritePrerender(avalon.nuke.Creator): diff --git a/pype/plugins/nuke/publish/collect_writes.py b/pype/plugins/nuke/publish/collect_writes.py index 7104e3bd05..29ae6cb929 100644 --- a/pype/plugins/nuke/publish/collect_writes.py +++ b/pype/plugins/nuke/publish/collect_writes.py @@ -101,6 +101,11 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): "fps": instance.context.data["fps"] } + group_node = [x for x in instance if x.Class() == "Group"][0] + deadlineChunkSize = 1 + if "deadlineChunkSize" in group_node.knobs(): + deadlineChunkSize = group_node["deadlineChunkSize"].value() + instance.data.update({ "versionData": version_data, "path": path, @@ -112,6 +117,7 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): "frameEnd": last_frame, "outputType": output_type, "colorspace": node["colorspace"].value(), + "deadlineChunkSize": deadlineChunkSize }) self.log.debug("instance.data: {}".format(instance.data)) diff --git a/pype/plugins/nuke/publish/submit_nuke_deadline.py b/pype/plugins/nuke/publish/submit_nuke_deadline.py index 0017de3ec4..ef971f3a37 100644 --- a/pype/plugins/nuke/publish/submit_nuke_deadline.py +++ b/pype/plugins/nuke/publish/submit_nuke_deadline.py @@ -84,6 +84,7 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin): start=int(instance.data["frameStart"]), end=int(instance.data["frameEnd"]) ), + "ChunkSize": instance.data["deadlineChunkSize"], "Comment": comment, diff --git a/pype/plugins/nuke/publish/validate_write_deadline_tab.py b/pype/plugins/nuke/publish/validate_write_deadline_tab.py new file mode 100644 index 0000000000..0c222a164a --- /dev/null +++ b/pype/plugins/nuke/publish/validate_write_deadline_tab.py @@ -0,0 +1,42 @@ +import pyblish.api +import pype.nuke.lib + + +class RepairNukeWriteDeadlineTab(pyblish.api.Action): + + label = "Repair" + icon = "wrench" + on = "failed" + + def process(self, context, plugin): + + # Get the errored instances + failed = [] + for result in context.data["results"]: + if (result["error"] is not None and result["instance"] is not None + and result["instance"] not in failed): + failed.append(result["instance"]) + + # Apply pyblish.logic to get the instances for the plug-in + instances = pyblish.api.instances_by_plugin(failed, plugin) + + for instance in instances: + group_node = [x for x in instance if x.Class() == "Group"][0] + pype.nuke.lib.add_deadline_tab(group_node) + + +class ValidateNukeWriteDeadlineTab(pyblish.api.InstancePlugin): + """Ensure Deadline tab is present and current.""" + + order = pyblish.api.ValidatorOrder + label = "Deadline Tab" + hosts = ["nuke"] + optional = True + families = ["write"] + actions = [RepairNukeWriteDeadlineTab] + + def process(self, instance): + group_node = [x for x in instance if x.Class() == "Group"][0] + + msg = "Deadline tab missing on \"{}\"".format(group_node.name()) + assert "Deadline" in group_node.knobs(), msg