Skip to content

utils

bake_gizmos_recursively(in_group=None)

Converting a gizmo to group

Parameters:

Name Type Description Default
in_group Optional[Node]

group node or all nodes

None
Source code in client/ayon_nuke/api/utils.py
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
def bake_gizmos_recursively(in_group=None):
    """Converting a gizmo to group

    Arguments:
        in_group (Optional[nuke.Node]): group node or all nodes
    """
    from .lib import maintained_selection
    if in_group is None:
        in_group = nuke.Root()
    # preserve selection after all is done
    with maintained_selection():
        # jump to the group
        with in_group:
            for node in nuke.allNodes():
                if is_node_gizmo(node) and not gizmo_is_nuke_default(node):
                    with node:
                        outputs = get_node_outputs(node)
                        group = node.makeGroup()
                        # Reconnect inputs and outputs if any
                        if outputs:
                            for n, pipes in outputs.items():
                                for i in pipes:
                                    n.setInput(i, group)
                        for i in range(node.inputs()):
                            group.setInput(i, node.input(i))
                        # set node position and name
                        group.setXYpos(node.xpos(), node.ypos())
                        name = node.name()
                        nuke.delete(node)
                        group.setName(name)
                        node = group

                if node.Class() == "Group":
                    bake_gizmos_recursively(node)

get_node_outputs(node)

Return a dictionary of the nodes and pipes that are connected to node

Source code in client/ayon_nuke/api/utils.py
30
31
32
33
34
35
36
37
38
39
40
41
def get_node_outputs(node):
    """
    Return a dictionary of the nodes and pipes that are connected to node
    """
    dep_dict = {}
    dependencies = node.dependent(nuke.INPUTS | nuke.HIDDEN_INPUTS)
    for d in dependencies:
        dep_dict[d] = []
        for i in range(d.inputs()):
            if d.input(i) == node:
                dep_dict[d].append(i)
    return dep_dict

gizmo_is_nuke_default(gizmo)

Check if gizmo is in default install path

Source code in client/ayon_nuke/api/utils.py
49
50
51
52
53
def gizmo_is_nuke_default(gizmo) -> bool:
    """Check if gizmo is in default install path"""
    plug_dir = os.path.join(os.path.dirname(
        nuke.env['ExecutablePath']), 'plugins')
    return gizmo.filename().startswith(plug_dir)

is_headless()

Returns:

Name Type Description
bool bool

headless

Source code in client/ayon_nuke/api/utils.py
92
93
94
95
96
97
def is_headless() -> bool:
    """
    Returns:
        bool: headless
    """
    return QtWidgets.QApplication.instance() is None

is_node_gizmo(node)

Return True if the node is a gizmo.

Source code in client/ayon_nuke/api/utils.py
44
45
46
def is_node_gizmo(node) -> bool:
    """Return True if the node is a gizmo."""
    return 'gizmo_file' in node.knobs()

set_context_favorites(favorites=None)

Adding favorite folders to nuke's browser

Parameters:

Name Type Description Default
favorites dict

couples of {name:path}

None
Source code in client/ayon_nuke/api/utils.py
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def set_context_favorites(favorites=None):
    """Adding favorite folders to nuke's browser

    Arguments:
        favorites (dict): couples of {name:path}
    """
    favorites = favorites or {}
    icon_path = resources.get_resource("icons", "folder-favorite.png")
    for name, path in favorites.items():
        nuke.addFavoriteDir(
            name,
            path,
            nuke.IMAGE | nuke.SCRIPT | nuke.GEO,
            icon=icon_path)