Generic pipeline system working with filters and resources that are connected through ports
Pull request Compare This branch is even with nical:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
cpp
d
doc
utils
.gitignore
README.md

README.md

Kiwi

A generic and easy to use node compositor library for D2 and C++.

Checkout the wiki !
Doxygen qnd ddoc documentation will be available soon.

Main concepts

A kiwi node compositor contains nodes that are linked through their input and output ports. output ports hold Data objects which can be any kind of data structure. Data objects can be composite (for instance a RGBA image container can be described as 4 Read+Zrite color buffer containers and two read only integer containers exposing the width and heigh of the image9, in which case the corresponding output ports become composite as well, and their subPorts follow the same structure as the Data object. Node graphs can be used in 3 ways:

  • The simplest one is to connect nodes within a node group and let the NodeGroup object resolve dependencies, optimize, amd update each node in the correct order.
  • Let nodes manage themselves and trigger their update on input signals
  • Just use the structure of the graph to generate code or any kind of content (like shaders)

The backend is not dependent to any frontend, though optional Qt based widgets will be developed.

The project's advancement (D)

Kiwi is still at an early stage, and interfaces are subject to change. Right now the library is mostly developed in D, and the C++ port will follow. There are old versions of the C++ implementation available in this repository's history, but they dont reflect the architecture of the current version of the library.

Implemented

  • The core interfaces and the port connection system.
  • The "dynamic" backend implementing the core interfaces for nodes and ports.
  • Runtime data type descriptor and manager.

    Currently in development

  • Node groups (dynamic backend)
  • Generic graph algorithms to help with node management, ordonnancing, etc.

TODO

  • C++ port of the core API and dynamic backend.
  • Add serialization (certainly using the orange library for D).
  • Script integration (starting with Lua) to expose the library to the script and also make serializable nodes running lua code.
  • Network layer to allow remote manipulation of nodes (in a separate and optional library).
  • Qt widgets as an optional frontend.
  • Fun nodes to show kiwi's featues.
  • Experiment with shader generators and visual scripting using kiwi.

    License

Kiwi's source code is under the new BSD License or the Lesser Gnu Public License.

Project member(s)

For now the Kiwi project is designed/developed/maintained by Nicolas Silva.

I would be very happy to share this experience with anyone willing to contribute! To contact me:

email: nical.silva@gmail.com
twitter: @nicalsilva
my resume (fr)