The idea of Ryven is a dynamic runtime flow-based visual programming environment for Python. The runtime part means that you don't export any code, everything gets executed within the editor as you go, at runtime. The focus is on enabling an easy process of creating new nodes, while keeping any restrictions as far away as possible. Keep in mind that the intention is not to 'replace' textual coding - there is a lot you can do in textual programming which doesn't make sense being represented that way at all. But there is also the opposite. A budget demo video (of a meanwhile quite outdated version):
- Python 3
To start the editor simply run Ryven.py. Some example packages are located in the packages folder and you can find example projects in the saves folder that use these packages.
In Ryven, there are different scripts. Every script has variables, a flow (or graph) and logs. You can right click on many components to perform actions like remove on them.
You need to import node packages in order to use their nodes (File -> Import Nodes, and choose a package file *.rpc).
This one is important. As you may know, most popular visual programming editors follow either the approach of pure data flows (no execution connections) or execution flows. In Ryven, I wanted to enable both paradigms. However, these two types are, from an algorithmic point of view, very different things. You always have to choose which mode you want to use in your current flow. Don't see this as a restriction but rather as a feature enabling to make both types of flows. What type you want to use depends on the use case. Data flows are nice for any kind of linear data processing or calculations, execution flows get used for algorithmic structures that use control structures (like loops). Some technical background:
In a data flow, every change of data (which means that a data output of a node has been changed) gets forward propagated and causes an update event in all connected nodes. In the example below, changing the slider value would therefore cause immediate updates and a visible change in the result node on the right.
In execution flows, data is never forward propagated on change, but generated on requested (backwards), only causing update events in affected nodes once the data of an output is requested somewhere (through self.input(), see API). In the example above, changing the slider value would not lead to a change in the result node, but if an active node requested this data, like shown below, then the whole expression gets executed.
Ryven supports use of stylus pens with convertible notebooks/tablets. You can edit flows or to add handwritten notes. In the top right corner, you can spcify your actions. Be aware, that there may be bugs, and this feature is not very intuitive yet. Also the support of touch gestures is something that I'll have to work on in the future.
middlee mouse button
Right click. You can then also press Shift+'P' to place a new node next to the selected one and move it around with Shift+Arrow.
Selecting, Dragging, Connecting
You can create new variables just like scripts. By right clicking on a variable, you can set the value in the dialog that pops up. Whatever you type into that field will be evaluated by Python using the eval() method, so the datatype will automatically be parsed just like when assigning variables in Python source code. To use a variable, you must use the get var node, which returns its value (without copying it!). You can press Ctrl+s in the value edit dialog.
Ctrl+S. You should do this often. When loading a project: If you have used packages from special places (not the standard packages folder), you should choose them manually. If not, you can use auto import, it will search through all packages in the standard packages directory.
You can save pictures of your flow (View -> Save Pic ...).
Makes a picture of exactly what you see in the editor.
Whole Scene Picture
You also can get a full image of the scene, so you can cut out the parts that you need for use in your presentation for example. The zoom factor determines the resolution. There is a little issue regarding the viewport position which you can avoid by just scrolling into the top left corner before creating the image.