From 452fd0dae055d83bff46db6f2c5496cd8f7c14b8 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Tue, 7 May 2024 20:46:46 +0100 Subject: [PATCH 1/6] Working version --- .../plugins/publish/collect_clip_effects.py | 19 +++++++++++++++++++ .../hosts/nuke/plugins/load/load_effects.py | 1 - server_addon/hiero/package.py | 2 +- .../hiero/server/settings/publish_plugins.py | 13 ++++++++++++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py b/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py index bfc63f2551..85fd3ba048 100644 --- a/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py +++ b/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py @@ -1,4 +1,5 @@ import re +from collections import defaultdict import pyblish.api @@ -11,6 +12,7 @@ class CollectClipEffects(pyblish.api.InstancePlugin): families = ["clip"] effect_categories = [] + effect_tracks = [] def process(self, instance): product_type = "effect" @@ -73,6 +75,7 @@ class CollectClipEffects(pyblish.api.InstancePlugin): product_name_split.insert(0, "effect") + # Categorize effects by class. effect_categories = { x["name"]: x["effect_classes"] for x in self.effect_categories } @@ -96,6 +99,22 @@ class CollectClipEffects(pyblish.api.InstancePlugin): effects_categorized[category_by_effect[found_cls]][key] = value + # Categorize effects by track name. + effects_by_track = defaultdict(dict) + for key, value in effects.items(): + if key == "assignTo": + continue + + effects_by_track[value["track"]][key] = value + + for data in self.effect_tracks: + for track_name, track_effects in effects_by_track.items(): + if re.match(data["track_regex"], track_name) is None: + continue + + effects_categorized[data["name"]] = track_effects + + # Ensure required `assignTo` data member exists. categories = list(effects_categorized.keys()) for category in categories: if not effects_categorized[category]: diff --git a/client/ayon_core/hosts/nuke/plugins/load/load_effects.py b/client/ayon_core/hosts/nuke/plugins/load/load_effects.py index a87c81295a..6c0c6a1b0f 100644 --- a/client/ayon_core/hosts/nuke/plugins/load/load_effects.py +++ b/client/ayon_core/hosts/nuke/plugins/load/load_effects.py @@ -69,7 +69,6 @@ class LoadEffects(load.LoaderPlugin): "handleStart", "handleEnd", "source", - "author", "fps" ]: data_imprint[k] = version_attributes[k] diff --git a/server_addon/hiero/package.py b/server_addon/hiero/package.py index 54c2f74fa7..26ceb65448 100644 --- a/server_addon/hiero/package.py +++ b/server_addon/hiero/package.py @@ -1,3 +1,3 @@ name = "hiero" title = "Hiero" -version = "0.1.3" +version = "0.1.4" diff --git a/server_addon/hiero/server/settings/publish_plugins.py b/server_addon/hiero/server/settings/publish_plugins.py index 0e43d4ce3a..9902b68a25 100644 --- a/server_addon/hiero/server/settings/publish_plugins.py +++ b/server_addon/hiero/server/settings/publish_plugins.py @@ -27,11 +27,21 @@ class CollectClipEffectsDefModel(BaseSettingsModel): return normalize_name(value) +class CollectClipEffectsTracksModel(BaseSettingsModel): + _layout = "expanded" + name: str = SettingsField("", title="Name") + track_regex: str = SettingsField("", title="Track Regex") + + class CollectClipEffectsModel(BaseSettingsModel): effect_categories: list[CollectClipEffectsDefModel] = SettingsField( default_factory=list, title="Effect Categories" ) + effect_tracks: list[CollectClipEffectsTracksModel] = SettingsField( + default_factory=list, title="Effect Tracks" + ) + @validator("effect_categories") def validate_unique_outputs(cls, value): ensure_unique_names(value) @@ -79,6 +89,7 @@ DEFAULT_PUBLISH_PLUGIN_SETTINGS = { ] }, "CollectClipEffectsModel": { - "effect_categories": [] + "effect_categories": [], + "effect_tracks": [] } } From 8be42b056f7a05d6542e72cab2c55a692e5bee9b Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 10 May 2024 16:20:21 +0100 Subject: [PATCH 2/6] Explicit track names. --- .../plugins/publish/collect_clip_effects.py | 24 ++++++++++--------- .../hiero/server/settings/publish_plugins.py | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py b/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py index 85fd3ba048..1ff2f25edc 100644 --- a/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py +++ b/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py @@ -100,19 +100,21 @@ class CollectClipEffects(pyblish.api.InstancePlugin): effects_categorized[category_by_effect[found_cls]][key] = value # Categorize effects by track name. - effects_by_track = defaultdict(dict) - for key, value in effects.items(): - if key == "assignTo": - continue - - effects_by_track[value["track"]][key] = value - - for data in self.effect_tracks: - for track_name, track_effects in effects_by_track.items(): - if re.match(data["track_regex"], track_name) is None: + track_names_by_category = { + x["name"]: x["track_names"] for x in self.effect_tracks + } + for category, track_names in track_names_by_category.items(): + for key, value in effects.items(): + if key == "assignTo": continue - effects_categorized[data["name"]] = track_effects + if value["track"] not in track_names: + continue + + if category in effects_categorized: + effects_categorized[category][key] = value + else: + effects_categorized[category] = {key: value} # Ensure required `assignTo` data member exists. categories = list(effects_categorized.keys()) diff --git a/server_addon/hiero/server/settings/publish_plugins.py b/server_addon/hiero/server/settings/publish_plugins.py index 9902b68a25..b9e07639df 100644 --- a/server_addon/hiero/server/settings/publish_plugins.py +++ b/server_addon/hiero/server/settings/publish_plugins.py @@ -30,7 +30,7 @@ class CollectClipEffectsDefModel(BaseSettingsModel): class CollectClipEffectsTracksModel(BaseSettingsModel): _layout = "expanded" name: str = SettingsField("", title="Name") - track_regex: str = SettingsField("", title="Track Regex") + track_names: list[str] = SettingsField("", title="Track Names") class CollectClipEffectsModel(BaseSettingsModel): From 835c87a3c0246e1893d384b358091f6f5046c384 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 23 May 2024 22:58:03 +0100 Subject: [PATCH 3/6] Account for no categories --- .../hosts/hiero/plugins/publish/collect_clip_effects.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py b/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py index 1ff2f25edc..8d9dbb2c92 100644 --- a/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py +++ b/client/ayon_core/hosts/hiero/plugins/publish/collect_clip_effects.py @@ -86,7 +86,6 @@ class CollectClipEffects(pyblish.api.InstancePlugin): category_by_effect[cls] = key effects_categorized = {k: {} for k in effect_categories.keys()} - effects_categorized[""] = {} for key, value in effects.items(): if key == "assignTo": continue @@ -97,6 +96,9 @@ class CollectClipEffects(pyblish.api.InstancePlugin): if cls in value["class"]: found_cls = cls + if not found_cls: + continue + effects_categorized[category_by_effect[found_cls]][key] = value # Categorize effects by track name. @@ -125,6 +127,10 @@ class CollectClipEffects(pyblish.api.InstancePlugin): effects_categorized[category]["assignTo"] = effects["assignTo"] + # If no effects have been categorized, publish all effects together. + if not effects_categorized: + effects_categorized[""] = effects + for category, effects in effects_categorized.items(): product_name = "".join(product_name_split) product_name += category.capitalize() From ad7beffe2e437624364ea12543d35bb928ae3ca3 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 7 Jun 2024 16:07:00 +0200 Subject: [PATCH 4/6] Fixing itnegrate ignoring for shot product types --- .../client/ayon_hiero/plugins/publish/precollect_instances.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 fa2c56182e..27b3b54ffa 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 @@ -235,7 +235,8 @@ class PrecollectInstances(pyblish.api.ContextPlugin): "productName": product_name, "productType": product_type, "family": product_type, - "families": [product_type] + "families": [product_type], + "integrate": False, }) instance = context.create_instance(**data) From 642908a7eefe4498d82d27ca9d13eaaa73704684 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 7 Jun 2024 16:07:09 +0200 Subject: [PATCH 5/6] Bump addon version from 0.2.0 to 0.2.1 Update version in package.py to match the new addon version. --- server_addon/hiero/client/ayon_hiero/version.py | 2 +- server_addon/hiero/package.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server_addon/hiero/client/ayon_hiero/version.py b/server_addon/hiero/client/ayon_hiero/version.py index 6a2d180afb..fe6d62221c 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.0" +__version__ = "0.2.1" diff --git a/server_addon/hiero/package.py b/server_addon/hiero/package.py index 1948d50e6d..95714d95da 100644 --- a/server_addon/hiero/package.py +++ b/server_addon/hiero/package.py @@ -1,6 +1,6 @@ name = "hiero" title = "Hiero" -version = "0.2.0" +version = "0.2.1" client_dir = "ayon_hiero" ayon_required_addons = { From d32384492f6da1006b08099ef9e697926c6f1480 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 7 Jun 2024 16:07:30 +0200 Subject: [PATCH 6/6] Remove import and defaultdict --- .../client/ayon_hiero/plugins/publish/collect_clip_effects.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server_addon/hiero/client/ayon_hiero/plugins/publish/collect_clip_effects.py b/server_addon/hiero/client/ayon_hiero/plugins/publish/collect_clip_effects.py index 154651c62f..850dda9676 100644 --- a/server_addon/hiero/client/ayon_hiero/plugins/publish/collect_clip_effects.py +++ b/server_addon/hiero/client/ayon_hiero/plugins/publish/collect_clip_effects.py @@ -1,5 +1,4 @@ import re -from collections import defaultdict import pyblish.api