9 ms·
Nodezator is a generalist Python node editor
- antman 2y agoVery nice! It might be able to run on the browser with pygame-wasm/pybag
- KennedyRichard 2y agoCreator/maintainer here! December last year a user managed to run an instance on browser, as can be seen here: https://sefgit.github.io/nodezator/build/web/ https://sefgit.github.io/nodezator/build/web/ (you must wait a few seconds for it to load, them again after the black screen, at least for me, but it works) Corresponding repo: https://github.com/sefgit/nodezator/tree/nodezator-pygbag-demo https://github.com/sefgit/nodezator/tree/nodezator-pygbag-de... There are no official plans to bring and support Nodezator on the web for now, given how much Nodezator still has to evolve and implement. However, initiatives like that are very interesting and may indeed inspire and motivate us to pursue the possibility in the future.
- tecoholic 2y agoLove the auto connection graphics choices :)
- tgv 2y agoYeah, that's a nice solution. I hope there's something as clever as that for long distance connections. One of the pain points of graphic programming is large panes with lots of nodes.
- jamilton 2y agoThe hand-holding and the ball toss are both super cute.
- KennedyRichard 2y agoThank you! Creator/maintainer here! My favorite is the ball toss one! I'm happy I also included the more serious one (the one which is just an assisting line), so people can switch to it when they need to focus more on the work, though. After I announced the feature, back when it was just on a dev branch, a lot of people either implemented the feature on their apps or requested the feature from the devs of their favorite projects. That's the nice thing about open-source projects, that is, that we can all share knowledge/solutions. I even wanted to submit an addon to Blender 3D, one of my favorite OSS projects, but unfortunately its more recent versions don't even launch on my 4Gb RAM machine (which is understandable considering how the scope of the project grew in the past years). Socket proximity detection, regardless of the graphics used, should be available in every node interface, cause moving the mouse precisely between sockets to connect them in a single motion can be annoying, specially considering the countless time we must repeat such action in a single node editing session. Increasing the size of the sockets to help this isn't a good solution either, because it would take precious space from the nodes, which is better left for widgets and other useful controls.
- samlinnfer 2y agoIs this in anyway related or inspired by ComfyUI
- stavros 2y agoNode editors aren't new, ad Comfy isn't a particularly innovative example, so this would be like asking if the Honda Civic was inspired by the Skoda Fabia because they're both cars.
- doctorhandshake 2y agoTo be fair, this looks extremely similar to the comfy node editor. Would be a little more like asking if the Ford Fusion and the Lincoln MKZ are related because they look a hell of a lot alike from the outside.
- throwaway314155 2y agoIt doesn't look very similar to me. No more similar than Unreal Engine blueprints. ComfyUI has a better design I think but again, it's borrowing from other projects in that respect (and i don't think they would deny that)
- KennedyRichard 2y agoCreator/maintainer here. While I'm always glad to take inspiration from other projects and did research a few of them before creating mine, ComfyUI wasn't among the ones I researched. In fact, I'm not sure it even existed at the time. I started making Nodezator at the beginning of 2019 and released it on June 2022, whereas the first tagged version of ComfyUI seems to be from May 2023, according to their repo. I took a lot of inspiration from Blender though, and in fact reproduced many of its features/behaviours.
- dufzh 2y agolike node-red?
- Towaway69 2y agoNode red is different since it defines message passing between computational units. It describes the flow of data between computational units.
- magic_hamster 2y agoThat's pretty cool. Not something I'd use for serious work, but a fun little toy nonetheless.
- Micoloth 2y agoI have a few questions - Is this inspired/based on the Blender node editor package? Some stylistic choices look very much taken from there, even if some other details (eg font) look much more primitive - If it’s not based on that, why? Blander has an Excellent Python-based cross-platform ui which is completely open source. I’ve always thought it’s a crying shame that’s not available as a package to build desktop apps. And I think it would be very good to take things from there, like their very mature graph editor
- WillAdams 2y agoThat last point is _very_ interesting.
- catapart 2y agoBlender was my first thought here, too. A while ago, I was asked to write a plugin for Blender since I really liked the program. I looked into it but realized that it was a python-only situation and I really just can't stand coding like that, so I passed on it. But if I could get the python ecosystem without having to code like that - that's a really interesting prospect! Never looked in to its package size, as far as UI goes, but that does sound like something that could be interesting! I do wonder how different it is from imgui, but there could be something there!
- echelon 2y agoIt looks like ComfyUI, which is blowing up in the creative space.
- deleted 2y ago[deleted]
- cyanydeez 2y agoAnimation nodes plugin for blender did wonders for understanding blender bedfore it was basically consumed by the core team by Jacques Locke
- KennedyRichard 2y ago
- rcarmo 2y agoThis is pretty amazing. I have so many ideas in what to do with it.
- dennisy 2y agoReally? I thought it was very cool too, but had no idea what to do with it. Would be interesting to hear what you feel this is well suited for?
- rcarmo 2y agoWell, LLM workflows, to begin with.
- teaearlgraycold 2y agoAlso basic ML tasks
- hhthrowaway1230 2y agoGreat work, I love node based uis! I'm still looking for an isolated minmal python package that soly does the backend part of these graph node frameworks like comfy, n8n, or node-red. I.e loading json & serialziing, executing nodes. Which also includes the various ways of processing nodes. Like topology sort, node executing queues. If you all know something lmk!
- halfcat 2y agoSay more. Are you wanting “Node-RED but for Python”? Or the non-UI parts that are accessible programmatically? I’ve had similar interests and realized I essentially needed two things: 1. Something like “FastAPI without the HTTP parts”. Basically a request/response cycle with middleware functionality, where we run a registered Python callable in response to a JSON request, but where that JSON request can be from any source, like “pulled from a queue” or read from the command line, instead of “pushed from a web browser”. For that I essentially pieced together a basic task registration decorator class with pydantic’s `validate_call` decorator and let pydantic handle the serialization/deserialization. There are libraries like FastAPI, typer, Celery and others that do this, but they’re all tightly coupled with specific transports. I want to be able to delegate to a developer “build a function that takes this JSON and performs this task and returns JSON”, but not with HTTP (FastAPI), and I don’t want to be required to add Redis to run some small task (Celery), and I do want the task to be callable by CLI (typer), but not only CLI. It seems like there are all of these tools but none of them are loosely coupled enough to do this in a straightforward way. 2. Some way to run a directed acyclic graph (DAG) of those registered tasks. There are lots of tools that do this in varying degrees of heaviness (Airflow, Luigi, Dagster, etc), but for a lightweight solution this is built into Python with graphlib’s TopologicalSorter. But the point here would be, whichever one of these you pick, it helps to have #1 available in a way that allows for generic “running approved Python functions from JSON”. So I sort of have those parts of it roughed out, but now I’d also like a better UI for it, for instance to allow for a more high level dashboard red/yellow/green status of things, or to enable a less technical user to adjust the schedule of a registered task, and so on. Django’s admin portal is a first step her but ultimately we’d need something more interactive to make it a team effort where more employees can contribute without needing to know Python.
- siva7 2y agoFor whom is this? Is this some kind of editor for low-code folks?
- throwthrowuknow 2y agoNode editors are also a good way to quickly compose fairly complex programs or modules even for experienced programmers. Working with them also forces you to design good interfaces for your code and eliminate tight coupling that often plagues many code bases. They do have downsides especially when using them to create complex workflows where they tend to evolve into ugly spaghetti monsters but you can prevent that by moving those workflows to code once you’ve settled on a design. This library seems like it would make that easy to do.
- almostgotcaught 2y ago> Node editors are also a good way to quickly compose fairly complex programs or modules even for experienced programmers. Experienced programmers use composition methods for their complex programs that are much more complex than connecting functions based on input and output. Well at least I hope they do.
- throwthrowuknow 2y agoMan, HN really is full of shitty redditors now. Enjoy your bucket.
- Towaway69 2y agoIf you understand unix pipes then node based programming can make sense, for example in the guise of node red. Think of nodes representing computation and lines the flow of data between distinct computational units and you have unix pipelines. This is what node red does. This editor is more complex since it’s connects output to individual inputs.
- pshirshov 2y agoManual graph editors are extremely counter-productive for any program with more than a couple of dozens of nodes. All the code structuring issues still apply but now you also have a graph to maintain. And also you have an underlying framework which you have to understand (like in Node-RED). And you have versioning issues. And it's hard or impossible to write tests. And it might be difficult to share code across projects. A better metaphor is a regular code editor which also shows your program as a graph in a sidebar and allows you to run quick simulations in a sandbox.
- andybak 2y agoMy feeling is that people need to stop building graphical node editors until we've solved some basic issues and agreed on some common standards. 1. Playing nice with version control. Opening a graph and moving a node by one pixel should cause not merge conflicts. Stop mixing logic and layout together. 2. Lossless round-tripping to a human-readable text format. Text editing tools are insanely powerful for many things. Not being able to use them is a huge drawback of node-based development 3. A common format that allows people to build tools that are agnostic to your specific environment. Node editors themselves should be like IDEs - not tied to a specific app. I don't use a different code editor when I switch from Godot to Unity - why is the node editor any different. 4. Just better everything. Batch/bulk changes, search/replace, auto-align. The quality of these essential features varies from "passable" to "what?" Everyone is reinventing the wheel all the time. Every platform, app, environment has it's own way of editing node graphs. And most of them suck. The amount of wasted effort for mediocre outcomes... Finally - are we sure node graphs are the best metaphor? Modifier stacks (like 3DS Max) give you 80% of what you want for many use-cases and they are a lot easier to learn and use. Event grids are great for many things - and again they are much simpler. Maybe node graphs should be the "expert mode" not the default (although the real "expert mode" is surely good old text coding - with all it's faults)
- VMG 2y agopoint 1 sentence 2: s/should cause/should not cause/
- SpeakinTelnet 2y agoSee also: Ryven (https://ryven.org/ https://ryven.org/) pyflow (https://wonderworks-software.github.io/PyFlow/ https://wonderworks-software.github.io/PyFlow/)
- agumonkey 2y agothe customizable node source code is neat
- KennedyRichard 2y agoDearPyGUI with its imnodes extension seems to be a good candidate as well. Also, not a node editor, but NetworkX also has ways to represent and operate on graph data.
- 999900000999 2y ago>We recommend Nodezator for intermediate Python users. Or, in case you are not a programmer, have an intermediate Python user next to you so that person can help you set up a no-code/low-code workflow for you. Seems like they're missing a key market. As an actual programmer using this node editor is going to be slower then just writing code. I want something like this , but for Rust or another difficult language. Python is so easy this doesn't feel needed.
- bondarchuk 2y agoTying together calls to existing functions is also not the difficult part of Rust, I'd guess.
- spookie 2y agoIf you do anything visual, nodes provide significant iteration advantages (albeit with some other disadvantages). Given the examples, I believe this is targeted to such uses.
- fmbb 2y agoWhat are the advantages this provides that specifically apply to working with visual end results? There is one kind of iterative work I can see nodes/graphical coding have a great advantage: when you don’t know what you really want to do. You want to compose and reorder a bunch of operations or compositions thereof speculatively and just see what happens. Moving code around and reorganizing it by trial and error is definitely something I can see visual programming excel at.
- WillAdams 2y agoNo syntax errors is the big one for me. Such tools are also great for exposing functionality --- what you see on-screen is what you can do.
- Someone 2y agoFTA: “For instance, this is all you need to turn numpy.save() into a node: from numpy import save main_callable = save third_party_import_text = 'from numpy import save' ” So, if you want to turn multiple Numpy methods into nodes, you’ll have to copy-paste-edit this? Looks unergonomic and slow (repeatedly parsing the Numpy file, once for each node to create) to me. I would think a single file from numpy import save,foo,bar,baz should be enough to more efficiently generate four versions of the above. What do I overlook?
- WillAdams 2y agoAt a guess, the implementation detail/difficulty of making multiple nodes from a single declaration.
- skeledrew 2y agoYou could use a script to automate creating the modules from import specs.
- KennedyRichard 2y agoCreator/maintainer of Nodezator here! You are completely right. This very week someone on Discord presented a relatively simple script he came up (with help from AI) that could do the job relatively well. As the creator/maintainer of the app, I always appreciate this kind of feedback. In this specific case, as I said to the person that presented the script, I did think about the possibility in the past, but didn't put time into it because at the time there were a few corner cases that came to mind. Also, as someone with insight into the many different parts that comprise Nodezator, it is not enough that a existing/pointed solution works, I must also think about ways in which these solutions integrate with the rest of the app, in order for everything to play well together. For instance, that is not the only improvement I'm planning for the node definitions. I have several ideas, both mine or shared by other users, for improving the node definitions. So I have to plan everything carefully before deciding on anything to avoid redoing things. Again, thank you for pointing that out though!
- mistercow 2y agoI can see some advantages of this kind of editor for specific contexts, like if you’re building a shader, this UI forces you to be purely functional without explicitly teaching purely functional concepts. But it seems like there’s also a general feeling that this is easier than learning how to code, and I guess my question is… is it? Is this really a better idea than a simple to use API with a DSL (or just a simple language like Go or Lua). Is it just less intimidating to beginners? You still have to learn the concepts and rules of the system, in addition to figuring out cable management. It seems to make documenting your “code” a lot harder. And now with AI assistants, you’re giving up even more by not working with text.
- MrLeap 2y agoI've got 2 decades of professional programming experience under my belt and I still think node graph editors are grand. I regularly use VFXGraph / Shadergraph / Custom nodegraph editors for various gamedev things (e.g. dialog trees, checkpoint graphs, all sorts of things) I'm very defensive of my "repl latency". By that I mean, how much effort/time does it take for me to see the results of my change in action? Every node editor that's found its way into my workflow brings that latency down to real time. They provide much more information so much faster about every change you're making as you're making it. It's like a causality scope. If the widget you're tuning/iterating on benefits from that, they're a joy.
- mistercow 2y agoIsn’t that, again, specifically a benefit of being purely functional?
- MrLeap 2y agoTo me, the way inputs and outputs are presented in nodegraph editors adds value on top of the benefits functional programming provides. You see the cascade of every change in real time. Change parameters and see every stage's new inputs and outputs as they're transformed. If I added Logger.Log calls to show as much info, my console would be a blur. I wouldn't be able to click on a parameter in my log and change its value and see what the consequences were. You can change values at a breakpoint, but that's a single moment in time. If your code's running at 60hz, breakpoints can feel like trying to solve a where's waldo through an electron microscope. I have not came across any workflow in my IDEs that is as flexible and informative for the situations where nodegraph editors shine. If something comes to mind for you, I'd love to know about it. There's no theoretical reason a text editor couldn't be made to show the same cross section of key information though. TempleOS is kind of like that lol.
- skeledrew 2y agoA good way to not only eliminate syntax errors (given the minimal typing), but also greatly reduce type errors (although from a glance I don't see mention of type-hint checks to ensure incompatible sockets aren't connectable). It bothers me that I see nothing about async support, nor reusing a graph as a node in another graph (after all, it's all function compositions). Maybe I'll try it, but I don't like to think of the hoops I may have to jump through to work around limitations.
- KennedyRichard 2y agoCreator/maintainer here. Thank you for the feedback, it is much, genuinely appreciated. Nodezator has a long way to go. I only picked Python seriously back in 2017. At the time, type safety was in its infancy and in my experience most Python learning resources didn't even mention type hints, much less static typing. Then I started making Nodezator in 2019, but only managed to launch it in 2022 due to a health-related hiatus. Even so, I already have plans to greatly improve type safety in the future, with a related announcement to be made in a week or so. Nodezator is a serious project, but since its development depends mostly on one person (me), its progress is relatively slow. Despite that, I manage to publish a couple big releases every year. Slowly but surely, though, Nodezator is evolving, mainly due to continued feedback from the community and userbase. So again, I thank you for the feedback.
- KennedyRichard 2y agoHello, everyone! Creator and maintainer of Nodezator here! Oh, so this post is the reason why the traffic for Nodezator's GitHub repo has been spiking today. I already replied to a few questions here, but I won't be able to do many more today. I'll try to answer all of them over the time though, so ask as much as you'd like. Thank you for taking a look at my tool and for all the feedback provided, it is much, genuinely appreciated.
- deknos 2y agoI would recommend you build a flatpak or guix package for this :)