From 6de4ceabd38d84e4b410e5ad2cb795b5e34c1fa0 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Thu, 1 Jun 2023 23:13:34 +0800 Subject: [PATCH] custom settings for write node without publish and register --- .../nuke/startup/ops_write_node_no_publish.py | 67 +++++++++++++++++++ .../defaults/project_settings/nuke.json | 7 ++ 2 files changed, 74 insertions(+) create mode 100644 openpype/hosts/nuke/startup/ops_write_node_no_publish.py diff --git a/openpype/hosts/nuke/startup/ops_write_node_no_publish.py b/openpype/hosts/nuke/startup/ops_write_node_no_publish.py new file mode 100644 index 0000000000..74be6c8de9 --- /dev/null +++ b/openpype/hosts/nuke/startup/ops_write_node_no_publish.py @@ -0,0 +1,67 @@ +import os +import nuke +from pathlib import Path +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"] + ) + version_int = 0 + version_int += 1 + if version_int: + version_int += 1 + + 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 f01bdf7d50..ae37a14494 100644 --- a/openpype/settings/defaults/project_settings/nuke.json +++ b/openpype/settings/defaults/project_settings/nuke.json @@ -222,6 +222,13 @@ "title": "OpenPype Docs", "command": "import webbrowser;webbrowser.open(url='https://openpype.io/docs/artist_hosts_nuke_tut')", "tooltip": "Open the OpenPype Nuke user doc page" + }, + { + "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();", + "tooltip": "Open the OpenPype Nuke user doc page" } ] },