mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 21:32:15 +01:00
adding CreateWrite,
updating pype.nuke modules
This commit is contained in:
parent
ddcb6f88de
commit
3943b0c3dc
5 changed files with 141 additions and 55 deletions
|
|
@ -7,6 +7,8 @@ from .. import api as pype
|
|||
|
||||
from pype.nuke import menu
|
||||
|
||||
from .lib import create_write_node
|
||||
|
||||
import nuke
|
||||
|
||||
# removing logger handler created in avalon_core
|
||||
|
|
@ -81,6 +83,7 @@ def reload_config():
|
|||
"{}.templates".format(AVALON_CONFIG),
|
||||
"{}.nuke".format(AVALON_CONFIG),
|
||||
"{}.nuke.lib".format(AVALON_CONFIG),
|
||||
"{}.nuke.templates".format(AVALON_CONFIG),
|
||||
"{}.nuke.menu".format(AVALON_CONFIG)
|
||||
):
|
||||
log.info("Reloading module: {}...".format(module))
|
||||
|
|
@ -105,6 +108,10 @@ def install():
|
|||
|
||||
# Disable all families except for the ones we explicitly want to see
|
||||
family_states = [
|
||||
"render",
|
||||
"still"
|
||||
"lifeGroup",
|
||||
"backdrop",
|
||||
"imagesequence",
|
||||
"mov"
|
||||
"camera",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import sys
|
||||
from collections import OrderedDict
|
||||
from pprint import pprint
|
||||
from avalon.vendor.Qt import QtGui
|
||||
import avalon.nuke
|
||||
|
|
@ -12,6 +13,39 @@ self = sys.modules[__name__]
|
|||
self._project = None
|
||||
|
||||
|
||||
def create_write_node(name, avalon_data, data_templates):
|
||||
from .templates import (
|
||||
get_dataflow,
|
||||
get_colorspace
|
||||
)
|
||||
nuke_dataflow_writes = get_dataflow(**data_templates)
|
||||
nuke_colorspace_writes = get_colorspace(**data_templates)
|
||||
|
||||
data = OrderedDict({
|
||||
"file": "pathToFile/file.exr"
|
||||
})
|
||||
|
||||
# adding dataflow template
|
||||
{data.update({k: v})
|
||||
for k, v in nuke_dataflow_writes.items()
|
||||
if k not in ["id", "previous"]}
|
||||
|
||||
# adding dataflow template
|
||||
{data.update({k: v})
|
||||
for k, v in nuke_colorspace_writes.items()}
|
||||
|
||||
data = avalon.nuke.lib.fix_data_for_node_create(data)
|
||||
|
||||
log.info(data)
|
||||
|
||||
instance = avalon.nuke.lib.add_write_node(
|
||||
name,
|
||||
**data
|
||||
)
|
||||
instance = avalon.nuke.lib.imprint(instance, avalon_data)
|
||||
return instance
|
||||
|
||||
|
||||
def update_frame_range(start, end, root=None):
|
||||
"""Set Nuke script start and end frame range
|
||||
|
||||
|
|
|
|||
35
pype/nuke/templates.py
Normal file
35
pype/nuke/templates.py
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
from pype import api as pype
|
||||
|
||||
log = pype.Logger.getLogger(__name__, "nuke")
|
||||
|
||||
|
||||
def get_dataflow(**kwarg):
|
||||
host = kwarg.get("host", "nuke")
|
||||
cls = kwarg.get("cls", None)
|
||||
family = kwarg.get("family", None)
|
||||
assert any([host, cls]), log.error("nuke.templates.get_dataflow():"
|
||||
"Missing mandatory kwargs `host`, `cls`")
|
||||
|
||||
nuke_dataflow = getattr(pype.Dataflow, str(host), None)
|
||||
nuke_dataflow_node = getattr(nuke_dataflow.nodes, str(cls), None)
|
||||
if family:
|
||||
nuke_dataflow_node = getattr(nuke_dataflow_node, str(family), None)
|
||||
|
||||
log.info("Dataflow: {}".format(nuke_dataflow_node))
|
||||
return nuke_dataflow_node
|
||||
|
||||
|
||||
def get_colorspace(**kwarg):
|
||||
host = kwarg.get("host", "nuke")
|
||||
cls = kwarg.get("cls", None)
|
||||
family = kwarg.get("family", None)
|
||||
assert any([host, cls]), log.error("nuke.templates.get_colorspace():"
|
||||
"Missing mandatory kwargs `host`, `cls`")
|
||||
|
||||
nuke_colorspace = getattr(pype.Colorspace, str(host), None)
|
||||
nuke_colorspace_node = getattr(nuke_colorspace, str(cls), None)
|
||||
if family:
|
||||
nuke_colorspace_node = getattr(nuke_colorspace_node, str(family), None)
|
||||
|
||||
log.info("Colorspace: {}".format(nuke_colorspace_node))
|
||||
return nuke_colorspace_node
|
||||
65
pype/plugins/nuke/create/create_write.py
Normal file
65
pype/plugins/nuke/create/create_write.py
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
import avalon.api
|
||||
import avalon.nuke
|
||||
from pype.nuke import (
|
||||
create_write_node
|
||||
)
|
||||
from pype import api as pype
|
||||
|
||||
log = pype.Logger.getLogger(__name__, "nuke")
|
||||
|
||||
|
||||
class CrateWriteRender(avalon.nuke.Creator):
|
||||
name = "WriteRender"
|
||||
label = "Create Write Render"
|
||||
hosts = ["nuke"]
|
||||
family = "render"
|
||||
icon = "sign-out"
|
||||
|
||||
def process(self):
|
||||
instance = super(CrateWriteRender, self).process()
|
||||
|
||||
if not instance:
|
||||
data_templates = {
|
||||
"cls": "write",
|
||||
"family": self.family
|
||||
}
|
||||
create_write_node(self.name, self.data, data_templates)
|
||||
return
|
||||
|
||||
|
||||
class CrateWritePrerender(avalon.nuke.Creator):
|
||||
name = "WritePrerender"
|
||||
label = "Create Write Prerender"
|
||||
hosts = ["nuke"]
|
||||
family = "prerender"
|
||||
icon = "sign-out"
|
||||
|
||||
def process(self):
|
||||
instance = super(CrateWritePrerender, self).process()
|
||||
|
||||
if not instance:
|
||||
data_templates = {
|
||||
"cls": "write",
|
||||
"family": self.family
|
||||
}
|
||||
create_write_node(self.name, self.data, data_templates)
|
||||
return None
|
||||
|
||||
|
||||
class CrateWriteStill(avalon.nuke.Creator):
|
||||
name = "WriteStill"
|
||||
label = "Create Write Still"
|
||||
hosts = ["nuke"]
|
||||
family = "still"
|
||||
icon = "image"
|
||||
|
||||
def process(self):
|
||||
instance = super(CrateWriteStill, self).process()
|
||||
|
||||
if not instance:
|
||||
data_templates = {
|
||||
"cls": "write",
|
||||
"family": self.family
|
||||
}
|
||||
create_write_node(self.name, self.data, data_templates)
|
||||
return
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
import os
|
||||
from pprint import pprint
|
||||
import avalon.api
|
||||
import avalon.nuke
|
||||
import nuke
|
||||
from app import api
|
||||
|
||||
|
||||
class CrateWriteExr(avalon.api.Creator):
|
||||
name = "Write_exr"
|
||||
label = "Create Write: exr"
|
||||
hosts = ["nuke"]
|
||||
family = "write"
|
||||
icon = "sign-out"
|
||||
# TODO: create container of metadata into user knob
|
||||
# TODO: if write node selected it will add metadata
|
||||
|
||||
# def __init__(self, *args, **kwargs):
|
||||
# super(CrateWriteExr, self).__init__(*args, **kwargs)
|
||||
# self.data.setdefault("subset", "this")
|
||||
|
||||
def process(self):
|
||||
templates = api.Templates(type=["dataflow", "metadata", "colorspace"])
|
||||
templates = templates.format()
|
||||
pprint(templates)
|
||||
# nuke = getattr(sys.modules["__main__"], "nuke", None)
|
||||
data = {}
|
||||
ext = "exr"
|
||||
|
||||
# todo: improve method of getting current environment
|
||||
# todo: pref avalon.Session over os.environ
|
||||
|
||||
workdir = os.path.normpath(os.environ["AVALON_WORKDIR"])
|
||||
|
||||
filename = "{}.####.exr".format(self.name)
|
||||
filepath = os.path.join(
|
||||
workdir,
|
||||
"render",
|
||||
ext,
|
||||
filename
|
||||
).replace("\\", "/")
|
||||
|
||||
with avalon.nuke.viewer_update_and_undo_stop():
|
||||
w = nuke.createNode(
|
||||
"Write",
|
||||
"name {}".format(self.name))
|
||||
# w.knob('colorspace').setValue()
|
||||
w.knob('file').setValue(filepath)
|
||||
w.knob('file_type').setValue(ext)
|
||||
w.knob('datatype').setValue("16 bit half")
|
||||
w.knob('compression').setValue("Zip (1 scanline)")
|
||||
w.knob('create_directories').setValue(True)
|
||||
w.knob('autocrop').setValue(True)
|
||||
|
||||
return data
|
||||
Loading…
Add table
Add a link
Reference in a new issue