Skip to content

load_trackable_clip

Load a clip from a file as trackable clip.

LoadTrackableClip

Bases: MochaLoader

Load a clip from a file.

Source code in client/ayon_mocha/plugins/load/load_trackable_clip.py
 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
101
102
103
104
105
106
107
108
109
110
class LoadTrackableClip(MochaLoader):
    """Load a clip from a file."""

    label = "Load Trackable Clip"
    order = -11
    icon = "code-fork"
    color = "orange"

    product_types: ClassVar[set[str]] = {"*"}
    representations: ClassVar[set[str]] = {"*"}
    extensions: ClassVar[set[str]] = {
        ext.lstrip(".") for ext in IMAGE_EXTENSIONS}

    def load(self,
             context: dict,
             name: Optional[str] = None,
             namespace: Optional[str] = None,
             options: Optional[dict] = None) -> None:
        """Load a clip from a file as trackable clip.

        Raises:
            LoadError: If no trackable clip found in the project.

        """
        host: MochaProHost = registered_host()
        project = host.get_current_project()
        with project.undo_group():

            current_clip: Clip = project.default_trackable_clip
            if current_clip is None:
                msg = "No trackable clip found in the project."
                raise LoadError(msg)
            # no way how to change clip name
            # project.parameter([current_clip, "name"]).set(name)

            file_path = self.filepath_from_context(context)
            current_clip.relink(file_path)

            for cnt in host.get_containers():
                if cnt.get("name") == current_clip.name:
                    cnt["representation"] = str(
                        context["representation"]["id"])
                    return

            container = Container(
                name=current_clip.name,
                namespace=namespace or "",
                loader=self.__class__.__name__,
                representation=str(context["representation"]["id"]),
                objectName=current_clip.name,
                timestamp=time.time_ns()
            )
            host.add_container(container)

    def switch(self, container: dict, context: dict) -> None:
        """Switch the image sequence on the current camera."""
        self.update(container, context)

    def remove(self, container: dict) -> None:
        """Remove a container."""
        host: MochaProHost = registered_host()
        project = host.get_current_project()

        clips = project.get_clips()
        clip = clips.get(container["objectName"])
        if not clip:
            self.log.warning("Clip %s not found", container["objectName"])
            return
        del clip
        host.remove_container(Container(**container))

    def update(self, container: dict, context: dict) -> None:
        """Update a container."""
        host: MochaProHost = registered_host()

        version_entity = context["version"]
        repre_entity = context["representation"]

        file_path = get_representation_path(repre_entity)
        project = host.get_current_project()
        clips = project.get_clips()
        try:
            clips[container["objectName"]].relink(file_path)
        except KeyError:
            self.log.warning("Clip %s not found", container["objectName"])
        update_ui()

        container["representation"] = repre_entity["id"]
        container["version"] = str(version_entity["version"])
        host.add_container(Container(**container))

load(context, name=None, namespace=None, options=None)

Load a clip from a file as trackable clip.

Raises:

Type Description
LoadError

If no trackable clip found in the project.

Source code in client/ayon_mocha/plugins/load/load_trackable_clip.py
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 load(self,
         context: dict,
         name: Optional[str] = None,
         namespace: Optional[str] = None,
         options: Optional[dict] = None) -> None:
    """Load a clip from a file as trackable clip.

    Raises:
        LoadError: If no trackable clip found in the project.

    """
    host: MochaProHost = registered_host()
    project = host.get_current_project()
    with project.undo_group():

        current_clip: Clip = project.default_trackable_clip
        if current_clip is None:
            msg = "No trackable clip found in the project."
            raise LoadError(msg)
        # no way how to change clip name
        # project.parameter([current_clip, "name"]).set(name)

        file_path = self.filepath_from_context(context)
        current_clip.relink(file_path)

        for cnt in host.get_containers():
            if cnt.get("name") == current_clip.name:
                cnt["representation"] = str(
                    context["representation"]["id"])
                return

        container = Container(
            name=current_clip.name,
            namespace=namespace or "",
            loader=self.__class__.__name__,
            representation=str(context["representation"]["id"]),
            objectName=current_clip.name,
            timestamp=time.time_ns()
        )
        host.add_container(container)

remove(container)

Remove a container.

Source code in client/ayon_mocha/plugins/load/load_trackable_clip.py
79
80
81
82
83
84
85
86
87
88
89
90
def remove(self, container: dict) -> None:
    """Remove a container."""
    host: MochaProHost = registered_host()
    project = host.get_current_project()

    clips = project.get_clips()
    clip = clips.get(container["objectName"])
    if not clip:
        self.log.warning("Clip %s not found", container["objectName"])
        return
    del clip
    host.remove_container(Container(**container))

switch(container, context)

Switch the image sequence on the current camera.

Source code in client/ayon_mocha/plugins/load/load_trackable_clip.py
75
76
77
def switch(self, container: dict, context: dict) -> None:
    """Switch the image sequence on the current camera."""
    self.update(container, context)

update(container, context)

Update a container.

Source code in client/ayon_mocha/plugins/load/load_trackable_clip.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
def update(self, container: dict, context: dict) -> None:
    """Update a container."""
    host: MochaProHost = registered_host()

    version_entity = context["version"]
    repre_entity = context["representation"]

    file_path = get_representation_path(repre_entity)
    project = host.get_current_project()
    clips = project.get_clips()
    try:
        clips[container["objectName"]].relink(file_path)
    except KeyError:
        self.log.warning("Clip %s not found", container["objectName"])
    update_ui()

    container["representation"] = repre_entity["id"]
    container["version"] = str(version_entity["version"])
    host.add_container(Container(**container))