General architecture#

The application supports as many independent graphs as needed, each one representing a computation algorithm. Graphs are identified by qualifiers that work like domain names, from the most general to the most specialized level (for example cv4mic.image_manip.image_calculator). They can be serialized so they can be saved, reused, or shared.

Each graph is made up of nodes, which represent unitary computation tasks (ImageCalculator, CCL, …). Each node contains input and output sockets: the inputs represent what the node needs to run, the outputs represent the results it produces.

Identification#

A node type is identified by a qualifier. A node instance, on the other hand, is identified by the top-level segment of that qualifier, concatenated with a random index – for example image_calculator#94352.

Sockets are typed, and a socket may accept several types at once. They are connected to each other through links, which define the direction of data flow. An output socket can take part in as many links as needed; an input socket, however, can only take part in a single link at a time – requesting a new one automatically removes the existing one.

Execution#

During execution, the graph is converted into a sequence of operations, whose order depends on each node’s depth within the graph. Cycles are therefore forbidden, and so are intra-node links.

Two nodes at the same depth may potentially be executed in parallel if resources allow it, but all nodes at a given level must have finished before moving on to the next one.

For the full reference of classes and functions, see API Reference.