Cool! I've been implementing my own solution for this, it's something we definitely need in our map creation. Could you possibly describe what this system will look like? I also have a few more suggestions. Sorry to spam you with these! Perhaps we shouldn't store a version of the MapMagic node tree in the level. Currently it seems to be serialized in the level in the MapMagic object? It would be better I think to always store the node tree in a ScriptableObject, like we do already with saving/loading, and then the MapMagic GameObject in the level only needs to have a reference to the scriptable object. I think this has a few advantages - it allows for much easier version control by decoupling the level and the node tree, and it removes the 1:1 logical mapping between node tree and level which is currently hacky to get around. There is currently only the option to load additively, which makes loading and saving for versioning a frustrating experience. I suggest different options for Load and Load Additive, where Load creates an entirely new Node Canvas. In your code, you seem to following a very inefficient pattern when you want to get all the generators of a certain type. You iterate through every generator, every time, to build up an array. It would be much faster and much better practice for the GeneratorAsset to keep a dictionary of lists, with the generator type being the key, and just maintain this list as you add/remove generators. I've implemented portal categories, which come in really handy when you have 15+ portals in your tree. What this means is that I can call a portal "Height Generation/Final Height", and it will show up in the selection menu under the category "Height Generation".