Adds audio instance attribute collection

Adds a collector to identify audio instances and
link them to sibling instances.

This ensures that sibling instances, requiring audio
for reviewable media, inherit audio attributes.

The collector checks and links audio if:
- The sibling instance shares the same parent ID.
- The instance is not the audio instance itself.
This commit is contained in:
Jakub Jezek 2025-10-21 15:47:11 +02:00
parent 311fab2ab1
commit d2fdae67e7
No known key found for this signature in database
GPG key ID: 06DBD609ADF27FD9

View file

@ -8,6 +8,56 @@ from ayon_core.lib import (
run_subprocess
)
# pridat collector
class CollectParentAudioInstanceAttribute(pyblish.api.ContextPlugin):
"""Collect audio instance attribute"""
order = pyblish.api.CollectorOrder
label = "Collect Audio Instance Attribute"
hosts = ["hiero", "resolve", "flame"]
def process(self, context):
audio_instances = self.get_audio_instances(context)
for inst in audio_instances:
# Make sure if the audio instance is having siblink instances
# which needs audio for reviewable media so it is also added
# to its instance data
# Retrieve instance data from parent instance shot instance.
parent_instance_id = inst.data["parent_instance_id"]
for sibl_instance in inst.context:
sibl_parent_instance_id = sibl_instance.data.get(
"parent_instance_id")
# make sure the instance is not the same instance
if sibl_instance.id == inst.id:
continue
# and the parent instance id is the same
if sibl_parent_instance_id == parent_instance_id:
self.log.info(
"Adding audio to Sibling instance: "
f"{sibl_instance.data['label']}"
)
sibl_instance.data["audio"] = None
def get_audio_instances(self, context):
"""Return only instances which are having audio in families
Args:
context (pyblish.context): context of publisher
Returns:
list: list of selected instances
"""
return [
_i for _i in context
# filter only those with audio product type or family
# and also with reviewAudio data key
if bool("audio" in (
_i.data.get("families", []) + [_i.data["productType"]])
) or _i.data.get("reviewAudio")
]
class ExtractOtioAudioTracks(pyblish.api.ContextPlugin):
"""Extract Audio tracks from OTIO timeline.