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"
families = ["clip"]
effect_categories = []
def process(self, instance):
family = "effect"
effects = {}
@ -70,29 +72,62 @@ class CollectClipEffects(pyblish.api.InstancePlugin):
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
data = {}
for key, value in instance.data.items():
if "clipEffectItems" in key:
category_by_effect = {"": ""}
for key, values in effect_categories.items():
for cls in values:
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
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
# Some classes can have a number in them. Like Text2.
found_cls = ""
for cls in category_by_effect.keys():
if cls in value["class"]:
found_cls = cls
# create new instance
_instance = instance.context.create_instance(**data)
self.log.info("Created instance `{}`".format(_instance))
self.log.debug("instance.data `{}`".format(_instance.data))
effects_categorized[category_by_effect[found_cls]][key] = value
categories = list(effects_categorized.keys())
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):
covering_exp = bool(

View file

@ -1,5 +1,7 @@
from pydantic import Field
from ayon_server.settings import BaseSettingsModel
from pydantic import Field, validator
from ayon_server.settings import (
BaseSettingsModel, ensure_unique_names, normalize_name
)
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):
enabled: bool = Field(
True,
@ -25,6 +51,10 @@ class PublishPuginsModel(BaseSettingsModel):
default_factory=CollectInstanceVersionModel,
title="Collect Instance Version"
)
CollectClipEffects: CollectClipEffectsModel = Field(
default_factory=CollectClipEffectsModel,
title="Collect Clip Effects"
)
"""# TODO: enhance settings with host api:
Rename class name and plugin name
to match title (it makes more sense)
@ -44,5 +74,8 @@ DEFAULT_PUBLISH_PLUGIN_SETTINGS = {
"tags_addition": [
"review"
]
},
"CollectClipEffectsModel": {
"effect_categories": []
}
}

View file

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