A generic and easy to use node compositor library for C++.
Containers and filters
Kiwi features a powerful pipeline system composed of resources and filters :
- A container (kiwi::core::Container) is an object that holds data and give access to the it by providing readers and writers ports (mostly output ports).
- A Filter (kiwi::core::Filter) is a resource that can be executed using its process() method. Filters inherit from resources their connecting system.
- A Pipeline (kiwi::core::Pipeline) is a filter that contains other filters (including eventually pipelines) and is responsible for processing each of its filters in the correct order. This is the composite design pattern applied to the kiwi system.
Kiwi is designed to make the creation of Resources and Filters very easy. Just create a class deriving from kiwi::core::Resource or kiwi::core::Filter and overload a few methods.
The project's advancement
Kiwi is still at an early stage, and interfaces are subject to change.
- The Node base class with all the connection system
- Filter and Container base classes
- Some generic Containers (ArrayContainer, MultiArrayContainer, cairo::ImageContainer, Value ...)
Currently in development
- Pipeline classes
- Imaging filters using cairo
What kiwi actually needs:
- Pipeline classes.
- A set of resources and filters to demonstrate kiwi's potential !
- A frontend to connect graphically kiwi boxes and see the result in live.
- Better automated unit tests with reports (right now it's a huge load of use cases with tons of assert(..) everywhere...)
Most of Kiwi's source code is under the new BSD License. However some of the plugin sets are under other licenses, like the image::cairo plugin set that is under the LGPL. See the readme.txt file in each sub-project directory for information about which license applies.
For now the Kiwi project is designed/developed/maintained by Nicolas Silva.
I would be very happy to share this experience with anyone who is motivated to create and/or test filters and resources based on kiwi!
To contact me:
Recently Thibaut Vuillemin (@semprobe) joined the project as a developer !