Generic pipeline system working with filters and resources that are connected through ports
C++ Other
Pull request Compare This branch is 223 commits behind nical:experimental.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


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

Checkout the wiki !
And also the doxygen class documentation.

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 0.3.2

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 informations about which license applies.

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 who is motivated to create and/or test filters and resources based on kiwi!

To contact me:

twitter: @nicalsilva
my resume (fr)

Recently Thibaut Vuillemin (@semprobe) joined the project as a developer !