Generation with constraints is a fairly common algorithm in combinatorics.
When you need a set of objects with a particular structure, you could just make all possible examples and then filter out the unsuitable ones.
However if there are too many objects (matricies, graphs, etc) then this is inefficient. It is better to constrain the generation so that you 'prune' the tree of possible objects.
It has some nice features (for example exporting to virtual foundry vtt format .dd2vtt with colliders), but after a while I noticed that user interface is the biggest problem - I have a lot of knobs to play with and not enough space and user patience to explain them.
This one has much less features right now (no water, stones, twigs, no constrains like "trees can't grow on each other", no export, etc), but it is built on a great graph editor library (litegraph) with nodes that you can join and combine. This should allow much better configurability once I get it to feature parity. UI is still pretty bad, I will try to encapsulate the submodules into subgraphs eventually and then I plan on adding the possibility of exporting generators as submodules which can be versioned and used by others - kinda like maven repo for generators. If I don't abandon it before that :)
I added the (programming) as I thought people might be confused into thinking the article would be about electrical generators and find themselves disappointed when clicking through.
I knew enough to expect it was about programming, but in the other way: a code or program generator. This seems about art generation! Very interesting still.