diff --git a/client/ayon_core/cli_commands.py b/client/ayon_core/cli_commands.py
index 0fb18be687..f71588e196 100644
--- a/client/ayon_core/cli_commands.py
+++ b/client/ayon_core/cli_commands.py
@@ -36,7 +36,7 @@ class Commands:
log.warning(
"Failed to add cli command for module \"{}\"".format(
addon.name
- )
+ ), exc_info=True
)
return click_func
diff --git a/client/ayon_core/pipeline/create/context.py b/client/ayon_core/pipeline/create/context.py
index 45846553a4..0d8722dab1 100644
--- a/client/ayon_core/pipeline/create/context.py
+++ b/client/ayon_core/pipeline/create/context.py
@@ -37,6 +37,7 @@ from .creator_plugins import (
# Changes of instances and context are send as tuple of 2 information
UpdateData = collections.namedtuple("UpdateData", ["instance", "changes"])
+_NOT_SET = object()
class UnavailableSharedData(Exception):
@@ -1401,6 +1402,11 @@ class CreateContext:
self._current_folder_path = None
self._current_task_name = None
self._current_workfile_path = None
+ self._current_project_settings = None
+
+ self._current_folder_entity = _NOT_SET
+ self._current_task_entity = _NOT_SET
+ self._current_task_type = _NOT_SET
self._current_project_anatomy = None
@@ -1571,6 +1577,64 @@ class CreateContext:
return self._current_task_name
+ def get_current_task_type(self):
+ """Task type which was used as current context on context reset.
+
+ Returns:
+ Union[str, None]: Task type.
+
+ """
+ if self._current_task_type is _NOT_SET:
+ task_type = None
+ task_entity = self.get_current_task_entity()
+ if task_entity:
+ task_type = task_entity["taskType"]
+ self._current_task_type = task_type
+ return self._current_task_type
+
+ def get_current_folder_entity(self):
+ """Folder entity for current context folder.
+
+ Returns:
+ Union[dict[str, Any], None]: Folder entity.
+
+ """
+ if self._current_folder_entity is not _NOT_SET:
+ return copy.deepcopy(self._current_folder_entity)
+ folder_entity = None
+ folder_path = self.get_current_folder_path()
+ if folder_path:
+ project_name = self.get_current_project_name()
+ folder_entity = ayon_api.get_folder_by_path(
+ project_name, folder_path
+ )
+ self._current_folder_entity = folder_entity
+ return copy.deepcopy(self._current_folder_entity)
+
+ def get_current_task_entity(self):
+ """Task entity for current context task.
+
+ Returns:
+ Union[dict[str, Any], None]: Task entity.
+
+ """
+ if self._current_task_entity is not _NOT_SET:
+ return copy.deepcopy(self._current_task_entity)
+ task_entity = None
+ task_name = self.get_current_task_name()
+ if task_name:
+ folder_entity = self.get_current_folder_entity()
+ if folder_entity:
+ project_name = self.get_current_project_name()
+ task_entity = ayon_api.get_task_by_name(
+ project_name,
+ folder_id=folder_entity["id"],
+ task_name=task_name
+ )
+ self._current_task_entity = task_entity
+ return copy.deepcopy(self._current_task_entity)
+
+
def get_current_workfile_path(self):
"""Workfile path which was opened on context reset.
@@ -1592,6 +1656,12 @@ class CreateContext:
self._current_project_name)
return self._current_project_anatomy
+ def get_current_project_settings(self):
+ if self._current_project_settings is None:
+ self._current_project_settings = get_project_settings(
+ self.get_current_project_name())
+ return self._current_project_settings
+
@property
def context_has_changed(self):
"""Host context has changed.
@@ -1718,7 +1788,12 @@ class CreateContext:
self._current_task_name = task_name
self._current_workfile_path = workfile_path
+ self._current_folder_entity = _NOT_SET
+ self._current_task_entity = _NOT_SET
+ self._current_task_type = _NOT_SET
+
self._current_project_anatomy = None
+ self._current_project_settings = None
def reset_plugins(self, discover_publish_plugins=True):
"""Reload plugins.
@@ -1772,7 +1847,7 @@ class CreateContext:
def _reset_creator_plugins(self):
# Prepare settings
- project_settings = get_project_settings(self.project_name)
+ project_settings = self.get_current_project_settings()
# Discover and prepare creators
creators = {}
diff --git a/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py b/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py
index ad5a5d43fc..0c15ec0b57 100644
--- a/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py
+++ b/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py
@@ -391,7 +391,11 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin):
anatomy_data.update(folder_data)
return
- if instance.data.get("newAssetPublishing"):
+ if (
+ instance.data.get("newHierarchyIntegration")
+ # Backwards compatible (Deprecated since 24/06/06)
+ or instance.data.get("newAssetPublishing")
+ ):
hierarchy = instance.data["hierarchy"]
anatomy_data["hierarchy"] = hierarchy
@@ -409,7 +413,7 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin):
"path": instance.data["folderPath"],
# TODO get folder type from hierarchy
# Using 'Shot' is current default behavior of editorial
- # (or 'newAssetPublishing') publishing.
+ # (or 'newHierarchyIntegration') publishing.
"type": "Shot",
},
})
@@ -432,15 +436,22 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin):
if task_data:
# Fill task data
# - if we're in editorial, make sure the task type is filled
- if (
- not instance.data.get("newAssetPublishing")
- or task_data["type"]
- ):
+ new_hierarchy = (
+ instance.data.get("newHierarchyIntegration")
+ # Backwards compatible (Deprecated since 24/06/06)
+ or instance.data.get("newAssetPublishing")
+ )
+ if not new_hierarchy or task_data["type"]:
anatomy_data["task"] = task_data
return
# New hierarchy is not created, so we can only skip rest of the logic
- if not instance.data.get("newAssetPublishing"):
+ new_hierarchy = (
+ instance.data.get("newHierarchyIntegration")
+ # Backwards compatible (Deprecated since 24/06/06)
+ or instance.data.get("newAssetPublishing")
+ )
+ if not new_hierarchy:
return
# Try to find task data based on hierarchy context and folder path
diff --git a/client/ayon_core/plugins/publish/collect_scene_version.py b/client/ayon_core/plugins/publish/collect_scene_version.py
index b04900c74e..8b99e2cd98 100644
--- a/client/ayon_core/plugins/publish/collect_scene_version.py
+++ b/client/ayon_core/plugins/publish/collect_scene_version.py
@@ -27,7 +27,8 @@ class CollectSceneVersion(pyblish.api.ContextPlugin):
"nuke",
"photoshop",
"resolve",
- "tvpaint"
+ "tvpaint",
+ "motionbuilder"
]
# in some cases of headless publishing (for example webpublisher using PS)
diff --git a/client/ayon_core/plugins/publish/validate_asset_docs.py b/client/ayon_core/plugins/publish/validate_asset_docs.py
index 95fe4252be..b80b81b366 100644
--- a/client/ayon_core/plugins/publish/validate_asset_docs.py
+++ b/client/ayon_core/plugins/publish/validate_asset_docs.py
@@ -24,7 +24,11 @@ class ValidateFolderEntities(pyblish.api.InstancePlugin):
if instance.data.get("folderEntity"):
self.log.debug("Instance has set fodler entity in its data.")
- elif instance.data.get("newAssetPublishing"):
+ elif (
+ instance.data.get("newHierarchyIntegration")
+ # Backwards compatible (Deprecated since 24/06/06)
+ or instance.data.get("newAssetPublishing")
+ ):
# skip if it is editorial
self.log.debug("Editorial instance has no need to check...")
diff --git a/client/ayon_core/resources/app_icons/motionbuilder.png b/client/ayon_core/resources/app_icons/motionbuilder.png
new file mode 100644
index 0000000000..68a17f7afb
Binary files /dev/null and b/client/ayon_core/resources/app_icons/motionbuilder.png differ
diff --git a/client/ayon_core/resources/ftrack/action_icons/ActionAskWhereIRun.svg b/client/ayon_core/resources/ftrack/action_icons/ActionAskWhereIRun.svg
deleted file mode 100644
index c02b8f83d8..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/ActionAskWhereIRun.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/AssetsRemover.svg b/client/ayon_core/resources/ftrack/action_icons/AssetsRemover.svg
deleted file mode 100644
index e838ee9f28..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/AssetsRemover.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/client/ayon_core/resources/ftrack/action_icons/BatchTasks.svg b/client/ayon_core/resources/ftrack/action_icons/BatchTasks.svg
deleted file mode 100644
index 5cf5d423dd..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/BatchTasks.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/ComponentOpen.svg b/client/ayon_core/resources/ftrack/action_icons/ComponentOpen.svg
deleted file mode 100644
index f549e6142b..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/ComponentOpen.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/CreateFolders.svg b/client/ayon_core/resources/ftrack/action_icons/CreateFolders.svg
deleted file mode 100644
index 18efc273aa..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/CreateFolders.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/CreateProjectFolders.svg b/client/ayon_core/resources/ftrack/action_icons/CreateProjectFolders.svg
deleted file mode 100644
index 0e5821b0be..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/CreateProjectFolders.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/DeleteAsset.svg b/client/ayon_core/resources/ftrack/action_icons/DeleteAsset.svg
deleted file mode 100644
index 855bdae7c5..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/DeleteAsset.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/Delivery.svg b/client/ayon_core/resources/ftrack/action_icons/Delivery.svg
deleted file mode 100644
index a6333333ae..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/Delivery.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/MultipleNotes.svg b/client/ayon_core/resources/ftrack/action_icons/MultipleNotes.svg
deleted file mode 100644
index 40113fc709..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/MultipleNotes.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/OpenPypeAdmin.svg b/client/ayon_core/resources/ftrack/action_icons/OpenPypeAdmin.svg
deleted file mode 100644
index c2abc6146f..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/OpenPypeAdmin.svg
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/PrepareProject.svg b/client/ayon_core/resources/ftrack/action_icons/PrepareProject.svg
deleted file mode 100644
index 644d83f84d..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/PrepareProject.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/RV.png b/client/ayon_core/resources/ftrack/action_icons/RV.png
deleted file mode 100644
index 741e7a9772..0000000000
Binary files a/client/ayon_core/resources/ftrack/action_icons/RV.png and /dev/null differ
diff --git a/client/ayon_core/resources/ftrack/action_icons/SeedProject.svg b/client/ayon_core/resources/ftrack/action_icons/SeedProject.svg
deleted file mode 100644
index ff818b5ecb..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/SeedProject.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/SortReview.svg b/client/ayon_core/resources/ftrack/action_icons/SortReview.svg
deleted file mode 100644
index 13a7def648..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/SortReview.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/TestAction.svg b/client/ayon_core/resources/ftrack/action_icons/TestAction.svg
deleted file mode 100644
index 917ef2d0c7..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/TestAction.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/action_icons/Thumbnail.svg b/client/ayon_core/resources/ftrack/action_icons/Thumbnail.svg
deleted file mode 100644
index 9af330e79a..0000000000
--- a/client/ayon_core/resources/ftrack/action_icons/Thumbnail.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
diff --git a/client/ayon_core/resources/ftrack/sign_in_message.html b/client/ayon_core/resources/ftrack/sign_in_message.html
deleted file mode 100644
index 8ee2828c26..0000000000
--- a/client/ayon_core/resources/ftrack/sign_in_message.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- Sign in to Ftrack was successful
-
- You signed in with username {}.
-
-
- You can close this window now.
-
-
-
diff --git a/client/ayon_core/tools/publisher/control.py b/client/ayon_core/tools/publisher/control.py
index ed4099c61d..4a8ec72e4f 100644
--- a/client/ayon_core/tools/publisher/control.py
+++ b/client/ayon_core/tools/publisher/control.py
@@ -8,6 +8,7 @@ import tempfile
import shutil
import inspect
from abc import ABCMeta, abstractmethod
+import re
import six
import arrow
@@ -39,6 +40,7 @@ from ayon_core.pipeline.create.context import (
)
from ayon_core.pipeline.publish import get_publish_instance_label
from ayon_core.tools.common_models import ProjectsModel, HierarchyModel
+from ayon_core.lib.profiles_filtering import filter_profiles
# Define constant for plugin orders offset
PLUGIN_ORDER_OFFSET = 0.5
@@ -1687,6 +1689,15 @@ class PublisherController(BasePublisherController):
"""Publish plugins."""
return self._create_context.publish_plugins
+ def _get_current_project_settings(self):
+ """Current project settings.
+
+ Returns:
+ dict
+ """
+
+ return self._create_context.get_current_project_settings()
+
def get_folder_type_items(self, project_name, sender=None):
return self._projects_model.get_folder_type_items(
project_name, sender
@@ -1835,8 +1846,13 @@ class PublisherController(BasePublisherController):
def _collect_creator_items(self):
# TODO add crashed initialization of create plugins to report
output = {}
+ allowed_creator_pattern = self._get_allowed_creators_pattern()
for identifier, creator in self._create_context.creators.items():
try:
+ if (not self._is_label_allowed(
+ creator.label, allowed_creator_pattern)):
+ self.log.debug(f"{creator.label} not allowed for context")
+ continue
output[identifier] = CreatorItem.from_creator(creator)
except Exception:
self.log.error(
@@ -1847,6 +1863,60 @@ class PublisherController(BasePublisherController):
return output
+ def _get_allowed_creators_pattern(self):
+ """Provide regex pattern for configured creator labels in this context
+
+ If no profile matches current context, it shows all creators.
+ Support usage of regular expressions for configured values.
+ Returns:
+ (re.Pattern)[optional]: None or regex compiled patterns
+ into single one ('Render|Image.*')
+ """
+
+ task_type = self._create_context.get_current_task_type()
+ project_settings = self._get_current_project_settings()
+
+ filter_creator_profiles = (
+ project_settings
+ ["core"]
+ ["tools"]
+ ["creator"]
+ ["filter_creator_profiles"]
+ )
+ filtering_criteria = {
+ "task_names": self.current_task_name,
+ "task_types": task_type,
+ "host_names": self._create_context.host_name
+ }
+ profile = filter_profiles(
+ filter_creator_profiles,
+ filtering_criteria,
+ logger=self.log
+ )
+
+ allowed_creator_pattern = None
+ if profile:
+ allowed_creator_labels = {
+ label
+ for label in profile["creator_labels"]
+ if label
+ }
+ self.log.debug(f"Only allowed `{allowed_creator_labels}` creators")
+ allowed_creator_pattern = (
+ re.compile("|".join(allowed_creator_labels)))
+ return allowed_creator_pattern
+
+ def _is_label_allowed(self, label, allowed_labels_regex):
+ """Implement regex support for allowed labels.
+
+ Args:
+ label (str): Label of creator - shown in Publisher
+ allowed_labels_regex (re.Pattern): compiled regular expression
+ """
+ if not allowed_labels_regex:
+ return True
+ return bool(allowed_labels_regex.match(label))
+
def _reset_instances(self):
"""Reset create instances."""
if self._resetting_instances:
diff --git a/server/settings/tools.py b/server/settings/tools.py
index 1d32169954..1cb070e2af 100644
--- a/server/settings/tools.py
+++ b/server/settings/tools.py
@@ -35,6 +35,28 @@ class ProductNameProfile(BaseSettingsModel):
template: str = SettingsField("", title="Template")
+class FilterCreatorProfile(BaseSettingsModel):
+ """Provide list of allowed Creator identifiers for context"""
+
+ _layout = "expanded"
+ host_names: list[str] = SettingsField(
+ default_factory=list, title="Host names"
+ )
+ task_types: list[str] = SettingsField(
+ default_factory=list,
+ title="Task types",
+ enum_resolver=task_types_enum
+ )
+ task_names: list[str] = SettingsField(
+ default_factory=list,
+ title="Task names")
+ creator_labels: list[str] = SettingsField(
+ default_factory=list,
+ title="Allowed Creator Labels",
+ description="Copy creator label from Publisher, regex supported."
+ )
+
+
class CreatorToolModel(BaseSettingsModel):
# TODO this was dynamic dictionary '{name: task_names}'
product_types_smart_select: list[ProductTypeSmartSelectModel] = (
@@ -48,6 +70,13 @@ class CreatorToolModel(BaseSettingsModel):
title="Product name profiles"
)
+ filter_creator_profiles: list[FilterCreatorProfile] = SettingsField(
+ default_factory=list,
+ title="Filter creator profiles",
+ description="Allowed list of creator labels that will be only shown if "
+ "profile matches context."
+ )
+
@validator("product_types_smart_select")
def validate_unique_name(cls, value):
ensure_unique_names(value)
@@ -420,7 +449,8 @@ DEFAULT_TOOLS_VALUES = {
"tasks": [],
"template": "SK_{folder[name]}{variant}"
}
- ]
+ ],
+ "filter_creator_profiles": []
},
"Workfiles": {
"workfile_template_profiles": [
diff --git a/server_addon/aftereffects/client/ayon_aftereffects/version.py b/server_addon/aftereffects/client/ayon_aftereffects/version.py
index 8ab87ea78c..2faa06ba3a 100644
--- a/server_addon/aftereffects/client/ayon_aftereffects/version.py
+++ b/server_addon/aftereffects/client/ayon_aftereffects/version.py
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
"""Package declaring AYON addon 'aftereffects' version."""
-__version__ = "0.2.0"
+__version__ = "0.2.1"
diff --git a/server_addon/applications/client/ayon_applications/version.py b/server_addon/applications/client/ayon_applications/version.py
index e69de29bb2..06abc74286 100644
--- a/server_addon/applications/client/ayon_applications/version.py
+++ b/server_addon/applications/client/ayon_applications/version.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+"""Package declaring AYON addon 'applications' version."""
+__version__ = "0.2.4"
diff --git a/server_addon/applications/package.py b/server_addon/applications/package.py
index 436c283791..23b1756d99 100644
--- a/server_addon/applications/package.py
+++ b/server_addon/applications/package.py
@@ -1,6 +1,6 @@
name = "applications"
title = "Applications"
-version = "0.2.3"
+version = "0.2.4"
client_dir = "ayon_applications"
diff --git a/server_addon/applications/server/applications.json b/server_addon/applications/server/applications.json
index 84b7fa33cf..1c83997dea 100644
--- a/server_addon/applications/server/applications.json
+++ b/server_addon/applications/server/applications.json
@@ -1293,6 +1293,41 @@
}
]
},
+ "motionbuilder": {
+ "enabled": true,
+ "label": "Motion Builder",
+ "icon": "{}/app_icons/motionbuilder.png",
+ "host_name": "motionbuilder",
+ "environment": "{}",
+ "variants": [
+ {
+ "name": "2025",
+ "label": "2025",
+ "use_python_2": false,
+ "executables": {
+ "windows": [
+ "C:\\Program Files\\Autodesk\\MotionBuilder 2025\\bin\\x64\\motionbuilder.exe"
+ ],
+ "darwin": [],
+ "linux": []
+ },
+ "environment": "{}"
+ },
+ {
+ "name": "2024",
+ "label": "2024",
+ "use_python_2": false,
+ "executables": {
+ "windows": [
+ "C:\\Program Files\\Autodesk\\MotionBuilder 2024\\bin\\x64\\motionbuilder.exe"
+ ],
+ "darwin": [],
+ "linux": []
+ },
+ "environment": "{}"
+ }
+ ]
+ },
"additional_apps": []
}
}
diff --git a/server_addon/applications/server/settings.py b/server_addon/applications/server/settings.py
index 3f9d90ef5b..23f37828a6 100644
--- a/server_addon/applications/server/settings.py
+++ b/server_addon/applications/server/settings.py
@@ -192,6 +192,8 @@ class ApplicationsSettings(BaseSettingsModel):
default_factory=AppGroupWithPython, title="Zbrush")
equalizer: AppGroup = SettingsField(
default_factory=AppGroupWithPython, title="3DEqualizer")
+ motionbuilder: AppGroup = SettingsField(
+ default_factory=AppGroupWithPython, title="Motion Builder")
additional_apps: list[AdditionalAppGroup] = SettingsField(
default_factory=list, title="Additional Applications")
diff --git a/server_addon/flame/client/ayon_flame/plugins/publish/collect_timeline_instances.py b/server_addon/flame/client/ayon_flame/plugins/publish/collect_timeline_instances.py
index 35591f1a0d..7680483db1 100644
--- a/server_addon/flame/client/ayon_flame/plugins/publish/collect_timeline_instances.py
+++ b/server_addon/flame/client/ayon_flame/plugins/publish/collect_timeline_instances.py
@@ -152,7 +152,9 @@ class CollectTimelineInstances(pyblish.api.ContextPlugin):
task["name"]: {"type": task["type"]}
for task in self.add_tasks},
"representations": [],
- "newAssetPublishing": True
+ "newHierarchyIntegration": True,
+ # Backwards compatible (Deprecated since 24/06/06)
+ "newAssetPublishing": True,
})
self.log.debug("__ inst_data: {}".format(pformat(inst_data)))
diff --git a/server_addon/flame/client/ayon_flame/version.py b/server_addon/flame/client/ayon_flame/version.py
index 0004797e59..68bdb6e6a0 100644
--- a/server_addon/flame/client/ayon_flame/version.py
+++ b/server_addon/flame/client/ayon_flame/version.py
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
"""Package declaring AYON addon 'flame' version."""
-__version__ = "0.2.0"
+__version__ = "0.2.1"
diff --git a/server_addon/flame/package.py b/server_addon/flame/package.py
index f228e61f8e..b25a514a9f 100644
--- a/server_addon/flame/package.py
+++ b/server_addon/flame/package.py
@@ -1,6 +1,6 @@
name = "flame"
title = "Flame"
-version = "0.2.0"
+version = "0.2.1"
client_dir = "ayon_flame"
diff --git a/server_addon/hiero/client/ayon_hiero/plugins/publish/precollect_instances.py b/server_addon/hiero/client/ayon_hiero/plugins/publish/precollect_instances.py
index 27b3b54ffa..ca60231361 100644
--- a/server_addon/hiero/client/ayon_hiero/plugins/publish/precollect_instances.py
+++ b/server_addon/hiero/client/ayon_hiero/plugins/publish/precollect_instances.py
@@ -140,7 +140,9 @@ class PrecollectInstances(pyblish.api.ContextPlugin):
# add all additional tags
"tags": phiero.get_track_item_tags(track_item),
- "newAssetPublishing": True
+ "newHierarchyIntegration": True,
+ # Backwards compatible (Deprecated since 24/06/06)
+ "newAssetPublishing": True,
})
# otio clip data
diff --git a/server_addon/hiero/client/ayon_hiero/version.py b/server_addon/hiero/client/ayon_hiero/version.py
index fe6d62221c..74ebfba8b0 100644
--- a/server_addon/hiero/client/ayon_hiero/version.py
+++ b/server_addon/hiero/client/ayon_hiero/version.py
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
"""Package declaring AYON addon 'hiero' version."""
-__version__ = "0.2.1"
+__version__ = "0.2.2"
diff --git a/server_addon/hiero/package.py b/server_addon/hiero/package.py
index 95714d95da..eba3fb12f4 100644
--- a/server_addon/hiero/package.py
+++ b/server_addon/hiero/package.py
@@ -1,6 +1,6 @@
name = "hiero"
title = "Hiero"
-version = "0.2.1"
+version = "0.2.2"
client_dir = "ayon_hiero"
ayon_required_addons = {
diff --git a/server_addon/maya/client/ayon_maya/version.py b/server_addon/maya/client/ayon_maya/version.py
index e69de29bb2..1655067287 100644
--- a/server_addon/maya/client/ayon_maya/version.py
+++ b/server_addon/maya/client/ayon_maya/version.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+"""Package declaring AYON addon 'maya' version."""
+__version__ = "0.2.2"
diff --git a/server_addon/resolve/client/ayon_resolve/plugins/publish/precollect_instances.py b/server_addon/resolve/client/ayon_resolve/plugins/publish/precollect_instances.py
index 10e1eba3e3..e2b6e7ba37 100644
--- a/server_addon/resolve/client/ayon_resolve/plugins/publish/precollect_instances.py
+++ b/server_addon/resolve/client/ayon_resolve/plugins/publish/precollect_instances.py
@@ -101,6 +101,8 @@ class PrecollectInstances(pyblish.api.ContextPlugin):
"fps": context.data["fps"],
"handleStart": handle_start,
"handleEnd": handle_end,
+ "newHierarchyIntegration": True,
+ # Backwards compatible (Deprecated since 24/06/06)
"newAssetPublishing": True,
"families": ["clip"],
"productType": product_type,
diff --git a/server_addon/resolve/client/ayon_resolve/version.py b/server_addon/resolve/client/ayon_resolve/version.py
index c8f8df554c..53e8882ed7 100644
--- a/server_addon/resolve/client/ayon_resolve/version.py
+++ b/server_addon/resolve/client/ayon_resolve/version.py
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
"""Package declaring AYON addon 'resolve' version."""
-__version__ = "0.2.0"
+__version__ = "0.2.1"
diff --git a/server_addon/resolve/package.py b/server_addon/resolve/package.py
index 993f700e40..47b6c9a8b6 100644
--- a/server_addon/resolve/package.py
+++ b/server_addon/resolve/package.py
@@ -1,6 +1,6 @@
name = "resolve"
title = "DaVinci Resolve"
-version = "0.2.0"
+version = "0.2.1"
client_dir = "ayon_resolve"
diff --git a/server_addon/substancepainter/client/ayon_substancepainter/plugins/create/create_textures.py b/server_addon/substancepainter/client/ayon_substancepainter/plugins/create/create_textures.py
index 8869cb5eb0..97d34a6557 100644
--- a/server_addon/substancepainter/client/ayon_substancepainter/plugins/create/create_textures.py
+++ b/server_addon/substancepainter/client/ayon_substancepainter/plugins/create/create_textures.py
@@ -46,6 +46,7 @@ class CreateTextures(Creator):
creator_attributes = instance_data.setdefault(
"creator_attributes", dict())
for key in [
+ "review",
"exportPresetUrl",
"exportFileFormat",
"exportSize",
@@ -143,6 +144,10 @@ class CreateTextures(Creator):
}
return [
+ BoolDef("review",
+ label="Review",
+ tooltip="Mark as reviewable",
+ default=True),
EnumDef("exportChannel",
items=export_channel_enum,
multiselection=True,
diff --git a/server_addon/substancepainter/client/ayon_substancepainter/plugins/publish/collect_textureset_images.py b/server_addon/substancepainter/client/ayon_substancepainter/plugins/publish/collect_textureset_images.py
index 6d2336cbc0..5bea3e971f 100644
--- a/server_addon/substancepainter/client/ayon_substancepainter/plugins/publish/collect_textureset_images.py
+++ b/server_addon/substancepainter/client/ayon_substancepainter/plugins/publish/collect_textureset_images.py
@@ -124,7 +124,6 @@ class CollectTextureSet(pyblish.api.InstancePlugin):
staging_dir = os.path.dirname(first_filepath)
representation["tags"] = ["review"]
representation["stagingDir"] = staging_dir
-
# Clone the instance
product_type = "image"
image_instance = context.create_instance(image_product_name)
@@ -136,6 +135,9 @@ class CollectTextureSet(pyblish.api.InstancePlugin):
image_instance.data["productType"] = product_type
image_instance.data["family"] = product_type
image_instance.data["families"] = [product_type, "textures"]
+ if instance.data["creator_attributes"].get("review"):
+ image_instance.data["families"].append("review")
+
image_instance.data["representations"] = [representation]
# Group the textures together in the loader
diff --git a/server_addon/traypublisher/client/ayon_traypublisher/plugins/create/create_editorial.py b/server_addon/traypublisher/client/ayon_traypublisher/plugins/create/create_editorial.py
index a2f6f211f5..b013ed6864 100644
--- a/server_addon/traypublisher/client/ayon_traypublisher/plugins/create/create_editorial.py
+++ b/server_addon/traypublisher/client/ayon_traypublisher/plugins/create/create_editorial.py
@@ -676,6 +676,8 @@ or updating already created. Publishing will create OTIO file.
"shotName": shot_name,
"variant": variant_name,
"task": None,
+ "newHierarchyIntegration": True,
+ # Backwards compatible (Deprecated since 24/06/06)
"newAssetPublishing": True,
"trackStartFrame": track_start_frame,
"timelineOffset": timeline_offset,
diff --git a/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/collect_sequence_frame_data.py b/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/collect_sequence_frame_data.py
index de18050f41..c2894e15ad 100644
--- a/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/collect_sequence_frame_data.py
+++ b/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/collect_sequence_frame_data.py
@@ -28,8 +28,12 @@ class CollectSequenceFrameData(
return
# editorial would fail since they might not be in database yet
- new_folder_publishing = instance.data.get("newAssetPublishing")
- if new_folder_publishing:
+ new_hierarchy = (
+ instance.data.get("newHierarchyIntegration")
+ # Backwards compatible (Deprecated since 24/06/06)
+ or instance.data.get("newAssetPublishing")
+ )
+ if new_hierarchy:
self.log.debug("Instance is creating new folders. Skipping.")
return
diff --git a/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/validate_frame_ranges.py b/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/validate_frame_ranges.py
index 13f13b05bb..42127f4a5f 100644
--- a/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/validate_frame_ranges.py
+++ b/server_addon/traypublisher/client/ayon_traypublisher/plugins/publish/validate_frame_ranges.py
@@ -33,8 +33,12 @@ class ValidateFrameRange(OptionalPyblishPluginMixin,
return
# editorial would fail since they might not be in database yet
- new_folder_publishing = instance.data.get("newAssetPublishing")
- if new_folder_publishing:
+ new_hierarchy = (
+ instance.data.get("newHierarchyIntegration")
+ # Backwards compatible (Deprecated since 24/06/06)
+ or instance.data.get("newAssetPublishing")
+ )
+ if new_hierarchy:
self.log.debug("Instance is creating new folder. Skipping.")
return
diff --git a/server_addon/traypublisher/client/ayon_traypublisher/version.py b/server_addon/traypublisher/client/ayon_traypublisher/version.py
index 01f2ad4f1d..514b5691d3 100644
--- a/server_addon/traypublisher/client/ayon_traypublisher/version.py
+++ b/server_addon/traypublisher/client/ayon_traypublisher/version.py
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
"""Package declaring AYON addon 'traypublisher' version."""
-__version__ = "0.2.2"
+__version__ = "0.2.3"
diff --git a/server_addon/traypublisher/package.py b/server_addon/traypublisher/package.py
index 85611526d0..8fc725c6cb 100644
--- a/server_addon/traypublisher/package.py
+++ b/server_addon/traypublisher/package.py
@@ -1,6 +1,6 @@
name = "traypublisher"
title = "TrayPublisher"
-version = "0.2.2"
+version = "0.2.3"
client_dir = "ayon_traypublisher"