How To Extend: GeometryNodeCustomGroup

Hi all,

I’m hoping this could be a place where we focus and centralise all information and R&D regarding creating custom Geometry Nodes.

My first topic is as follows:

I’ve followed (somewhat) the same approach as @BD3D when creating my custom nodes (classes registration, handler registration, etc). However, it seems as though I have an issue. For example:

If I have “NodeGroupA”, which updates during the “bpy.app.handlers.frame_change_pre” call, all works fine - my node group’s values are updated and viewable via the “Viewer” node.

If, then, I have “NodeGroupB”, which has an instance of “NodeGroupA” contained within it which drives the maths etc, this does not work. It seems as though the instance of “NodeGroupA”, in this case, does not receive a notification to update its values.

Consider a simplified example, where:

  • “NodeGroupA” is a mimic of the “SceneTime” node
  • “NodeGroupB” utilises “NodeGroupA” in order to update values

If testable code is required, I’m happy to comply. I hope this makes sense in the meantime.

Blender: 3.1.2
Python: 3.10.5

Quick update,

So, I’ve played around with this more today and found a solution to my issue.

As mentioned, I’ve followed the examples of @BD3D (Extra Nodes), and I’ve updated the “update_node” method from:

def update_node(msg, idname):
    for n in [
            n for ng in bpy.data.node_groups if (msg in ng) for n in ng.nodes
            if (n.bl_idname == idname)
    ]:
        n.update()

    return None

To:

def update_node(msg, idname):
    for n in [
            n for ng in bpy.data.node_groups for n in ng.nodes
            if (n.bl_idname == idname)
    ]:
        n.update()

    return None

I simply removed any filtering to do with the node group’s handler flag, eg: “extra_node_camera_info_update_needed”, and just updated the node by its bl_idname.

This has allowed - with regards to my original example - “NodeGroupB” to receive its update signal during frame changes, even when it’s a child of “NodeGroupA” (or other). It now seems that all signals are being received.

Some of the approaches I’ve currently taken for the add-on I’m currently building may be of benefit to others. For one; as I’ve created the beginnings of a “Core” library with classes and helpers which will help me during future add-on development. So I’ll continue pushing out to this thread as I learn more about extending the GeometryNodeCustomGroup class, as well as generally discussing things such as: general project structure, tooling, approaches, and more when concerning general Blender add-on development. Who knows - I may eventually release my “Core” library!

This could be fun! :slightly_smiling_face:

Thanks

1 Like

What kind of nodegroup plugin are you working on? :slight_smile:

Hiya,

I’m working on a plug-in/add-on that allows the user to easily create, manage, and animate credits and titles for film and TV.

I’ve seen what other paid competitors offer, and I feel I can offer at least the same - or better - for Blender.

It will be a paid add-on, but for a small price and at least 10% will go to the Blender Development Fund, and I will be updating my other free add-ons soon as well.

I also have another, much bigger and more complex add-on planned.

It’s a whole big thing. :wink:

FYI… I’m the creator of the “Swap LoD” and “Render Shots” plug-ins/add-ons. They need to be updated! lol