At the core we deal with tasks and resources, not a user-interface. We are transport-agnostic. Black boxes are instantiated from factories implemented as .so files. These are dynamically discovered at runtime. A few black boxes have been written for testing purposes.
All interfaces are continually in flux and are slowly being pared down to their essentials.
Pupus is colourspace, pixel-format and storage agnostic. This is where GEGL comes in, I think. There are some lovely pipeline optimization opportunities that are becoming apparent and can later be implemented at leisure without affecting correctness. One box takes no inputs and emits an image read from a specific PPM file. A third box writes a solid random colour wherever it is asked to draw something, and invalidates the entirety of its own output at every opportunity.