This release brings the exciting addition of support for the open source Appleseed renderer. It also adds the much asked for Dot node, and a tool for editing render crop windows. Plus of course the usual small improvements, optimisations and bug fixes.


  • Added resolution gate and crop windows overlays to 3d viewer (#1016).
  • Added tool for manipulating crop window.
  • Added “User Default” item to plug popup menus.
  • Added sneaky hotkey for navigating inside any node in NodeGraph.
  • Fixed Reference node UI to match equivalent Box node UI (#1108).
  • Improved positioning of nodes created by the NodeMenu.
  • Improved table widget (#204).
    • Remove button disabled when selection empty
    • Newly added rows are selected automatically
    • Newly added row has keyboard focus for immediate editing
  • Added customisable presets to plug widgets (#1113).
  • Fixed bugs where image viewer was using incorrect context (#1124).
  • Fixed bug where channel mask UI was using incorrect context.
  • Added a refresh button to ImageReaders.
  • Added support for specifying node, nodule, and connection colours via Metadata (#89).
  • Added support for setting node colour in the UIEditor or from the RMB popup in the graph.
  • Fixed bug in ColorChooserDialogue.waitForColor().
  • Added basic colour scheme for nodes in the GUI app (#1098, #154).


  • Optimised Switch node for constant indices. A benchmark with the bunny scene followed by 50 switches shows a 6x speedup overall.
  • Added Dot node (#12).
  • Fixed bindings for Metadata types other than simple typed data (#1136).


  • Added min/max limits to StandardOptions crop window plug.
  • Fixed bugs which prevented ObjectSource nodes from working after create/undo/redo.
  • Fixed UnionFilter to accept inputs from Boxes.


  • ImageWriter now creates the necessary directories before writing images.


  • Added shader Metadata option “shaderTypeOverride” (#pragma annotation “shaderTypeOverride” “ri:shader” will force the Gaffer shader type to “ri:shader”).


  • Added support for the Appleseed renderer, courtesy of Esteban Tovagliari.


  • Optimised ScenePlug::stringToPath(). This gives an 88% reduction in runtime for a synthetic test of just that function, and a 7% reduction in total runtime for a scene benchmark using the Instancer.
  • Added hasUserDefault( plug ) and applyUserDefault( plug ) to NodeAlgo.
  • Added Context.contains binding.
  • Simplified numeric plug bindings.
  • Added min/max values to BoxPlug.
  • Added handy CompoundDataPlug::MemberPlug child accessors.
  • Added GafferBindings::NodeClass() overload for suppressing init.
  • Moved shutter() and transform() from RendererAlgo.h to SceneAlgo.h.
  • Added camera() methods to SceneAlgo.h.
  • Removed GLWidget minimum size.
  • Fixed bug where ViewportGadget::setCamera() could forget viewport size.
  • Fixed ViewportGadget::RasterScope to work during selection.
  • Added ViewportGadget::preRenderSignal().
  • Made View::update() non-pure virtual.
  • Added View::contextChangedSignal().
  • Added Tool base class.
  • Fixed bugs in ExceptionAlgo formatPythonException().
  • Fixed StandardStyle border widths to be independent of border radius.
  • Added Menu.popupPosition() method.
  • Improved support for functools.partial() callables in Menu commands.
  • Added metadata to control StandardNodeGadget minimum width, padding, and nodule spacing.
  • Improved StandardNodeGadget drag/drop handling. Previously it would accept drags it wasn’t going to use, preventing other handlers from working.
  • Added Nodule::updateDragEndPoint() virtual method.
  • Fixed ScriptNode::deleteNodes() for nodes without enabled plugs.
  • Added customisable edge gadgets to StandardNodeGadget.
  • Added support for changing nodule position on StandardNodeGadget.
  • Guaranteed order of Metadata::registered*Values().
  • Added plug presets methods to Gaffer.NodeAlgo.
  • Added GafferUI.PresetsPlugValueWidget.
  • Added PlugValueWidget.childPlugValueWidget(), so derived classes don’t need to implement it if they don’t have such children (#1123).
  • Added Style::renderNodeFrame() to distinguish between frames drawn for nodes and those drawn as normal frames.
  • Updated Style bindings.
  • Added useDisplayTransform argument to ColorSwatch constructor.
  • Added useDisplayTransform argument to ColorChooser and ColorChooserDialogue.
  • Added DataBinding.h header with dataToPython().


  • Added scripts for automating releases.
  • Updated IE public build script to use MILESTONE_VERSION, and renamed it to publicDependenciesBuild, since it is no longer used for producing the public release builds.
  • Requires Cortex 9.0.0-b1 for Appleseed support.


  • Moved shutter() and transform() from RendererAlgo.h to SceneAlgo.h.
  • Made View::update() non-pure virtual.
  • Added virtual method to Nodule.
  • Added and reordered Style virtual methods.