Ryven lets you use the more diagram-like, dataflow inspired structure to represent data processing-centric functionality. Each node runs code, and Ryven provides a simple framework to create those and an editor to use them. Use cases range almost through the whole Python domain, from IoT, over machine learning, generative engineering, Raspberry Pi, web APIs, and much more. You should know the Python programming language and its basic concepts.
A tool to learn conventional programming or to generally program in Python. It does not automatically generate graphs out of existing code. It does not try to replace source code. Both representations have their domains and, even though it enables significant abstraction, Ryven tries to make them work together. Also, Ryven is not a professional piece of software and it's still receiving active development and sometimes major changes.
Design, of course, plays a huge role when talking about visual scripting. Therefore, Ryven offers a variety of different flow designs.
Using the built-in REPL you have access to the whole API. Any modifications - like creating/renaming/deleting scripts - will reactively be processed by the frontend automatically, so you can really do anything from the console.
>>> reset()
< adding node to console context >
added as obj
>>> obj
< nodes.SetVar_Node(0x22eddacc380) at 0x0000022ED958F4C0 >
>>> node = obj
>>> node.create_output(label='additional data')
>>> node.set_output_val(1, 'test')
>>> session.scripts
[< ryvencore.Script.Script object at 0x0000022ED9567910 >,
< ryvencore.MacroScript.MacroScript object at 0x0000022EDEFC0BB0 >]
>>> flow = session.scripts[0].flow
>>> flow.create_node(node.__class__)
>>> flow.remove_node(flow.nodes[-1])
Ryven Console lets you deploy projects made in Ryven directly on the backend (ryvencore), without any frontend dependencies, with much higher performance.
34 < std__Checkpoint0.Checkpoint_Node object at 0x0000021ADFA5BE20 >
35 < std__Log0.Log_Node object at 0x0000021ADFA5BCD0 >
ref by index: 18
--> obj: < std__Button0.Button_Node object at 0x0000021ADFA56C70 >
direct access:
session - the ryvencore session instance
nodes - get a list of all node objects
flows - get a list of all flows
exit - close the session
obj.update()
[480, 729, 646, 924, 773, 542, 6, 14, 131, 668]
[6, 14, 131, 480, 542, 646, 668, 729, 773, 924]
As Ryven tries to enhance the textual representation, you usually have access to the source code implementation of the nodes you use inside the editor. In some cases you can even temporarily override method implementations.
class Eval_Node(NodeBase):
"""Evaluates the input expression from the widget"""
title = 'eval'
version = 'v0.3'
init_inputs = []
init_outputs = [
NodeOutputBP(),
]
main_widget_class = widgets.EvalNode_MainWidget
main_widget_pos = 'between ports'
def __init__(self, params):
super().__init__(params)
self.special_actions['add input'] = {
'method': self.add_param_input
}
...
You can add handwritten notes using a stylus pen on touch devices. Effective use of this feature significantly supports clarity and adds a whole new dimension to your visual flows.
Ryven is not a professional piece of software, and that's also not the aim. It's a hobby project mainly developed by one student. However, it repeatedly turned out to be useful for a wide range of different applications. And to make it accessible for anyone, it is free and open source. I've put quite some effort in making it great but it's not perfect and future, long-term development can only be driven by contributions.