Nodebox compatibility

Shoebot was originally developed as a rewrite of Nodebox, attempting to follow its behaviour as close as possible. However, the developers eventually wanted some functionality that was not in Nodebox, and there are many aspects of Nodebox that, for one reason or other, were not ported over.

Now that the original Nodebox isn’t being developed further, we have decided to go on and keep implementing original features whenever appropriate.

In this page, you’ll find the features and behavior that differs between Nodebox and Shoebot.

If you find any difference that isn’t documented here, please file an issue.

Unsupported Nodebox features

These are the Nodebox bits that aren’t available in Shoebot.

CMYK color

Nodebox was implemented using Mac OS X’s Cocoa toolkit, which supports CMYK color. Shoebot runs on the Cairo graphics backend, which does not. Nodebox commands that deal with CMYK color are therefore unsupported:

  • outputmode() is not available.

  • colormode() is implemented, but CMYK is not an accepted argument – only RGB or HSB.

Path operations

Operations between bézier paths are not supported yet. These are:

  • path.union()

  • path.intersect()

  • path.difference()

Fitting a path using path.fit() isn’t supported either.

Animation

While animations work well in a window, Shoebot does not support exporting them to GIF or video formats.

Unported libraries

Additional Shoebot features

These are features that were created in Shoebot and are not available in Nodebox, or where Shoebot behavior is distinct.

New functions

  • Drawing

    • rectmode() and ellipsemode() are inspired by Processing and cater to the preferences of users who expect alternative ways to draw primitives. These are also useful for specific situations where coordinate calculation would be needed.

    • Relative path commands are available: relmoveto() and rellineto().

    • arc() is provided by Cairo, so we support it as well.

  • Others

    • snapshot() is a simple way to output to an image in the middle of the script execution.

    • run() can execute another script in the current context. This is mostly useful when using Shoebot as a Python module inside another application.

Bundled libraries

Nodebox provides a set of external libraries that can be downloaded and added to a project. Shoebot comes with ported versions of those libraries already included and available.

New libraries

Additional external libraries were developed for Shoebot: