2020 Official Update
Release Notes 
Feb 20, 2020
New Features - Major New Additions
Point Cloud Support Point Clouds and general data with TOPs - Doing more work with the GPU.
  • Point File In TOP - .xyz, .obj, .exr, .FITS/.FIT, .pts, .ply files supported. It will create a square multi-RGBA buffer with pixel format 32-bit floats. Generally it can be set up as one pixel for each point, and the pixels that are unused contain NAN (a special value called Not-A-Number).
    • Supports converting shapes into point clouds when loading .obj files.
    • The operator's viewer defaults to opening in 'normalized split' mode.
    • The operator's pop-up info shows the number of points and channels.
    • An Info DAT attached shows the channel names in the file. The first 4 channels are put into RGBA (buffer 1), the next 4 channels are in buffer 2, etc
    • The number of points in the original source file is now displayed in the Info CHOP.
    • Can store and display header data in an attached Info DAT (currently supported in .FITS and .PLY files).
    • Point clouds that exceed the maximum size supported by the graphics card are now clamped with the output points sampled evenly from the total available points.
    • If the output resolution is smaller than the source texture, points are now evenly sampled from the source rather than cropping.
  • Point File Select TOP - This new TOP can select channels from a Point File In TOP, useful when multiple buffers exist.
  • TOP Viewer modes have been extended.
    • Added total number of pixels to TOP popup info dialog.
    • 'Normalized Split' displays each channel separately as a normalized grayscale image with min and max values overlaid.
    • 'View as Points' will visualize the data in a 3D Viewer like in SOPs, assuming the RGB channels contain XYZ point data.
Point Cloud Workflow
Better Support for .exr Files - See also OpenEXR.
  • Point File In TOP - .exr files are now loaded in RGBA order so that they match files loaded with the Movie File In TOP.
    • Added support to load .exr files with arbitrarily named channels.
    • Added support for loading Pixel Aspect Ratio for .exr files.
    • Added parameters for saving more than 4 channels per frame (currently only supports EXR images), allowing you to save out point cloud files with an arbitrary number of channels.
    • Added parameters to give custom names to the RGBA channels in an .exr files.
    • Custom header data can now be written to files by attaching a Table DAT (currently only supports EXR sequences).
    • Added toggle to flag .exr files as containing point cloud data when saved so that they can be loaded directly into the Point File In TOP.
    • Added support for saving Pixel Aspect Ratio in .exr files.
  • Point File In TOP - .exr files will now open in the Point File In TOP when dragging and dropping into the network editor if they contain the 'loadAsPoints=true' header.
Processing Data in TOPs
  • CHOP to TOP - A new option has been added to wrap long channel data into multiple rows of pixels when the CHOP's channel length exceeds the GPU's maximum texture width.
  • CHOP to TOP - Enabled 'Custom Resolution' options to set specifc resolutions of the TOP and a separate option to make it a Square Texture.
  • Math TOP - Ranges can now be changed on individual color channels.
  • Function TOP - New TOP allowing mathematical functions to be done on pixels, similar to the Function CHOP.
  • Limit TOP - New TOP based on the Limit CHOP that can clamp, normalize and quantize images. Uses spacial (position) quantization.
    • Supports independent minimum and maximum functions.
    • Output is set to the middle of the normalize range when the input is a constant value.
Geometry Instancing with TOPs
  • Keep data on the GPU by going directly from TOPs to GPU instancing.
    • On the Geometry COMP you can provide it with a TOP and it will render an instance for every pixel in the TOP. For example, floating point red, green, blue channels can be assigned to the instances' X Y and Z positions.
    • In addition, you are no longer limited to one OP for specifying instancing data. The Instancing pages have been expanded so you can specify TOPs, CHOPs, SOPs, or DATs for every instance attribute interchangably. For example, position from a TOP and color from a CHOP.
    • New 'Active' parameter available for instancing to control on a per instance basis if each instance should be shown in the render.
    • Added support for up to 12 custom instancing attributes. This is found on the Instance 3 parameter page.
    • Viewer properly calculate bounds when instancing from TOPs.
Web Client and Server and SocketIO
  • Web Server DAT - New DAT which runs a web server in TouchDesigner, currently supports handling of HTTP/HTTPS requests and webSocket connections.
    • Error handling can be monitored with an Info CHOP with channels for server start failure and other problems.
    • URI is parsed and added to a dictionary stored under the 'pars' key in the request dictionary.
    • How client requests are handled is left up to the user via a 'Callbacks DAT'.
    • Includes onWebSocketReceivePing() and onWebSocketReceivePong() callbacks.
    • Added onWebSocketClose() callback.
  • Web Client DAT - New DAT that acts as a web client. This replaces the deprecated Web DAT.
    • Includes request() python method.
    • Info CHOP and Info DAT values for additional information and debugging.
  • SocketIO DAT - New DAT for extended functionality, separate from the older functionality of the WebSocket DAT.
Kinect Azure
  • Kinect Azure TOP / Kinect Azure Select TOP / Kinect Azure CHOP - The new Microsoft Kinect Azure is now supported in TouchDesigner via these 3 new operators. Please note that Microsoft is updating this new SDK at a fast pace. We will support future changes and additions as the SDK matures and improves. (Windows 10 only, see requirements)
    • Kinect Azure TOP - This is the primary operator used to configure all the settings for the Kinect Azure, as well as get data from one of its cameras (Depth, Color, IR, Player Index, or Point Cloud). Only one Kinect Azure TOP can be connected to each Kinect Azure device.
    • Kinect Azure Select TOP - This TOP references a Kinect Azure device through the Kinect Azure TOP (above) and retrieves additional images from the other camera streams.
    • Kinect Azure CHOP - This CHOP references a Kinect Azure device through the Kinect Azure TOP (above) and retrieves body tracking information, including bone positions and rotations, and IMU sensor data.
    • Parameters for color controls exposure, brightness, white balance, and more.
    • Option to use the CPU for body tracking (very slow).
    • Has the ability to capture both live and body-synced video streams at the same time.
    • Info CHOP will report frames and timestamps channels.
    • Currently using version 0.9.5 of the body tracking library (changing often.
    • Supports multiple body tracking devices per computer.
    • Parameter to control which GPU computes the body tracking. Also includes a function to get the physical GPU name (Nvidia GPU only).
    • Multi-threaded CPU support for body tracking (in cases where the Nvidia CUDA GPU tracking can't be used).
    • Includes support for hand, handtip, and thumb joint tracking.
    • Bone Confidence channels let you know the expected accuracy of the tracking.
    • Info CHOP will report frames and timestamps channels.
Ouster LIDAR Support
  • Ouster TOP - New operator for real-time point cloud capture from Ouster lidar sensors.
    • Currently using firmware v1.13
    • Direct support for the OS1 Ouster product line.
    • Additional sensor data like IMU, packet counts, matrices via Info CHOP and Info DAT.
    • Visual Panoramic and Scan Order capture formats selectable in 'Image Layout' parameter.
    • Flexible X, Y, Z, Range, Intensity and Noise plane mapping to RGBA GPU Image Channels
    • Time Sync Mode for supporting multiple devices in the same area (Internal OSC, Sync Pulse In, PTP 1588)
    • Auto startup features
    • Window Rejection mode
    • Positions and transforms are now given in TouchDesigner space (Y is up) rather than sensor space (Z is up).
  • Ouster Select TOP - New TOP to select additional channels from the Ouster scanner.
Audio over SDI - Proper SDI audio support for Blackmagic Design and AJA devices.
  • Pangolin CHOP - New CHOP interfaces with Pangolin's Beyond laser show control software.
    • When Beyond is running, the Pangolin CHOP will send laser image frames to it.
    • Image frames are created from either a SOP input or CHOP input.
    • TouchDesigner Non-commercial will work with the demo version of Beyond. TouchDesigner Commercial or Pro is required to interface with licensed versions of Beyond.
  • RealSense TOP - Updated to SDK 2.29.0 and the following additions
    • Added support for T265 cameras. NOTE: The driver is not stable yet when changing parameters, work in progress.
    • Added support for setting arbitrary options for the devices via a CHOP.
      • Complete list of RealSense Options
      • Names will be all lowercase, and omit the RS2_OPTION_ from the start. E.g RS2_OPTION_ENABLE_AUTO_EXPOSURE can be set with a channel named 'enable_auto_exposure'.
  • Bind CHOP - Use CHOP channels for binding with parameters.
    • Allows for multiple inputs (like old Override CHOP) or the bound parameter to update a channel's value.
    • Includes a 'Callbacks DAT' for querying where the change was initiated and then taking further actions via python script.
    • 'Channel Pickup' parameter doesn't change the value of that parameter until the input value crosses the current value.
  • Binding - Binding to DAT text or table cells is now supported.
Engine COMP The Engine COMP] runs a .tox file in a separate process using TouchEngine. *Work in progress*
  • Info DAT reports the path to the TouchEngine binary being used.
  • Runs TouchEngine from the in-use version of TouchDesigner. Users can still override this behavior by placing a link to a particular installation named "TouchEngine" next to the .tox they are loading.
  • Supports multiple GPUs by allowing GPU Affinity to be set for a .tox running in TouchEngine.
  • Added support for channel names for CHOP Ins and Outs.
  • Bullet Solver COMP - Rename onFrameStart, onFrameEnd, and onInit callback methods to whileRunningPreSimulate, whileRunningPostSimulate, and onInitialize respectively.
  • Camera COMP - Added 'Ortho Origin' parameter to control where the origin in for orthographic cameras. Useful when trying to render objects into a normalized space or pixel space for things such as LED fixtures and you want to address the render output with 0,0 being the bottom left.
  • FBX COMP - Improvements
    • Geometry nodes inside the FBX COMP are now set to pickable by default when imported.
    • Added File Version to info pop-up and fbx_file_version Info CHOP channels.
    • Added 'Import Scale' parameter.
  • Nvidia Flow Emitter COMP - New features and improvements.
    • Added Collider to the 'Mode' menu which turns the emitter into a collision object.
    • Added Shape SOP option to the 'Type' menu which allows use of polygon/mesh SOPs as the shape for the emitter. Specify the SOP in the 'Shape OP' parameter below.
    • Allow TOPs to be specified for the Color Ramp parameter instead of only CHOPs.
  • Replicator COMP - Added a new onRemoveReplicant() callback to destroy replicators.
  • Shared Mem In COMP - Added 'Memory Type' parameter to choose between Global or Local.
  • Math TOP - Added "Linear to sRGB" and "sRGB to Linear" options.
  • NDI In TOP / NDI Out TOP - Upgraded NDI SDK and added support for transmitting 16-bit data.c
  • Nvidia Flow TOP - New features and improvements
    • Added second input for a Depth TOP to setup a depth-composite of the Flow simulation render over the first input.
    • Separate Input into Color and Depth Inputs.
    • Add support for Volume Shadowing including a new toggle to automatically adjust emitter render parameters to show Volume Shadows.
    • Improve GPU Memory Usage Reporting.
  • Movie File In TOP - Added support for NotchLC codec.
  • Movie File In TOP - Can store and display EXR file's header data in an attached Info DAT.
  • Movie File Out TOP - Major improvements for hardware encoding, audio channel support, and custom header data.
    • Added support for Lossless H264 and H265 hardware encoding on Nvidia GPUs.
    • Can now record more than 8 audio channels on supported codecs.
    • Custom header data can now be written to EXR files.
  • TOPs - Now support saving .tiff files with 16-bit image depth using RMB "Save Image" and python method if the 'Pixel Format' is set to 16-bit float.
  • Movie File Out TOP - TIFF image formats can now be saved out at higher 16-bit pixel format.
  • Custom Operators - Added support for 16-bit fixed and 16-bit float data to and from TOPs.
  • Analyze TOP - Improvements
    • Added options to calculate RGBA independently for Minimum and Maximum operations.
    • Added Sum and Count Pixel operations.
    • Added support to exclude pixels with NaN values in the calculations.
    • Added support for defining a mask channel. Pixels that have a zero in the mask channel are excluded from calculations.
    • Changed the name of the 'Select' parameter to 'Analyze Channel'.
  • Audio File Out CHOP - A new CHOP for recording and saving multi-channel audio files.
  • Audio Movie CHOP - Added an option for switching audio tracks when movie files contain multiple tracks.
  • LTC In CHOP / LTC Out CHOP - Improved to support higher frame rates and more.
    • LTC CHOPs now work for higher frame rates.
    • LTC In will now adjust the frame value based on the value in the User 1 channel.
    • User field1 is now automatically used for frame rates over 30.
    • LTC In now has options for the number of 'Total Frames' and 'Total Seconds' and on/off parameters for frames, seconds, min channels.
  • Timeline CHOP - Added options for 'Second', 'Absolute Frame', and 'Absolute Second'.
  • Timer CHOP - Added a third Play Mode called 'External CHOP Index' to drive current position of the timer using a CHOP channel.
  • Keyboard In CHOP - Keys are now defined in a space or comma separated list rather than as neighbouring keys on the keyboard. Old files are automatically updated to the new system when they load (only works for constant parameters).
    • Added shift key support to the 'Modifier Key' parameter menu.
    • Added 'Panels' parameter so events are only triggered when the given panel has focus.
  • Mouse In CHOP - Added 'Panels' parameter so events are only triggered when the given panel has focus.
  • Object CHOP - Improvements
    • Reorganization of parameters and pages.
    • Added '4x4 Matrix', '3x3 Matrix', and 'Quaternion + Transform' to the 'Compute' menu.
    • Added "xord" and "rord" channels to Transform output.
    • Added "Swap Target/Reference" toggle parameter.
    • Added 'Include Order Channels' parameter to control outputting the 'xord' and 'rord' channels. Files from 2019.10000 branch and earlier will load up with the parameter off to maintain older behavior.
  • Transform CHOP - Overhaul of it's functionality. Now matches groups of channels based on prefix instead of channel order to create transforms.
    • Large update from previous 2019.30000 series experimentals. Reduced complexity.
    • Now accepts two inputs. Added 'Invert Input 0' and 'Invert Input 1' parameters. Also added some warnings when two inputs are not compatible or invalid inputs.
    • Added '4x4 Matrix', '3x3 Matrix', and 'Quaternion + Transform' output.
    • Now supports Vector sets and performs Matrix-Vector multiplication.
    • Added Vector/Position options for Input 1.
    • Added toggle parameters to control output.
    • Added Operation and Coefficient parameters for final output values.
    • Added 'Unmatched Channels' parameter.
    • Now accepts xord and rord channels as part of TRS channels.
    • Swapped the Input and Transform pages.
    • Renamed 'Invert' to 'Post Invert' on the output page.
    • Changed the 4 Invert toggles to a menu of Unary Operations.
  • Hold CHOP - Added 'Hold per Sample' parameter.
  • Pattern CHOP - Added 'Random Non-Repeating Integers' to the 'Type' menu which will randomly change values whenever the 'Randomize' pulse parameter is pressed.
  • Alembic SOP - Added 'FPS' parameter.
  • Merge SOP - Added 'SOPs' parameter to accept multiple SOPs by reference.
  • Select SOP - Now allows multiple input ops to be specified in the 'SOP' parameter, acting like a Merge SOP.
  • Sphere SOP - Removed the upper limit on polygon frequency.
  • Particle SOP - Added 'Birth' pulse parameter to birth particles accurately. Works in conjunction with a new 'Birth Count' parameter which determines how many particles are created each time 'Spawn' is pulsed.
  • Point SOP - Added "Width (Line MAT)" parameter to control a point's width when rendered with a Line MAT material.
  • Raster SOP - New SOP that takes a TOP and converts it into a single-line SOP that can be used with the Laser CHOP.
  • Text SOP - Added 'Scale Font to BBox Height' parameter to scale the font's vertical size so it's based on the vertical bounding box of the font, rather than the typical way a font is sized.
  • Text SOP - Added 'Vertical Align' parameter with options: First Line, Top, Center, Bottom. The chosen field will be aligned to the x-axis.
  • Aligning SOPs to their X, Y, and Z axes: Rectangle SOP / Box SOP / Circle SOP / Grid SOP / Sphere SOP / Superquad SOP / Torus SOP / Tube SOP - Added 'Anchor' parameters to main SOP generators. The position stays stationary regardless of rotate and scale settings.
  • GLSL MAT - Added support for custom instancing attributes.
  • GLSL MAT - Added built-in TD AttenuateLight(int index, float lightDist); function.
  • Line MAT - New features
    • Added "Attribute Type" menu and "Instance Custom Attribute Index" parameter to use an instance's custom attributes in SOP and World spaces for Vectors.
    • Added "Pullback Caps" to the Caps page to pull the caps inward.
  • DATs - Execute DATs will now accept multiple OPs to monitor.
  • OP Execute DAT - Added new callback onCreate() which is called when the monitored operator is first detected.
  • Perform DAT - Added callback for when performance log is triggered. Made it log on successive triggers while it is active.
  • WebSocket DAT - Added onConnect() and onDisconnect() callbacks.
  • Geometry Viewer - Improvements
    • Geometry Viewer homes properly when first opened.
    • Re-worked the scroll acceleration so it's based on the distance to pivot rather than the last home values, this fixes issues when the scroll speed would get very slow.
    • Geometry viewer now saves the last home bounds to preserve the view when saving.
  • Parameter UI Improvements - Previously some parameters were a list of duplicates when multiple copies of that parameter might be used. Examples of this are the GLSL MAT's 'Uniform' parameters (8 copies), a Component's 'Extension' parameters (4 copies), a Constant CHOP's channel creation parameters (40 copies), etc. Now these parameters start out with just 1 copy of the parameter and you can Add or Remove parameters when needed. This has the following advantages:
    • Cleans up long lists of the same parameter that might not be used. For example, the GLSL MAT's Sampler pages would always have 8 Uniform parameters, even when not used. Now it starts with 1 and you can add the number you need.
    • Cleans up duplicate parameter pages on some OPs. For example, the GLSL MAT previous had 'Samplers 1' and 'Samplers 2' pages just to get 16 Uniform parameters. Duplicate pages are no longer needed so now there is only one 'Samplers' page where you can add the exact number of Uniform parameters required.
    • Removes the limit on the number of parameters available. For example, the Constant CHOP used to be limited to 40 channel parameters, the Point SOP used to be limited to 4 'Custom Attrib' parameters, these are no longer limited as you can create any number of parameters required (NOTE: some are limited by other factors such as limited GPU resources).
New Python
  • Python 3.7.2 is now the built-in version of python. Backward Compatibility warning, see below.
  • Header parameter type added which acts as a label and section divider. It is like parameter sections but you can give it a text string label.
  • Page Class - methods and members will now also work for built-in pages.
  • Page Class.appendHeader(name) - Appends a custom parameter that displays only the value, left justified, with no editing ability. Can be used in combination with Par.startSection and Par.enable.
  • Par member can now return a built-in page.
  • Par Class.subLabel member added.
  • Par Class.bindRange member added, when true then min, max, clampMin, clampMax, normMin, normMax, normVal values will be based on master bind parameter. (Custom Parameters only)
  • Par Class.cloneImmune - Protects values from master syncing.
  • Par Class.enableExpr to get or set an expression that controls the enable state for this parameter.
  • Par Class - Added collapser/collapsable boolean members, these are for collapsable parameters like those found on MATs for texture map's Texture Sampling Parameters.
  • Par Class help - Returns the description for the parameter.
  • Sequence Class - describes a set of sequential parameter blocks. These are parameters you can add/remove duplicates of, such as the Point SOP's 'Custom Attrib' parameter(s) or the GLSL TOP's 'Uniform Name' parameters.
  • TDJSON updated and bugs fixed.
    • All functions now work with built-in parameters.
    • Added a deserializer TDData function to TDJSON.
  • OP now supports legacy parameter names.
  • OP Class.pages() method returns a list of the operator's built-in pages.
  • TOP Class - New cudaMemory() method which allows the TOP's memory to be copied to CUDA memory on the GPU, for use with CUDA libraries in Python.
  • Added createFolders flag for .save() the functions in COMP, TOP, CHOP, SOP, and DAT classes.
  • KinectazureTOP Class.getRemapTransform(src, target) - Returns the transformation matrix to remap points between different devices spaces.
  • MoviefileinTOP Class - Added python functions to access header data.
  • MoviefileinTOP Class.isFileOpening returns true while the file header is still being read.
  • MoviefileinTOP Class.sourceChannels - lists the available channels in the file e.g. R, G, B, A for typical color images, but could be more for some formats like .exr files. Extra available channels can be accessed using the Point File In TOP and Point File Select TOP.
  • MoviefileinTOP Class - Added python function that returns a tuple with the available channel names in the file.
  • textTOP_Class / textSOP_Class - Improvements
    • Added numLines member and lines() method to inspect the text after it has been formatted by things such as word wrap.
    • Python objects returned from lines() method now have lineWidth member.
    • Added members to access more font metrics such as ascender, descender, capHeight, lineGap and xHeight.
  • SOP Class maximized .min .max .size members
  • Point Class.normP returns the normalized point within SOP bounding box. (This is equivalent to $BBX $BBY $BBZ in Tscript). Previously this was limited to a few specific SOP parameters.
  • WebserverDAT Class - Added webSocketSendPing() and webSocketSendPong() methods.
  • WebclientDAT Class.request() - Added authentication capabilities to .request() method via keywords.
  • WebclientDAT Class.request() - Added an uploadFile keyword that has the same functionality as the 'Upload File' parameter.
  • Custom Operators - OP_NodeInfo class now has a 'pluginPath' member.
  • WindowCOMP Class.setForeground() - Added code that will try to grab focus for this Window even if TouchDesigner isn't the current foreground app.
  • ArcBall_Class.setTransform() will now invert the incoming matrix if 'forCamera' mode is in use. This allows the same transform coming out of getTransform() to be passed back into setTransform().
  • Optimized Expressions - OP.fetch() is now optimized in some cases.
New Palette
  • Updated most palette components to improve parameter naming and organization, network cleanup, and Binding to top level parameters.
  • Added 'PointClouds' folder for working with point clouds
    • Added new pointGenerator, pointRender, pointTransform, and pointWeight components.
    • Added new pointMerge component takes two input TOPs and repacks them into a single output texture containing all of the pixels of the inputs.
    • Added new pointRepack component re-arranges the pixels in the input to fill a new texture of given dimensions. Extra input pixels are discarded, while extra output pixels are filled with zeroes.
  • Widgets - Updated widget kit.
    • New Text Editor Widget - found in core widgets
    • Slider / Knob optimization for cache mode - direct path to out for greater speed
    • New masterFolderTabWicons - A widget that supports using Unicode Hex strings for folder icons. Requires an icon font like the includes Material Design Icons font.
    • New masterTextEditor widget supports editing of text in a DAT.
    • Field text area widget has field component added to published operators.
    • Added new font auto-scaling based on a ratio parameter instead of a locked font size.
    • Font controls now have a 'Font Side Mode' and 'Font Ratio' parameter. To see it work activate it and scale up the size of the widget.
    • Support enable/disable of parameters using enableExpr - work in progress - it is possible parameters do not enable or disable properly.
SDK and API Updates
  • macOS - Minimum required version is now 10.12 macOS Sierra.
  • Python 3.7.2 is now the built-in version of python. Backward Compatibility warning, see below.
  • CUDA - Moved back to CUDA 10.0 to match support with Kinect Azure and ZED requirements.
  • NDI - Upgraded to NDI 4.1
  • Notch TOP - Upgraded to Notch SDK v0.9.23
  • Oculus Rift - Updated to SDK v1.43.0
  • OpenColorIO TOP - Upgrade SDK to v1.1.1
  • RealSense - Upgraded to 2.31.0. (Fixes the memory leak - Windows only).
  • ZED - Upgrade to SDK 2.8.3
Bug Fixes and Improvements
  • Actor COMP - Fixed texture instancing crash.
  • Animation COMP - Fixed an issue where deleting all keyframes from a channel would break the channel by leaving an empty row in the keyframe table. Better handling of channels with zero segments.
  • Blend COMP - Fixed rotation blending not working in some cases when 3 or more inputs were connected.
  • Environment Light COMP - Fixed some seams that can occur at certain PBR roughness values.
  • Environment Light COMP - Remove ability to provide Pre-filtered Diffuse map for now, it uses up too many texture units. It will be computed from the source Environment Map instead.
  • Geometry COMP - Geometry components and applicable object components now display bounding box information in their info popups. This also works with geometry instancing.
  • Geometry COMP - Instances can now have a maximum of 12 Custom Attributes instances, up from 4 previously.
  • Light COMP - Viewer now uses 'Best Fit' to display the projection area without distortion.
  • Window COMP - Will now use the resolution and view mode (image or points) when connected to a TOP.
  • Window COMP - Fixed some Perform Mode window sizing issues on macOS.
  • Window COMP - Fixed some sizing issues for windows when using multiple monitors with different DPI setings.
  • Blur TOP - Fixed issues with this node not giving correct blur for non-square images.
  • CPlusPlus TOP - Added example for using signalled producers in the CPUMemoryTOP example.
  • Cross TOP - BACKWARD COMPATIBILITY WARNING - Order of the "Extend" menu has changed for the first two entries. This should only affect cases where this menu was being set by index via script or exports.
  • GLSL TOP - Vector parameter defaults should be (1,1,1,1) not * (1,0,0,0).
  • Movie File In TOP - Now correctly handles orientation metadata for .jpeg and .tiff images and .mov movies.
  • Movie File In TOP - .FITS files dragged into TouchDesigner will load into a Movie File In TOP.
  • Movie File In TOP / Movie File Out TOP / Point File In TOP - Channel order is now saved in the EXR file header so that channels can be reloaded in the same order they were saved. Uses a non-standard header attribute.
  • Movie File Out TOP - 'Add Frame' pulse now works for 'Image' output types.
  • NDI In TOP - Fixed high CPU usage when no connections found.
  • Notch TOP - Fixed transform conversion of exposed transform parameters.
  • Notch TOP - Added group names as section headers when generating the custom parameters of a Notch block.
  • Notch TOP - Fixed bug with GPU memory usage in the pop-up info. It was not including the GPU memory usage of the block itself.
  • Notch TOP - Fixed unicode in exposed string properties.
  • Notch TOP - Fixed reporting of gpu_memory_used.
  • Nvidia Flow TOP - Fixed typo in "Ignition Temp" parameter.
  • Point File In TOP - Supported files (.PTS, .XYZ, .PLY) dragged into TouchDesigner will load into a Point File In TOP.
  • Point File In TOP - Point clouds that exceed the maximum size supported by the graphics card are now clamped with the output points sampled evenly from the total available points.
  • Point File In TOP - If the output resolution is smaller than the source texture, points are now evenly sampled from the source rather than cropping.
  • Point File In TOP - The number of points in the original source file is now displayed in the Info CHOP.
  • Point File In TOP - 'Num Points' (Info CHOP, Python member, node MMB popup info) now shows the total number of valid points in the output texture, which could be less than the number of points loaded if the texture size has been reduced.
  • Point File In TOP - 'Num Loaded Points' in the Info CHOP and python class shows the number of points that were loaded from the file.
  • Text TOP - Position Units can now be changed when using a Table DAT to describe text positions.
  • Text SOP / Text TOP - Kerning renamed to 'Tracking' as that is the more correct term for that feature.
  • Text SOP - Fixed a bug with uninitialized vertex positions.
  • Video Device In TOP - Fixed slow performance when trying to connect to a camera.
  • Video Device In TOP - Fixed DirectShow device selection being off by one.
  • Audio Oscillator CHOP - Fixed the Reset input only resetting based on the first channel.
  • DMX In CHOP / DMX Out CHOP - Increased the baud rate for reading and writing through generic serial interfaces.
  • Join CHOP - Fixed this node not giving correct results.
  • Leap Motion CHOP - The sample rate is now set to match the global cook rate, this allows faster sampling if the project FPS is increased.
  • Object CHOP - Use default values when no Targent and Reference Op are provided.
  • Object CHOP - Fixed startup errors that are shown when loading up files from 2019.10000 or older builds.
  • OSC In CHOP - Renamed 'Strip Prefix Segments' to 'Strip Name Prefixes'. and fixed stripping name segments.
  • OSC In CHOP - Added 'Reset Values' parameter to reset channel values to 0 without removing the channels.
  • OSC In CHOP - Fixed memory leak.
  • OSC Out CHOP - Enable Send Events Every Cook parameter for Time Slice mode, allowing OSC data to only be sent only when values change.
  • Select CHOP - Optimized performance when using wildcards.
  • TOP to CHOP - Fixed case where the CHOP would sometimes be empty on first cook.
  • Timer CHOP - Now include timer_pulse even if segment is at least 1 frame long.
  • Timer CHOP - Fixed auto start when onInitialize() callback returns delayed initialize.
  • Timer CHOP - Force a ready pulse whenever start is re-pulsed.
  • Timer CHOP - When Starting, only Initialize if not already in that state.
  • Timer CHOP - No longer need to press 'Init' when changing callback scripts. Note: Script changes will now take place immediately.
  • GLSL MAT - Added more Matrix parameters that take single matrix input.
  • GLSL MAT, GLSL TOP - Fixed issue where 'vec3' modes for the 'Arrays' page were not working correctly.
  • Line MAT - Improvements
    • Added "Circle (Sprite)" type to points for better performance when using circles.
    • Renamed "Circle" and "Circle Texture" Point types to "Circle (Polygon)" and "Circle (Sprite)".
    • Fixed Points not rendering if they had normals (0,0,0).
    • Picking points should now work correctly.
    • Now has more accurate picking values when render picking.
    • Fixed flashing "width" attribute issue.
    • Fixed unexpected changing of points after changing the 'Near' parameter in a Camera COMP.
    • Node's viewer now uses the fixed near and far distances and does not get affected by "Distance Near/Far" parameters in Camera COMP.
  • CPlusPlus DAT - Fixed input op node string getting the copy of the cplusplus node string.
  • Error DAT - Improvements
    • Components now show errors from themselves as well as their their children.
    • "source" is now the first column of the table.
    • Removed the "Log" page and moved the parameters to the "Error" page.
  • Execute DAT - onCreate() callback now called earlier in the load process.
  • Folder DAT - Fixed case where relative path results were incorrect when the 'Root Folder' parameter had trailing slashes in it.
  • OSC In DAT - Blank lines no longer logged when non-scoped bundles are received. See below BACKWARD COMPATIBILITY
  • OSC Out DAT - Removed optional input table which didn't make sense in an Output operator context.
  • OP Find DAT - Fixed overcooking issue as well as optimizations in calling the default DAT callbacks.
  • Serial DAT / Serial CHOP - Windows version now includes list of all valid ports in menu, not simply COM1-COM8.
  • Sort DAT - Unique output optimized: 3000 rows from 2 sec to 10 msec.
  • Table DAT - Fixed issue where UTF16 files were being truncated when loading on macOS.
  • Text DAT - Fixed UTF16 encoded files not loading correctly on macOS.
  • Text DAT - Now correctly load UTF-16 big endian encoded files.
  • WebSocket DAT - Added 'Reset' pulse parameter.
  • Web DAT is deprecated.
  • Custom menu names now allow spaces, Font menus no longer introduce underscores.
  • Fixed startup crash that that was occuring on Intel GPUs with the newest drivers. (Often drivers are installed via Windows Update)
  • Shared Memory OPs - Now working on macOS.
  • Binding - Fixed bound OP parameters with relative paths such that they return the OP relative to the Master, not themselves.
  • Binding - Fixed CHOP pickup not working when driven from the destination.
  • MIDI Mapper Dialog - Fixed "Enable Logging" option not turning off and continuing to log and cook in Perform Mode.
  • Optimized Expressions - Better support for 64-bit integers.
  • Improved handling of menus that are too large for a dialog; For example, the Font parameter menu of a Text TOP when using a floating parameter dialog.
  • Fixed drag-n-drop of multiple nodes not executing onCreate() scripts in reliable order.
  • Fixed slow memory leak when using ipar expressions.
  • Fixed issue with TOP viewers opening at 400x300 all the time.
  • Fixed hanging when using Panel.width or Panel.height in some cases.
  • Panel alignment using 'Max per Line' now works with fill and stretch weights.
  • Fixed panel.inside value not activating when overlapped by a sibling.
  • Fixed cases where panel.inside is calculated incorrectly during dragging of native scaled windows on windows that are scaled to something other than 100%.
  • Custom header parameters now display parameter label, not parameter value.
  • Cloned components now preserve custom header parameter settings.
  • Fixed crash when pulsing clone on component with custom parameters.
  • Fixed startup errors and crash on .projects using external .tox references which triggered recompiling of extensions.
  • Binding now using optimized expressions when possible.
  • Removed shortcut for toggling all 'Viewers Always Active'. You can still access the setting in the Network Editors RMB-menu.
  • Homing/Framing by selection now includes nodes whose parents are selected and ignores nodes with their display flag turned off.
  • Fixed an issue when pasting one bind parameter to a tuple.
  • Fixed linking of tags when copying nodes.
  • Fixed an issue where whitespace after numbers in parameters would sometimes clear the field back to 0.
  • Fixed some floating windows from opening too large to fit onscreen.
  • Changed Add Group keyboard shortcut in the Geometry viewer's Select and Transform state to be Shift+G to match the network editor shortcut.
  • C++ Operators should decrement any python objects returned from getParPython() after use, otherwise a memory leak will occur. The documentation in the header file incorrectly stated otherwise, it has now been updated.
  • C++ samples now include the missing source files to the Xcode project for CPUMemoryTOP.
  • Fixed issue where some nodes would cook mulitple times per frame.
  • Startup crash avoidance during splash screen display when other popups arise.
  • toeexpand/toecollapse now tolerate forward or backward slashes.
  • 099 suffix removed in some places such as executable names. Simply 'TouchDesigner' and 'TouchPlayer' now.
Palette Improvements
  • Palette:kantanMapper - Fixed a number of bugs.
    • Alpha on rectangle textures was not being used.
  • Palette:arcBallCamera component improvements
    • The last transform is saved in the component and loaded when the file is reopened.
    • SaveTransform(dat=None, matrix=None) - Extension method allows for saving out transform states to DATs or matrices.
    • LoadTransform(dat=None, matrix=None) - Extension method allows for loading transform states into the arcBallCamera.
  • Palette:arcBallGeometry component improvements
    • The last transform is saved in the component and loaded when the file is reopened.
    • SaveTransform(dat=None, matrix=None) - Extension method allows for saving out transform states to DATs or matrices.
    • LoadTransform(dat=None, matrix=None) - Extension method allows for loading transform states into the arcBallGeometry.
  • Palette:lister - Version 1.8 with many improvements.
    • Now has 'Arrow Keys' parameter that allows selection control from the keyboard.
    • New parameter 'Input Table Has Headers' lets lister understand input table DAT much better
    • New Parameter 'Auto-Sync Input Table' feeds changes back to DAT (Available in 'Input Table Has Headers' mode only)
    • Parameter 'Raw Info' is now a list of ordered dicts (Available in 'Input Table Has Headers' mode only)
    • int and float sourceDataModes now force their data type when text is entered into lister cells
    • Column name now returned in info for cell callbacks
    • Config is now outside the lister (still works inside if you want to put it back and turn clone immune on)
    • Rearrange parameters more sensibly
Backward Compatibility
BACKWARD COMPATIBILITY - Python 3.7.2 has 2 additional reserved keywords, 'async' and 'await'. Any scripts using these terms will need to be modified.
BACKWARD COMPATIBILITY - Palette:moviePlayer loaded from older builds uses the keyword 'async' as a variable name in some scripts, this should be changed to another variable name. (Unmodified moviePlayers may be replaced by the new version available in the Palette)
BACKWARD COMPATIBILITY - Palette:moviePlayer loaded from older builds will not allow drag and drop of nodes on the moviePlayer's node viewer. To fix this, delete the following operator from moviePlayer: moviePlayer/ui/zoomImage/panelexecFocus
BACKWARD COMPATIBILITY - Add SOP - Now a single 'Add Points' toggle controls using of all defined points.
BACKWARD COMPATIBILITY - Cross TOP - Order of the "Extend" menu has changed for the first two entries. This should only affect cases where this menu was being set by index via script or exports.
BACKWARD COMPATIBILITY - Cube Map TOP - Building a cubemap from 6 inputs on the Cube Map TOP was flipping many of the sides incorrectly. This has been fixed, but older files may have incorrect cubemaps now if they were working around the flipped behavior.
BACKWARD COMPATIBILITY - Expression CHOP - 'Number of Expressions' parameter, could cause an issue if this value is dynamically changed.
BACKWARD COMPATIBILITY - Function CHOP fixed an issue where tanh(x) was being calculated as tan(x).
BACKWARD COMPATIBILITY - Line MAT - Removed "num Point" in Points page. Replaced with "Num Points In Circle" which controls the number of points in a full circle for circles, round joints, and round caps (based on what the hardware supports).
BACKWARD COMPATIBILITY - Notch TOP - Changed 'Reload Block' to be an 'Active' parameter. When Active = Off, the block is unloaded allowing changes to be applied to the block (.dfxdll file) such as updating or re-saving the block.
BACKWARD COMPATIBILITY - OSC In DAT - Blank lines no longer logged when non-scoped bundles are received.
BACKWARD COMPATIBILITY - OSC In CHOP, OSC Out CHOP, Touch In CHOP, Touch Out CHOP, OSC In DAT, OSC Out DAT, Touch In DAT, Touch Out DAT, Stype CHOP - Removed support for UDT protocol.
BACKWARD COMPATIBILITY - Ouster TOP - Updated commands to work with protocol changes in the v1.13 firmware. Configuration will no longer work correctly on hardware with older firmware.
BACKWARD COMPATIBILITY - Rectangle SOP - Normals for the ZX orientation now point along the positive Y axis for consistency with other orientations and SOPs.
BACKWARD COMPATIBILITY - Transform CHOP was previously using rotate order as the output order even if the 'Custom Output Orders' was On.
BACKWARD COMPATIBILITY - Transform CHOP had Output Channels parameter removed, replaced by output toggles to customize the output channels.
BACKWARD COMPATIBILITY - Renamed vram_usage in Notch TOP's Info CHOP to block_gpu_memory_used.
BACKWARD COMPATIBILITY - ParMode, PaneType, and JustifyType are now Python style enums. They will work as usual except when accessing str(enumObject). To get the old result of str(enumObject), use
BACKWARD COMPATIBILITY - Since the executable's names no longer container 099, scripts that launch the TouchDesigner099.exe or TouchPlayer099.exe need to be changed to TouchDesigner.exe or TouchPlayer.exe