mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #6143 from tokejepsen/enhancement/OP-7397_effect_categories
Hiero: Effect Categories - OP-7397
This commit is contained in:
commit
2245f6c362
3 changed files with 90 additions and 22 deletions
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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": []
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
__version__ = "0.1.1"
|
||||
__version__ = "0.1.2"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue