Skip to content

collect_plate_from_reel

CollectReelPlate

Bases: InstancePlugin

Collect new plates from Reel.

Source code in client/ayon_flame/plugins/publish/collect_plate_from_reel.py
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
class CollectReelPlate(pyblish.api.InstancePlugin):
    """Collect new plates from Reel."""

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

    def process(self, instance):
        """
        Args:
            instance (pyblish.Instance): The shot instance to update.
        """
        if (instance.data.get("flame_context") != "FlameMenuUniversal"):
            # Plate instance could also come from Timeline.
            self.log.debug("Current plate instance is part of a timeline.")
            return

        # Adjust instance families
        instance.data["families"].append("clip")
        if instance.data["creator_attributes"].get("review"):
            instance.data["families"].append("review")

        clip_data = instance.data["clip_data"]
        version_data = instance.data.setdefault("versionData", {})
        version_data["colorSpace"] = clip_data["colour_space"]

        instance_clip_data = {
            "clipIn": clip_data["record_in"],
            "clipOut": clip_data["record_out"],
            "colorspace": clip_data["colour_space"],
            "fps": clip_data["fps"],
            "frameStart": clip_data["record_in"],
            "frameEnd": clip_data["record_out"],
            "handleStart": 0,
            "handleEnd": 0,
            "item": instance.data["transientData"]["clip_item"],
            "path": clip_data["fpath"],
            "resolutionWidth": clip_data["width"],
            "resolutionHeight": clip_data["height"],
            "sourceFirstFrame": clip_data["source_in"],
            "xml_overrides": {},
        }

        # Build otio timeline and otio clip from clip item.
        flame_export.OtioExportCTX.set_fps(instance_clip_data["fps"])

        # Cannot use instance data as PySegment is not serializable.
        clip_data_duplicate = clip_data.copy()
        clip_data_duplicate["PySegment"] = lib.get_clip_segment(
            instance_clip_data["item"]
        )

        otio_clip = flame_export.create_otio_clip(clip_data_duplicate)
        otio_timeline = otio.schema.Timeline(
            tracks=[otio.schema.Track(children=[otio_clip])]
        )
        instance_clip_data.update({
            "otioClip": otio_clip,
            "otioTimeline": otio_timeline,
        })

        self.log.debug(f">>> Clip data: {pformat(instance_clip_data)}")
        instance.data.update(instance_clip_data)

process(instance)

Parameters:

Name Type Description Default
instance Instance

The shot instance to update.

required
Source code in client/ayon_flame/plugins/publish/collect_plate_from_reel.py
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
def process(self, instance):
    """
    Args:
        instance (pyblish.Instance): The shot instance to update.
    """
    if (instance.data.get("flame_context") != "FlameMenuUniversal"):
        # Plate instance could also come from Timeline.
        self.log.debug("Current plate instance is part of a timeline.")
        return

    # Adjust instance families
    instance.data["families"].append("clip")
    if instance.data["creator_attributes"].get("review"):
        instance.data["families"].append("review")

    clip_data = instance.data["clip_data"]
    version_data = instance.data.setdefault("versionData", {})
    version_data["colorSpace"] = clip_data["colour_space"]

    instance_clip_data = {
        "clipIn": clip_data["record_in"],
        "clipOut": clip_data["record_out"],
        "colorspace": clip_data["colour_space"],
        "fps": clip_data["fps"],
        "frameStart": clip_data["record_in"],
        "frameEnd": clip_data["record_out"],
        "handleStart": 0,
        "handleEnd": 0,
        "item": instance.data["transientData"]["clip_item"],
        "path": clip_data["fpath"],
        "resolutionWidth": clip_data["width"],
        "resolutionHeight": clip_data["height"],
        "sourceFirstFrame": clip_data["source_in"],
        "xml_overrides": {},
    }

    # Build otio timeline and otio clip from clip item.
    flame_export.OtioExportCTX.set_fps(instance_clip_data["fps"])

    # Cannot use instance data as PySegment is not serializable.
    clip_data_duplicate = clip_data.copy()
    clip_data_duplicate["PySegment"] = lib.get_clip_segment(
        instance_clip_data["item"]
    )

    otio_clip = flame_export.create_otio_clip(clip_data_duplicate)
    otio_timeline = otio.schema.Timeline(
        tracks=[otio.schema.Track(children=[otio_clip])]
    )
    instance_clip_data.update({
        "otioClip": otio_clip,
        "otioTimeline": otio_timeline,
    })

    self.log.debug(f">>> Clip data: {pformat(instance_clip_data)}")
    instance.data.update(instance_clip_data)