PyFlow - visual scripting framework for python!

About this project

PyFlow is a general purpose runtime extendable python qt visual scripting framework. Was inspired by such softwares like Unreal Blueprints, Softimege XSI ICE, Fabric Engine.

Features

  • Json serializable
  • Easy node creation from annotated functions
  • Categories tree
  • Photoshop-like history
  • Properties view
  • Runtime nodes creation
  • Variables

Changelog

PyFlow releases use a semantic versioning policy.

v2.0.1 (September 21, 2019)
-----------------------------------------------------

* LOD settings added to preferences
* Themes improvements
* New wire styles
* Api refactoring
* App can run without packages
* Sliders improvements and refactoring
* Smart create input widgets for int and floats in function library, if range is specified

Bug fixes

v2.0.0 (June 11, 2019)
-----------------------------------------------------

* Subgraphs added
* Node anatomy changed
* Added data exporters/importers hooks
* Everything is modular
* Editor tool class added
* Customizable themes
* Enhanced wire connection
* Wires are selectable
* All nodes can be collapsed
* Node's menu actions can be showed to the right of node name as buttons

Editor anatomy

In the middle of the app there is a Canvas. This is where the fun happens.

_images/canvas.png

Everything in editor except of canvas is a tool. There are two types of tools

Shelf tool

Shelf tools are located on the toolbar of editor main window.

_images/shelf_tools.png

Dock tool

Dock tools are floating widgets.

_images/dock_tools.png

All registered dock tools can be found below corresponding section on menu bar.

_images/dock_tools_menu.png

Subgraphs navigation

On the top of canvas there is a current location widget. To step into subgraph - double click on compound node. To step up - click on any parent button.

_images/subgraph_navigation.gif

Exporter

Under file->Custom IO you can find all registered exporters and importers

_images/exporter.png

Adding node to canvas

To add node to a canvas, you need either to spawn NodeBox tool or right click on canvas. Node box will appear. Enter node type to search field and drag it to the canvas.

_images/add_node.gif

Connecting pins

To connect pins, left mouse click source pin and drag to destination. Dashed wire will appear. Valid connections color coded as green, invalid as red. Wire is snapped to destination pin if connectoin is possible.

_images/connect_pins.gif

Wires can be reconnected. To reconnect a single wire, click on it near the pin and drag on top of new destination. To reconnect multiple wires, Ctrl+LMB on pin, then drag on top of new destination.

_images/pins_reconnection.gif

Preferences window

Some important settings can be tweaked in editor preferences

_images/prefswindow.png

General

  • TempFilesDir. Folder on your file system where temporary files will be placed this folder will be removed on editor shutdown
  • Additional package locations. This is comma separated string with directories where to search packages. For example if you are running the editor inside studio, you can load packages from network location
  • External text editor. Text editor used for text editing. For now we use it only with python node
  • History depth. Defines how many undo steps will be available.

Input

_images/prefs_input.png

Left mouse click to start capturing input. To finish capturing and assign key/button, press Enter.

Data layout

Top level object is GraphManager. Graph manager contains graphs. Graphs contains nodes. Nodes contains pins.

_images/dataLayout.png

See also

compound

Node anatomy

Generic node anatomy.

_images/nodeAnatomy.png

Extending

Simplest way to extend the editor is to use plugin wizard. Invoke menu Plugins -> Create package... and follow this guy instructions

_images/wizard.png

Indices and tables

Extra

Extra info