you are viewing a single comment's thread
view the rest of the comments
[–] 2 points 1 month ago* (4 children)

My goal was to think about nodes as functions and operations that could be described with simple Pythonic syntax. Every node is a function with positional arguments as socket inputs and a return value as a socket output. The mathematical operation nodes could be described as simple operators like + - // etc. The links between nodes are described as simple variable assignments and passing variables into functions and so on.

Basically, the idea it to think about Geometry Nodes setup as a script and reduce the Blender API Geometry Nodes boilerplate, while keeping it possible to address a specific node when needed.

I also put a bunch of work into the Extension API, which makes it possible to extend the functionality of the DSL with additional third-party libraries with its own defined methods and logic and use them in a familiar way.

I'd be happy if you tried it out! 🌽

  • source
  • parent
  • hideshow 4 child comments
  • [–] [S] 1 point 1 month ago (3 children)

    yep, that's the same idea! i'm happy to share the code once i clean it up a bit, and you should feel free to transfer any of the functionality. there are few features i added which i really like, such as a support for LSP and type hints in an external IDE, plus an ability to write the code outside, while the add-on auto-regenerates the node-group if a file is changed. another cool thing is you can inline functions, i.e.:

    # these two are automatically inlined (i.e., nodes added to the active group)
    @inline
    def foo(x: float, y: bool):
      return x**2 if y else x**3
    
    foo = lambda x, y: x**2 if y else x**3
    
    # while this becomes a reusable node group
    def foo(x: float, y: bool):
      return x**2 if y else x**3
    
  • source
  • parent
  • hideshow 3 child comments
  • [–] 1 point 1 month ago (2 children)

    Interesting, I'm looking forward to seeing your project! I'll note the features you've mentioned, the LSP should be a really handy one : )
    The declaring of inline functions i.e. creating nodes in the root node group is something I feel is lacking in my project right now. Would you make a post about the addon somewhere?

  • source
  • parent
  • hideshow 2 child comments