From be50dd78c677e65175d1c68f067cfb26c19ddbd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= <33513211+antirotor@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:05:03 +0200 Subject: [PATCH] Create collect_udim.py publish UDIM tiles in Publisher --- .../ayon_core/plugins/publish/collect_udim.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 client/ayon_core/plugins/publish/collect_udim.py diff --git a/client/ayon_core/plugins/publish/collect_udim.py b/client/ayon_core/plugins/publish/collect_udim.py new file mode 100644 index 0000000000..aa8ef1f066 --- /dev/null +++ b/client/ayon_core/plugins/publish/collect_udim.py @@ -0,0 +1,41 @@ +"""Publish UDIM tiles.""" +import re + +import pyblish.api +from ayon_core.lib import BoolDef +from ayon_core.pipeline import publish + +UDIM_REGEX = re.compile(r"(.*)\.(?P\d{4})\.(.*)") + + +class CollectUDIMs( + pyblish.api.InstancePlugin, publish.AYONPyblishPluginMixin): + """Collect UDIMs tiles.""" + + label = "Collect UDIMs" + order = pyblish.api.CollectorOrder + 0.499 + families = ["image"] + + def process(self, instance): + # type: (pyblish.api.Instance) -> None + instance_settings = self.get_attr_values_from_data(instance.data) + is_udim = instance_settings.get("isUDIM", False) + if not is_udim: + return + + for representation in instance.data["representations"]: + if isinstance(representation["files"], (list, tuple)): + continue + + # sourcery skip: use-named-expression + match = re.search(UDIM_REGEX, representation["files"]) + if match: + representation["udim"] = [match.group("udim")] + + @classmethod + def get_attribute_defs(cls): + return [ + BoolDef("isUDIM", + label="Is UDIM", + default=False) + ]