Vuo 1.2’s biggest new feature is subcompositions: the ability to turn a composition into a reusable node in your Node Library.

This release also makes all-around performance improvements, with large compositions taking less time to start up after you’ve hit the Run button and with complex graphics compositions running more smoothly. And this release adds numerous new nodes, including nodes for beat detection, OSC sending, USB HID, and dates/times.

Changes

Here’s what we’ve done in the last 7 months:

Example Compositions

  • New
    • “Animate on Schedule”
    • “Bounce Dots to the Beat”
    • “Display Image Feedback”
    • “Flash on Mouse Press”
    • “Fly at Warp Speed”
    • “Jump Dot to the Beat”
    • “Move Dots with Two Mice”
    • “Move Icosahedron with SpaceNavigator”
    • “Move through Tube with Fisheye”
    • “Offset Oscillations”
    • “Posterize Movie”
    • “Replace Colors In Gradient”
    • “Show Bar Chart”
    • “Show Dragged Images”
    • “Show Elapsed Time”
    • “Show Frost Noise”
    • “Show Icons and Filenames”
    • “Show Noise Image”
    • “Show Random Image”
    • “Show Random Points”
    • “Show Second Ticks”
    • “Show Sphere through Warped Plastic”
    • “Show Trees with Fisheye”
    • “Show URL Components”
    • “Toggle Fullscreen”
  • Modified
    • Updated “Scan Barcodes” and “Rotate in Sequence” to use the new Reached Target port on the Smooth nodes, and moved “Rotate in Sequence” into the vuo.motion node set.
    • Improved performance of “Show Audio Frequencies”.
    • Improved performance of “Scale Audio Input”, and kept its image trail from blurring.
    • Simplified “Compare Stereo Types”, now that window size can be specified directly in pixels.
    • Removed Make 2D Transform and Make 3D Transform nodes from compositions that no longer need them, now that 2D and 3D Transforms have input editors.
    • Removed the demonstration of “Top by Bottom Full” mode from “Compare Stero Types”, since it doesn’t fit on a typical non-Retina MacBook display.
    • Fixed a bug in “Play Blues Organ” where pressing one key, then pressing another key, then releasing the first key would cut off the note for the second key.
    • Fixed an intermittent brief sound upon starting “Play Blues Organ”.
    • Fixed flickering in “Select Gradient” when the mouse is dragged in certain directions.

Built-in Nodes, Types, and Input Editors

  • vuo.app
  • vuo.artnet
    • Fixed a bug in Make Art-Net IP Output where multiple devices that unicast to the same IP but different universes would be treated as a single device. (Thanks to @zwei-p for reporting this bug!)
  • vuo.audio
    • Added Detect Beats.
    • Added Are Samples Populated.
    • Improved performance of Calculate Amplitude for Frequencies.
    • Allowed Mix Audio Channels to be used as a typeconverter node.
    • Fixed incorrect sample rates output from Mix Audio Channels.
    • Fixed occasional crashes when stopping a composition that contains Receive Live Audio.
    • Fixed clicks caused by the Adjust Loudness node during fast changes of loudness and when starting a composition.
  • vuo.console
    • Added “Copy” and “Select All” menu items to the menu shown by Display Console Window.
    • Prevented the console window from automatically scrolling when the user has scrolled up and is not at the end.
  • vuo.data
    • Added Fetch Data.
  • vuo.event
    • Added Allow Changes.
    • Added support for more data types in Changed.
    • Removed the unnecessary doors from the Are All Hit node’s input ports.
  • vuo.file
  • vuo.font
  • vuo.image
    • Added Make Noise Image.
    • Added Make Random Image.
    • Added Posterize Image.
    • Added Blend Image with Feedback.
    • Added Is Image Populated.
    • Added Radially Offset Image RGB Channels.
    • Added Replace Opacity input port to Vignette Image.
    • Sped up the loading of large, fully-opaque images (such as JPEGs) with Fetch Image.
    • Improved performance of nodes that create an Image data value, such as Fetch Image.
    • Fixed a bug where, on some GPUs, Blend Images would output black pixels in regions where the background image was expected. (Thanks to @lov for reporting this problem!)
    • Fixed a bug where Crop Image Pixels would not limit the output image’s height to the input image’s. (Thanks to @sean.byrne for reporting this bug!)
    • Fixed a crash in Find Barcode in Image when scanning videos of certain PDF417 barcodes. (Thanks to @gabe for reporting this bug!)
    • Fixed line numbers for warnings/errors in the code entered into Make Image with Shadertoy.
    • Fixed a crash in Sample Color from Image when the point to sample is outside the image’s bounds.
    • Fixed a bug where Apply Mask ignored transparency in the input image.
    • Fixed a crash when Fetch Image received a null URL, for example if Fetch RSS Items fetched an item that lacked an image.
    • Fixed the output for Saturation inputs less than -1 in Adjust Image Colors. It now clamps at -1, keeping the saturation grayscale.
  • vuo.layer
    • Added Is Layer Populated.
  • vuo.list
    • Added Change Item in List.
    • Added Is List Populated.
  • vuo.math
    • Added Scale List and Multiply Lists. (Thanks to @lkaser for inspiring these nodes!)
    • Added Add Lists.
    • Added Are Not Equal.
    • Added Compare Numbers.
    • Added support for random, Perlin noise, simplex noise, and atan2 functions in Calculate.
    • Fixed a crash in Count within Range when the Minimum port value is one greater than the Maximum.
  • vuo.mesh
    • Added Is Mesh Populated.
    • Renamed Make Parametric Mesh to Make Parametric Grid Mesh.
  • vuo.midi
    • Added Filter and Smooth Controller.
  • vuo.motion
    • Added a Phase port to the Wave node. (Thanks to @useful design for suggesting this feature!)
    • Added a Reached Target port to Smooth with Duration, Smooth with Rate, Smooth with Inertia, and Smooth with Spring.
  • vuo.mouse
    • Improved performance of Check Mouse Status.
    • Avoided firing events from Receive Mouse Deltas for deltas that are 0 on both axes.
    • Fixed a bug where, in a fullscreen composition, Receive Mouse Clicks would report the position of the mouse as it was slightly after the click instead of at the moment of the click. (Thanks to @Bodysoulspirit for reporting this bug!)
  • vuo.osc
    • Added Send OSC Messages, Make Message, List OSC Devices, Find OSC Inputs by Name, Find OSC Outputs by Name, Get OSC Input Values, Get OSC Output Values, Make OSC Input, Make OSC Output, and Make OSC IP Output.
    • Added a Get Message Values node with 11 ports. (Thanks to @bboylalu and @zwei-p for asking about this!)
    • Replaced the Receive OSC Messages node’s UDP Port input port with a Device input port.
  • vuo.point
    • Renamed Measure Distance between Points to Measure Distance.
    • Renamed Make Parametric Grid to Make Parametric Grid Points.
    • Improved performance of Merge XY Lists and Merge XYZ Lists.
  • vuo.rss
    • Added Find RSS Items by Title, Find RSS Items by Author, and Find RSS Items by Description.
    • Added an Image URL port to Get RSS Item Values so that images can be downloaded separately from the main feed, reducing the time it takes for Fetch RSS Items to execute. (Thanks to @Bodysoulspirit for asking about this!)
  • vuo.scene
    • Added Make Fisheye Camera and Make Targeted Fisheye Camera (Vuo Pro).
    • Added Make Icosphere, Make Cone, and Make Torus.
    • Added Make Random Points Object.
    • Added Is Scene Object Populated.
    • Added support for meshes created in Blender 2.63 and later in Fetch Scene. (Thanks to @MartinusMagneson and @Bodysoulspirit for requesting this feature!)
    • Added support for FBX 2011, FBX 2012, and FBX 2013 meshes in Fetch Scene.
    • Added ports Rows and Columns to Make Cube with Materials.
    • Improved performance of Add Noise to 3D Object and Explode 3D Object.
    • Changed how the Transform is interpreted in the Copy Layer, Copy Layer with Transform, Copy 3D Object, and Copy 3D Object with Transform nodes. These nodes now respect the transform of the input layer/object in addition to the transform input of the node.
    • Renamed Make 3D Grid Lines to Make 3D Grid Lines Object and Make 3D Grid Points to Make 3D Grid Points Object.
    • Fixed the inability of Fetch Scene to load OBJ files that have multiple spaces in their texture coordinate lines. (Thanks to @ajm for reporting this bug!)
    • Fixed a bug in Displace 3D Object with Image, and other 3D object filters that rely on texture coordinates, where texture coordinates from an old 3D object input could taint a new 3D object input if the new one comes from a node such as Make 3D Grid Points that doesn’t provide texture coordinates. (Thanks to @Magneson for reporting this problem!)
    • Fixed a bug where Make Sphere and Make 3D Square would output an invalid scene when Rows and Columns are too small.
    • Fixed an inconsistency between Make 3D Square and similar nodes by making this node output a single-sided object instead of two-sided.
    • Fixed the handling of the alpha channel (opacity) when Channel is set to anything other than Alpha in the Displace Object with Image node.
    • Fixed Make Draggable Camera on Mac OS 10.11.
    • Fixed a bug in Vuo 1.2.0 alpha 4 where Make Icosphere wrapped its texture differently than Make Sphere. (Thanks to @alexmitchellmus for reporting this bug!)
  • vuo.screen
    • Avoided an unnecessary slowdown when an event hits Capture Image of Screen without changing the screen.
  • vuo.shader
    • Added Shade with Frosted Glass.
  • vuo.syphon
    • Fixed a crash in some compositions with a Make Server Description node connected to the input port of another node. (Thanks to @Magneson for reporting this crash!)
  • vuo.text
    • Added Is Text Populated.
    • Added a Minimum Decimal Places (zero padding) port to Format Number, and renamed some of the other ports for clarity. (Thanks to @pbourke for requesting this feature!)
  • vuo.time
    • Added Schedule.
    • Added Fetch Date-Time, Get Date-Time Values, Get Relative Date-Time Values, Make Date-Time, Make Relative Date-Time, Offset Date-Time, Round Date-Time, Are Date-Times Equal, Are Times-of-Day Equal, Is Time-of-Day After, Is Time-of-Day Before, Calculate Elapsed Time, and Format Date-Time. (Thanks to @bLackburst (https://vuo.org/node/198) and @pbourke (https://vuo.org/node/421) for suggesting time nodes!)
  • vuo.type
    • Added Is Real Nonzero.
    • Added more nodes to convert between real numbers and points, and renamed some of the existing nodes.
    • Renamed Convert Integer to Boolean to Is Integer Nonzero.
  • vuo.ui
  • vuo.url
  • vuo.video
    • Improved performance of video playback by using AVFoundation for some videos.
    • Enabled AAC and MP3 audio tracks on videos to be played.
    • Fixed skewed output images from Receive Live Video for certain cameras (PAR-corrected Firewire SD). (Thanks to @inadvisable for reporting this bug!)
    • Fixed a crash when using List Video Devices or Make Video Device with certain UVC USB 2.0 cameras. (Thanks to @dumski for reporting this bug!)
    • Fixed incorrect colors in the output of Receive Live Video for certain cameras, such as Logitech C250 and Microsoft LifeCam Cinema. (Thanks to @MartinusMagneson for reporting this bug!)
    • Fixed occasional crashes when stopping a composition containing Receive Live Video.
    • Fixed the pause in video playback when Play Movie receives a rapid series of events into its Playback Rate input port.
    • Fixed a bug where editing the Playback Rate port of the Play Movie node would not affect the node’s output until another event hit the Play port.
  • vuo.window
    • Added Is Cursor Populated.
    • Added a Unit port to Change Window Size and Change Window Position, adding the option to specify the input in pixels instead of points.
  • Added an input editor for 2D and 3D Transform ports.
  • Improved performance of graphics nodes (creating shaders, applying 3D object filters, calculating bounds, using cameras, rendering scenes, rendering text).
  • Changed the default image wrap mode to clamp in order to eliminate edge artifacts.
  • Added a Multisampling (antialiasing) port to Render Scene to Image, Render Layers to Image, and Render Scene to Stereo Images.
  • Made the input editor for the Real Regulation type more accommodating of “incorrect” inputs. It can now accept a Minimum that is greater than the Maximum for inverse mapping. If the Minimum and Maximum are edited so that the Default is no longer within range, the Default is clamped.
  • Added round, floor, ceil, trunc, fract, clamp, step, smoothstep, and mix functions to Calculate, Make Parametric Grid Points, Make Parametric Grid Mesh, and Make Parametric Points.
  • Added a Noise Amount input port to the Make Linear Gradient Image, Make Radial Gradient Image, Make Linear Gradient Layer, and Make Radial Gradient Layer nodes.
  • Fixed bugs with 3D objects flickering or disappearing on certain GPUs. (Thanks to @Bodysoulspirit for reporting this problem!)
  • Fixed incorrect rendering of point meshes with some shaders on certain GPUs. (Thanks to @Bodysoulspirit for reporting this bug!)
  • Fixed an intermittent crash when dragging a window from one screen to another. (Thanks to @krezrock for reporting this bug!)
  • Fixed a bug where mouse clicks/drags on the composition window’s title bar were not ignored. (Thanks to @alexmitchellmus for reporting this problem!)
  • Fixed handling of the Mac OS built-in fullscreen mode in 10.11. (Thanks to @Bodysoulspirit for reporting this problem!)
  • Fixed a bug where the Color input editor would grow vertically each time it was reopened. (Thanks to @Magneson for reporting this problem!)
  • Fixed occasional crashes when stopping a composition that renders graphics.
  • Fixed rendering glitches on some GPUs when compositing linear or radial gradients in 16bpc mode.
  • Fixed the incorrect positioning of the Color input editor. It now appears near the port.
  • Fixed incorrect scaling for some aspect ratios of grids and layers/objects in Arrange Layers in Grid and Arrange 3D Objects in Grid when Scale To Fit is true.
  • Fixed a crash in compositions with a Render Layers to Window or Render Scene to Window node when trying to quit the composition and put it in fullscreen mode at nearly the same time.
  • Fixed a bug where the window shown by Render Layers to Window or Render Scene to Window could remain showing after deleting the node if the node had an outgoing cable from its Showed Window port.
  • Fixed a bug where the window shown by Render Layers to Window or Render Scene to Window would not have focus immediately upon toggling fullscreen mode, causing a system beep for any key presses until the window was clicked to regain focus.

Vuo Editor

  • Added a “Move Composition to Node Library” / “Save Composition to Node Library” menu item to turn a composition into a reusable node class (subcomposition).
  • Enabled the “Tools > Open User Modules Folder” and “Tools > Open System Modules Folder” menu items to create these folders if they don’t exist. (Thanks to @cwright for suggesting this!)
  • Added an optional offlineFrameRate input port to the Image Generator protocol, used when exporting a movie. (Thanks to @alexmitchellmus for requesting this feature!)
  • Enabled changing the image in a running Image Filter composition by dragging an image onto the window.
  • Enabled .txt and .csv files to dropped onto a canvas window, creating a Fetch Data node.
  • Improved performance when running compositions by reducing the amount of communication between the composition and the editor.
  • In the Export Movie dialog, added the ability to change the shutter angle (Vuo Pro).
  • In the Export Movie dialog, added the ability to set custom framerates and image dimensions.
  • Collapsed the “Specialize Port” context menu into one level, no submenus, when showing only a few types.
  • Improved response time for Node Library searches.
  • Made the previews of nodes in the Node Library fit better by omitting drawers.
  • Added shortcut keys for changing the canvas transparency.
  • Made it more efficient to insert a Share Value node by adding a context menu item to the canvas, and by making the constant value on an input port propagate to the Share Value node’s input port when the Share Value node gets connected.
  • Made node placement more convenient when using the Return key in the Node Library. The new node now appears underneath the mouse cursor.
  • Enabled zooming to a selection. When “Zoom to Fit” is used while nodes or cables are selected, the canvas is zoomed to fit the selection.
  • Changed the behavior of the “Undo” keyboard shortcut to be less confusing when using the Enter key in the Node Library to create nodes. The “Undo” now applies to the canvas, not the search bar.
  • Improved readability of the error dialog for missing node classes in a composition.
  • Added the Summarize Value node as an option when automatically inserting type-converter nodes.
  • Slightly lightened the canvas color in Dark Interface.
  • Improved the formatting of Text data in popovers to make leading/trailing whitespace visible and to avoid interpreting HTML within the text.
  • Added a “Tell us what you think” button to the composition window titlebar in the free trial.
  • Added a keyboard shortcut to reopen the most recent file.
  • Added a “Random Example” menu item.
  • Improved the calculation of node width based on the title and ports, making many nodes narrower.
  • Changed ‘Pr’ icon text to ‘Pro’ (visible in some menus and dialogs when using the Free Trial or a Standard (non-Pro) license).
  • Fixed a bug where relative URLs in a composition would no longer point to the intended files after the composition was saved for the first time.
  • Fixed a crash when using the button in the crash dialog to reopen a composition after it had crashed while running in the editor.
  • Fixed the coloring of error popovers in Dark Interface.
  • Fixed a bug where type-converter nodes whose only outgoing cable was event-only would be collapsed.
  • Fixed a bug where, after connecting a data-and-event cable to an event-only. port and then undoing, the cable would appear as event-only.
  • Fixed the lack of error handling when trying to open a composition that the user doesn’t have file permission to view.
  • Fixed incorrect results when undoing or redoing while dragging a cable by temporarily disabling undo/redo during cable drags.
  • Fixed the inability to stop a composition during a live-coding reload.
  • Fixed failure in File > Export > Movie when started immediately after installing a new version of Vuo, or after installing or removing 3rd-party nodes (Thanks to @alexmitchellmus for your help troubleshooting this!)
  • Fixed the color of bullet points in node descriptions in Dark Interface mode so they contrast with the background.
  • Fixed the color of the Show Events toolbar button in dark mode when the window loses focus.
  • Fixed an occasional crash when closing many compositions in rapid succession.
  • Fixed a bug in Vuo 1.2.0 alpha 4 where changes to the Suggested Min/Max/Step on a composition’s published input port would not be preserved when the composition was turned into a subcomposition. (Thanks to @kingluma for asking about this!)

Documentation

  • Clarified the documentation for many nodes.
  • Manual
    • Updated and expanded the “Common Patterns” section.
    • Added information about subcompositions.
    • Updated many other parts of the manual.

Vuo Compiler and Runtime

  • Added the ability to turn a composition into a reusable node class (subcomposition) that can be used inside of other compositions. (Thanks to the many people who have advocated for this feature, including @mnstri for making a feature request and @George_Toledo for suggesting a feasible route to get basic subcompositions into this Vuo release.)
  • Sped up compiling of larger compositions.
  • Sped up compiling the first composition after installing a new node class. Third-party node classes are now cached separately from built-in node classes.
  • Improved performance of running compositions (memory management, AppKit event loop, exclusive locks on nodes).
  • Improved performance when running exported apps by eliminating communication that would normally go from the composition to the runner.
  • Reduced the amount of events dropped by compositions, especially in situations where a slower-firing trigger would drop all of its events because it was competing with a fast-firing trigger.
  • Fixed the 1-second wait when stopping a composition. (Thanks to @cwright for reporting this bug!)
  • Fixed memory leaks of data fired from trigger ports during live-coding reloads.

SDK

  • Composition runner API
    • Added an option (enabled by default) to exit all running compositions if the runner process dies. (Thanks to @lov for requesting this feature!)
    • Enabled a port’s menu items (for enum types) to be accessed from VuoRunner. Added a “menuItems” key to the return value of VuoRunner::Port::getDetails(). Replaced -[VuoRunnerCocoa menuItemsForType:] with a “menuItems” key in the return value of -[VuoRunnerCocoa detailsForPort]. (Thanks to @lumenav for suggesting this feature!)
    • Improved performance of VuoRunnerCocoa, VuoImageFilter, and VuoImageGenerator methods that get a composition’s image output as a GL texture. (Thanks to @lov for suggesting specific improvements!)
    • Added VuoRunnerCocoa, VuoImageFilter, and VuoImageGenerator methods that get a composition’s image output and let the caller provide the GL texture in which it will be placed. (Thanks to @lov for suggesting this!)
    • Disabled, by default, most types of telemetry from the composition to the runner to improve performance. Added “subscribe” functions (e.g. subscribeToInputPortTelemetry()) to VuoRunner for enabling specific types of telemetry.
    • Fixed a crash when running a Vuo composition that displays a window within a host app that has its own NSApplication. The Vuo composition no longer implements its own NSApplication subclass.
    • Fixed a bug where the host app’s menu bar would not be restored when a Vuo composition window resigned main status.
  • Node and type API
    • Gave shaders the ability to capture what’s been rendered so far using the renderBuffer uniform.
    • Added standard comparison functions <type>_isEqual and <type>_isLessThan to applicable types.
    • Added functions VuoLog_backtrace and VuoHeap_addTrace to help with debugging.
  • Command-line utilities
    • Fixed bug that meant that the vuo-export command-line utility didn’t copy the composition’s resources if run from a different folder than the composition
    • Avoided printing the “No Vuo license was found on this system” warning multiple times in vuo-export movie.
Version
1.2.0