From 27ae0d9f206ce1b36cb243ce409b7ceafe805bea Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 2 Jun 2023 17:11:16 +0800 Subject: [PATCH] refactor custom write node script --- .../hosts/nuke/startup/custom_write_node.py | 81 +++++++++++++++++++ .../nuke/startup/ops_write_node_no_publish.py | 62 -------------- .../defaults/project_settings/nuke.json | 2 +- 3 files changed, 82 insertions(+), 63 deletions(-) create mode 100644 openpype/hosts/nuke/startup/custom_write_node.py delete mode 100644 openpype/hosts/nuke/startup/ops_write_node_no_publish.py diff --git a/openpype/hosts/nuke/startup/custom_write_node.py b/openpype/hosts/nuke/startup/custom_write_node.py new file mode 100644 index 0000000000..98751c2c7b --- /dev/null +++ b/openpype/hosts/nuke/startup/custom_write_node.py @@ -0,0 +1,81 @@ +import os +import nuke +from pathlib import Path +from openpype.hosts.nuke.api.lib import set_node_knobs_from_settings + + +frame_padding = 5 +temp_rendering_path_template = ( + "{work}/renders/nuke/{subset}/{subset}.{frame}.{ext}") + +knobs_setting = { + "knobs": [ + { + "type": "text", + "name": "file_type", + "value": "exr" + }, + { + "type": "text", + "name": "datatype", + "value": "16 bit half" + }, + { + "type": "text", + "name": "compression", + "value": "Zip (1 scanline)" + }, + { + "type": "bool", + "name": "autocrop", + "value": True + }, + { + "type": "color_gui", + "name": "tile_color", + "value": [ + 186, + 35, + 35, + 255 + ] + }, + { + "type": "text", + "name": "channels", + "value": "rgb" + }, + { + "type": "text", + "name": "colorspace", + "value": "linear" + }, + { + "type": "bool", + "name": "create_directories", + "value": True + } + ] +} + + +def main(): + write_selected_nodes = [ + s for s in nuke.selectedNodes() if s.Class() == "Write"] + + ext = None + knobs = knobs_setting["knobs"] + for knob in knobs: + if knob["name"] == "file_type": + ext = knob["value"] + for w in write_selected_nodes: + data = { + "work": os.getenv("AVALON_WORKDIR"), + "subset": w["name"].value(), + "frame": "#" * frame_padding, + "ext": ext + } + file_path = temp_rendering_path_template.format(**data) + file_path = file_path.replace("\\", "/") + w["file"].setValue(file_path) + set_node_knobs_from_settings(w, knobs) diff --git a/openpype/hosts/nuke/startup/ops_write_node_no_publish.py b/openpype/hosts/nuke/startup/ops_write_node_no_publish.py deleted file mode 100644 index 12a69ff378..0000000000 --- a/openpype/hosts/nuke/startup/ops_write_node_no_publish.py +++ /dev/null @@ -1,62 +0,0 @@ -import os -import nuke -from openpype.client import get_asset_by_name, get_project -from openpype.pipeline import Anatomy, legacy_io -from openpype.pipeline.template_data import get_template_data -from openpype.hosts.nuke.api.lib import ( - get_imageio_node_setting, - set_node_knobs_from_settings) - - -def main(): - project_name = legacy_io.Session["AVALON_PROJECT"] - asset_name = legacy_io.Session["AVALON_ASSET"] - task_name = legacy_io.Session["AVALON_TASK"] - # fetch asset docs - asset_doc = get_asset_by_name(project_name, asset_name) - - # get task type to fill the timer tag - # template = "{root[work]}/{project[name]}/{hierarchy}/{asset}" - anatomy = Anatomy(project_name) - project_doc = get_project(project_name) - template_data = get_template_data(project_doc, asset_doc) - template_data["root"] = anatomy.roots - template_data["task"] = {"name": task_name} - - padding = int( - anatomy.templates["render"]["frame_padding"] - ) - - node_settings = get_imageio_node_setting( - "Write", "CreateWriteRender", subset=None) - - ext = None - for knob in node_settings["knobs"]: - if knob["name"] == "file_type": - ext = knob["value"] - data = { - "asset": asset_name, - "task": task_name, - "subset": "non_publish_render", - "frame": "#" * padding, - "ext": ext - } - - write_selected_nodes = [ - s for s in nuke.selectedNodes() if s.Class() == "Write"] - - for i in range(len(write_selected_nodes)): - data.update({"version": i}) - data.update(template_data) - - anatomy_filled = anatomy.format(data) - folder = anatomy_filled["work"]["folder"] - render_folder = os.path.join(folder, "render_no_publish") - filename = anatomy_filled["render"]["file"] - file_path = os.path.join(render_folder, filename) - file_path = file_path.replace("\\", "/") - - knobs = node_settings["knobs"] - for w in write_selected_nodes: - w["file"].setValue(file_path) - set_node_knobs_from_settings(w, knobs) diff --git a/openpype/settings/defaults/project_settings/nuke.json b/openpype/settings/defaults/project_settings/nuke.json index ae37a14494..c2610591aa 100644 --- a/openpype/settings/defaults/project_settings/nuke.json +++ b/openpype/settings/defaults/project_settings/nuke.json @@ -227,7 +227,7 @@ "type": "action", "sourcetype": "python", "title": "Set non publish output for Write Node", - "command": "from openpype.hosts.nuke.startup.ops_write_node_no_publish import main;main();", + "command": "from openpype.hosts.nuke.startup.custom_write_node import main;main();", "tooltip": "Open the OpenPype Nuke user doc page" } ]