Fabric Engine 2.5.0 Release Notes

Fabric Engine version 2.5.0
Released April 2017
Copyright (c) 2010-2017 Fabric Software Inc. All rights reserved.

About This Release

Fabric Engine 2.5 introduces:

  • A redesigned Tab Search
  • Kludge, a tool that makes it easier to wrap C++ libraries
  • Improved preset handling workflows
  • UI/UX improvements
  • New extensions: SQLite3, ZeroMQ, Fabric Template Library (FTL), BinPacking

Redesigned Tab Search

The new Tab Search leverages the new tag architecture of Presets to improve preset discoverability. Now it is easier than ever to get the right preset at the right time.

The new Tab Search is enabled in the same way as the legacy one (which can still be used by enabling to View/Graph View/Use Legacy Tab Search) by pressing the TAB key. Results that match your search query will be shown below the search box. Tags that match the query will be listed as well and will show presets that match that tag underneath it. The results listed have a heat bar to indicate how close the match to the query is. Additionally, the most relevant tags are shown next to the preset name.

You can find a video showcasing all the Tab Search functionality accessible at https://vimeo.com/213989087

For more information on how the new tag architecture works please refer to the documentation


Kludge is a tool that makes it easier to wrap C++ libraries into KL extensions.

Kludge consists of three parts:

  • An API description language that describes a C++ API in a way that Kludge can use to generate an extension that wraps the API.
  • A generate tool that takes an API description written in this language and generates a KL extension, written in both C++ and KL, that wraps the API.
  • A discover tool that takes C++ header files and tries to generate an API description in the description language.

For more information on Kludge, please refer to the Kludge User Guide

Improved preset handling workflows

We changed our preset resolution algorithm to make use of the GUID keys that were already part of the presets. This means you can now change the name of a preset or move the preset folder structure without losing the connection.

On top of this, we allow to modify presets and update them easily within Canvas with the new Update Original Preset action (it only works for non Fabric presets to avoid updating built-in presets by accident).

We have added a new environment variable FABRIC_DFG_USE_OLD_PRESET_RESOLUTION that, if set, will use the older path-only preset resolution algorithm. It can be used to load a scene that loaded fine previous to 2.5.0 but has preset resolution issues starting in version 2.5.0 because of the new GUID-based preset resolution. If the scene is re-saved after being loaded with this setting, the next time it is loaded it will work properly with the new preset resolution algorithm. We are also providing a new tool called canvasGUIDFixup to aid in these GUID issues.

UI/UX improvements

We continue pushing Fabric Engine to make the daily use a better experience. In this release, we have added some features in the Graph View such as

  • Improved Visual feedback added to the Zoom Functionality
  • Graph View Snapping and Grid
  • Ability to insert a Report in a connection
  • Duplicate Nodes when dragging a selection of nodes with shift + control key
  • Ability to Import Graphs, within the File menu
  • New built-in Timeline Ports in the side panel context menu
  • Remember last open folder on FileBrowser preset
  • Added a Help Menu

New Extensions

We have leveraged the power of Kludge to integrate new extensions

SQLite3 + SQLite3Wrapper: Enables support for an in memory database within KL. Additionally, the SQLite3Wrapper introduces a light-weight ORM (Object relational model)

ZeroMQ: A simple to use high performance socket library

Fabric Template Library (FTL): Wrapping parts of our core services. To introduce this extension, we’ve exposed a high performance JSON Decoder and Encoder based on the one the Fabric Core uses.

BinPacking: The Bin Packing extension provides a service for solving a 2D bin packing problem with KL. The bin packing problem is described well at https://en.wikipedia.org/wiki/Bin_packing_problem


Finally, we have fixed many outstanding bugs, particularly in Fabric for Maya and Alembic.

Supported Operating Systems, Integrations and GPUs

  • Fabric 2.5.0 is supported on Windows and Linux. OS X builds are provided but are not officially supported; official support on OS X will arrive in a subsequent release.
  • Fabric for Maya integration is supported for Autodesk Maya 2015, 2016 and 2017 and their corresponding service packs and extensions on Windows and Linux.
  • Fabric for Softimage integration is supported for Autodesk Softimage 2014 and 2015 and their corresponding service packs on Windows. This is the last version where Softimage will be supported
  • Fabric for MODO integration is compatible with MODO 901 through to MODO 10.1 and is available on Windows, Linux and OS X.
  • GPU support is available on NVIDIA hardware. See the GPU Compute Guide in the documentation for more details.


To learn more about Fabric Canvas, please see:

Also be sure to check out http://fabricengine.com/blog/ for articles and introductory how-to videos.


All downloads for Fabric Engine 2.5.0 can be obtained at http://dist.fabric-engine.com/FabricEngine/2.5.0/. For information on installation please refer to Getting started with Fabric Engine.


Fabric Engine 2.5.0 is available for free use under Evaluation, Studio or Educational licenses and is also available under commercial terms. Commercial customers are entitled to contact Fabric directly for Support. Non-commercial customers are encouraged to use the following options:

  • http://forums.fabricengine.com : Ask & answer questions within the Fabric community. This is where you should post your support issues.
  • mailto://bugs@fabricengine.com : If you have found a bug you can email us with clear steps to reproduce the issue (be sure to include details on what operating system and DCC application and their respective versions that you are using). Please note that we will respond only if additional information is required to resolve an issue with the Fabric platform.

Known Issues

Fabric for Maya: Using Gradients in the viewport with Fabric Viewport 2.0 is not supported.


  • We have removed canvas standalone. You now need to run canvas through canvas.py
  • Shortcuts to navigate the timeline: CTRL + Left / Right moves backwards and forwards. CTRL + Up plays and CTRL + Down Stops
  • Removed the variable entry from the Preset Explorer. You can still list variables with the Get Variable dialog (from the Graph View context menu).
  • Added LogExistingAttributes preset
  • Renamed Quat.alignWith to matchHemisphere
  • A GeometryAttribute can now be shared by multiple geometries by calling GeometryAttributes.attachSharedAttribute(). One Geometry has to be the “main owner” and is allowed to resize it, other geometries’ sizes have to match else an error is thrown.
  • All ports in the Graph View are now displayed as half circles, regardless of their I/O type
  • Added a mute port to the report nodes to mute their functionality without having to remove them.
  • The behavior of backdrops has been improved. They can now only be moved from the header and only be selected via the header or if the selection rectangle intersects with a backdrop’s border.
  • Fabric for 3ds Max integration includes local Fabric Python module. Doesn’t load Fabric PySide.
  • New Maya command ‘FabricCanvasReloadExtension’ to load / reload an extension has been added
  • When creating new nodes (e.g. graph nodes, backdrops) a dialog is no longer displayed. Using CTRL while creating a new node will display a dialog.

List of Issues Addressed


[FE-7347] Avoid logging errors more than 3 times during load


[FE-8005] - playback framerate not saved with graph

[FE-8174] - Canvas Crash on file load

[FE-5217] - Replace the folder structure with tags for presets

[FE-5282] - Use preset GUIDs for resolution of presets

[FE-8263] - Required extensions being missing causes graphs not to work in newest Chagall build

[FE-8305] - Split from Preset doesn’t work on nested presets

[FE-8309] - Fabric Canvas Graph Performance Issues

[FE-8346] - ‘Reveal in Explorer’ crashes Canvas if the Explorer was never visible

[FE-5329] - Ability to Mute report and cache nodes

[FE-5724] - Shortcuts for interacting with the Canvas timeline

[FE-5803] - Improve discoverability of presets with a new Tab search

[FE-7040] - filter list of “recently opened graphs” when starting canvas.py

[FE-8070] - remove dialogs when creating empty graph, empty function node etc.

[FE-8381] - Removed the variable entry and sync from the Preset explorer

[FE-8173] - Change “Load DFG Presets” with “Load Canvas Presets”

[FE-8060] - Number of lines not aligned with the new font

[FE-8056] - Added a “Help” menu

[FE-6684] - Removed Canvas standalone

[FE-6699] - Shorten recent filepaths if they are greater than a certain number of characters

[FE-7963] - Make go up and back button consistent

[FE-7968] - overriding camera matrix then disabling it doesn’t return to the previous camera position

[FE-7889] - Shift + Click and move should only move nodes, not change the selection state

[FE-7834] - When loading or creating a new file while the timeline is playing the icon remains in playing mode

[FE-8287] - modified preset port values not saved when re-creating the preset

[FE-7214] - Added SplitLines preset

[FE-7219] - Add Frame and FrameRate as supported built-in inputs in Canvas standalone

[FE-7554] - When playing the timeline once, the play button doesn’t turn back from pause

[FE-8219] - Fixed typo in SaveGraphAsAction class

[FE-8121] - regressions: shortcut “R” (reset camera) not working

[FE-8026] - Check that a DFGUICmd is valid before adding it to the stack

Canvas UI/UX

[FE-6599] - Make buttons smaller on retina display res monitors

[FE-8108] - Disable “connection hovering” when there is a conflict

[FE-7239] - Shift + left click tree selection does not propagate through block ports

[FE-7701] - Dimming connections were not working on Block Ports

[FE-7997] - crash when entering certain strings in the required extension field in the KL editor

[FE-8030] - editing the (read only) exec port results in an empty entry in the history log

[FE-8118] - (possible regression) panning and moving nodes is very sluggish

[FE-8136] - Improve visual guides of zoom functionality

[FE-8180] - Canvas MenuItem: Write Variable is incorrectly labeled

[FE-7549] - Added a “Create timeline port” to the context menu of the sidepanels

[FE-8187] - regression: the ‘metadata’ tab is not automatically expanded if metadata is set

[FE-7789] - Add ‘duplicate’ to port context menu in the KL Editor

[FE-8010] - Duplicate port feature should auto create the port without opening the edit port dialog

[FE-6841] - display grid in Canvas background and implement snapping

[FE-7365] - “Select all” (CTRL+A) should be disabled in the value editor

[FE-7474] - be consistent with where the “Okay” and “Cancel” buttons are located.

[FE-7960] - Create a context menu on the wires

[FE-8046] - Added context menu to connections + “insert Report” and “insert Labeled Report”

[FE-8050] - Added tooltips to buttons in timeline widget

[FE-8104] - improve hovering over connections

[FE-8119] - ability to display connections as horizontal and vertical lines instead of curves

[FE-8073] - Change Magnifying glass icon for string fields

[FE-6224] - Allow moving the backdrop only from the header

[FE-7974] - Error Widget right click context menu needs to conform to styling

[FE-7970] - Licensing Dialogs need Stylesheet assigned to them

[FE-7773] - Maintain the symmetry of header out ports and right side of IO ports

[FE-7199] - Duplicate Nodes when dragging a selection of nodes with a modifier key

[FE-7221] - Remember last open folder on FileBrowser preset

[FE-7516] - Improved Connection visibility

[FE-7803] - Added visual feedback to hotkey zoom functionality

[FE-7497] - Import graphs into Canvas

[FE-8047] - Suppress dialogs of new empty graph functions, backdrop and similar actions

[FE-7878] - Can’t close (by canceling the action) with Esc the edit port dialog

[FE-7801] - Mouse click on unsigned integer slider widget should set the slider to the clicked position

[FE-8202] - time ranges with timelineStart !=0 has weird behavior when clicking in the timeline


[FE-8321] - Add a method to get the full Fabric version


[FE-8044] - Support for KL’s namespaces


[FE-7916] - crash when loading Kraken sample and then any of the multipede sample

[FE-8040] - 3dsMax Kraken launcher doesn’t work

[FE-8008] - Typo in DynamicChainComponentGuide

[FE-8001] - Check for Fabric Qt libs loading in Kraken Maya launchers

[FE-7937] - Kraken in Maya 2017 is still buggy

[FE-8155] - Support Maya 2015 colors


[FE-7301] - Optimized Blocks and general codegen


[FE-5792] - Introduced Kludge

Value Editor

[FE-7736] - Both commas and dots are now supported as decimal separator


[FE-6916] - Euler.Compose preset should allow user to set Rotation Order

[FE-6931] - update the GetPlane preset (and samples that use it)

[FE-7228] - Renamed Quat.alignWith to matchHemisphere

[FE-7319] - Create presets to easily get/check/log geometry attributes.



[FE-8094] - Can no longer read curves from alembics that used to work

[FE-8307] - StoreCamera preset should connect isAnimated to StoreTransform

[FE-8317] - Exocortex Alembic Point Cache into Fabric

[FE-8126] - Implement a workflow to export Alembic Maya Colors

[FE-7344] - Add an option to Alembic.DrawContents to normalize the archive in time and space


[FE-7224] - KeyframeTrack object stores keys in an array not a dict()


[FE-8116] - Attributes.getValueArray node cannot get UInt32Attribute values

[FE-8038] - Missing setPointAttribute for IntegerAttribute and ScalarSttribute + missing UInt32ConstantArrayAttribute


[FE-7042] - Documented the BinPacking extension


[FE-8133] - Merge meshes normals issues

[FE-8195] - connect linear curve to port of Curves

[FE-8262] - Hang with recomputePointNormals

[FE-8099] - Additional methods getEvenlySpacedLengths() getPositionsAtLengths() getTangentsAtLengths() to Curve object

[FE-8282] - Allow a GeometryAttribute to be shared by multiple geometries


[FE-7705] - In Images/Interfaces/ImageTransform.kl, replace ccv parameter by ccw (counterClockWise)

Inline Drawing

[FE-8294] - InlineDebugShape.clear() preset added

[FE-8061] - Draw* specFactor parameters should have a positive range

[FE-8214] - DrawAttributeAsVec3 was not updating the positions


[FE-8006] - DrawAttributeAsText: the alpha of the default color should be 255 and not 15

[FE-8178] - Draw3DText: Hard crash when fontSize set to 0


[FE-8161] - String missing toFloat64 method



[FE-8105] - Improved documentation on dfgPullBlockPort

[FE-8223] - Added documentation for KL2DFG for how to specify a GUID

[FE-8117] - Fix documentation: user.config.json is not in the Resources folder

[FE-7533] - Forward-declaring co-recursive functions is not necessary anymore

Fabric for Maya

[FE-6709] - In certain situations you need to save and load a maya file with a canvas deformer to take it effect

[FE-7517] - Errors when importing a maya file with canvas nodes using namespaces

[FE-7996] - Removing shape items from a Maya array port does not update the values in canvas

[FE-8004] - Maya: having the Fabric for Maya plugin loaded slows down Maya performance even when there are no Fabric nodes

[FE-8019] - Linux+Maya: Loading Fabric plugin doesn’t always work

[FE-8067] - Regression: Transfering Eulers to Maya is broken

[FE-8077] - Boolean arrays no longer exposable in Maya

[FE-8085] - Canvas func node crash in maya

[FE-8101] - Crash when connecting output to objects position

[FE-8102] - Regression: Referenced graphs don’t always work the first time

[FE-8211] - Fabric Kraken / Error Speweage

[FE-8264] - // Error: [Splice] getArrayElement(0): index (0) out of range (0) on canvasDeformer error fixed

[FE-8292] - Inline drawing bug with manips

[FE-8315] - Crash on headless maya 20616

[FE-8316] - Crash in Maya from the ComboBoxViewItem

[FE-8043] - Euler ports, Maya and unit conversion.

[FE-8189] - setHistoryOn(false) on increment evalID CanvasOp callback in Maya

[FE-6346] - Document Reload extension functionality

[FE-7689] - Reload extension action and command to reload ALL extensions

Fabric for 3ds Max

[FE-8064] - Fabric conflicts with native Python PySide widget parenting in 3DsMax ( 2017 )

[FE-8303] - Shutdown callback error

[FE-8096] - 3ds max errors when not setting up kraken launcher

[FE-7637] - Remember the UI window layout various properties


[FE-8039] - The sample quick_stretch displays nothing if executed twice on the same frame

[FE-8360] - Production samples are in daily builds but not its exts

[FE-8297] - canvasfuncdeformer and simulated mesh deformer are not included in the distribution packages

[FE-8072] - Multipede extension was not included in 2.4.0!

[FE-8055] - fix sample “Attributes/08_Transfer_UVs.canvas”