Merge pull request #6143 from tokejepsen/enhancement/OP-7397_effect_categories

Hiero: Effect Categories - OP-7397
This commit is contained in:
Jakub Ježek 2024-01-23 17:13:13 +01:00 committed by GitHub
commit 2245f6c362
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 90 additions and 22 deletions

View file

@ -9,6 +9,8 @@ class CollectClipEffects(pyblish.api.InstancePlugin):
label = "Collect Clip Effects Instances" label = "Collect Clip Effects Instances"
families = ["clip"] families = ["clip"]
effect_categories = []
def process(self, instance): def process(self, instance):
family = "effect" family = "effect"
effects = {} effects = {}
@ -70,29 +72,62 @@ class CollectClipEffects(pyblish.api.InstancePlugin):
subset_split.insert(0, "effect") subset_split.insert(0, "effect")
name = "".join(subset_split) effect_categories = {
x["name"]: x["effect_classes"] for x in self.effect_categories
}
# create new instance and inherit data category_by_effect = {"": ""}
data = {} for key, values in effect_categories.items():
for key, value in instance.data.items(): for cls in values:
if "clipEffectItems" in key: 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 continue
data[key] = value
# change names # Some classes can have a number in them. Like Text2.
data["subset"] = name found_cls = ""
data["family"] = family for cls in category_by_effect.keys():
data["families"] = [family] if cls in value["class"]:
data["name"] = data["subset"] + "_" + data["asset"] found_cls = cls
data["label"] = "{} - {}".format(
data['asset'], data["subset"]
)
data["effects"] = effects
# create new instance effects_categorized[category_by_effect[found_cls]][key] = value
_instance = instance.context.create_instance(**data)
self.log.info("Created instance `{}`".format(_instance)) categories = list(effects_categorized.keys())
self.log.debug("instance.data `{}`".format(_instance.data)) for category in categories:
if not effects_categorized[category]:
effects_categorized.pop(category)
continue
effects_categorized[category]["assignTo"] = effects["assignTo"]
for category, effects in effects_categorized.items():
name = "".join(subset_split)
name += category.capitalize()
# create new instance and inherit data
data = {}
for key, value in instance.data.items():
if "clipEffectItems" in key:
continue
data[key] = value
# change names
data["subset"] = name
data["family"] = family
data["families"] = [family]
data["name"] = data["subset"] + "_" + data["asset"]
data["label"] = "{} - {}".format(
data['asset'], data["subset"]
)
data["effects"] = effects
# create new instance
_instance = instance.context.create_instance(**data)
self.log.info("Created instance `{}`".format(_instance))
self.log.debug("instance.data `{}`".format(_instance.data))
def test_overlap(self, effect_t_in, effect_t_out): def test_overlap(self, effect_t_in, effect_t_out):
covering_exp = bool( covering_exp = bool(

View file

@ -1,5 +1,7 @@
from pydantic import Field from pydantic import Field, validator
from ayon_server.settings import BaseSettingsModel from ayon_server.settings import (
BaseSettingsModel, ensure_unique_names, normalize_name
)
class CollectInstanceVersionModel(BaseSettingsModel): class CollectInstanceVersionModel(BaseSettingsModel):
@ -9,6 +11,30 @@ class CollectInstanceVersionModel(BaseSettingsModel):
) )
class CollectClipEffectsDefModel(BaseSettingsModel):
_layout = "expanded"
name: str = Field("", title="Name")
effect_classes: list[str] = Field(
default_factory=list, title="Effect Classes"
)
@validator("name")
def validate_name(cls, value):
"""Ensure name does not contain weird characters"""
return normalize_name(value)
class CollectClipEffectsModel(BaseSettingsModel):
effect_categories: list[CollectClipEffectsDefModel] = Field(
default_factory=list, title="Effect Categories"
)
@validator("effect_categories")
def validate_unique_outputs(cls, value):
ensure_unique_names(value)
return value
class ExtractReviewCutUpVideoModel(BaseSettingsModel): class ExtractReviewCutUpVideoModel(BaseSettingsModel):
enabled: bool = Field( enabled: bool = Field(
True, True,
@ -25,6 +51,10 @@ class PublishPuginsModel(BaseSettingsModel):
default_factory=CollectInstanceVersionModel, default_factory=CollectInstanceVersionModel,
title="Collect Instance Version" title="Collect Instance Version"
) )
CollectClipEffects: CollectClipEffectsModel = Field(
default_factory=CollectClipEffectsModel,
title="Collect Clip Effects"
)
"""# TODO: enhance settings with host api: """# TODO: enhance settings with host api:
Rename class name and plugin name Rename class name and plugin name
to match title (it makes more sense) to match title (it makes more sense)
@ -44,5 +74,8 @@ DEFAULT_PUBLISH_PLUGIN_SETTINGS = {
"tags_addition": [ "tags_addition": [
"review" "review"
] ]
},
"CollectClipEffectsModel": {
"effect_categories": []
} }
} }

View file

@ -1 +1 @@
__version__ = "0.1.1" __version__ = "0.1.2"