@nprofile1q... I mean yes, this is essentially place-and-route lol.
But I don't care about path length or being optimal, I just want it to look slightly nicer than direct paths that cross over each other, and nodes, constantly.
Some failures (edges over nodes) are acceptable, there's no timing optimization in play. So I imagine a less sophisticated algorithm is doable.
I don't have budget to throw at the problem right now since my "spare change to throw at ngscopeclient" cash just got spent paying an artist to improve readability of the toolbar icons, but I might be willing to put a bounty on this in the future.