From e0103b8a47c472b99b6ecb3af3eb10ee57efa49d Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Jan 2025 15:18:32 +0100 Subject: [PATCH 1/7] Added Settings for auto_connect auto_connect allows customers with Harmony Advanced to create write nodes automatically connected to Composition as `Use selected` will not work and there is no Node View. --- server/settings/creator_plugins.py | 49 ++++++++++++++++++++++++++++++ server/settings/main.py | 5 +++ 2 files changed, 54 insertions(+) create mode 100644 server/settings/creator_plugins.py diff --git a/server/settings/creator_plugins.py b/server/settings/creator_plugins.py new file mode 100644 index 0000000..c964413 --- /dev/null +++ b/server/settings/creator_plugins.py @@ -0,0 +1,49 @@ +from ayon_server.settings import BaseSettingsModel, SettingsField + + +class CreateRenderPluginModel(BaseSettingsModel): + enabled: bool = SettingsField(True, title="Enabled") + active_on_create: bool = SettingsField(True, title="Active by default") + default_variants: list[str] = SettingsField( + default_factory=list, + title="Default Variants" + ) + auto_connect: bool = SettingsField(False, title="Auto connect to node") + composition_node_pattern: str = SettingsField( + "Composition", + title="Auto connect to Composition node", + description="Provide regex pattern to find Composition node to connect " + "newly created Write node to. " + "Required for Harmony Advanced without Node View" + ) + + +class HarmonyCreatePlugins(BaseSettingsModel): + CreateRender: CreateRenderPluginModel = SettingsField( + title="Render", + default_factory=CreateRenderPluginModel, + ) + CreateFarmRender: CreateRenderPluginModel = SettingsField( + title="Render on Farm", + default_factory=CreateRenderPluginModel, + ) + + +DEFAULT_CREATE_SETTINGS = { + "CreateRender": { + "enabled": True, + "default_variants": [ + "Main" + ], + "auto_connect": False, + "composition_node_pattern": "Composition" + }, + "CreateFarmRender": { + "enabled": True, + "default_variants": [ + "Main" + ], + "auto_connect": False, + "composition_node_pattern": "Composition" + } +} diff --git a/server/settings/main.py b/server/settings/main.py index 8a72c96..844470a 100644 --- a/server/settings/main.py +++ b/server/settings/main.py @@ -1,6 +1,7 @@ from ayon_server.settings import BaseSettingsModel, SettingsField from .imageio import HarmonyImageIOModel +from .creator_plugins import HarmonyCreatePlugins from .publish_plugins import HarmonyPublishPlugins @@ -11,6 +12,10 @@ class HarmonySettings(BaseSettingsModel): default_factory=HarmonyImageIOModel, title="OCIO config" ) + create: HarmonyCreatePlugins = SettingsField( + default_factory=HarmonyCreatePlugins, + title="Creator plugins" + ) publish: HarmonyPublishPlugins = SettingsField( default_factory=HarmonyPublishPlugins, title="Publish plugins" From 0a85d3d9bf1752bec66929ee706cb5faa5f07fae Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Jan 2025 15:20:45 +0100 Subject: [PATCH 2/7] Implemented auto_connect auto_connect allows customers with Harmony Advanced to create write nodes automatically connected to Composition as `Use selected` will not work and there is no Node View. --- client/ayon_harmony/api/plugin.py | 35 ++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/client/ayon_harmony/api/plugin.py b/client/ayon_harmony/api/plugin.py index 9d39593..05afe7b 100644 --- a/client/ayon_harmony/api/plugin.py +++ b/client/ayon_harmony/api/plugin.py @@ -1,4 +1,6 @@ -from ayon_core.pipeline import LegacyCreator +import re + +from ayon_core.pipeline import LegacyCreator, CreatorError import ayon_harmony.api as harmony @@ -14,6 +16,10 @@ class Creator(LegacyCreator): defaults = ["Main"] node_type = "COMPOSITE" + settings_category = "harmony" + + auto_connect = False + composition_node_pattern = "" def setup_node(self, node): """Prepare node as container. @@ -57,6 +63,33 @@ def process(self): "args": [self.name, self.node_type, selection[-1]] } )["result"] + elif (self.auto_connect): + existing_comp_names = harmony.send( + { + "function": "AyonHarmonyAPI.getNodesNamesByType", + "args": "COMPOSITE" + })["result"] + name_pattern = self.composition_node_pattern + if not name_pattern: + raise CreatorError("Composition name regex pattern " + "must be filled") + compiled_pattern = re.compile(name_pattern) + matching_nodes = [name for name in existing_comp_names + if compiled_pattern.match(name)] + if len(matching_nodes) > 1: + self.log.warning("Multiple composition node found, " + "picked first") + elif len(matching_nodes) <= 0: + raise CreatorError("No matching composition " + "node found") + node_name = f"/Top/{matching_nodes[0]}" + + node = harmony.send( + { + "function": "AyonHarmonyAPI.createContainer", + "args": [self.name, self.node_type, node_name] + } + )["result"] else: node = harmony.send( { From 317522a97976fc2e8f611a12e7e94befaca206a1 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Jan 2025 15:21:11 +0100 Subject: [PATCH 3/7] Fixed getNodesNamesByType argument type Was throwing argument error --- client/ayon_harmony/api/js/AyonHarmonyAPI.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_harmony/api/js/AyonHarmonyAPI.js b/client/ayon_harmony/api/js/AyonHarmonyAPI.js index f77216a..d697d68 100644 --- a/client/ayon_harmony/api/js/AyonHarmonyAPI.js +++ b/client/ayon_harmony/api/js/AyonHarmonyAPI.js @@ -186,7 +186,7 @@ AyonHarmonyAPI.setupNodeForCreator = function(node) { * @return {array} Node names. */ AyonHarmonyAPI.getNodesNamesByType = function(nodeType) { - var nodes = node.getNodes(nodeType); + var nodes = node.getNodes([nodeType]); var nodeNames = []; for (var i = 0; i < nodes.length; ++i) { nodeNames.push(node.getName(nodes[i])); From 4ff08c42bb8ea81341d7ab885820d705824566d6 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Jan 2025 15:22:41 +0100 Subject: [PATCH 4/7] Bump version Previous package was already deployed on customer site, no full release since. --- package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.py b/package.py index f17e453..1425c4e 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "harmony" title = "Harmony" -version = "0.2.2+dev" +version = "0.2.2+dev.1" client_dir = "ayon_harmony" app_host_name = "harmony" From 49f79f0fac1f39e327b73a15f1ca64db6a39e20c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Jan 2025 15:29:53 +0100 Subject: [PATCH 5/7] Updated names in Settings --- server/settings/creator_plugins.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/server/settings/creator_plugins.py b/server/settings/creator_plugins.py index c964413..42438f5 100644 --- a/server/settings/creator_plugins.py +++ b/server/settings/creator_plugins.py @@ -8,13 +8,12 @@ class CreateRenderPluginModel(BaseSettingsModel): default_factory=list, title="Default Variants" ) - auto_connect: bool = SettingsField(False, title="Auto connect to node") + auto_connect: bool = SettingsField(False, + title="Auto connect to Composite node") composition_node_pattern: str = SettingsField( "Composition", - title="Auto connect to Composition node", - description="Provide regex pattern to find Composition node to connect " - "newly created Write node to. " - "Required for Harmony Advanced without Node View" + title="Regex pattern for Composite node name", + description="Provide regex pattern to find Composite node to connect newly Write node to" ) From dcc647aa54596b3ead5cd9d850bc077c73aef8ff Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Jan 2025 16:24:42 +0100 Subject: [PATCH 6/7] Updated default name of composite node --- server/settings/creator_plugins.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/settings/creator_plugins.py b/server/settings/creator_plugins.py index 42438f5..415be37 100644 --- a/server/settings/creator_plugins.py +++ b/server/settings/creator_plugins.py @@ -13,7 +13,8 @@ class CreateRenderPluginModel(BaseSettingsModel): composition_node_pattern: str = SettingsField( "Composition", title="Regex pattern for Composite node name", - description="Provide regex pattern to find Composite node to connect newly Write node to" + description="Provide regex pattern to find Composite node to " + "connect newly Write node to" ) @@ -35,7 +36,7 @@ class HarmonyCreatePlugins(BaseSettingsModel): "Main" ], "auto_connect": False, - "composition_node_pattern": "Composition" + "composition_node_pattern": "Composite" }, "CreateFarmRender": { "enabled": True, @@ -43,6 +44,6 @@ class HarmonyCreatePlugins(BaseSettingsModel): "Main" ], "auto_connect": False, - "composition_node_pattern": "Composition" + "composition_node_pattern": "Composite" } } From 8481d722109923efbd72fb7ffecf6ca377c85a1f Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Jan 2025 16:24:51 +0100 Subject: [PATCH 7/7] Bump version --- client/ayon_harmony/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_harmony/version.py b/client/ayon_harmony/version.py index 21706ec..679ea46 100644 --- a/client/ayon_harmony/version.py +++ b/client/ayon_harmony/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'harmony' version.""" -__version__ = "0.2.2+dev" +__version__ = "0.2.2+dev.1"