Skip to content

collect_plates

CollectPlate

Bases: InstancePlugin

Collect new plates.

Source code in client/ayon_hiero/plugins/publish/collect_plates.py
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
class CollectPlate(pyblish.api.InstancePlugin):
    """Collect new plates."""

    order = pyblish.api.CollectorOrder - 0.48
    label = "Collect Plate"
    hosts = ["hiero"]
    families = ["plate"]

    def process(self, instance):
        """
        Args:
            instance (pyblish.Instance): The shot instance to update.
        """
        instance.data["families"].extend([
            "clip",
            # Mark for 'CollectOTIORanges' in core
            "otio.clip.ranges",
            # Mark for 'CollectOTIOProductResources' in core
            "otio.clip.resources",
            # Mark for 'CollectOTIOReviewTrack' in core
            "otio.review.track",
        ])

        # Adjust instance data from parent otio timeline.
        otio_timeline = instance.context.data["otioTimeline"]
        otio_clip, _ = utils.get_marker_from_clip_index(
            otio_timeline, instance.data["clip_index"]
        )
        if not otio_clip:
            raise PublishError(
                f"Could not retrieve otioClip for shot {instance}")

        instance.data["otioClip"] = otio_clip

        # Adjust info from track_item on timeline
        active_timeline = instance.context.data["activeTimeline"]
        track_item = None
        for video_track in active_timeline.videoTracks():
            for item in video_track.items():
                if item.guid() == instance.data["clip_index"]:
                    track_item = item
                    break

        if not track_item:
            raise PublishError(
                'Could not retrieve item from '
                f'clip guid: {instance.data["clip_index"]}'
            )

        instance.data["trackItem"] = track_item

        # solve reviewable options
        review_switch = instance.data["creator_attributes"].get(
            "review")
        reviewable_source = instance.data["creator_attributes"].get(
            "reviewableSource")

        if review_switch is True:
            if reviewable_source == "clip_media":
                instance.data["families"].append("review")
                # Tell 'CollectOTIOReviewTrack' to use the current clip
                instance.data["otioReviewClips"] = [otio_clip]
                instance.data.pop("reviewTrack", None)
            else:
                instance.data["reviewTrack"] = reviewable_source

        # remove creator-specific review keys from instance data
        instance.data.pop("reviewableSource", None)
        instance.data.pop("review", None)

        # Retrieve instance data from parent instance shot instance.
        parent_instance_id = instance.data["parent_instance_id"]

        try:
            edit_shared_data = instance.context.data["editorialSharedData"]
            instance.data.update(
                edit_shared_data[parent_instance_id]
            )

        # Ensure shot instance related to the audio instance exists.
        except KeyError:
            raise PublishError(
                f'Could not find shot instance for {instance.data["label"]}.'
                " Please ensure it is set and enabled."
            )

        clip_colorspace = track_item.sourceMediaColourTransform()

        # add colorspace data to versionData
        version_data = instance.data.setdefault("versionData", {})
        version_data["colorSpace"] = clip_colorspace

        # add colorspace data to instance
        instance.data["colorspace"] = clip_colorspace

process(instance)

Parameters:

Name Type Description Default
instance Instance

The shot instance to update.

required
Source code in client/ayon_hiero/plugins/publish/collect_plates.py
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
def process(self, instance):
    """
    Args:
        instance (pyblish.Instance): The shot instance to update.
    """
    instance.data["families"].extend([
        "clip",
        # Mark for 'CollectOTIORanges' in core
        "otio.clip.ranges",
        # Mark for 'CollectOTIOProductResources' in core
        "otio.clip.resources",
        # Mark for 'CollectOTIOReviewTrack' in core
        "otio.review.track",
    ])

    # Adjust instance data from parent otio timeline.
    otio_timeline = instance.context.data["otioTimeline"]
    otio_clip, _ = utils.get_marker_from_clip_index(
        otio_timeline, instance.data["clip_index"]
    )
    if not otio_clip:
        raise PublishError(
            f"Could not retrieve otioClip for shot {instance}")

    instance.data["otioClip"] = otio_clip

    # Adjust info from track_item on timeline
    active_timeline = instance.context.data["activeTimeline"]
    track_item = None
    for video_track in active_timeline.videoTracks():
        for item in video_track.items():
            if item.guid() == instance.data["clip_index"]:
                track_item = item
                break

    if not track_item:
        raise PublishError(
            'Could not retrieve item from '
            f'clip guid: {instance.data["clip_index"]}'
        )

    instance.data["trackItem"] = track_item

    # solve reviewable options
    review_switch = instance.data["creator_attributes"].get(
        "review")
    reviewable_source = instance.data["creator_attributes"].get(
        "reviewableSource")

    if review_switch is True:
        if reviewable_source == "clip_media":
            instance.data["families"].append("review")
            # Tell 'CollectOTIOReviewTrack' to use the current clip
            instance.data["otioReviewClips"] = [otio_clip]
            instance.data.pop("reviewTrack", None)
        else:
            instance.data["reviewTrack"] = reviewable_source

    # remove creator-specific review keys from instance data
    instance.data.pop("reviewableSource", None)
    instance.data.pop("review", None)

    # Retrieve instance data from parent instance shot instance.
    parent_instance_id = instance.data["parent_instance_id"]

    try:
        edit_shared_data = instance.context.data["editorialSharedData"]
        instance.data.update(
            edit_shared_data[parent_instance_id]
        )

    # Ensure shot instance related to the audio instance exists.
    except KeyError:
        raise PublishError(
            f'Could not find shot instance for {instance.data["label"]}.'
            " Please ensure it is set and enabled."
        )

    clip_colorspace = track_item.sourceMediaColourTransform()

    # add colorspace data to versionData
    version_data = instance.data.setdefault("versionData", {})
    version_data["colorSpace"] = clip_colorspace

    # add colorspace data to instance
    instance.data["colorspace"] = clip_colorspace