refactor custom write node script

This commit is contained in:
Kayla Man 2023-06-02 17:11:16 +08:00
parent 11db326cc5
commit 27ae0d9f20
3 changed files with 82 additions and 63 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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"
}
]