News from the third Buttle OFX team !

New year and new team for the Buttle OFX project…

Since September we are 5 students who have the chance to join Fabien and Clément.
We’ve got few meetings and we learnt a lot since the beginning. After some hours of theory about Buttle OFX, QML and a little bit of Python, our first mission was to create a timeline and a color wheel in QML. It was also the occasion to get more familiar with Git and version control.

At this time a first version of both components have been created and a part of the team is working to improve the color wheel and integrate it on the software when the other part is working on new features for the Graph. You’ll have more information about our work int the next few days.

The Buttle team #3

ButtleOFX Alpha is on download !

Downloads for ButtleOFX Alpha for Linux 64 bits are now available here !

We are really proud to share it to you, but keep in mind that it’s an Alpha version. There is still bugs (we know it), and there is still a lot of work to do to create a production version.

But, ButtleOFX Alpha can show you what ButtleOFX will be able to be in the future.

We hope you will really enjoy our software.

And we have an other surprise for you : a new video presenting ButtleOFX Alpha !

Good evening,


Fresh news


It’s been a while since our last article but that doesn’t mean we’re not still working hard on the project ! So, to sum up, we presented the first version of our application the 1st of Frebruary and although it was rather a success, there are still some details we need to work on.

During the past month, we have been improving the following features :

Graphical User Interface
We are now able to see the name of the nodes’ clips. It helps the user when he wants to connect the nodes.
We can drag a node’s clip and drop it on another node’s clip to connect the concerned nodes. It makes it easier for the user : clicking on the clips was more difficult given their small size.
To select the node that will be displayed in the viewer, we now have to drop a mosquito on it (instead of double clicking). The double click will now assign a node to the param editor, and the single click will select a node in the graph editor (that the user will be able to cut/copy/paste etc). No more right click !
We have been improving the color picker so the position of the cursor changes when the parameters are modified.
In the param editor, the values are set to default on right click, and they appear in bold when the user changes them.
We have also set an icon for the application, which is better than the default question mark.

The undo/redo is now functional for almost every type of parameter (except for the RGB/RGBA parameters).

We have made changes in the data structure. We now have a ButtleData and a ButtleManager. ButtleData used to do all the job. Now, ButtleManager catches events from the QML and delegates the actions to the appropriate manager : nodeManager, connectionManager, etc.
ButtleData holds the current selected nodes’ information. We are also working on the multi selection so we replaced members such as “currentSelectedNodeName” with lists containing several names.


We still have a lot of issues and bugs to fix. The most important are :

Allow the user to save a graph
Improve the multi selection
Manage the keyframes
Display a light in the connections when an image is being computed
Manage several views in the viewer

The data structure

We decided to divide our structure in three directories : buttleofx/core, buttleofx/data and buttleofx/gui.


For the moment, we can find the undo/redo commands in this directory. For every undoable action in the application, we will have a class with the undo and redo commands. For example, when a node is dragged, it is possible to undo the action. For this we will have a CommandSetCoord class with fucntions such as UndoCommand and RedoCommand.


It will contain all the data needed to manage the application. We created a singleton ButtleData defined by a Graph and the corresponding GraphWrapper.


Concerning the graphical user interface, we have been working hard on the data structure but finally got to something relevant. We will have three main layers :

The core objects
This layer will store the hard data, for example the Nodes’ name, type, position, …
It will contain python objects such as a Node class and a Graph class.

The wrappers
They are necessary to bind the qml data with the python data. For example, to expose the Nodes’ data in the form of QProperties.
It will contain objects such as a NodeWrapper class and a GraphWrapper class.

The qml objects
These are the one that the user will be able to see in the application. They are created from a model defined by the wrappers.

We want to separate the data concerning our three elements, so we will have three directories :


Each one will include the corresponding core objects, wrappers and qml objects. This way, we can work on and execute the three elements separatly.

Where we are up to with the project

When clicking on the “+” tool of the graph, a menu drops down showing the different types of nodes. After selecting one of them, a node appears in the graph. It is then possible to delete it with the “-” tool, or with the delete keybord key.

The nodes are defined by an image which can be displayed in the viewer by simply clicking on the existing nodes.

A list of parameters appears on the right. For the moment, we can modify the values visible in the inputs. But there is no interaction with the other modules yet.

So this is where we are up to with the project, and we still have a lot to do !