diff --git a/client/ayon_core/plugins/publish/collect_frames_fix.py b/client/ayon_core/plugins/publish/collect_frames_fix.py index 0f7d5b692a..f2e9703dc2 100644 --- a/client/ayon_core/plugins/publish/collect_frames_fix.py +++ b/client/ayon_core/plugins/publish/collect_frames_fix.py @@ -1,6 +1,8 @@ import pyblish.api import ayon_api +from ayon_core.lib import filter_profiles +from ayon_core.pipeline import get_current_host_name from ayon_core.lib.attribute_definitions import ( TextDef, BoolDef @@ -21,10 +23,23 @@ class CollectFramesFixDef( order = pyblish.api.CollectorOrder + 0.495 label = "Collect Frames to Fix" targets = ["local"] - hosts = ["nuke"] - families = ["render", "prerender"] - rewrite_version_enable = False + @classmethod + def apply_settings(cls, project_settings): + + profiles = project_settings["core"]["publish"][cls.__name__]["profiles"] + host_name = get_current_host_name() + filtering_criteria = { + "hosts": host_name + } + profile = filter_profiles( + profiles, + filtering_criteria, + logger=cls.log + ) + + cls.families = profile["families"] + cls.rewrite_version_enable = profile["rewrite_version_enable"] def process(self, instance): attribute_values = self.get_attr_values_from_data(instance.data) @@ -65,7 +80,7 @@ class CollectFramesFixDef( product_type = repre_context.get("product", {}).get("type") if not product_type: product_type = repre_context.get("family") - if product_type not in self.families: + if "*" not in self.families and product_type not in self.families: continue for file_info in repre.get("files"): diff --git a/server/settings/publish_plugins.py b/server/settings/publish_plugins.py index a5ea7bd762..3f4ce39b5b 100644 --- a/server/settings/publish_plugins.py +++ b/server/settings/publish_plugins.py @@ -50,14 +50,28 @@ class CollectCommentPIModel(BaseSettingsModel): enabled: bool = SettingsField(True) families: list[str] = SettingsField(default_factory=list, title="Families") +class CollectFramesFixDefProfilesModel(BaseSettingsModel): -class CollectFramesFixDefModel(BaseSettingsModel): - enabled: bool = SettingsField(True) + hosts: list[str] = SettingsField( + default_factory=list, + title="Host names" + ) + families: list[str] = SettingsField( + default_factory=list, + title="Families" + ) rewrite_version_enable: bool = SettingsField( True, title="Show 'Rewrite latest version' toggle" ) - + + +class CollectFramesFixDefModel(BaseSettingsModel): + enabled: bool = SettingsField(True) + profiles: list[CollectFramesFixDefProfilesModel] = SettingsField( + default_factory=list, title="profiles" + ) + class ContributionLayersModel(BaseSettingsModel): _layout = "compact" @@ -360,7 +374,7 @@ class ExtractReviewFFmpegModel(BaseSettingsModel): def extract_review_filter_enum(): return [ { - "value": "everytime", + "value": "everytime", # codespell:ignore everytime "label": "Always" }, { @@ -382,7 +396,7 @@ class ExtractReviewFilterModel(BaseSettingsModel): default_factory=list, title="Custom Tags" ) single_frame_filter: str = SettingsField( - "everytime", + "everytime", # codespell:ignore everytime description=( "Use output always / only if input is 1 frame" " image / only if has 2+ frames or is video" @@ -780,7 +794,7 @@ class IntegrateHeroVersionModel(BaseSettingsModel): class CleanUpModel(BaseSettingsModel): _isGroup = True - paterns: list[str] = SettingsField( + paterns: list[str] = SettingsField( # codespell:ignore paterns default_factory=list, title="Patterns (regex)" ) @@ -911,7 +925,18 @@ DEFAULT_PUBLISH_VALUES = { }, "CollectFramesFixDef": { "enabled": True, - "rewrite_version_enable": True + "profiles": [ + { + "hosts": ["nuke"], + "families": ["render", "prerender"], + "rewrite_version_enable": False + }, + { + "hosts": ["houdini"], + "families": ["*"], + "rewrite_version_enable": False + } + ] }, "CollectUSDLayerContributions": { "enabled": True, @@ -1200,7 +1225,7 @@ DEFAULT_PUBLISH_VALUES = { "use_hardlinks": False }, "CleanUp": { - "paterns": [], + "paterns": [], # codespell:ignore paterns "remove_temp_renders": False }, "CleanUpFarm": {