• LightEditor : Added a new editor UI for inspecting and editing lights. This can be found in the tab next to the GraphEditor in the standard layouts.

  • Cryptomatte : Added a new node to output a matte generated from IDs selected from Cryptomatte AOVs.

  • USD : Added support for reading and writing shader assignments via UsdShade.


  • NodeEditor : Added embedded colour choosers for all colour plugs. These can be shown and hidden by clicking on the slider icon.

  • Spreadsheet/SceneViewInspector : Added embedded colour choosers to popup editor windows.

  • CopyPrimitiveVariables : Added prefix plug, which applies a prefix to the names of the copied primitive variables.

  • Rendering : Added gaffer:version metadata to the headers of all rendered images.

  • PathListingWidget : Added subtle lines between columns.

  • SceneViewInspector :

    • Updated to align colour scheme and interaction patterns with the LightEditor.

    • Reduced overhead when the Viewer is not visible in the UI.

  • Spreadsheet : Improved interaction with read-only spreadsheets. Previously it was impossible to switch between sections or scroll the cells (#4529).

  • Focus Node : Added Alt+1-Alt+9 hotkeys for setting focus to a bookmark (also available in the “Edit/Assign Focus” menu).


  • PathListingWidget :

    • Fixed the Ctrl+A shortcut for selecting all visible paths. This was broken since Gaffer

    • Fixed the deprecated getSelectedPaths() and getExpandedPaths() methods in the case that the PathListingWidget’s root isn’t / (#4510).

  • NodeEditor : Fixed subtle label alignment differences between plugs with default and non-default values.

  • Instancer : Fixed RootsPerVertex mode in the case that the input object has no vertices. Previously an empty prototypeRoots variable would cause an unnecessary error in this case, which was incompatible with the output from DeletePoints.

  • Viewer/HierarchyView : Fixed “Edit Source” operation when the source node is inside a Reference. Previously the Reference node was shown, but now the node itself will be (albeit in read-only form).

  • ValuePlugSerialiser : Fixed crash if valueRepr() was called with a CompoundObject value and a null serialisation.

  • Button : Fixed bug triggered by calling setImage() from within a with widgetContainer block.

  • ArnoldRender : Stopped instancing of polygon meshes when both ai:subdivide_polygons and adaptive subdivision are on.

  • GLWidget : Fixed bug which made overlays unresponsive on high resolution displays.

  • CropWindowTool : Fixed bug (introduced in which prevented the free drawing of a new crop region outside the current one (#4530).

  • SceneViewInspector : Fixed excessive memory usage when viewing complex scenes.


  • PlugPopup : Added new class for editing plugs in a popup window.

  • ColorChooserPlugValueWidget : Added a new class to allow colours to be edited directly using a ColorChooser.

  • ColorChooser : Added setSwatchesVisible() and getSwatchesVisible() methods.

  • PathColumn : Added new class for adding custom columns to PathListingWidget.

  • CatalogueUI :

    • Column subclasses may now define background colours and tooltips.

    • Deprecated IconColumn class.

  • ShaderView : Added deregisterRenderer() method.


  • Cortex : Updated to version