Merge branch 'pypeclub:develop' into bugfix/rig-deformer-ids

This commit is contained in:
Derek 2022-03-16 15:22:32 +07:00 committed by GitHub
commit 5e7b09e863
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
1300 changed files with 86420 additions and 400144 deletions

View file

@ -5,6 +5,8 @@ from .constants import (
PROJECT_ANATOMY_KEY,
LOCAL_SETTING_KEY,
LEGACY_SETTINGS_VERSION,
SCHEMA_KEY_SYSTEM_SETTINGS,
SCHEMA_KEY_PROJECT_SETTINGS,
@ -37,6 +39,8 @@ __all__ = (
"PROJECT_ANATOMY_KEY",
"LOCAL_SETTING_KEY",
"LEGACY_SETTINGS_VERSION",
"SCHEMA_KEY_SYSTEM_SETTINGS",
"SCHEMA_KEY_PROJECT_SETTINGS",

View file

@ -2,14 +2,14 @@ import re
# Metadata keys for work with studio and project overrides
M_OVERRIDEN_KEY = "__overriden_keys__"
M_OVERRIDDEN_KEY = "__overriden_keys__"
# Metadata key for storing information about environments
M_ENVIRONMENT_KEY = "__environment_keys__"
# Metadata key for storing dynamic created labels
M_DYNAMIC_KEY_LABEL = "__dynamic_keys_labels__"
METADATA_KEYS = (
M_OVERRIDEN_KEY,
M_OVERRIDDEN_KEY,
M_ENVIRONMENT_KEY,
M_DYNAMIC_KEY_LABEL
)
@ -21,6 +21,8 @@ PROJECT_SETTINGS_KEY = "project_settings"
PROJECT_ANATOMY_KEY = "project_anatomy"
LOCAL_SETTING_KEY = "local_settings"
LEGACY_SETTINGS_VERSION = "legacy"
# Schema hub names
SCHEMA_KEY_SYSTEM_SETTINGS = "system_schema"
SCHEMA_KEY_PROJECT_SETTINGS = "projects_schema"
@ -32,7 +34,7 @@ KEY_REGEX = re.compile(r"^[{}]+$".format(KEY_ALLOWED_SYMBOLS))
__all__ = (
"M_OVERRIDEN_KEY",
"M_OVERRIDDEN_KEY",
"M_ENVIRONMENT_KEY",
"M_DYNAMIC_KEY_LABEL",

View file

@ -177,6 +177,17 @@
}
},
"maya": {
"colorManagementPreference_v2": {
"enabled": true,
"configFilePath": {
"windows": [],
"darwin": [],
"linux": []
},
"renderSpace": "ACEScg",
"viewName": "ACES 1.0 SDR-video",
"displayName": "sRGB"
},
"colorManagementPreference": {
"configFilePath": {
"windows": [],
@ -186,5 +197,24 @@
"renderSpace": "scene-linear Rec 709/sRGB",
"viewTransform": "sRGB gamma"
}
},
"flame": {
"project": {
"colourPolicy": "ACES 1.1",
"frameDepth": "16-bit fp",
"fieldDominance": "PROGRESSIVE"
},
"profilesMapping": {
"inputs": [
{
"flameName": "ACEScg",
"ocioName": "ACES - ACEScg"
},
{
"flameName": "Rec.709 video",
"ocioName": "Output - Rec.709"
}
]
}
}
}

View file

@ -27,5 +27,10 @@
"path": "{@folder}/{@file}"
},
"delivery": {},
"unreal": {
"folder": "{root[work]}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{subset}/{@version}",
"file": "{subset}_{@version}<_{output}><.{@frame}>.{ext}",
"path": "{@folder}/{@file}"
},
"others": {}
}

View file

@ -10,13 +10,6 @@
"skip_timelines_check": [
".*"
]
},
"AfterEffectsSubmitDeadline": {
"use_published": true,
"priority": 50,
"primary_pool": "",
"secondary_pool": "",
"chunk_size": 1000000
}
},
"workfile_builder": {

View file

@ -1,6 +1,9 @@
{
"deadline_servers": [],
"publish": {
"CollectDefaultDeadlineServer": {
"pass_mongo_url": false
},
"ValidateExpectedFiles": {
"enabled": true,
"active": true,
@ -33,6 +36,9 @@
],
"celaction": [
".*"
],
"harmony": [
".*"
]
}
},
@ -40,7 +46,7 @@
"enabled": true,
"optional": false,
"active": true,
"tile_assembler_plugin": "oiio",
"tile_assembler_plugin": "OpenPypeTileAssembler",
"use_published": true,
"asset_dependencies": true,
"group": "none",
@ -87,7 +93,8 @@
"primary_pool": "",
"secondary_pool": "",
"group": "",
"department": ""
"department": "",
"multiprocess": true
}
}
}

View file

@ -2,7 +2,8 @@
"create": {
"CreateShotClip": {
"hierarchy": "{folder}/{sequence}",
"clipRename": true,
"useShotName": true,
"clipRename": false,
"clipName": "{sequence}{shot}",
"segmentIndex": true,
"countFrom": 10,
@ -24,12 +25,38 @@
"export_presets_mapping": {
"exr16fpdwaa": {
"ext": "exr",
"xml_preset_dir": "",
"xml_preset_file": "OpenEXR (16-bit fp DWAA).xml",
"xml_preset_dir": "",
"colorspace_out": "ACES - ACEScg",
"representation_add_range": true,
"representation_tags": []
}
}
}
},
"load": {
"LoadClip": {
"enabled": true,
"families": [
"render2d",
"source",
"plate",
"render",
"review"
],
"representations": [
"exr",
"dpx",
"jpg",
"jpeg",
"png",
"h264",
"mov",
"mp4"
],
"reel_group_name": "OpenPype_Reels",
"reel_name": "Loaded",
"clip_name_template": "{asset}_{subset}_{representation}"
}
}
}

View file

@ -292,7 +292,8 @@
],
"families": [
"write",
"render"
"render",
"prerender"
],
"task_types": [],
"tasks": [],
@ -331,6 +332,18 @@
"tasks": [],
"add_ftrack_family": true,
"advanced_filtering": []
},
{
"hosts": [
"houdini"
],
"families": [
"usd"
],
"task_types": [],
"tasks": [],
"add_ftrack_family": true,
"advanced_filtering": []
}
]
},
@ -342,6 +355,42 @@
"ValidateFtrackAttributes": {
"enabled": false,
"ftrack_custom_attributes": {}
},
"IntegrateFtrackInstance": {
"family_mapping": {
"camera": "cam",
"look": "look",
"mayaascii": "scene",
"model": "geo",
"rig": "rig",
"setdress": "setdress",
"pointcache": "cache",
"render": "render",
"prerender": "render",
"render2d": "render",
"nukescript": "comp",
"write": "render",
"review": "mov",
"plate": "img",
"audio": "audio",
"workfile": "scene",
"animation": "cache",
"image": "img",
"reference": "reference",
"ass": "cache",
"mayaScene": "scene",
"camerarig": "rig",
"yeticache": "cache",
"yetiRig": "rig",
"xgen": "xgen",
"rendersetup": "rendersetup",
"assembly": "assembly",
"layout": "layout",
"unrealStaticMesh": "geo",
"vrayproxy": "cache",
"redshiftproxy": "cache",
"usd": "usd"
}
}
}
}

View file

@ -3,6 +3,23 @@
"CollectAnatomyInstanceData": {
"follow_workfile_version": false
},
"CollectSceneVersion": {
"hosts": [
"aftereffects",
"blender",
"celaction",
"fusion",
"harmony",
"hiero",
"houdini",
"maya",
"nuke",
"photoshop",
"resolve",
"tvpaint"
],
"skip_hosts_headless_publish": []
},
"ValidateEditorialAssetName": {
"enabled": true,
"optional": false
@ -70,7 +87,8 @@
"render",
"review",
"ftrack"
]
],
"subsets": []
},
"overscan_crop": "",
"overscan_color": [
@ -90,7 +108,6 @@
"letter_box": {
"enabled": false,
"ratio": 0.0,
"state": "letterbox",
"fill_color": [
0,
0,
@ -190,6 +207,9 @@
"CleanUp": {
"paterns": [],
"remove_temp_renders": false
},
"CleanUpFarm": {
"enabled": false
}
},
"tools": {
@ -219,7 +239,7 @@
"hosts": [],
"task_types": [],
"tasks": [],
"template": "{family}{Variant}"
"template": "{family}{variant}"
},
{
"families": [
@ -264,6 +284,17 @@
"task_types": [],
"tasks": [],
"template": "render{Task}{Variant}"
},
{
"families": [
"unrealStaticMesh"
],
"hosts": [
"maya"
],
"task_types": [],
"tasks": [],
"template": "S_{asset}{variant}"
}
]
},
@ -298,6 +329,7 @@
{
"hosts": [],
"task_types": [],
"is_include": true,
"filter_families": []
}
]

View file

@ -5,6 +5,11 @@
".*"
]
},
"ValidateAudio": {
"enabled": true,
"optional": true,
"active": true
},
"ValidateContainers": {
"enabled": true,
"optional": true,
@ -17,13 +22,6 @@
"frame_check_filter": [],
"skip_resolution_check": [],
"skip_timelines_check": []
},
"HarmonySubmitDeadline": {
"use_published": false,
"priority": 50,
"primary_pool": "",
"secondary_pool": "",
"chunk_size": 1000000
}
}
}

View file

@ -1,5 +1,10 @@
{
"create": {
"CreateArnoldAss": {
"enabled": true,
"defaults": [],
"ext": ".ass"
},
"CreateAlembicCamera": {
"enabled": true,
"defaults": []

View file

@ -46,6 +46,20 @@
"aov_separator": "underscore",
"default_render_image_folder": "renders"
},
"CreateUnrealStaticMesh": {
"enabled": true,
"defaults": [
"",
"_Main"
],
"static_mesh_prefix": "S_",
"collision_prefixes": [
"UBX",
"UCP",
"USP",
"UCX"
]
},
"CreateAnimation": {
"enabled": true,
"defaults": [
@ -123,12 +137,6 @@
"Anim"
]
},
"CreateUnrealStaticMesh": {
"enabled": true,
"defaults": [
"Main"
]
},
"CreateVrayProxy": {
"enabled": true,
"defaults": [
@ -162,6 +170,11 @@
"optional": true,
"active": true
},
"ValidateFrameRange": {
"enabled": true,
"optional": true,
"active": true
},
"ValidateShaderName": {
"enabled": false,
"regex": "(?P<asset>.*)_(.*)_SHD"
@ -180,6 +193,27 @@
"whitelist_native_plugins": false,
"authorized_plugins": []
},
"ValidateMayaUnits": {
"enabled": true,
"optional": false,
"validate_linear_units": true,
"linear_units": "cm",
"validate_angular_units": true,
"angular_units": "deg",
"validate_fps": true
},
"ValidateUnrealStaticMeshName": {
"enabled": true,
"validate_mesh": false,
"validate_collision": true
},
"ValidateCycleError": {
"enabled": true,
"optional": false,
"families": [
"rig"
]
},
"ValidateRenderSettings": {
"arnold_render_attributes": [],
"vray_render_attributes": [],
@ -197,6 +231,11 @@
"regex": "(.*)_(\\d)*_(?P<shader>.*)_(GEO)",
"top_level_regex": ".*_GRP"
},
"ValidateModelContent": {
"enabled": true,
"optional": false,
"validate_top_group": true
},
"ValidateTransformNamingSuffix": {
"enabled": true,
"SUFFIX_NAMING_TABLE": {
@ -281,11 +320,6 @@
"optional": true,
"active": true
},
"ValidateModelContent": {
"enabled": true,
"optional": false,
"validate_top_group": true
},
"ValidateNoAnimation": {
"enabled": false,
"optional": true,
@ -472,6 +506,12 @@
}
}
},
"ExtractMayaSceneRaw": {
"enabled": true,
"add_for_families": [
"layout"
]
},
"ExtractCameraAlembic": {
"enabled": true,
"optional": true,
@ -559,6 +599,12 @@
12,
255
],
"vrayscene_layer": [
255,
150,
12,
255
],
"yeticache": [
99,
206,

View file

@ -32,7 +32,8 @@
"Fg01",
"Branch01",
"Part01"
]
],
"reviewable": false
}
},
"publish": {
@ -115,13 +116,42 @@
"baking": {
"filter": {
"task_types": [],
"families": []
"families": [],
"sebsets": []
},
"extension": "mov",
"viewer_process_override": "",
"bake_viewer_process": true,
"bake_viewer_input_process": true,
"add_tags": []
"add_tags": [],
"reformat_node_add": false,
"reformat_node_config": [
{
"type": "string",
"name": "type",
"value": "to format"
},
{
"type": "string",
"name": "format",
"value": "HD_1080"
},
{
"type": "string",
"name": "filter",
"value": "Lanczos6"
},
{
"type": "bool",
"name": "black_outside",
"value": true
},
{
"type": "bool",
"name": "pbb",
"value": false
}
]
}
}
},

View file

@ -7,15 +7,10 @@
}
},
"publish": {
"CollectRemoteInstances": {
"color_code_mapping": [
{
"color_code": [],
"layer_name_regex": [],
"family": "",
"subset_template_name": ""
}
]
"CollectColorCodedInstances": {
"create_flatten_image": false,
"flatten_subset_template": "",
"color_code_mapping": []
},
"ValidateContainers": {
"enabled": true,
@ -33,6 +28,7 @@
]
},
"ExtractReview": {
"make_image_sequence": false,
"jpg_options": {
"tags": []
},
@ -48,4 +44,4 @@
"create_first_version": false,
"custom_templates": []
}
}
}

View file

@ -0,0 +1,7 @@
{
"publish": {
"CollectSequencesFromJob": {
"review": true
}
}
}

View file

@ -10,6 +10,7 @@
"hosts": [],
"task_types": [],
"tasks": [],
"subsets": [],
"channel_messages": []
}
]

View file

@ -2,17 +2,17 @@
"publish": {
"CollectPublishedFiles": {
"task_type_to_family": {
"Animation": {
"workfile": {
"Animation": [
{
"is_sequence": false,
"extensions": [
"tvp"
],
"families": [],
"tags": [],
"subset_template_name": ""
"result_family": "workfile"
},
"render": {
{
"is_sequence": true,
"extensions": [
"png",
@ -26,20 +26,20 @@
"tags": [
"review"
],
"subset_template_name": ""
"result_family": "render"
}
},
"Compositing": {
"workfile": {
],
"Compositing": [
{
"is_sequence": false,
"extensions": [
"aep"
],
"families": [],
"tags": [],
"subset_template_name": ""
"result_family": "workfile"
},
"render": {
{
"is_sequence": true,
"extensions": [
"png",
@ -53,20 +53,20 @@
"tags": [
"review"
],
"subset_template_name": ""
"result_family": "render"
}
},
"Layout": {
"workfile": {
],
"Layout": [
{
"is_sequence": false,
"extensions": [
"psd"
],
"families": [],
"tags": [],
"subset_template_name": ""
"result_family": "workfile"
},
"image": {
{
"is_sequence": false,
"extensions": [
"png",
@ -81,20 +81,21 @@
"tags": [
"review"
],
"subset_template_name": ""
"result_family": "image"
}
},
"default_task_type": {
"workfile": {
],
"default_task_type": [
{
"is_sequence": false,
"extensions": [
"tvp"
"tvp",
"psd"
],
"families": [],
"tags": [],
"subset_template_name": "{family}{Variant}"
"result_family": "workfile"
},
"render": {
{
"is_sequence": true,
"extensions": [
"png",
@ -108,9 +109,9 @@
"tags": [
"review"
],
"subset_template_name": "{family}{Variant}"
"result_family": "render"
}
},
],
"__dynamic_keys_labels__": {
"default_task_type": "Default task type"
}

View file

@ -93,7 +93,7 @@
}
},
"__dynamic_keys_labels__": {
"2022": "2022 (Testing Only)"
"2022": "2022"
}
}
},
@ -121,7 +121,7 @@
"/opt/Autodesk/flame_2021/bin/flame.app/Contents/MacOS/startApp"
],
"linux": [
"/opt/Autodesk/flame_2021/bin/flame"
"/opt/Autodesk/flame_2021/bin/startApplication"
]
},
"arguments": {
@ -135,8 +135,31 @@
"OPENPYPE_WIRETAP_TOOLS": "/opt/Autodesk/wiretap/tools/2021"
}
},
"2021_1": {
"use_python_2": true,
"executables": {
"windows": [],
"darwin": [
"/opt/Autodesk/flame_2021.1/bin/flame.app/Contents/MacOS/startApp"
],
"linux": [
"/opt/Autodesk/flame_2021.1/bin/startApplication"
]
},
"arguments": {
"windows": [],
"darwin": [],
"linux": []
},
"environment": {
"OPENPYPE_FLAME_PYTHON_EXEC": "/opt/Autodesk/python/2021.1/bin/python2.7",
"OPENPYPE_FLAME_PYTHONPATH": "/opt/Autodesk/flame_2021.1/python",
"OPENPYPE_WIRETAP_TOOLS": "/opt/Autodesk/wiretap/tools/2021.1"
}
},
"__dynamic_keys_labels__": {
"2021": "2021 (Testing Only)"
"2021": "2021",
"2021_1": "2021.1"
}
}
},
@ -690,15 +713,29 @@
"OPENPYPE_LOG_NO_COLORS": "Yes"
},
"variants": {
"16": {
"enabled": true,
"variant_label": "16",
"use_python_2": false,
"17": {
"executables": {
"windows": [
"C:\\Program Files\\Blackmagic Design\\Fusion 17\\Fusion.exe"
],
"darwin": [],
"linux": []
},
"arguments": {
"windows": [],
"darwin": [],
"linux": []
},
"environment": {}
},
"16": {
"executables": {
"windows": [
"C:\\Program Files\\Blackmagic Design\\Fusion 16\\Fusion.exe"
],
"darwin": [],
"linux": []
},
"arguments": {
"windows": [],
"darwin": [],
@ -707,9 +744,6 @@
"environment": {}
},
"9": {
"enabled": true,
"variant_label": "9",
"use_python_2": false,
"executables": {
"windows": [
"C:\\Program Files\\Blackmagic Design\\Fusion 9\\Fusion.exe"
@ -934,12 +968,35 @@
"AVALON_HARMONY_WORKFILES_ON_LAUNCH": "1"
},
"variants": {
"21": {
"enabled": true,
"variant_label": "21",
"executables": {
"windows": [
"c:\\Program Files (x86)\\Toon Boom Animation\\Toon Boom Harmony 21 Premium\\win64\\bin\\HarmonyPremium.exe"
],
"darwin": [
"/Applications/Toon Boom Harmony 21 Premium/Harmony Premium.app/Contents/MacOS/Harmony Premium"
],
"linux": []
},
"arguments": {
"windows": [],
"darwin": [],
"linux": []
},
"environment": {}
},
"20": {
"enabled": true,
"variant_label": "20",
"executables": {
"windows": [],
"darwin": [],
"windows": [
"c:\\Program Files (x86)\\Toon Boom Animation\\Toon Boom Harmony 20 Premium\\win64\\bin\\HarmonyPremium.exe"
],
"darwin": [
"/Applications/Toon Boom Harmony 20 Premium/Harmony Premium.app/Contents/MacOS/Harmony Premium"
],
"linux": []
},
"arguments": {
@ -953,7 +1010,9 @@
"enabled": true,
"variant_label": "17",
"executables": {
"windows": [],
"windows": [
"c:\\Program Files (x86)\\Toon Boom Animation\\Toon Boom Harmony 17 Premium\\win64\\bin\\HarmonyPremium.exe"
],
"darwin": [
"/Applications/Toon Boom Harmony 17 Premium/Harmony Premium.app/Contents/MacOS/Harmony Premium"
],
@ -1127,7 +1186,9 @@
"darwin": [],
"linux": []
},
"environment": {}
"environment": {
"MULTIPROCESS": "No"
}
}
}
},
@ -1171,58 +1232,6 @@
}
}
},
"shell": {
"enabled": true,
"environment": {},
"variants": {
"python_3-7": {
"use_python_2": true,
"executables": {
"windows": [],
"darwin": [],
"linux": []
},
"arguments": {
"windows": [],
"darwin": [],
"linux": []
},
"environment": {}
},
"python_2-7": {
"use_python_2": true,
"executables": {
"windows": [],
"darwin": [],
"linux": []
},
"arguments": {
"windows": [],
"darwin": [],
"linux": []
},
"environment": {}
},
"terminal": {
"use_python_2": true,
"executables": {
"windows": [],
"darwin": [],
"linux": []
},
"arguments": {
"windows": [],
"darwin": [],
"linux": []
},
"environment": {}
},
"__dynamic_keys_labels__": {
"python_3-7": "Python 3.7",
"python_2-7": "Python 2.7"
}
}
},
"djvview": {
"enabled": true,
"label": "DJV View",
@ -1248,5 +1257,6 @@
"1-1": "1.1"
}
}
}
},
"additional_apps": {}
}

View file

@ -2,9 +2,6 @@
"studio_name": "Studio name",
"studio_code": "stu",
"admin_password": "",
"production_version": "",
"staging_version": "",
"version_check_interval": 5,
"environment": {
"__environment_keys__": {
"global": []
@ -19,5 +16,8 @@
"windows": [],
"darwin": [],
"linux": []
}
},
"production_version": "",
"staging_version": "",
"version_check_interval": 5
}

View file

@ -13,7 +13,7 @@
}
},
"ftrack": {
"enabled": true,
"enabled": false,
"ftrack_server": "",
"ftrack_actions_path": {
"windows": [],

View file

@ -752,7 +752,7 @@ class BaseItemEntity(BaseEntity):
@abstractmethod
def _add_to_project_override(self, on_change_trigger):
"""Item's implementation to set values as overriden for project.
"""Item's implementation to set values as overridden for project.
Mark item and all it's children to be stored as project overrides.
"""
@ -794,7 +794,7 @@ class BaseItemEntity(BaseEntity):
"""Item's implementation to remove project overrides.
Mark item as does not have project overrides. Must not change
`was_overriden` attribute value.
`was_overridden` attribute value.
Args:
on_change_trigger (list): Callbacks of `on_change` should be stored

View file

@ -6,7 +6,7 @@ from .lib import (
)
from openpype.settings.constants import (
METADATA_KEYS,
M_OVERRIDEN_KEY,
M_OVERRIDDEN_KEY,
KEY_REGEX
)
from . import (
@ -119,7 +119,7 @@ class DictConditionalEntity(ItemEntity):
# `current_metadata` are still when schema is loaded
# - only metadata stored with dict item are gorup overrides in
# M_OVERRIDEN_KEY
# M_OVERRIDDEN_KEY
self._current_metadata = {}
self._metadata_are_modified = False
@ -377,9 +377,9 @@ class DictConditionalEntity(ItemEntity):
):
continue
if M_OVERRIDEN_KEY not in current_metadata:
current_metadata[M_OVERRIDEN_KEY] = []
current_metadata[M_OVERRIDEN_KEY].append(key)
if M_OVERRIDDEN_KEY not in current_metadata:
current_metadata[M_OVERRIDDEN_KEY] = []
current_metadata[M_OVERRIDDEN_KEY].append(key)
# Define if current metadata are avaialble for current override state
metadata = NOT_SET
@ -535,7 +535,7 @@ class DictConditionalEntity(ItemEntity):
enum_value = value.get(self.enum_key)
old_metadata = metadata.get(M_OVERRIDEN_KEY)
old_metadata = metadata.get(M_OVERRIDDEN_KEY)
if old_metadata:
old_metadata_set = set(old_metadata)
new_metadata = []
@ -547,7 +547,7 @@ class DictConditionalEntity(ItemEntity):
for key in old_metadata_set:
new_metadata.append(key)
metadata[M_OVERRIDEN_KEY] = new_metadata
metadata[M_OVERRIDDEN_KEY] = new_metadata
return value, metadata
@ -584,8 +584,9 @@ class DictConditionalEntity(ItemEntity):
self.enum_entity.update_default_value(enum_value)
for children_by_key in self.non_gui_children.values():
value_copy = copy.deepcopy(value)
for key, child_obj in children_by_key.items():
child_value = value.get(key, NOT_SET)
child_value = value_copy.get(key, NOT_SET)
child_obj.update_default_value(child_value)
def update_studio_value(self, value):
@ -620,8 +621,9 @@ class DictConditionalEntity(ItemEntity):
self.enum_entity.update_studio_value(enum_value)
for children_by_key in self.non_gui_children.values():
value_copy = copy.deepcopy(value)
for key, child_obj in children_by_key.items():
child_value = value.get(key, NOT_SET)
child_value = value_copy.get(key, NOT_SET)
child_obj.update_studio_value(child_value)
def update_project_value(self, value):
@ -656,8 +658,9 @@ class DictConditionalEntity(ItemEntity):
self.enum_entity.update_project_value(enum_value)
for children_by_key in self.non_gui_children.values():
value_copy = copy.deepcopy(value)
for key, child_obj in children_by_key.items():
child_value = value.get(key, NOT_SET)
child_value = value_copy.get(key, NOT_SET)
child_obj.update_project_value(child_value)
def _discard_changes(self, on_change_trigger):

View file

@ -9,7 +9,7 @@ from .lib import (
)
from openpype.settings.constants import (
METADATA_KEYS,
M_OVERRIDEN_KEY,
M_OVERRIDDEN_KEY,
KEY_REGEX
)
from . import (
@ -183,7 +183,7 @@ class DictImmutableKeysEntity(ItemEntity):
# `current_metadata` are still when schema is loaded
# - only metadata stored with dict item are gorup overrides in
# M_OVERRIDEN_KEY
# M_OVERRIDDEN_KEY
self._current_metadata = {}
self._metadata_are_modified = False
@ -257,9 +257,9 @@ class DictImmutableKeysEntity(ItemEntity):
):
continue
if M_OVERRIDEN_KEY not in current_metadata:
current_metadata[M_OVERRIDEN_KEY] = []
current_metadata[M_OVERRIDEN_KEY].append(key)
if M_OVERRIDDEN_KEY not in current_metadata:
current_metadata[M_OVERRIDDEN_KEY] = []
current_metadata[M_OVERRIDDEN_KEY].append(key)
# Define if current metadata are avaialble for current override state
metadata = NOT_SET
@ -399,7 +399,7 @@ class DictImmutableKeysEntity(ItemEntity):
if key in value:
metadata[key] = value.pop(key)
old_metadata = metadata.get(M_OVERRIDEN_KEY)
old_metadata = metadata.get(M_OVERRIDDEN_KEY)
if old_metadata:
old_metadata_set = set(old_metadata)
new_metadata = []
@ -410,7 +410,7 @@ class DictImmutableKeysEntity(ItemEntity):
for key in old_metadata_set:
new_metadata.append(key)
metadata[M_OVERRIDEN_KEY] = new_metadata
metadata[M_OVERRIDDEN_KEY] = new_metadata
return value, metadata

View file

@ -222,7 +222,7 @@ class DictMutableKeysEntity(EndpointEntity):
self.required_keys = self.schema_data.get("required_keys") or []
self.collapsible_key = self.schema_data.get("collapsible_key") or False
# GUI attributes
self.hightlight_content = (
self.highlight_content = (
self.schema_data.get("highlight_content") or False
)

View file

@ -121,6 +121,20 @@ class EnumEntity(BaseEnumEntity):
)
super(EnumEntity, self).schema_validations()
def set_override_state(self, *args, **kwargs):
super(EnumEntity, self).set_override_state(*args, **kwargs)
# Make sure current value is valid
if self.multiselection:
new_value = []
for key in self._current_value:
if key in self.valid_keys:
new_value.append(key)
self._current_value = new_value
elif self._current_value not in self.valid_keys:
self._current_value = self.value_on_not_set
class HostsEnumEntity(BaseEnumEntity):
"""Enumeration of host names.
@ -249,6 +263,7 @@ class HostsEnumEntity(BaseEnumEntity):
class AppsEnumEntity(BaseEnumEntity):
"""Enum of applications for project anatomy attributes."""
schema_types = ["apps-enum"]
def _item_initialization(self):
@ -265,16 +280,30 @@ class AppsEnumEntity(BaseEnumEntity):
valid_keys = set()
enum_items_list = []
applications_entity = system_settings_entity["applications"]
app_entities = {}
additional_app_names = set()
additional_apps_entity = None
for group_name, app_group in applications_entity.items():
if group_name != "additional_apps":
app_entities[group_name] = app_group
continue
additional_apps_entity = app_group
for _group_name, _group in app_group.items():
additional_app_names.add(_group_name)
app_entities[_group_name] = _group
for group_name, app_group in app_entities.items():
enabled_entity = app_group.get("enabled")
if enabled_entity and not enabled_entity.value:
continue
host_name_entity = app_group.get("host_name")
if not host_name_entity or not host_name_entity.value:
continue
group_label = app_group["label"].value
if group_name in additional_app_names:
group_label = additional_apps_entity.get_key_label(group_name)
if not group_label:
group_label = group_name
else:
group_label = app_group["label"].value
variants_entity = app_group["variants"]
for variant_name, variant_entity in variants_entity.items():
enabled_entity = variant_entity.get("enabled")

View file

@ -101,7 +101,7 @@ class OverrideState:
- DEFAULTS - Entity cares only about default values. It is not
possible to set higher state if any entity does not have filled
default value.
- STUDIO - First layer of overrides. Hold only studio overriden values
- STUDIO - First layer of overrides. Hold only studio overridden values
that are applied on top of defaults.
- PROJECT - Second layer of overrides. Hold only project overrides that are
applied on top of defaults and studio overrides.

View file

@ -34,15 +34,24 @@ from openpype.settings.lib import (
reset_default_settings,
get_studio_system_settings_overrides,
get_studio_system_settings_overrides_for_version,
save_studio_settings,
get_available_studio_system_settings_overrides_versions,
get_studio_project_settings_overrides,
get_studio_project_settings_overrides_for_version,
get_studio_project_anatomy_overrides,
get_studio_project_anatomy_overrides_for_version,
get_project_settings_overrides,
get_project_settings_overrides_for_version,
get_project_anatomy_overrides,
save_project_settings,
save_project_anatomy,
get_available_project_settings_overrides_versions,
get_available_studio_project_settings_overrides_versions,
get_available_studio_project_anatomy_overrides_versions,
find_environments,
apply_overrides
)
@ -495,17 +504,27 @@ class SystemSettings(RootEntity):
root_key = SYSTEM_SETTINGS_KEY
def __init__(
self, set_studio_state=True, reset=True, schema_hub=None
self,
set_studio_state=True,
reset=True,
schema_hub=None,
source_version=None
):
if schema_hub is None:
# Load system schemas
schema_hub = SchemasHub(SCHEMA_KEY_SYSTEM_SETTINGS)
self._source_version = source_version
super(SystemSettings, self).__init__(schema_hub, reset)
if set_studio_state:
self.set_studio_state()
@property
def source_version(self):
return self._source_version
def get_entity_from_path(self, path):
"""Return system settings entity."""
path_parts = path.split("/")
@ -524,12 +543,24 @@ class SystemSettings(RootEntity):
value = default_value.get(key, NOT_SET)
child_obj.update_default_value(value)
studio_overrides = get_studio_system_settings_overrides()
if self._source_version is None:
studio_overrides, version = get_studio_system_settings_overrides(
return_version=True
)
self._source_version = version
else:
studio_overrides = (
get_studio_system_settings_overrides_for_version(
self._source_version
)
)
for key, child_obj in self.non_gui_children.items():
value = studio_overrides.get(key, NOT_SET)
child_obj.update_studio_value(value)
def reset(self, new_state=None):
def reset(self, new_state=None, source_version=None):
"""Discard changes and reset entit's values.
Reload default values and studio override values and update entities.
@ -547,9 +578,22 @@ class SystemSettings(RootEntity):
if new_state is OverrideState.PROJECT:
raise ValueError("System settings can't store poject overrides.")
if source_version is not None:
self._source_version = source_version
self._reset_values()
self.set_override_state(new_state)
def get_available_source_versions(self, sorted=None):
if self.is_in_studio_state():
return self.get_available_studio_versions(sorted=sorted)
return []
def get_available_studio_versions(self, sorted=None):
return get_available_studio_system_settings_overrides_versions(
sorted=sorted
)
def defaults_dir(self):
"""Path to defaults directory.
@ -566,6 +610,8 @@ class SystemSettings(RootEntity):
json.dumps(settings_value, indent=4)
))
save_studio_settings(settings_value)
# Reset source version after restart
self._source_version = None
def _validate_defaults_to_save(self, value):
"""Valiations of default values before save."""
@ -622,11 +668,15 @@ class ProjectSettings(RootEntity):
project_name=None,
change_state=True,
reset=True,
schema_hub=None
schema_hub=None,
source_version=None,
anatomy_source_version=None
):
self._project_name = project_name
self._system_settings_entity = None
self._source_version = source_version
self._anatomy_source_version = anatomy_source_version
if schema_hub is None:
# Load system schemas
@ -640,6 +690,14 @@ class ProjectSettings(RootEntity):
else:
self.set_project_state()
@property
def source_version(self):
return self._source_version
@property
def anatomy_source_version(self):
return self._anatomy_source_version
@property
def project_name(self):
return self._project_name
@ -682,23 +740,20 @@ class ProjectSettings(RootEntity):
output = output[path_part]
return output
def change_project(self, project_name):
def change_project(self, project_name, source_version=None):
if project_name == self._project_name:
return
if (
source_version is None
or source_version == self._source_version
):
if not self.is_in_project_state():
self.set_project_state()
return
self._project_name = project_name
if project_name is None:
self.set_studio_state()
return
project_override_value = {
PROJECT_SETTINGS_KEY: get_project_settings_overrides(project_name),
PROJECT_ANATOMY_KEY: get_project_anatomy_overrides(project_name)
}
for key, child_obj in self.non_gui_children.items():
value = project_override_value.get(key, NOT_SET)
child_obj.update_project_value(value)
self._source_version = source_version
self._anatomy_source_version = None
self._set_values_for_project(project_name)
self.set_project_state()
def _reset_values(self):
@ -710,27 +765,97 @@ class ProjectSettings(RootEntity):
value = default_values.get(key, NOT_SET)
child_obj.update_default_value(value)
self._set_values_for_project(self.project_name)
def _set_values_for_project(self, project_name):
self._project_name = project_name
if project_name:
project_settings_overrides = (
get_studio_project_settings_overrides()
)
project_anatomy_overrides = (
get_studio_project_anatomy_overrides()
)
else:
if self._source_version is None:
project_settings_overrides, version = (
get_studio_project_settings_overrides(return_version=True)
)
self._source_version = version
else:
project_settings_overrides = (
get_studio_project_settings_overrides_for_version(
self._source_version
)
)
if self._anatomy_source_version is None:
project_anatomy_overrides, anatomy_version = (
get_studio_project_anatomy_overrides(return_version=True)
)
self._anatomy_source_version = anatomy_version
else:
project_anatomy_overrides = (
get_studio_project_anatomy_overrides_for_version(
self._anatomy_source_version
)
)
studio_overrides = {
PROJECT_SETTINGS_KEY: get_studio_project_settings_overrides(),
PROJECT_ANATOMY_KEY: get_studio_project_anatomy_overrides()
PROJECT_SETTINGS_KEY: project_settings_overrides,
PROJECT_ANATOMY_KEY: project_anatomy_overrides
}
for key, child_obj in self.non_gui_children.items():
value = studio_overrides.get(key, NOT_SET)
child_obj.update_studio_value(value)
if not self.project_name:
if not project_name:
return
project_name = self.project_name
if self._source_version is None:
project_settings_overrides, version = (
get_project_settings_overrides(
project_name, return_version=True
)
)
self._source_version = version
else:
project_settings_overrides = (
get_project_settings_overrides_for_version(
project_name, self._source_version
)
)
project_override_value = {
PROJECT_SETTINGS_KEY: get_project_settings_overrides(project_name),
PROJECT_SETTINGS_KEY: project_settings_overrides,
PROJECT_ANATOMY_KEY: get_project_anatomy_overrides(project_name)
}
for key, child_obj in self.non_gui_children.items():
value = project_override_value.get(key, NOT_SET)
child_obj.update_project_value(value)
def get_available_source_versions(self, sorted=None):
if self.is_in_studio_state():
return self.get_available_studio_versions(sorted=sorted)
elif self.is_in_project_state():
return get_available_project_settings_overrides_versions(
self.project_name, sorted=sorted
)
return []
def get_available_studio_versions(self, sorted=None):
return get_available_studio_project_settings_overrides_versions(
sorted=sorted
)
def get_available_anatomy_source_versions(self, sorted=None):
if self.is_in_studio_state():
return get_available_studio_project_anatomy_overrides_versions(
sorted=sorted
)
return []
def reset(self, new_state=None):
"""Discard changes and reset entit's values.
@ -763,6 +888,9 @@ class ProjectSettings(RootEntity):
self._validate_values_to_save(settings_value)
self._source_version = None
self._anatomy_source_version = None
self.log.debug("Saving project settings: {}".format(
json.dumps(settings_value, indent=4)
))

View file

@ -10,7 +10,7 @@
- `"is_file"` - this key is for storing openpype defaults in `openpype` repo
- reasons of existence: developing new schemas does not require to create defaults manually
- key is validated, must be once in hierarchy else it won't be possible to store openpype defaults
- `"is_group"` - define that all values under key in hierarchy will be overriden if any value is modified, this information is also stored to overrides
- `"is_group"` - define that all values under key in hierarchy will be overridden if any value is modified, this information is also stored to overrides
- this keys is not allowed for all inputs as they may have not reason for that
- key is validated, can be only once in hierarchy but is not required
- currently there are `system settings` and `project settings`
@ -767,7 +767,7 @@ Anatomy represents data stored on project document.
### anatomy
- entity works similarly to `dict`
- anatomy has always all keys overriden with overrides
- anatomy has always all keys overridden with overrides
- overrides are not applied as all anatomy data must be available from project document
- all children must be groups

View file

@ -66,6 +66,10 @@
"type": "schema",
"name": "schema_project_deadline"
},
{
"type": "schema",
"name": "schema_project_royalrender"
},
{
"type": "schema",
"name": "schema_project_slack"

View file

@ -50,39 +50,6 @@
"label": "Skip Timeline Check for Tasks"
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "AfterEffectsSubmitDeadline",
"label": "AfterEffects Submit to Deadline",
"children": [
{
"type": "boolean",
"key": "use_published",
"label": "Use Published scene"
},
{
"type": "number",
"key": "priority",
"label": "Priority"
},
{
"type": "text",
"key": "primary_pool",
"label": "Primary Pool"
},
{
"type": "text",
"key": "secondary_pool",
"label": "Secondary Pool"
},
{
"type": "number",
"key": "chunk_size",
"label": "Frames Per Task"
}
]
}
]
},

View file

@ -17,6 +17,19 @@
"key": "publish",
"label": "Publish plugins",
"children": [
{
"type": "dict",
"collapsible": true,
"key": "CollectDefaultDeadlineServer",
"label": "Default Deadline Webservice",
"children": [
{
"type": "boolean",
"key": "pass_mongo_url",
"label": "Pass Mongo url to job"
}
]
},
{
"type": "dict",
"collapsible": true,
@ -58,106 +71,11 @@
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "ProcessSubmittedJobOnFarm",
"label": "ProcessSubmittedJobOnFarm",
"checkbox_key": "enabled",
"is_group": true,
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "text",
"key": "deadline_department",
"label": "Deadline department"
},
{
"type": "text",
"key": "deadline_pool",
"label": "Deadline Pool"
},
{
"type": "text",
"key": "deadline_group",
"label": "Deadline Group"
},
{
"type": "number",
"key": "deadline_chunk_size",
"label": "Deadline Chunk Size"
},
{
"type": "number",
"key": "deadline_priority",
"label": "Deadline Priotity"
},
{
"type": "splitter"
},
{
"type": "text",
"key": "publishing_script",
"label": "Publishing script path"
},
{
"type": "list",
"key": "skip_integration_repre_list",
"label": "Skip integration of representation with ext",
"object_type": {
"type": "text"
}
},
{
"type": "dict",
"key": "aov_filter",
"label": "Reviewable subsets filter",
"children": [
{
"type": "list",
"key": "maya",
"label": "Maya",
"object_type": {
"type": "text"
}
},
{
"type": "list",
"key": "nuke",
"label": "Nuke",
"object_type": {
"type": "text"
}
},
{
"type": "list",
"key": "aftereffects",
"label": "After Effects",
"object_type": {
"type": "text"
}
},
{
"type": "list",
"key": "celaction",
"label": "Celaction",
"object_type": {
"type": "text"
}
}
]
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "MayaSubmitDeadline",
"label": "Submit Maya job to Deadline",
"label": "Maya Submit to Deadline",
"checkbox_key": "enabled",
"children": [
{
@ -185,7 +103,7 @@
"DraftTileAssembler": "Draft Tile Assembler"
},
{
"oiio": "Open Image IO"
"OpenPypeTileAssembler": "Open Image IO"
}
]
},
@ -449,6 +367,77 @@
"type": "text",
"key": "department",
"label": "Department"
},
{
"type": "boolean",
"key": "multiprocess",
"label": "Multiprocess"
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "ProcessSubmittedJobOnFarm",
"label": "ProcessSubmittedJobOnFarm",
"checkbox_key": "enabled",
"is_group": true,
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "text",
"key": "deadline_department",
"label": "Deadline department"
},
{
"type": "text",
"key": "deadline_pool",
"label": "Deadline Pool"
},
{
"type": "text",
"key": "deadline_group",
"label": "Deadline Group"
},
{
"type": "number",
"key": "deadline_chunk_size",
"label": "Deadline Chunk Size"
},
{
"type": "number",
"key": "deadline_priority",
"label": "Deadline Priotity"
},
{
"type": "splitter"
},
{
"type": "text",
"key": "publishing_script",
"label": "Publishing script path"
},
{
"type": "list",
"key": "skip_integration_repre_list",
"label": "Skip integration of representation with ext",
"object_type": {
"type": "text"
}
},
{
"type": "dict-modifiable",
"docstring": "Regular expression to filter for which subset review should be created in publish job.",
"key": "aov_filter",
"label": "Reviewable subsets filter",
"object_type": {
"type": "list",
"object_type": "text"
}
}
]
}

View file

@ -28,6 +28,11 @@
"key": "hierarchy",
"label": "Shot parent hierarchy"
},
{
"type": "boolean",
"key": "useShotName",
"label": "Use Shot Name"
},
{
"type": "boolean",
"key": "clipRename",
@ -166,6 +171,11 @@
"label": "XML preset folder (optional)",
"type": "text"
},
{
"key": "colorspace_out",
"label": "Output color (imageio)",
"type": "text"
},
{
"type": "separator"
},
@ -189,6 +199,61 @@
]
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "load",
"label": "Loader plugins",
"children": [
{
"type": "dict",
"collapsible": true,
"key": "LoadClip",
"label": "Load Clip",
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "list",
"key": "families",
"label": "Families",
"object_type": "text"
},
{
"type": "list",
"key": "representations",
"label": "Representations",
"object_type": "text"
},
{
"type": "separator"
},
{
"type": "text",
"key": "reel_group_name",
"label": "Reel group name"
},
{
"type": "text",
"key": "reel_name",
"label": "Reel name"
},
{
"type": "separator"
},
{
"type": "text",
"key": "clip_name_template",
"label": "Clip name template"
}
]
}
]
}
]
}

View file

@ -723,7 +723,6 @@
}
]
},
{
"type": "dict",
"collapsible": true,
@ -743,6 +742,22 @@
"label": "Custom attributes to validate"
}
]
},
{
"type": "dict",
"key": "IntegrateFtrackInstance",
"label": "IntegrateFtrackInstance",
"is_group": true,
"children": [
{
"type": "dict-modifiable",
"key": "family_mapping",
"label": "Family Mapping",
"object_type": {
"type": "text"
}
}
]
}
]
}

View file

@ -17,6 +17,10 @@
"key": "CollectPalettes",
"label": "Collect Palettes",
"children": [
{
"type": "label",
"label": "Set regular expressions to filter triggering on specific task names. '.*' means on all."
},
{
"type": "list",
"key": "allowed_tasks",
@ -30,6 +34,18 @@
"name": "template_publish_plugin",
"template_data": [
{
"docstring": "Check if scene contains audio track.",
"key": "ValidateAudio",
"label": "ValidateAudio"
}
]
},
{
"type": "schema_template",
"name": "template_publish_plugin",
"template_data": [
{
"docstring": "Check if loaded container is scene are latest versions.",
"key": "ValidateContainers",
"label": "ValidateContainers"
}
@ -59,7 +75,7 @@
},
{
"type": "label",
"label": "Validate if FrameStart, FrameEnd and Resolution match shot data"
"label": "Validate if FrameStart, FrameEnd and Resolution match shot data in DB.\n Use regular expressions to limit validations only on particular asset or task names."
},
{
"type": "list",
@ -77,40 +93,7 @@
"type": "list",
"key": "skip_timelines_check",
"object_type": "text",
"label": "Skip Timeline Check for Tasks"
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "HarmonySubmitDeadline",
"label": "Harmony Submit to Deadline",
"children": [
{
"type": "boolean",
"key": "use_published",
"label": "Use Published scene"
},
{
"type": "number",
"key": "priority",
"label": "Priority"
},
{
"type": "text",
"key": "primary_pool",
"label": "Primary Pool"
},
{
"type": "text",
"key": "secondary_pool",
"label": "Secondary Pool"
},
{
"type": "number",
"key": "chunk_size",
"label": "Frames Per Task"
"label": "Skip Timeline Check for Tasks"
}
]
}

View file

@ -131,6 +131,11 @@
"object_type": {
"type": "text"
}
},
{
"type": "boolean",
"key": "reviewable",
"label": "Add reviewable toggle"
}
]
}

View file

@ -37,12 +37,22 @@
"type": "dict",
"collapsible": true,
"is_group": true,
"key": "CollectRemoteInstances",
"label": "Collect Instances for Webpublish",
"key": "CollectColorCodedInstances",
"label": "Collect Color Coded Instances",
"children": [
{
"type": "label",
"label": "Set color for publishable layers, set publishable families."
"label": "Set color for publishable layers, set its resulting family and template for subset name. Can create flatten image from published instances"
},
{
"type": "boolean",
"key": "create_flatten_image",
"label": "Create flatten image"
},
{
"type": "text",
"key": "flatten_subset_template",
"label": "Subset template for flatten image"
},
{
"type": "list",
@ -154,6 +164,11 @@
"key": "ExtractReview",
"label": "Extract Review",
"children": [
{
"type": "boolean",
"key": "make_image_sequence",
"label": "Makes an image sequence instead of a flatten image"
},
{
"type": "dict",
"collapsible": false,

View file

@ -0,0 +1,34 @@
{
"type": "dict",
"key": "royalrender",
"label": "Royal Render",
"collapsible": true,
"is_file": true,
"children": [
{
"type": "dict",
"collapsible": true,
"key": "publish",
"label": "Publish plugins",
"children": [
{
"type": "label",
"label": "Collectors"
},
{
"type": "dict",
"collapsible": true,
"key": "CollectSequencesFromJob",
"label": "Collect Sequences from the Job",
"children": [
{
"type": "boolean",
"key": "review",
"label": "Generate reviews from sequences"
}
]
}
]
}
]
}

View file

@ -69,6 +69,12 @@
"type": "list",
"object_type": "text"
},
{
"key": "subsets",
"label": "Subset names",
"type": "list",
"object_type": "text"
},
{
"type": "separator"
},

View file

@ -24,10 +24,10 @@
"label": "Task type to family mapping",
"collapsible_key": true,
"object_type": {
"type": "dict-modifiable",
"collapsible": false,
"type": "list",
"collapsible": true,
"key": "task_type",
"collapsible_key": false,
"collapsible_key": true,
"object_type": {
"type": "dict",
"children": [
@ -52,10 +52,13 @@
"type": "schema",
"name": "schema_representation_tags"
},
{
"type": "separator"
},
{
"type": "text",
"key": "subset_template_name",
"label": "Subset template name"
"key": "result_family",
"label": "Resulting family"
}
]
}

View file

@ -377,11 +377,47 @@
"type": "dict",
"label": "Maya",
"children": [
{
"key": "colorManagementPreference_v2",
"type": "dict",
"label": "Color Management Preference v2 (Maya 2022+)",
"collapsible": true,
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Use Color Management Preference v2"
},
{
"type": "path",
"key": "configFilePath",
"label": "OCIO Config File Path",
"multiplatform": true,
"multipath": true
},
{
"type": "text",
"key": "renderSpace",
"label": "Rendering Space"
},
{
"type": "text",
"key": "displayName",
"label": "Display"
},
{
"type": "text",
"key": "viewName",
"label": "View"
}
]
},
{
"key": "colorManagementPreference",
"type": "dict",
"label": "Color Managment Preference",
"collapsible": false,
"label": "Color Management Preference (legacy)",
"collapsible": true,
"children": [
{
"type": "path",
@ -401,7 +437,69 @@
"label": "Viewer Transform"
}
]
}
}
]
},
{
"key": "flame",
"type": "dict",
"label": "Flame/Flair",
"children": [
{
"key": "project",
"type": "dict",
"label": "Project",
"collapsible": false,
"children": [
{
"type": "form",
"children": [
{
"type": "text",
"key": "colourPolicy",
"label": "Colour Policy"
},
{
"type": "text",
"key": "frameDepth",
"label": "Image Depth"
},
{
"type": "text",
"key": "fieldDominance",
"label": "Field Dominance"
}
]
}
]
},
{
"key": "profilesMapping",
"type": "dict",
"label": "Profile names mapping",
"collapsible": true,
"children": [
{
"type": "list",
"key": "inputs",
"object_type": {
"type": "dict",
"children": [
{
"type": "text",
"key": "flameName",
"label": "Flame name"
},
{
"type": "text",
"key": "ocioName",
"label": "OCIO name"
}
]
}
}
]
}
]
}
]

View file

@ -143,6 +143,28 @@
"label": "Delivery",
"object_type": "text"
},
{
"type": "dict",
"key": "unreal",
"label": "Unreal",
"children": [
{
"type": "text",
"key": "folder",
"label": "Folder"
},
{
"type": "text",
"key": "file",
"label": "File"
},
{
"type": "text",
"key": "path",
"label": "Path"
}
]
},
{
"type": "dict-modifiable",
"key": "others",

View file

@ -18,6 +18,27 @@
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "CollectSceneVersion",
"label": "Collect Version from Workfile",
"is_group": true,
"children": [
{
"key": "hosts",
"label": "Host names",
"type": "hosts-enum",
"multiselection": true
},
{
"key": "skip_hosts_headless_publish",
"label": "Skip for host if headless publish",
"type": "hosts-enum",
"multiselection": true
}
]
},
{
"type": "dict",
"collapsible": true,
@ -270,6 +291,15 @@
"label": "Families",
"type": "list",
"object_type": "text"
},
{
"type": "separator"
},
{
"key": "subsets",
"label": "Subsets",
"type": "list",
"object_type": "text"
}
]
},
@ -345,19 +375,6 @@
"minimum": 0,
"maximum": 10000
},
{
"key": "state",
"label": "Type",
"type": "enum",
"enum_items": [
{
"letterbox": "Letterbox"
},
{
"pillar": "Pillar"
}
]
},
{
"type": "color",
"label": "Fill Color",
@ -656,8 +673,22 @@
"label": "Remove Temp renders",
"default": false
}
]
},
{
"type": "dict",
"collapsible": false,
"key": "CleanUpFarm",
"label": "Clean Up Farm",
"is_group": true,
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
}
]
}
]
}

View file

@ -267,7 +267,9 @@
"label": "Task types"
},
{
"type": "splitter"
"type": "boolean",
"key": "is_include",
"label": "Exclude / Include"
},
{
"type": "template",

View file

@ -4,6 +4,41 @@
"key": "create",
"label": "Creator plugins",
"children": [
{
"type": "dict",
"collapsible": true,
"key": "CreateArnoldAss",
"label": "Create Arnold Ass",
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "list",
"key": "defaults",
"label": "Default Subsets",
"object_type": "text"
},
{
"type": "enum",
"key": "ext",
"label": "Default Output Format (extension)",
"multiselection": false,
"enum_items": [
{
".ass": ".ass"
},
{
".ass.gz": ".ass.gz (gzipped)"
}
]
}
]
},
{
"type": "schema_template",
"name": "template_create_plugin",

View file

@ -66,6 +66,38 @@
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "CreateUnrealStaticMesh",
"label": "Create Unreal - Static Mesh",
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "list",
"key": "defaults",
"label": "Default Subsets",
"object_type": "text"
},
{
"type": "text",
"key": "static_mesh_prefix",
"label": "Static Mesh Prefix"
},
{
"type": "list",
"key": "collision_prefixes",
"label": "Collision Mesh Prefixes",
"object_type": "text"
}
]
},
{
"type": "schema_template",
"name": "template_create_plugin",
@ -118,10 +150,6 @@
"key": "CreateSetDress",
"label": "Create Set Dress"
},
{
"key": "CreateUnrealStaticMesh",
"label": "Create Unreal - Static Mesh"
},
{
"key": "CreateVrayProxy",
"label": "Create VRay Proxy"

View file

@ -75,6 +75,11 @@
"label": "Vray Proxy:",
"key": "vrayproxy"
},
{
"type": "color",
"label": "Vray Scene:",
"key": "vrayscene_layer"
},
{
"type": "color",
"label": "Yeti Cache:",

View file

@ -48,6 +48,16 @@
}
]
},
{
"type": "schema_template",
"name": "template_publish_plugin",
"template_data": [
{
"key": "ValidateFrameRange",
"label": "Validate Frame Range"
}
]
},
{
"type": "dict",
"collapsible": true,
@ -71,7 +81,6 @@
}
]
},
{
"type": "schema_template",
"name": "template_publish_plugin",
@ -82,7 +91,6 @@
}
]
},
{
"type": "dict",
"collapsible": true,
@ -102,7 +110,6 @@
}
]
},
{
"type": "dict",
"collapsible": true,
@ -128,7 +135,118 @@
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "ValidateMayaUnits",
"label": "Validate Maya Units",
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "boolean",
"key": "optional",
"label": "Optional"
},
{
"type": "boolean",
"key": "validate_linear_units",
"label": "Validate linear units"
},
{
"key": "linear_units",
"label": "Linear units",
"type": "enum",
"multiselection": false,
"defaults": "cm",
"enum_items": [
{"mm": "millimeter"},
{"cm": "centimeter"},
{"m": "meter"},
{"km": "kilometer"},
{"in": "inch"},
{"ft": "foot"},
{"yd": "yard"},
{"mi": "mile"}
]
},
{
"type": "boolean",
"key": "validate_angular_units",
"label": "Validate angular units"
},
{
"key": "angular_units",
"label": "Angular units",
"type": "enum",
"multiselection": false,
"defaults": "cm",
"enum_items": [
{"deg": "degree"},
{"rad": "radian"}
]
},
{
"type": "boolean",
"key": "validate_fps",
"label": "Validate fps"
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "ValidateUnrealStaticMeshName",
"label": "Validate Unreal Static Mesh Name",
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "boolean",
"key": "validate_mesh",
"label": "Validate mesh Names "
},
{
"type": "boolean",
"key": "validate_collision",
"label": "Validate collision names"
}
]
},
{
"type": "dict",
"collapsible": true,
"checkbox_key": "enabled",
"key": "ValidateCycleError",
"label": "Validate Cycle Error",
"is_group": true,
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "boolean",
"key": "optional",
"label": "Optional"
},
{
"key": "families",
"label": "Families",
"type": "list",
"object_type": "text"
}
]
},
{
"type": "dict",
"collapsible": true,
@ -232,7 +350,7 @@
"label": "Validate Model Content",
"checkbox_key": "enabled",
"children": [
{
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
@ -449,6 +567,30 @@
"type": "schema",
"name": "schema_maya_capture"
},
{
"type": "dict",
"collapsible": true,
"key": "ExtractMayaSceneRaw",
"label": "Maya Scene (Raw)",
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "label",
"label": "Add loaded instances to those published families:"
},
{
"key": "add_for_families",
"label": "Families",
"type": "list",
"object_type": "text"
}
]
},
{
"type": "dict",
"collapsible": true,

View file

@ -195,6 +195,12 @@
"label": "Families",
"type": "list",
"object_type": "text"
},
{
"key": "sebsets",
"label": "Subsets",
"type": "list",
"object_type": "text"
}
]
},
@ -226,6 +232,121 @@
"label": "Add additional tags to representations",
"type": "list",
"object_type": "text"
},
{
"type": "separator"
},
{
"type": "boolean",
"key": "reformat_node_add",
"label": "Add Reformat Node",
"default": false
},
{
"type": "collapsible-wrap",
"label": "Reformat Node Knobs",
"collapsible": true,
"collapsed": false,
"children": [
{
"type": "list",
"key": "reformat_node_config",
"object_type": {
"type": "dict-conditional",
"enum_key": "type",
"enum_label": "Type",
"enum_children": [
{
"key": "string",
"label": "String",
"children": [
{
"type": "text",
"key": "name",
"label": "Name"
},
{
"type": "text",
"key": "value",
"label": "Value"
}
]
},
{
"key": "bool",
"label": "Boolean",
"children": [
{
"type": "text",
"key": "name",
"label": "Name"
},
{
"type": "boolean",
"key": "value",
"label": "Value"
}
]
},
{
"key": "number",
"label": "Number",
"children": [
{
"type": "text",
"key": "name",
"label": "Name"
},
{
"type": "list-strict",
"key": "value",
"label": "Value",
"object_types": [
{
"type": "number",
"key": "number",
"default": 1,
"decimal": 4
}
]
}
]
},
{
"key": "list_numbers",
"label": "2 Numbers",
"children": [
{
"type": "text",
"key": "name",
"label": "Name"
},
{
"type": "list-strict",
"key": "value",
"label": "Value",
"object_types": [
{
"type": "number",
"key": "x",
"default": 1,
"decimal": 4
},
{
"type": "number",
"key": "y",
"default": 1,
"decimal": 4
}
]
}
]
}
]
}
}
]
}
]
}

View file

@ -10,23 +10,39 @@
"multiselection": "{multiselection}",
"type": "enum",
"enum_items": [
{"action": "action"},
{"animation": "animation"},
{"audio": "audio"},
{"camera": "camera"},
{"editorial": "editorial"},
{"layout": "layout"},
{"look": "look"},
{"mayaAscii": "mayaAscii"},
{"model": "model"},
{"pointcache": "pointcache"},
{"reference": "reference"},
{"render": "render"},
{"review": "review"},
{"rig": "rig"},
{"setdress": "setdress"},
{"workfile": "workfile"},
{"xgen": "xgen"}
{"action": "action"},
{"animation": "animation"},
{"assembly": "assembly"},
{"audio": "audio"},
{"backgroundComp": "backgroundComp"},
{"backgroundLayout": "backgroundLayout"},
{"camera": "camera"},
{"editorial": "editorial"},
{"gizmo": "gizmo"},
{"image": "image"},
{"layout": "layout"},
{"look": "look"},
{"matchmove": "matchmove"},
{"mayaScene": "mayaScene"},
{"model": "model"},
{"nukenodes": "nukenodes"},
{"plate": "plate"},
{"pointcache": "pointcache"},
{"prerender": "prerender"},
{"redshiftproxy": "redshiftproxy"},
{"reference": "reference"},
{"render": "render"},
{"review": "review"},
{"rig": "rig"},
{"setdress": "setdress"},
{"take": "take"},
{"usdShade": "usdShade"},
{"vdbcache": "vdbcache"},
{"vrayproxy": "vrayproxy"},
{"workfile": "workfile"},
{"xgen": "xgen"},
{"yetiRig": "yetiRig"},
{"yeticache": "yeticache"}
]
}
]

View file

@ -11,13 +11,13 @@
},
{
"type": "dict-conditional",
"key": "overriden_value",
"label": "Overriden value",
"enum_key": "overriden",
"key": "overridden_value",
"label": "Overridden value",
"enum_key": "overridden",
"enum_is_horizontal": true,
"enum_children": [
{
"key": "overriden",
"key": "overridden",
"label": "Override value",
"children": [
{

View file

@ -20,24 +20,21 @@
"type": "raw-json"
},
{
"type": "dict",
"type": "dict-modifiable",
"key": "variants",
"children": [
{
"type": "schema_template",
"name": "template_host_variant",
"template_data": [
{
"app_variant_label": "16",
"app_variant": "16"
},
{
"app_variant_label": "9",
"app_variant": "9"
}
]
}
]
"collapsible_key": true,
"use_label_wrap": false,
"object_type": {
"type": "dict",
"collapsible": true,
"children": [
{
"type": "schema_template",
"name": "template_host_variant_items",
"skip_paths": ["use_python_2"]
}
]
}
}
]
}

View file

@ -27,6 +27,11 @@
"type": "schema_template",
"name": "template_host_variant",
"template_data": [
{
"app_variant_label": "21",
"app_variant": "21",
"variant_skip_paths": ["use_python_2"]
},
{
"app_variant_label": "20",
"app_variant": "20",

View file

@ -1,35 +0,0 @@
{
"type": "dict",
"key": "shell",
"label": "Shell",
"collapsible": true,
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"key": "environment",
"label": "Environment",
"type": "raw-json"
},
{
"type": "dict-modifiable",
"key": "variants",
"collapsible_key": true,
"use_label_wrap": false,
"object_type": {
"type": "dict",
"collapsible": true,
"children": [
{
"type": "schema_template",
"name": "template_host_variant_items"
}
]
}
}
]
}

View file

@ -87,11 +87,50 @@
},
{
"type": "schema",
"name": "schema_shell"
"name": "schema_djv"
},
{
"type": "schema",
"name": "schema_djv"
"type": "dict-modifiable",
"key": "additional_apps",
"label": "Additional",
"collapsible": true,
"collapsible_key": true,
"object_type": {
"type": "dict",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "schema_template",
"name": "template_host_unchangables",
"skip_paths": ["host_name", "label"]
},
{
"key": "environment",
"label": "Environment",
"type": "raw-json"
},
{
"type": "dict-modifiable",
"key": "variants",
"collapsible_key": true,
"use_label_wrap": false,
"object_type": {
"type": "dict",
"collapsible": true,
"children": [
{
"type": "schema_template",
"name": "template_host_variant_items"
}
]
}
}
]
}
}
]
}

View file

@ -30,36 +30,6 @@
{
"type": "splitter"
},
{
"type": "label",
"label": "Define explicit OpenPype version that should be used. Keep empty to use latest available version."
},
{
"type": "production-versions-text",
"key": "production_version",
"label": "Production version"
},
{
"type": "staging-versions-text",
"key": "staging_version",
"label": "Staging version"
},
{
"type": "splitter"
},
{
"type": "label",
"label": "Trigger validation if running OpenPype is using studio defined version each 'n' <b>minutes</b>. Validation happens in OpenPype tray application."
},
{
"type": "number",
"key": "version_check_interval",
"label": "Version check interval",
"minimum": 0
},
{
"type": "splitter"
},
{
"key": "environment",
"label": "Environment",
@ -141,12 +111,49 @@
"type": "splitter"
},
{
"type": "path",
"key": "openpype_path",
"label": "Versions Repository",
"multiplatform": true,
"multipath": true,
"require_restart": true
"type": "collapsible-wrap",
"label": "OpenPype deployment control",
"collapsible": false,
"children": [
{
"type": "path",
"key": "openpype_path",
"label": "Versions Repository",
"multiplatform": true,
"multipath": true,
"require_restart": true
},
{
"type": "splitter"
},
{
"type": "label",
"label": "Define explicit OpenPype version that should be used. Keep empty to use latest available version."
},
{
"type": "production-versions-text",
"key": "production_version",
"label": "Production version"
},
{
"type": "staging-versions-text",
"key": "staging_version",
"label": "Staging version"
},
{
"type": "splitter"
},
{
"type": "label",
"label": "Trigger validation if running OpenPype is using studio defined version each 'n' <b>minutes</b>. Validation happens in OpenPype tray application."
},
{
"type": "number",
"key": "version_check_interval",
"label": "Version check interval",
"minimum": 0
}
]
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ from .exceptions import (
SaveWarningExc
)
from .constants import (
M_OVERRIDEN_KEY,
M_OVERRIDDEN_KEY,
M_ENVIRONMENT_KEY,
METADATA_KEYS,
@ -266,23 +266,31 @@ def save_project_anatomy(project_name, anatomy_data):
@require_handler
def get_studio_system_settings_overrides():
return _SETTINGS_HANDLER.get_studio_system_settings_overrides()
def get_studio_system_settings_overrides(return_version=False):
return _SETTINGS_HANDLER.get_studio_system_settings_overrides(
return_version
)
@require_handler
def get_studio_project_settings_overrides():
return _SETTINGS_HANDLER.get_studio_project_settings_overrides()
def get_studio_project_settings_overrides(return_version=False):
return _SETTINGS_HANDLER.get_studio_project_settings_overrides(
return_version
)
@require_handler
def get_studio_project_anatomy_overrides():
return _SETTINGS_HANDLER.get_studio_project_anatomy_overrides()
def get_studio_project_anatomy_overrides(return_version=False):
return _SETTINGS_HANDLER.get_studio_project_anatomy_overrides(
return_version
)
@require_handler
def get_project_settings_overrides(project_name):
return _SETTINGS_HANDLER.get_project_settings_overrides(project_name)
def get_project_settings_overrides(project_name, return_version=False):
return _SETTINGS_HANDLER.get_project_settings_overrides(
project_name, return_version
)
@require_handler
@ -290,6 +298,123 @@ def get_project_anatomy_overrides(project_name):
return _SETTINGS_HANDLER.get_project_anatomy_overrides(project_name)
@require_handler
def get_studio_system_settings_overrides_for_version(version):
return (
_SETTINGS_HANDLER
.get_studio_system_settings_overrides_for_version(version)
)
@require_handler
def get_studio_project_anatomy_overrides_for_version(version):
return (
_SETTINGS_HANDLER
.get_studio_project_anatomy_overrides_for_version(version)
)
@require_handler
def get_studio_project_settings_overrides_for_version(version):
return (
_SETTINGS_HANDLER
.get_studio_project_settings_overrides_for_version(version)
)
@require_handler
def get_project_settings_overrides_for_version(
project_name, version
):
return (
_SETTINGS_HANDLER
.get_project_settings_overrides_for_version(project_name, version)
)
@require_handler
def get_available_studio_system_settings_overrides_versions(sorted=None):
return (
_SETTINGS_HANDLER
.get_available_studio_system_settings_overrides_versions(
sorted=sorted
)
)
@require_handler
def get_available_studio_project_anatomy_overrides_versions(sorted=None):
return (
_SETTINGS_HANDLER
.get_available_studio_project_anatomy_overrides_versions(
sorted=sorted
)
)
@require_handler
def get_available_studio_project_settings_overrides_versions(sorted=None):
return (
_SETTINGS_HANDLER
.get_available_studio_project_settings_overrides_versions(
sorted=sorted
)
)
@require_handler
def get_available_project_settings_overrides_versions(
project_name, sorted=None
):
return (
_SETTINGS_HANDLER
.get_available_project_settings_overrides_versions(
project_name, sorted=sorted
)
)
@require_handler
def find_closest_version_for_projects(project_names):
return (
_SETTINGS_HANDLER
.find_closest_version_for_projects(project_names)
)
@require_handler
def clear_studio_system_settings_overrides_for_version(version):
return (
_SETTINGS_HANDLER
.clear_studio_system_settings_overrides_for_version(version)
)
@require_handler
def clear_studio_project_settings_overrides_for_version(version):
return (
_SETTINGS_HANDLER
.clear_studio_project_settings_overrides_for_version(version)
)
@require_handler
def clear_studio_project_anatomy_overrides_for_version(version):
return (
_SETTINGS_HANDLER
.clear_studio_project_anatomy_overrides_for_version(version)
)
@require_handler
def clear_project_settings_overrides_for_version(
version, project_name
):
return _SETTINGS_HANDLER.clear_project_settings_overrides_for_version(
version, project_name
)
@require_local_handler
def save_local_settings(data):
return _LOCAL_SETTINGS_HANDLER.save_local_settings(data)
@ -546,13 +671,13 @@ def subkey_merge(_dict, value, keys):
def merge_overrides(source_dict, override_dict):
"""Merge data from override_dict to source_dict."""
if M_OVERRIDEN_KEY in override_dict:
overriden_keys = set(override_dict.pop(M_OVERRIDEN_KEY))
if M_OVERRIDDEN_KEY in override_dict:
overridden_keys = set(override_dict.pop(M_OVERRIDDEN_KEY))
else:
overriden_keys = set()
overridden_keys = set()
for key, value in override_dict.items():
if (key in overriden_keys or key not in source_dict):
if (key in overridden_keys or key not in source_dict):
source_dict[key] = value
elif isinstance(value, dict) and isinstance(source_dict[key], dict):
@ -574,17 +699,32 @@ def apply_local_settings_on_system_settings(system_settings, local_settings):
"""Apply local settings on studio system settings.
ATM local settings can modify only application executables. Executable
values are not overriden but prepended.
values are not overridden but prepended.
"""
if not local_settings or "applications" not in local_settings:
return
current_platform = platform.system().lower()
apps_settings = system_settings["applications"]
additional_apps = apps_settings["additional_apps"]
for app_group_name, value in local_settings["applications"].items():
if not value or app_group_name not in system_settings["applications"]:
if not value:
continue
variants = system_settings["applications"][app_group_name]["variants"]
if (
app_group_name not in apps_settings
and app_group_name not in additional_apps
):
continue
if app_group_name in apps_settings:
variants = apps_settings[app_group_name]["variants"]
else:
variants = (
apps_settings["additional_apps"][app_group_name]["variants"]
)
for app_name, app_value in value.items():
if (
not app_value
@ -914,7 +1054,7 @@ def get_environments():
"""Calculated environment based on defaults and system settings.
Any default environment also found in the system settings will be fully
overriden by the one from the system settings.
overridden by the one from the system settings.
Returns:
dict: Output should be ready for `acre` module.