diff --git a/openpype/hosts/maya/api/lib.py b/openpype/hosts/maya/api/lib.py
index 909993a173..edf68ad6fc 100644
--- a/openpype/hosts/maya/api/lib.py
+++ b/openpype/hosts/maya/api/lib.py
@@ -2156,6 +2156,10 @@ def load_capture_preset(path=None, data=None):
for key in preset['Display Options']:
if key.startswith('background'):
disp_options[key] = preset['Display Options'][key]
+ disp_options[key][0] = (float(disp_options[key][0])/255)
+ disp_options[key][1] = (float(disp_options[key][1])/255)
+ disp_options[key][2] = (float(disp_options[key][2])/255)
+ disp_options[key].pop()
else:
disp_options['displayGradient'] = True
diff --git a/openpype/hosts/maya/plugins/load/load_ass.py b/openpype/hosts/maya/plugins/load/load_ass.py
index b4bbd93f99..b7d44dd431 100644
--- a/openpype/hosts/maya/plugins/load/load_ass.py
+++ b/openpype/hosts/maya/plugins/load/load_ass.py
@@ -81,7 +81,10 @@ class AssProxyLoader(openpype.hosts.maya.api.plugin.ReferenceLoader):
if c is not None:
cmds.setAttr(groupName + ".useOutlinerColor", 1)
cmds.setAttr(groupName + ".outlinerColor",
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
self[:] = nodes
diff --git a/openpype/hosts/maya/plugins/load/load_gpucache.py b/openpype/hosts/maya/plugins/load/load_gpucache.py
index 5b1b29e184..d0a83b8177 100644
--- a/openpype/hosts/maya/plugins/load/load_gpucache.py
+++ b/openpype/hosts/maya/plugins/load/load_gpucache.py
@@ -38,7 +38,10 @@ class GpuCacheLoader(api.Loader):
if c is not None:
cmds.setAttr(root + ".useOutlinerColor", 1)
cmds.setAttr(root + ".outlinerColor",
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
# Create transform with shape
transform_name = label + "_GPU"
diff --git a/openpype/hosts/maya/plugins/load/load_reference.py b/openpype/hosts/maya/plugins/load/load_reference.py
index 37a2b145d4..96269f2771 100644
--- a/openpype/hosts/maya/plugins/load/load_reference.py
+++ b/openpype/hosts/maya/plugins/load/load_reference.py
@@ -85,7 +85,11 @@ class ReferenceLoader(openpype.hosts.maya.api.plugin.ReferenceLoader):
c = colors.get(family)
if c is not None:
groupNode.useOutlinerColor.set(1)
- groupNode.outlinerColor.set(c[0], c[1], c[2])
+ groupNode.outlinerColor.set(
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
self[:] = newNodes
diff --git a/openpype/hosts/maya/plugins/load/load_vdb_to_redshift.py b/openpype/hosts/maya/plugins/load/load_vdb_to_redshift.py
index b705b55f4d..f5662ba462 100644
--- a/openpype/hosts/maya/plugins/load/load_vdb_to_redshift.py
+++ b/openpype/hosts/maya/plugins/load/load_vdb_to_redshift.py
@@ -62,7 +62,10 @@ class LoadVDBtoRedShift(api.Loader):
if c is not None:
cmds.setAttr(root + ".useOutlinerColor", 1)
cmds.setAttr(root + ".outlinerColor",
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
# Create VR
volume_node = cmds.createNode("RedshiftVolumeShape",
diff --git a/openpype/hosts/maya/plugins/load/load_vdb_to_vray.py b/openpype/hosts/maya/plugins/load/load_vdb_to_vray.py
index 82ccdb481b..80b453bd13 100644
--- a/openpype/hosts/maya/plugins/load/load_vdb_to_vray.py
+++ b/openpype/hosts/maya/plugins/load/load_vdb_to_vray.py
@@ -55,7 +55,10 @@ class LoadVDBtoVRay(api.Loader):
if c is not None:
cmds.setAttr(root + ".useOutlinerColor", 1)
cmds.setAttr(root + ".outlinerColor",
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
# Create VR
grid_node = cmds.createNode("VRayVolumeGrid",
diff --git a/openpype/hosts/maya/plugins/load/load_vrayproxy.py b/openpype/hosts/maya/plugins/load/load_vrayproxy.py
index d5d4a941e3..e70f40bf5a 100644
--- a/openpype/hosts/maya/plugins/load/load_vrayproxy.py
+++ b/openpype/hosts/maya/plugins/load/load_vrayproxy.py
@@ -74,7 +74,10 @@ class VRayProxyLoader(api.Loader):
if c is not None:
cmds.setAttr("{0}.useOutlinerColor".format(group_node), 1)
cmds.setAttr("{0}.outlinerColor".format(group_node),
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
return containerise(
name=name,
diff --git a/openpype/hosts/maya/plugins/load/load_vrayscene.py b/openpype/hosts/maya/plugins/load/load_vrayscene.py
index b0f0c2a54b..465dab2a76 100644
--- a/openpype/hosts/maya/plugins/load/load_vrayscene.py
+++ b/openpype/hosts/maya/plugins/load/load_vrayscene.py
@@ -53,7 +53,10 @@ class VRaySceneLoader(api.Loader):
if c is not None:
cmds.setAttr("{0}.useOutlinerColor".format(group_node), 1)
cmds.setAttr("{0}.outlinerColor".format(group_node),
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
return containerise(
name=name,
diff --git a/openpype/hosts/maya/plugins/load/load_yeti_cache.py b/openpype/hosts/maya/plugins/load/load_yeti_cache.py
index 43c8aa16a0..de0ea6823c 100644
--- a/openpype/hosts/maya/plugins/load/load_yeti_cache.py
+++ b/openpype/hosts/maya/plugins/load/load_yeti_cache.py
@@ -66,7 +66,10 @@ class YetiCacheLoader(api.Loader):
if c is not None:
cmds.setAttr(group_name + ".useOutlinerColor", 1)
cmds.setAttr(group_name + ".outlinerColor",
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
nodes.append(group_node)
diff --git a/openpype/hosts/maya/plugins/load/load_yeti_rig.py b/openpype/hosts/maya/plugins/load/load_yeti_rig.py
index a329be4cf5..3f67f98f51 100644
--- a/openpype/hosts/maya/plugins/load/load_yeti_rig.py
+++ b/openpype/hosts/maya/plugins/load/load_yeti_rig.py
@@ -84,7 +84,10 @@ class YetiRigLoader(openpype.hosts.maya.api.plugin.ReferenceLoader):
if c is not None:
cmds.setAttr(groupName + ".useOutlinerColor", 1)
cmds.setAttr(groupName + ".outlinerColor",
- c[0], c[1], c[2])
+ (float(c[0])/255),
+ (float(c[1])/255),
+ (float(c[2])/255)
+ )
self[:] = nodes
return nodes
diff --git a/openpype/hosts/maya/plugins/publish/extract_playblast.py b/openpype/hosts/maya/plugins/publish/extract_playblast.py
index 0dc91d67a9..4b777cdfe2 100644
--- a/openpype/hosts/maya/plugins/publish/extract_playblast.py
+++ b/openpype/hosts/maya/plugins/publish/extract_playblast.py
@@ -49,9 +49,6 @@ class ExtractPlayblast(openpype.api.Extractor):
preset['camera'] = camera
- preset['format'] = "image"
- preset['quality'] = 95
- preset['compression'] = "png"
preset['start_frame'] = start
preset['end_frame'] = end
camera_option = preset.get("camera_option", {})
diff --git a/openpype/hosts/maya/plugins/publish/extract_thumbnail.py b/openpype/hosts/maya/plugins/publish/extract_thumbnail.py
index 016efa6499..c888f03518 100644
--- a/openpype/hosts/maya/plugins/publish/extract_thumbnail.py
+++ b/openpype/hosts/maya/plugins/publish/extract_thumbnail.py
@@ -42,10 +42,6 @@ class ExtractThumbnail(openpype.api.Extractor):
# preset["off_screen"] = False
preset['camera'] = camera
- preset['format'] = "image"
- # preset['compression'] = "qt"
- preset['quality'] = 50
- preset['compression'] = "jpg"
preset['start_frame'] = instance.data["frameStart"]
preset['end_frame'] = instance.data["frameStart"]
preset['camera_options'] = {
diff --git a/openpype/hosts/maya/plugins/publish/validate_rendersettings.py b/openpype/hosts/maya/plugins/publish/validate_rendersettings.py
index 9aeaad7ff1..8d2c7d8f63 100644
--- a/openpype/hosts/maya/plugins/publish/validate_rendersettings.py
+++ b/openpype/hosts/maya/plugins/publish/validate_rendersettings.py
@@ -243,7 +243,10 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin):
"Cannot get value of {}.{}".format(
node, attribute_name))
else:
- if value != render_value:
+ # compare values as strings to get around various
+ # datatypes possible in Settings and Render
+ # Settings
+ if str(value) != str(render_value):
invalid = True
cls.log.error(
("Invalid value {} set on {}.{}. "
diff --git a/openpype/hosts/tvpaint/plugins/publish/collect_instances.py b/openpype/hosts/tvpaint/plugins/publish/collect_instances.py
index 61cf7eb780..9b11f9fe80 100644
--- a/openpype/hosts/tvpaint/plugins/publish/collect_instances.py
+++ b/openpype/hosts/tvpaint/plugins/publish/collect_instances.py
@@ -1,3 +1,4 @@
+import os
import json
import copy
import pyblish.api
@@ -109,7 +110,7 @@ class CollectInstances(pyblish.api.ContextPlugin):
return {
"family": "review",
- "asset": context.data["workfile_context"]["asset"],
+ "asset": context.data["asset"],
# Dummy subset name
"subset": "reviewMain"
}
diff --git a/openpype/hosts/tvpaint/plugins/publish/collect_workfile.py b/openpype/hosts/tvpaint/plugins/publish/collect_workfile.py
new file mode 100644
index 0000000000..b059be90bf
--- /dev/null
+++ b/openpype/hosts/tvpaint/plugins/publish/collect_workfile.py
@@ -0,0 +1,43 @@
+import os
+import json
+import pyblish.api
+from avalon import io
+
+
+class CollectWorkfile(pyblish.api.ContextPlugin):
+ label = "Collect Workfile"
+ order = pyblish.api.CollectorOrder - 1
+ hosts = ["tvpaint"]
+
+ def process(self, context):
+ current_file = context.data["currentFile"]
+
+ self.log.info(
+ "Workfile path used for workfile family: {}".format(current_file)
+ )
+
+ dirpath, filename = os.path.split(current_file)
+ basename, ext = os.path.splitext(filename)
+ instance = context.create_instance(name=basename)
+
+ task_name = io.Session["AVALON_TASK"]
+ subset_name = "workfile" + task_name.capitalize()
+
+ # Create Workfile instance
+ instance.data.update({
+ "subset": subset_name,
+ "asset": context.data["asset"],
+ "label": subset_name,
+ "publish": True,
+ "family": "workfile",
+ "families": ["workfile"],
+ "representations": [{
+ "name": ext.lstrip("."),
+ "ext": ext.lstrip("."),
+ "files": filename,
+ "stagingDir": dirpath
+ }]
+ })
+ self.log.info("Collected workfile instance: {}".format(
+ json.dumps(instance.data, indent=4)
+ ))
diff --git a/openpype/hosts/tvpaint/plugins/publish/validate_workfile_metadata.py b/openpype/hosts/tvpaint/plugins/publish/validate_workfile_metadata.py
new file mode 100644
index 0000000000..757da3294a
--- /dev/null
+++ b/openpype/hosts/tvpaint/plugins/publish/validate_workfile_metadata.py
@@ -0,0 +1,49 @@
+import pyblish.api
+from avalon.tvpaint import save_file
+
+
+class ValidateWorkfileMetadataRepair(pyblish.api.Action):
+ """Store current context into workfile metadata."""
+
+ label = "Use current context"
+ icon = "wrench"
+ on = "failed"
+
+ def process(self, context, _plugin):
+ """Save current workfile which should trigger storing of metadata."""
+ current_file = context.data["currentFile"]
+ # Save file should trigger
+ save_file(current_file)
+
+
+class ValidateWorkfileMetadata(pyblish.api.ContextPlugin):
+ """Validate if wokrfile contain required metadata for publising."""
+
+ label = "Validate Workfile Metadata"
+ order = pyblish.api.ValidatorOrder
+
+ families = ["workfile"]
+
+ actions = [ValidateWorkfileMetadataRepair]
+
+ required_keys = {"project", "asset", "task"}
+
+ def process(self, context):
+ workfile_context = context.data["workfile_context"]
+ if not workfile_context:
+ raise AssertionError(
+ "Current workfile is missing whole metadata about context."
+ )
+
+ missing_keys = []
+ for key in self.required_keys:
+ value = workfile_context.get(key)
+ if not value:
+ missing_keys.append(key)
+
+ if missing_keys:
+ raise AssertionError(
+ "Current workfile is missing metadata about {}.".format(
+ ", ".join(missing_keys)
+ )
+ )
diff --git a/openpype/modules/deadline/plugins/publish/submit_publish_job.py b/openpype/modules/deadline/plugins/publish/submit_publish_job.py
index ea953441a2..7a4481c526 100644
--- a/openpype/modules/deadline/plugins/publish/submit_publish_job.py
+++ b/openpype/modules/deadline/plugins/publish/submit_publish_job.py
@@ -105,7 +105,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin):
families = ["render.farm", "prerender.farm",
"renderlayer", "imagesequence", "vrayscene"]
- aov_filter = {"maya": [r".+(?:\.|_)([Bb]eauty)(?:\.|_).*"],
+ aov_filter = {"maya": [r".*(?:\.|_)?([Bb]eauty)(?:\.|_)?.*"],
"aftereffects": [r".*"], # for everything from AE
"harmony": [r".*"], # for everything from AE
"celaction": [r".*"]}
diff --git a/openpype/modules/standalonepublish_action.py b/openpype/modules/standalonepublish_action.py
index 87f7446341..78d87cb6c7 100644
--- a/openpype/modules/standalonepublish_action.py
+++ b/openpype/modules/standalonepublish_action.py
@@ -1,5 +1,5 @@
import os
-import sys
+import platform
import subprocess
from openpype.lib import get_pype_execute_args
from . import PypeModule, ITrayAction
@@ -35,4 +35,14 @@ class StandAlonePublishAction(PypeModule, ITrayAction):
def run_standalone_publisher(self):
args = get_pype_execute_args("standalonepublisher")
- subprocess.Popen(args, creationflags=subprocess.DETACHED_PROCESS)
+ kwargs = {}
+ if platform.system().lower() == "darwin":
+ new_args = ["open", "-a", args.pop(0), "--args"]
+ new_args.extend(args)
+ args = new_args
+
+ detached_process = getattr(subprocess, "DETACHED_PROCESS", None)
+ if detached_process is not None:
+ kwargs["creationflags"] = detached_process
+
+ subprocess.Popen(args, **kwargs)
diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py
index 0ad38c21f4..63f51e891b 100644
--- a/openpype/plugins/publish/extract_review.py
+++ b/openpype/plugins/publish/extract_review.py
@@ -1733,7 +1733,7 @@ class OverscanCrop:
def _convert_string_to_values(self, orig_string_value):
string_value = orig_string_value.strip().lower()
if not string_value:
- return
+ return [PixValueRelative(0), PixValueRelative(0)]
# Replace "px" (and spaces before) with single space
string_value = re.sub(r"([ ]+)?px", " ", string_value)
diff --git a/openpype/settings/defaults/project_settings/aftereffects.json b/openpype/settings/defaults/project_settings/aftereffects.json
index f54dbb9612..b272c60d98 100644
--- a/openpype/settings/defaults/project_settings/aftereffects.json
+++ b/openpype/settings/defaults/project_settings/aftereffects.json
@@ -4,8 +4,12 @@
"enabled": true,
"optional": true,
"active": true,
- "skip_resolution_check": [".*"],
- "skip_timelines_check": [".*"]
+ "skip_resolution_check": [
+ ".*"
+ ],
+ "skip_timelines_check": [
+ ".*"
+ ]
},
"AfterEffectsSubmitDeadline": {
"use_published": true,
diff --git a/openpype/settings/defaults/project_settings/global.json b/openpype/settings/defaults/project_settings/global.json
index b7498209ca..5f779fccfa 100644
--- a/openpype/settings/defaults/project_settings/global.json
+++ b/openpype/settings/defaults/project_settings/global.json
@@ -273,8 +273,7 @@
"active_site": "studio",
"remote_site": "studio"
},
- "sites": {
- }
+ "sites": {}
},
"project_plugins": {
"windows": [],
diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json
index 779b8bb3f3..ba685ae502 100644
--- a/openpype/settings/defaults/project_settings/maya.json
+++ b/openpype/settings/defaults/project_settings/maya.json
@@ -293,19 +293,22 @@
},
"Display Options": {
"background": [
- 0.7,
- 0.7,
- 0.7
+ 125,
+ 125,
+ 125,
+ 255
],
"backgroundBottom": [
- 0.7,
- 0.7,
- 0.7
+ 125,
+ 125,
+ 125,
+ 255
],
"backgroundTop": [
- 0.7,
- 0.7,
- 0.7
+ 125,
+ 125,
+ 125,
+ 255
],
"override_display": true
},
@@ -393,74 +396,88 @@
"load": {
"colors": {
"model": [
- 0.821,
- 0.518,
- 0.117
+ 209,
+ 132,
+ 30,
+ 255
],
"rig": [
- 0.144,
- 0.443,
- 0.463
+ 59,
+ 226,
+ 235,
+ 255
],
"pointcache": [
- 0.368,
- 0.821,
- 0.117
+ 94,
+ 209,
+ 30,
+ 255
],
"animation": [
- 0.368,
- 0.821,
- 0.117
+ 94,
+ 209,
+ 30,
+ 255
],
"ass": [
- 1.0,
- 0.332,
- 0.312
+ 249,
+ 135,
+ 53,
+ 255
],
"camera": [
- 0.447,
- 0.312,
- 1.0
+ 136,
+ 114,
+ 244,
+ 255
],
"fbx": [
- 1.0,
- 0.931,
- 0.312
+ 215,
+ 166,
+ 255,
+ 255
],
"mayaAscii": [
- 0.312,
- 1.0,
- 0.747
+ 67,
+ 174,
+ 255,
+ 255
],
"setdress": [
- 0.312,
- 1.0,
- 0.747
+ 255,
+ 250,
+ 90,
+ 255
],
"layout": [
- 0.312,
- 1.0,
- 0.747
+ 255,
+ 250,
+ 90,
+ 255
],
"vdbcache": [
- 0.312,
- 1.0,
- 0.428
+ 249,
+ 54,
+ 0,
+ 255
],
"vrayproxy": [
- 0.258,
- 0.95,
- 0.541
+ 255,
+ 150,
+ 12,
+ 255
],
"yeticache": [
- 0.2,
- 0.8,
- 0.3
+ 99,
+ 206,
+ 220,
+ 255
],
"yetiRig": [
- 0.0,
- 0.8,
- 0.5
+ 0,
+ 205,
+ 125,
+ 255
]
}
},
diff --git a/openpype/settings/entities/__init__.py b/openpype/settings/entities/__init__.py
index 33881a6097..f64ca1e98d 100644
--- a/openpype/settings/entities/__init__.py
+++ b/openpype/settings/entities/__init__.py
@@ -103,6 +103,7 @@ from .enum_entity import (
EnumEntity,
AppsEnumEntity,
ToolsEnumEntity,
+ TaskTypeEnumEntity,
ProvidersEnum
)
@@ -154,6 +155,7 @@ __all__ = (
"EnumEntity",
"AppsEnumEntity",
"ToolsEnumEntity",
+ "TaskTypeEnumEntity",
"ProvidersEnum",
"ListEntity",
diff --git a/openpype/settings/entities/enum_entity.py b/openpype/settings/entities/enum_entity.py
index c6021b68de..5df365508c 100644
--- a/openpype/settings/entities/enum_entity.py
+++ b/openpype/settings/entities/enum_entity.py
@@ -219,6 +219,41 @@ class ToolsEnumEntity(BaseEnumEntity):
self._current_value = new_value
+class TaskTypeEnumEntity(BaseEnumEntity):
+ schema_types = ["task-types-enum"]
+
+ def _item_initalization(self):
+ self.multiselection = True
+ self.value_on_not_set = []
+ self.enum_items = []
+ self.valid_keys = set()
+ self.valid_value_types = (list, )
+ self.placeholder = None
+
+ def _get_enum_values(self):
+ anatomy_entity = self.get_entity_from_path(
+ "project_settings/project_anatomy"
+ )
+
+ valid_keys = set()
+ enum_items = []
+ for task_type in anatomy_entity["tasks"].keys():
+ enum_items.append({task_type: task_type})
+ valid_keys.add(task_type)
+
+ return enum_items, valid_keys
+
+ def set_override_state(self, *args, **kwargs):
+ super(TaskTypeEnumEntity, self).set_override_state(*args, **kwargs)
+
+ self.enum_items, self.valid_keys = self._get_enum_values()
+ new_value = []
+ for key in self._current_value:
+ if key in self.valid_keys:
+ new_value.append(key)
+ self._current_value = new_value
+
+
class ProvidersEnum(BaseEnumEntity):
schema_types = ["providers-enum"]
diff --git a/openpype/settings/entities/lib.py b/openpype/settings/entities/lib.py
index ed3d7aed84..a5c61a9dda 100644
--- a/openpype/settings/entities/lib.py
+++ b/openpype/settings/entities/lib.py
@@ -17,50 +17,109 @@ WRAPPER_TYPES = ["form", "collapsible-wrap"]
NOT_SET = type("NOT_SET", (), {"__bool__": lambda obj: False})()
OVERRIDE_VERSION = 1
+DEFAULT_VALUES_KEY = "__default_values__"
+TEMPLATE_METADATA_KEYS = (
+ DEFAULT_VALUES_KEY,
+)
+
template_key_pattern = re.compile(r"(\{.*?[^{0]*\})")
+def _pop_metadata_item(template):
+ found_idx = None
+ for idx, item in enumerate(template):
+ if not isinstance(item, dict):
+ continue
+
+ for key in TEMPLATE_METADATA_KEYS:
+ if key in item:
+ found_idx = idx
+ break
+
+ if found_idx is not None:
+ break
+
+ metadata_item = {}
+ if found_idx is not None:
+ metadata_item = template.pop(found_idx)
+ return metadata_item
+
+
def _fill_schema_template_data(
- template, template_data, required_keys=None, missing_keys=None
+ template, template_data, skip_paths, required_keys=None, missing_keys=None
):
first = False
if required_keys is None:
first = True
+
+ if "skip_paths" in template_data:
+ skip_paths = template_data["skip_paths"]
+ if not isinstance(skip_paths, list):
+ skip_paths = [skip_paths]
+
+ # Cleanup skip paths (skip empty values)
+ skip_paths = [path for path in skip_paths if path]
+
required_keys = set()
missing_keys = set()
- _template = []
- default_values = {}
- for item in template:
- if isinstance(item, dict) and "__default_values__" in item:
- default_values = item["__default_values__"]
- else:
- _template.append(item)
- template = _template
+ # Copy template data as content may change
+ template = copy.deepcopy(template)
+
+ # Get metadata item from template
+ metadata_item = _pop_metadata_item(template)
+
+ # Check for default values for template data
+ default_values = metadata_item.get(DEFAULT_VALUES_KEY) or {}
for key, value in default_values.items():
if key not in template_data:
template_data[key] = value
+ # Store paths by first part if path
+ # - None value says that whole key should be skipped
+ skip_paths_by_first_key = {}
+ for path in skip_paths:
+ parts = path.split("/")
+ key = parts.pop(0)
+ if key not in skip_paths_by_first_key:
+ skip_paths_by_first_key[key] = []
+
+ value = "/".join(parts)
+ skip_paths_by_first_key[key].append(value or None)
+
if not template:
output = template
elif isinstance(template, list):
output = []
for item in template:
- output.append(_fill_schema_template_data(
- item, template_data, required_keys, missing_keys
- ))
+ # Get skip paths for children item
+ _skip_paths = []
+ if skip_paths_by_first_key and isinstance(item, dict):
+ # Check if this item should be skipped
+ key = item.get("key")
+ if key and key in skip_paths_by_first_key:
+ _skip_paths = skip_paths_by_first_key[key]
+ # Skip whole item if None is in skip paths value
+ if None in _skip_paths:
+ continue
+
+ output_item = _fill_schema_template_data(
+ item, template_data, _skip_paths, required_keys, missing_keys
+ )
+ output.append(output_item)
elif isinstance(template, dict):
output = {}
for key, value in template.items():
output[key] = _fill_schema_template_data(
- value, template_data, required_keys, missing_keys
+ value, template_data, skip_paths, required_keys, missing_keys
)
elif isinstance(template, STRING_TYPE):
# TODO find much better way how to handle filling template data
+ template = template.replace("{{", "__dbcb__").replace("}}", "__decb__")
for replacement_string in template_key_pattern.findall(template):
key = str(replacement_string[1:-1])
required_keys.add(key)
@@ -76,7 +135,8 @@ def _fill_schema_template_data(
else:
# Only replace the key in string
template = template.replace(replacement_string, value)
- output = template
+
+ output = template.replace("__dbcb__", "{").replace("__decb__", "}")
else:
output = template
@@ -105,11 +165,15 @@ def _fill_schema_template(child_data, schema_collection, schema_templates):
if isinstance(template_data, dict):
template_data = [template_data]
+ skip_paths = child_data.get("skip_paths") or []
+ if isinstance(skip_paths, STRING_TYPE):
+ skip_paths = [skip_paths]
+
output = []
for single_template_data in template_data:
try:
filled_child = _fill_schema_template_data(
- template, single_template_data
+ template, single_template_data, skip_paths
)
except SchemaTemplateMissingKeys as exc:
@@ -166,7 +230,7 @@ def _fill_inner_schemas(schema_data, schema_collection, schema_templates):
schema_templates
)
- elif child_type == "schema_template":
+ elif child_type in ("template", "schema_template"):
for filled_child in _fill_schema_template(
child, schema_collection, schema_templates
):
diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_capture.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_capture.json
new file mode 100644
index 0000000000..d6b81c8687
--- /dev/null
+++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_capture.json
@@ -0,0 +1,471 @@
+{
+ "type": "dict",
+ "collapsible": true,
+ "key": "ExtractPlayblast",
+ "label": "Extract Playblast settings",
+ "children": [
+ {
+ "type": "dict",
+ "key": "capture_preset",
+ "children": [
+ {
+ "type": "dict",
+ "key": "Codec",
+ "children": [
+ {
+ "type": "label",
+ "label": "Codec"
+ },
+ {
+ "type": "text",
+ "key": "compression",
+ "label": "Compression type"
+ },
+ {
+ "type": "text",
+ "key": "format",
+ "label": "Data format"
+ },
+ {
+ "type": "number",
+ "key": "quality",
+ "label": "Quality",
+ "decimal": 0,
+ "minimum": 0,
+ "maximum": 100
+ },
+
+ {
+ "type": "splitter"
+ }
+ ]
+ },
+ {
+ "type": "dict",
+ "key": "Display Options",
+ "children": [
+ {
+ "type": "label",
+ "label": "Display Options"
+ },
+
+ {
+ "type": "color",
+ "key": "background",
+ "label": "Background Color: "
+ },
+ {
+ "type": "color",
+ "key": "backgroundBottom",
+ "label": "Background Bottom: "
+ },
+ {
+ "type": "color",
+ "key": "backgroundTop",
+ "label": "Background Top: "
+ },
+ {
+ "type": "boolean",
+ "key": "override_display",
+ "label": "Override display options"
+ }
+ ]
+ },
+ {
+ "type": "splitter"
+ },
+ {
+ "type": "dict",
+ "key": "Generic",
+ "children": [
+ {
+ "type": "label",
+ "label": "Generic"
+ },
+ {
+ "type": "boolean",
+ "key": "isolate_view",
+ "label": " Isolate view"
+ },
+ {
+ "type": "boolean",
+ "key": "off_screen",
+ "label": " Off Screen"
+ }
+ ]
+ },
+
+ {
+ "type": "dict",
+ "key": "PanZoom",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "pan_zoom",
+ "label": " Pan Zoom"
+ }
+ ]
+ },
+ {
+ "type": "splitter"
+ },
+ {
+ "type": "dict",
+ "key": "Renderer",
+ "children": [
+ {
+ "type": "label",
+ "label": "Renderer"
+ },
+ {
+ "type": "enum",
+ "key": "rendererName",
+ "label": "Renderer name",
+ "enum_items": [
+ { "vp2Renderer": "Viewport 2.0" }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "dict",
+ "key": "Resolution",
+ "children": [
+ {
+ "type": "splitter"
+ },
+ {
+ "type": "label",
+ "label": "Resolution"
+ },
+ {
+ "type": "number",
+ "key": "width",
+ "label": " Width",
+ "decimal": 0,
+ "minimum": 0,
+ "maximum": 99999
+ },
+ {
+ "type": "number",
+ "key": "height",
+ "label": "Height",
+ "decimal": 0,
+ "minimum": 0,
+ "maximum": 99999
+ },
+ {
+ "type": "number",
+ "key": "percent",
+ "label": "percent",
+ "decimal": 1,
+ "minimum": 0,
+ "maximum": 200
+ },
+ {
+ "type": "text",
+ "key": "mode",
+ "label": "Mode"
+ }
+ ]
+ },
+ {
+ "type": "splitter"
+ },
+ {
+ "type": "dict",
+ "collapsible": true,
+ "key": "Viewport Options",
+ "label": "Viewport Options",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "override_viewport_options",
+ "label": "override_viewport_options"
+ },
+ {
+ "type": "enum",
+ "key": "displayLights",
+ "label": "Display Lights",
+ "enum_items": [
+ { "default": "Default Lighting"},
+ { "all": "All Lights"},
+ { "selected": "Selected Lights"},
+ { "flat": "Flat Lighting"},
+ { "nolights": "No Lights"}
+ ]
+ },
+ {
+ "type": "number",
+ "key": "textureMaxResolution",
+ "label": "Texture Clamp Resolution",
+ "decimal": 0
+ },
+ {
+ "type": "number",
+ "key": "multiSample",
+ "label": "Anti Aliasing Samples",
+ "decimal": 0,
+ "minimum": 0,
+ "maximum": 32
+ },
+ {
+ "type": "boolean",
+ "key": "shadows",
+ "label": "Display Shadows"
+ },
+ {
+ "type": "boolean",
+ "key": "textures",
+ "label": "Display Textures"
+ },
+ {
+ "type": "boolean",
+ "key": "twoSidedLighting",
+ "label": "Two Sided Lighting"
+ },
+ {
+ "type": "boolean",
+ "key": "ssaoEnable",
+ "label": "Screen Space Ambient Occlusion"
+ },
+ {
+ "type": "splitter"
+ },
+ {
+ "type": "boolean",
+ "key": "cameras",
+ "label": "cameras"
+ },
+ {
+ "type": "boolean",
+ "key": "clipGhosts",
+ "label": "clipGhosts"
+ },
+ {
+ "type": "boolean",
+ "key": "controlVertices",
+ "label": "controlVertices"
+ },
+ {
+ "type": "boolean",
+ "key": "deformers",
+ "label": "deformers"
+ },
+ {
+ "type": "boolean",
+ "key": "dimensions",
+ "label": "dimensions"
+ },
+ {
+ "type": "boolean",
+ "key": "dynamicConstraints",
+ "label": "dynamicConstraints"
+ },
+ {
+ "type": "boolean",
+ "key": "dynamics",
+ "label": "dynamics"
+ },
+ {
+ "type": "boolean",
+ "key": "fluids",
+ "label": "fluids"
+ },
+ {
+ "type": "boolean",
+ "key": "follicles",
+ "label": "follicles"
+ },
+ {
+ "type": "boolean",
+ "key": "gpuCacheDisplayFilter",
+ "label": "gpuCacheDisplayFilter"
+ },
+ {
+ "type": "boolean",
+ "key": "greasePencils",
+ "label": "greasePencils"
+ },
+ {
+ "type": "boolean",
+ "key": "grid",
+ "label": "grid"
+ },
+ {
+ "type": "boolean",
+ "key": "hairSystems",
+ "label": "hairSystems"
+ },
+ {
+ "type": "boolean",
+ "key": "handles",
+ "label": "handles"
+ },
+ {
+ "type": "boolean",
+ "key": "hud",
+ "label": "hud"
+ },
+ {
+ "type": "boolean",
+ "key": "hulls",
+ "label": "hulls"
+ },
+ {
+ "type": "boolean",
+ "key": "ikHandles",
+ "label": "ikHandles"
+ },
+ {
+ "type": "boolean",
+ "key": "imagePlane",
+ "label": "imagePlane"
+ },
+ {
+ "type": "boolean",
+ "key": "joints",
+ "label": "joints"
+ },
+ {
+ "type": "boolean",
+ "key": "lights",
+ "label": "lights"
+ },
+ {
+ "type": "boolean",
+ "key": "locators",
+ "label": "locators"
+ },
+ {
+ "type": "boolean",
+ "key": "manipulators",
+ "label": "manipulators"
+ },
+ {
+ "type": "boolean",
+ "key": "motionTrails",
+ "label": "motionTrails"
+ },
+ {
+ "type": "boolean",
+ "key": "nCloths",
+ "label": "nCloths"
+ },
+ {
+ "type": "boolean",
+ "key": "nParticles",
+ "label": "nParticles"
+ },
+ {
+ "type": "boolean",
+ "key": "nRigids",
+ "label": "nRigids"
+ },
+ {
+ "type": "boolean",
+ "key": "nurbsCurves",
+ "label": "nurbsCurves"
+ },
+ {
+ "type": "boolean",
+ "key": "nurbsSurfaces",
+ "label": "nurbsSurfaces"
+ },
+ {
+ "type": "boolean",
+ "key": "particleInstancers",
+ "label": "particleInstancers"
+ },
+ {
+ "type": "boolean",
+ "key": "pivots",
+ "label": "pivots"
+ },
+ {
+ "type": "boolean",
+ "key": "planes",
+ "label": "planes"
+ },
+ {
+ "type": "boolean",
+ "key": "pluginShapes",
+ "label": "pluginShapes"
+ },
+ {
+ "type": "boolean",
+ "key": "polymeshes",
+ "label": "polymeshes"
+ },
+ {
+ "type": "boolean",
+ "key": "strokes",
+ "label": "strokes"
+ },
+ {
+ "type": "boolean",
+ "key": "subdivSurfaces",
+ "label": "subdivSurfaces"
+ }
+ ]
+ },
+ {
+ "type": "dict",
+ "collapsible": true,
+ "key": "Camera Options",
+ "label": "Camera Options",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "displayGateMask",
+ "label": "displayGateMask"
+ },
+ {
+ "type": "boolean",
+ "key": "displayResolution",
+ "label": "displayResolution"
+ },
+ {
+ "type": "boolean",
+ "key": "displayFilmGate",
+ "label": "displayFilmGate"
+ },
+ {
+ "type": "boolean",
+ "key": "displayFieldChart",
+ "label": "displayFieldChart"
+ },
+ {
+ "type": "boolean",
+ "key": "displaySafeAction",
+ "label": "displaySafeAction"
+ },
+ {
+ "type": "boolean",
+ "key": "displaySafeTitle",
+ "label": "displaySafeTitle"
+ },
+ {
+ "type": "boolean",
+ "key": "displayFilmPivot",
+ "label": "displayFilmPivot"
+ },
+ {
+ "type": "boolean",
+ "key": "displayFilmOrigin",
+ "label": "displayFilmOrigin"
+ },
+ {
+ "type": "number",
+ "key": "overscan",
+ "label": "overscan",
+ "decimal": 1,
+ "minimum": 0,
+ "maximum": 10
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_load.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_load.json
index dd9d0508b4..0b09d08700 100644
--- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_load.json
+++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_load.json
@@ -11,144 +11,74 @@
"label": "Loaded Subsets Outliner Colors",
"children": [
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Model",
- "name": "model"
- }
- ]
+ "type": "color",
+ "label": "Model:",
+ "key": "model"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Rig",
- "name": "rig"
- }
- ]
+ "type": "color",
+ "label": "Rig:",
+ "key": "rig"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Pointcache",
- "name": "pointcache"
- }
- ]
+ "type": "color",
+ "label": "Pointcache:",
+ "key": "pointcache"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Animation",
- "name": "animation"
- }
- ]
+ "type": "color",
+ "label": "Animation:",
+ "key": "animation"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Arnold Standin",
- "name": "ass"
- }
- ]
+ "type": "color",
+ "label": "Arnold Standin:",
+ "key": "ass"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Camera",
- "name": "camera"
- }
- ]
+ "type": "color",
+ "label": "Camera:",
+ "key": "camera"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "FBX",
- "name": "fbx"
- }
- ]
+ "type": "color",
+ "label": "FBX:",
+ "key": "fbx"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Maya Scene",
- "name": "mayaAscii"
- }
- ]
+ "type": "color",
+ "label": "Maya Scene:",
+ "key": "mayaAscii"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Set Dress",
- "name": "setdress"
- }
- ]
+ "type": "color",
+ "label": "Set Dress:",
+ "key": "setdress"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Layout",
- "name": "layout"
- }
- ]
+ "type": "color",
+ "label": "Layout:",
+ "key": "layout"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "VDB Cache",
- "name": "vdbcache"
- }
- ]
+ "type": "color",
+ "label": "VDB Cache:",
+ "key": "vdbcache"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Vray Proxy",
- "name": "vrayproxy"
- }
- ]
+ "type": "color",
+ "label": "Vray Proxy:",
+ "key": "vrayproxy"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Yeti Cache",
- "name": "yeticache"
- }
- ]
+ "type": "color",
+ "label": "Yeti Cache:",
+ "key": "yeticache"
},
{
- "type": "schema_template",
- "name": "template_color",
- "template_data": [
- {
- "label": "Yeti Rig",
- "name": "yetiRig"
- }
- ]
+ "type": "color",
+ "label": "Yeti Rig:",
+ "key": "yetiRig"
}
]
}
diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
index 4cabf5bb74..0abcdd2965 100644
--- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
+++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
@@ -297,8 +297,8 @@
"label": "Extractors"
},
{
- "type": "schema_template",
- "name": "template_maya_capture"
+ "type": "schema",
+ "name": "schema_maya_capture"
},
{
"type": "dict",
diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/template_color.json b/openpype/settings/entities/schemas/projects_schema/schemas/template_color.json
index 04ce055525..af8fd9dae4 100644
--- a/openpype/settings/entities/schemas/projects_schema/schemas/template_color.json
+++ b/openpype/settings/entities/schemas/projects_schema/schemas/template_color.json
@@ -2,7 +2,7 @@
{
"type": "list-strict",
"key": "{name}",
- "label": "{label}:",
+ "label": "{label}",
"object_types": [
{
"label": "Red",
diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/template_maya_capture.json b/openpype/settings/entities/schemas/projects_schema/schemas/template_maya_capture.json
deleted file mode 100644
index e4e0b034dd..0000000000
--- a/openpype/settings/entities/schemas/projects_schema/schemas/template_maya_capture.json
+++ /dev/null
@@ -1,541 +0,0 @@
-[
- {
- "type": "dict",
- "collapsible": true,
- "key": "ExtractPlayblast",
- "label": "Extract Playblast settings",
- "children": [
- {
- "type": "dict",
- "key": "capture_preset",
- "children": [
- {
- "type": "dict",
- "key": "Codec",
- "children": [
- {
- "type": "label",
- "label": "Codec"
- },
- {
- "type": "text",
- "key": "compression",
- "label": "Compression type"
- },
- {
- "type": "text",
- "key": "format",
- "label": "Data format"
- },
- {
- "type": "number",
- "key": "quality",
- "label": "Quality",
- "decimal": 0,
- "minimum": 0,
- "maximum": 100
- },
-
- {
- "type": "splitter"
- }
- ]
- },
- {
- "type": "dict",
- "key": "Display Options",
- "children": [
- {
- "type": "label",
- "label": "Display Options"
- },
- {
- "type": "list-strict",
- "key": "background",
- "label": "Background Color: ",
- "object_types": [
- {
- "label": "Red",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- },
- {
- "label": "Green",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- },
- {
- "label": "Blue",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- }
- ]
- },
- {
- "type": "list-strict",
- "key": "backgroundBottom",
- "label": "Background Bottom: ",
- "object_types": [
- {
- "label": "Red",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- },
- {
- "label": "Green",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- },
- {
- "label": "Blue",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- }
- ]
- },
- {
- "type": "list-strict",
- "key": "backgroundTop",
- "label": "Background Top: ",
- "object_types": [
- {
- "label": "Red",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- },
- {
- "label": "Green",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- },
- {
- "label": "Blue",
- "type": "number",
- "minimum": 0,
- "maximum": 1,
- "decimal": 3
- }
- ]
- },
- {
- "type": "boolean",
- "key": "override_display",
- "label": "Override display options"
- }
- ]
- },
- {
- "type": "splitter"
- },
- {
- "type": "dict",
- "key": "Generic",
- "children": [
- {
- "type": "label",
- "label": "Generic"
- },
- {
- "type": "boolean",
- "key": "isolate_view",
- "label": " Isolate view"
- },
- {
- "type": "boolean",
- "key": "off_screen",
- "label": " Off Screen"
- }
- ]
- },
-
- {
- "type": "dict",
- "key": "PanZoom",
- "children": [
- {
- "type": "boolean",
- "key": "pan_zoom",
- "label": " Pan Zoom"
- }
- ]
- },
- {
- "type": "splitter"
- },
- {
- "type": "dict",
- "key": "Renderer",
- "children": [
- {
- "type": "label",
- "label": "Renderer"
- },
- {
- "type": "enum",
- "key": "rendererName",
- "label": "Renderer name",
- "enum_items": [
- { "vp2Renderer": "Viewport 2.0" }
- ]
- }
- ]
- },
- {
- "type": "dict",
- "key": "Resolution",
- "children": [
- {
- "type": "splitter"
- },
- {
- "type": "label",
- "label": "Resolution"
- },
- {
- "type": "number",
- "key": "width",
- "label": " Width",
- "decimal": 0,
- "minimum": 0,
- "maximum": 99999
- },
- {
- "type": "number",
- "key": "height",
- "label": "Height",
- "decimal": 0,
- "minimum": 0,
- "maximum": 99999
- },
- {
- "type": "number",
- "key": "percent",
- "label": "percent",
- "decimal": 1,
- "minimum": 0,
- "maximum": 200
- },
- {
- "type": "text",
- "key": "mode",
- "label": "Mode"
- }
- ]
- },
- {
- "type": "splitter"
- },
- {
- "type": "dict",
- "collapsible": true,
- "key": "Viewport Options",
- "label": "Viewport Options",
- "children": [
- {
- "type": "boolean",
- "key": "override_viewport_options",
- "label": "override_viewport_options"
- },
- {
- "type": "enum",
- "key": "displayLights",
- "label": "Display Lights",
- "enum_items": [
- { "default": "Default Lighting"},
- { "all": "All Lights"},
- { "selected": "Selected Lights"},
- { "flat": "Flat Lighting"},
- { "nolights": "No Lights"}
- ]
- },
- {
- "type": "number",
- "key": "textureMaxResolution",
- "label": "Texture Clamp Resolution",
- "decimal": 0
- },
- {
- "type": "number",
- "key": "multiSample",
- "label": "Anti Aliasing Samples",
- "decimal": 0,
- "minimum": 0,
- "maximum": 32
- },
- {
- "type": "boolean",
- "key": "shadows",
- "label": "Display Shadows"
- },
- {
- "type": "boolean",
- "key": "textures",
- "label": "Display Textures"
- },
- {
- "type": "boolean",
- "key": "twoSidedLighting",
- "label": "Two Sided Lighting"
- },
- {
- "type": "boolean",
- "key": "ssaoEnable",
- "label": "Screen Space Ambient Occlusion"
- },
- {
- "type": "splitter"
- },
- {
- "type": "boolean",
- "key": "cameras",
- "label": "cameras"
- },
- {
- "type": "boolean",
- "key": "clipGhosts",
- "label": "clipGhosts"
- },
- {
- "type": "boolean",
- "key": "controlVertices",
- "label": "controlVertices"
- },
- {
- "type": "boolean",
- "key": "deformers",
- "label": "deformers"
- },
- {
- "type": "boolean",
- "key": "dimensions",
- "label": "dimensions"
- },
- {
- "type": "boolean",
- "key": "dynamicConstraints",
- "label": "dynamicConstraints"
- },
- {
- "type": "boolean",
- "key": "dynamics",
- "label": "dynamics"
- },
- {
- "type": "boolean",
- "key": "fluids",
- "label": "fluids"
- },
- {
- "type": "boolean",
- "key": "follicles",
- "label": "follicles"
- },
- {
- "type": "boolean",
- "key": "gpuCacheDisplayFilter",
- "label": "gpuCacheDisplayFilter"
- },
- {
- "type": "boolean",
- "key": "greasePencils",
- "label": "greasePencils"
- },
- {
- "type": "boolean",
- "key": "grid",
- "label": "grid"
- },
- {
- "type": "boolean",
- "key": "hairSystems",
- "label": "hairSystems"
- },
- {
- "type": "boolean",
- "key": "handles",
- "label": "handles"
- },
- {
- "type": "boolean",
- "key": "hud",
- "label": "hud"
- },
- {
- "type": "boolean",
- "key": "hulls",
- "label": "hulls"
- },
- {
- "type": "boolean",
- "key": "ikHandles",
- "label": "ikHandles"
- },
- {
- "type": "boolean",
- "key": "imagePlane",
- "label": "imagePlane"
- },
- {
- "type": "boolean",
- "key": "joints",
- "label": "joints"
- },
- {
- "type": "boolean",
- "key": "lights",
- "label": "lights"
- },
- {
- "type": "boolean",
- "key": "locators",
- "label": "locators"
- },
- {
- "type": "boolean",
- "key": "manipulators",
- "label": "manipulators"
- },
- {
- "type": "boolean",
- "key": "motionTrails",
- "label": "motionTrails"
- },
- {
- "type": "boolean",
- "key": "nCloths",
- "label": "nCloths"
- },
- {
- "type": "boolean",
- "key": "nParticles",
- "label": "nParticles"
- },
- {
- "type": "boolean",
- "key": "nRigids",
- "label": "nRigids"
- },
- {
- "type": "boolean",
- "key": "nurbsCurves",
- "label": "nurbsCurves"
- },
- {
- "type": "boolean",
- "key": "nurbsSurfaces",
- "label": "nurbsSurfaces"
- },
- {
- "type": "boolean",
- "key": "particleInstancers",
- "label": "particleInstancers"
- },
- {
- "type": "boolean",
- "key": "pivots",
- "label": "pivots"
- },
- {
- "type": "boolean",
- "key": "planes",
- "label": "planes"
- },
- {
- "type": "boolean",
- "key": "pluginShapes",
- "label": "pluginShapes"
- },
- {
- "type": "boolean",
- "key": "polymeshes",
- "label": "polymeshes"
- },
- {
- "type": "boolean",
- "key": "strokes",
- "label": "strokes"
- },
- {
- "type": "boolean",
- "key": "subdivSurfaces",
- "label": "subdivSurfaces"
- }
- ]
- },
- {
- "type": "dict",
- "collapsible": true,
- "key": "Camera Options",
- "label": "Camera Options",
- "children": [
- {
- "type": "boolean",
- "key": "displayGateMask",
- "label": "displayGateMask"
- },
- {
- "type": "boolean",
- "key": "displayResolution",
- "label": "displayResolution"
- },
- {
- "type": "boolean",
- "key": "displayFilmGate",
- "label": "displayFilmGate"
- },
- {
- "type": "boolean",
- "key": "displayFieldChart",
- "label": "displayFieldChart"
- },
- {
- "type": "boolean",
- "key": "displaySafeAction",
- "label": "displaySafeAction"
- },
- {
- "type": "boolean",
- "key": "displaySafeTitle",
- "label": "displaySafeTitle"
- },
- {
- "type": "boolean",
- "key": "displayFilmPivot",
- "label": "displayFilmPivot"
- },
- {
- "type": "boolean",
- "key": "displayFilmOrigin",
- "label": "displayFilmOrigin"
- },
- {
- "type": "number",
- "key": "overscan",
- "label": "overscan",
- "decimal": 1,
- "minimum": 0,
- "maximum": 10
- }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/repos/avalon-core b/repos/avalon-core
index cfd4191e36..0d9a228fdb 160000
--- a/repos/avalon-core
+++ b/repos/avalon-core
@@ -1 +1 @@
-Subproject commit cfd4191e364b47de7364096f45d9d9d9a901692a
+Subproject commit 0d9a228fdb2eb08fe6caa30f25fe2a34fead1a03
diff --git a/website/yarn.lock b/website/yarn.lock
index e5dadd4e80..e23e29c0e5 100644
--- a/website/yarn.lock
+++ b/website/yarn.lock
@@ -3366,9 +3366,9 @@ dns-equal@^1.0.0:
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
dns-packet@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
- integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
+ integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
dependencies:
ip "^1.1.0"
safe-buffer "^5.0.1"