[Automated] Merged develop into main

This commit is contained in:
ynbot 2024-02-01 16:47:37 +01:00 committed by GitHub
commit 438a989aa6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 147 additions and 8 deletions

View file

@ -35,6 +35,7 @@ body:
label: Version
description: What version are you running? Look to OpenPype Tray
options:
- 3.18.6-nightly.2
- 3.18.6-nightly.1
- 3.18.5
- 3.18.5-nightly.3
@ -134,7 +135,6 @@ body:
- 3.15.9-nightly.1
- 3.15.8
- 3.15.8-nightly.3
- 3.15.8-nightly.2
validations:
required: true
- type: dropdown

View file

@ -43,7 +43,8 @@ from .lib import (
get_node_data,
set_node_data,
update_node_data,
create_write_node
create_write_node,
link_knobs
)
from .utils import (
colorspace_exists_on_node,
@ -95,6 +96,7 @@ __all__ = (
"set_node_data",
"update_node_data",
"create_write_node",
"link_knobs",
"colorspace_exists_on_node",
"get_colorspace_list",

View file

@ -3499,3 +3499,27 @@ def create_camera_node_by_version():
return nuke.createNode("Camera4")
else:
return nuke.createNode("Camera2")
def link_knobs(knobs, node, group_node):
"""Link knobs from inside `group_node`"""
missing_knobs = []
for knob in knobs:
if knob in group_node.knobs():
continue
if knob not in node.knobs().keys():
missing_knobs.append(knob)
link = nuke.Link_Knob("")
link.makeLink(node.name(), knob)
link.setName(knob)
link.setFlag(0x1000)
group_node.addKnob(link)
if missing_knobs:
raise ValueError(
"Write node exposed knobs missing:\n\n{}\n\nPlease review"
" project settings.".format("\n".join(missing_knobs))
)

View file

@ -44,7 +44,8 @@ from .lib import (
get_view_process_node,
get_viewer_config_from_string,
deprecated,
get_filenames_without_hash
get_filenames_without_hash,
link_knobs
)
from .pipeline import (
list_instances,
@ -1344,3 +1345,11 @@ def _remove_old_knobs(node):
node.removeKnob(knob)
except ValueError:
pass
def exposed_write_knobs(settings, plugin_name, instance_node):
exposed_knobs = settings["nuke"]["create"][plugin_name]["exposed_knobs"]
if exposed_knobs:
instance_node.addKnob(nuke.Text_Knob('', 'Write Knobs'))
write_node = nuke.allNodes(group=instance_node, filter="Write")[0]
link_knobs(exposed_knobs, write_node, instance_node)

View file

@ -12,6 +12,7 @@ from openpype.lib import (
EnumDef
)
from openpype.hosts.nuke import api as napi
from openpype.hosts.nuke.api.plugin import exposed_write_knobs
class CreateWriteImage(napi.NukeWriteCreator):
@ -132,6 +133,10 @@ class CreateWriteImage(napi.NukeWriteCreator):
instance.data_to_store()
)
exposed_write_knobs(
self.project_settings, self.__class__.__name__, instance_node
)
return instance
except Exception as er:

View file

@ -9,6 +9,7 @@ from openpype.lib import (
BoolDef
)
from openpype.hosts.nuke import api as napi
from openpype.hosts.nuke.api.plugin import exposed_write_knobs
class CreateWritePrerender(napi.NukeWriteCreator):
@ -119,6 +120,10 @@ class CreateWritePrerender(napi.NukeWriteCreator):
instance.data_to_store()
)
exposed_write_knobs(
self.project_settings, self.__class__.__name__, instance_node
)
return instance
except Exception as er:

View file

@ -9,6 +9,7 @@ from openpype.lib import (
BoolDef
)
from openpype.hosts.nuke import api as napi
from openpype.hosts.nuke.api.plugin import exposed_write_knobs
class CreateWriteRender(napi.NukeWriteCreator):
@ -113,6 +114,10 @@ class CreateWriteRender(napi.NukeWriteCreator):
instance.data_to_store()
)
exposed_write_knobs(
self.project_settings, self.__class__.__name__, instance_node
)
return instance
except Exception as er:

View file

@ -0,0 +1,77 @@
import pyblish.api
from openpype.pipeline.publish import get_errored_instances_from_context
from openpype.hosts.nuke.api.lib import link_knobs
from openpype.pipeline.publish import (
OptionalPyblishPluginMixin,
PublishValidationError
)
class RepairExposedKnobs(pyblish.api.Action):
label = "Repair"
on = "failed"
icon = "wrench"
def process(self, context, plugin):
instances = get_errored_instances_from_context(context)
for instance in instances:
child_nodes = (
instance.data.get("transientData", {}).get("childNodes")
or instance
)
write_group_node = instance.data["transientData"]["node"]
# get write node from inside of group
write_node = None
for x in child_nodes:
if x.Class() == "Write":
write_node = x
plugin_name = plugin.families_mapping[instance.data["family"]]
nuke_settings = instance.context.data["project_settings"]["nuke"]
create_settings = nuke_settings["create"][plugin_name]
exposed_knobs = create_settings["exposed_knobs"]
link_knobs(exposed_knobs, write_node, write_group_node)
class ValidateExposedKnobs(
OptionalPyblishPluginMixin,
pyblish.api.InstancePlugin
):
""" Validate write node exposed knobs.
Compare exposed linked knobs to settings.
"""
order = pyblish.api.ValidatorOrder
optional = True
families = ["render", "prerender", "image"]
label = "Validate Exposed Knobs"
actions = [RepairExposedKnobs]
hosts = ["nuke"]
families_mapping = {
"render": "CreateWriteRender",
"prerender": "CreateWritePrerender",
"image": "CreateWriteImage"
}
def process(self, instance):
if not self.is_active(instance.data):
return
plugin = self.families_mapping[instance.data["family"]]
group_node = instance.data["transientData"]["node"]
nuke_settings = instance.context.data["project_settings"]["nuke"]
create_settings = nuke_settings["create"][plugin]
exposed_knobs = create_settings["exposed_knobs"]
unexposed_knobs = []
for knob in exposed_knobs:
if knob not in group_node.knobs():
unexposed_knobs.append(knob)
if unexposed_knobs:
raise PublishValidationError(
"Missing exposed knobs: {}".format(unexposed_knobs)
)

View file

@ -10,7 +10,7 @@ from openpype.hosts.nuke.api.lib import (
from openpype.pipeline.publish import (
PublishXmlValidationError,
OptionalPyblishPluginMixin,
OptionalPyblishPluginMixin
)

View file

@ -55,7 +55,10 @@ class CreateWriteRenderModel(BaseSettingsModel):
enum_resolver=instance_attributes_enum,
title="Instance attributes"
)
exposed_knobs: list[str] = SettingsField(
title="Write Node Exposed Knobs",
default_factory=list
)
prenodes: list[PrenodeModel] = SettingsField(
default_factory=list,
title="Preceding nodes",
@ -81,7 +84,10 @@ class CreateWritePrerenderModel(BaseSettingsModel):
enum_resolver=instance_attributes_enum,
title="Instance attributes"
)
exposed_knobs: list[str] = SettingsField(
title="Write Node Exposed Knobs",
default_factory=list
)
prenodes: list[PrenodeModel] = SettingsField(
default_factory=list,
title="Preceding nodes",
@ -107,7 +113,10 @@ class CreateWriteImageModel(BaseSettingsModel):
enum_resolver=instance_attributes_enum,
title="Instance attributes"
)
exposed_knobs: list[str] = SettingsField(
title="Write Node Exposed Knobs",
default_factory=list
)
prenodes: list[PrenodeModel] = SettingsField(
default_factory=list,
title="Preceding nodes",
@ -146,6 +155,7 @@ DEFAULT_CREATE_SETTINGS = {
"reviewable",
"farm_rendering"
],
"exposed_knobs": [],
"prenodes": [
{
"name": "Reformat01",
@ -179,6 +189,7 @@ DEFAULT_CREATE_SETTINGS = {
"farm_rendering",
"use_range_limit"
],
"exposed_knobs": [],
"prenodes": []
},
"CreateWriteImage": {
@ -191,6 +202,7 @@ DEFAULT_CREATE_SETTINGS = {
"instance_attributes": [
"use_range_limit"
],
"exposed_knobs": [],
"prenodes": [
{
"name": "FrameHold01",

View file

@ -1 +1 @@
__version__ = "0.1.8"
__version__ = "0.1.9"