Release Notes

These release notes list notable changes in each version of Blocks.

Version 4.3

Released on July 30, 2020, this version contains new features, enhancements and bug fixes.

360 degree Panorama Block

The brand new Panorama block allows you to view a 360 degree environment, such as a room or an outdoor scene. Use it to bring your audience to places they can't visit in person. It's based on a 360 degree spherical image, with hot-spots sprinkled at interesting positions, allowing you to move to other locations, play a video, or any other Blocks action.

Here's an application note with a fully working example, as well as a tutorial video.

:!: IMPORTANT: The new Panorama block is a premium block type, requiring an additional license option. As such, it is now also joined by the Live Video block, also requiring an additional license option. Blocks licenses sold before the release of version 4.3 are entitled to a free upgrade to the Live Video premium block type.

Block-specific Custom CSS URL

A custom CSS URL can now be block-directory-relative using the form ~/xxx, where xxx is the path under the referencing block's directory in the file system. This is useful for CSS that's specific to a particular block, keeping it together within the same folder, and being exported/imported along with the block.

To include additional non-block-specific CSS, such as for fonts common to several blocks, you can use @import from your block-specific CSS file, as described here:

https://developer.mozilla.org/en-US/docs/Web/CSS/@import

Re-purposing a Display Spot

While you've been able to re-assign a Display Spot to a newly added player for quite some time. you may occasionally want to do the opposite; detach an already assigned player, so it can subsequently be assigned to another Display Spot.

To facilitate this, a checkbox has been added to the Display Spot settings dialog, allowing you to discard its ID. Selecting this checkbox and clicking OK detaches the player, reverting it to its initial state, while keeping all the settings in the Display Spot.

Other Enhancements and Bug Fixes

  • Button New Append action when bound to a String property.
  • Play Behavior Added option to leave media playing when condition lo longer true.
  • PIXILAB Player Tweaked master/slave synchronization offset to improve the synchronization.
  • Network Devices Made device name parametrizable from buttons, etc.
  • Display Spot Bug fix; Setting display positions without assigned touch inputs failed.

Version 4.2

Released on June 18, 2020, this version contains a few new features and some minor enhancements and bug fixes.

Touch Interaction across Multiple Displays

When running a PIXILAB Player with multiple touch-displays connected, you can now specify the correlation between each touch surface and its corresponding display. This option has been added to the Display Spot settings when using a player with more than one connected display. Combined with the ability to position the displays in any desired arrangement, this allows you to create very large touch surfaces, spanning several displays.

Retain Position Across Temporary Loss of Network Connection

Previously, if the network connection was lost temporarily, the spot would reset to its initial view (as if the block had just been loaded) once the network connection was reestablished. This could result in a disruptive user experience on an unreliable network connection, such as a spotty wifi. Now, the spot will instead retain its current navigation position across a loss of network as long as the same block remains loaded once the connection is reestablished.

:!: An unreliable network connection may of course still result in other disruptions, and should be avoided whenever possible.

New gotoBlock Command adds Seek and Play Options

The old Display Spot gotoPage command is now deprecated. It has been replaced with a new gotoBlock command. While gotoBlock can navigate to any position within the current root block of the spot as before, it also allows you to further specify what to do when the target block is audio or video. When targeting such content, additional options now allow you to play/pause the media and to position (seek) into it.

:!: While the old gotoPage command is still functional, it has been removed from the DisplaySpot script declaration, resulting in the editor flagging this as an error. Thus, if you're using the old form of this command in a script, you should update it to the new form to gain those additional options, although the old form will continue to work despite being marked as an error by code editors.

Other Minor Enhancements and Bug Fixes

  • Attractor Reset timeout when navigating also using command from outside.
  • Network Devices Sort drivers alphabetically.
  • Live Video Spot Volume and Volume Behavior applied.
  • Book Added Transition Start Delay.
  • Behavior Appears/Disappears can set value to empty (i.e., empty no longer implies true).
  • MacOS Fixed a code-signing issue that could cause Blocks not to launch.

Version 4.1

Released on May 25, 2020, version 4.1 contains some significant new features and enhancements.

Active Synchronization

Blocks now applies active synchronization when using a Synchronizer block on PIXILAB Player or Chrome/Chromium for desktop and Android. This enhanced synchronization provides the following benefits:

  • Maintains accurate synchronization over long time spans (while the start-and-forget sync only provided an accurate start position, which then could drift over time).
  • Allows synchronized content to be looped seamlessly.

This enhanced synchronization works by making minute speed adjustments to video as it plays. Since seamless speed adjustment isn't supported by some browsers (e.g., Safari), this mechanism works only works on select players and browsers.

New Wipe Behavior

A new behavior has been added, allowing a block to be masked from either edge. Watch this video for an example of how that behavior can be used. Download the complete application note, including a working Blocks project, here.

Mirror Server

A new "Mirroring Service" entry has been added to the Manage page, showing the status of any Mirror Server attached to your Blocks server. This is an add-on feature of Blocks, allowing you to have a second server for redundancy purposes. The mirroring service, running in the background on both the Blocks Server and the Mirror service, copies all changes made to your running Blocks system over to the Mirror Server. The Mirror Server has Blocks installed, and is essentially a full copy of your Blocks server. By keeping its data in sync with the main Blocks Server at all times, it is ready to take over running your Blocks system, should the main Blocks Server fail.

RTMP Live Video

RTMP is yet another format for streaming video, now supported by Blocks. While similar in some ways to RTSP, which was added in Blocks 4.0, RTMP works with other devices and programs. RTSP is supported mainly by network cameras and some streaming boxes (such as this one). RTMP, on the other hand, can be streamed using applications such as OBS and vMix, as well as some hardware devices, like the popular ATEM Mini Pro from Blackmagic. Learn more about how to use RTMP with Blocks here.

As part of the Blocks 4.1 release, we've also made significant updates to other system components.

  • The Linux version used by our Linux server image has been updated to Ubuntu 20.04 LTS.
  • The Java runtime is updated to version 11, which is the current LTS version.
  • The Web Renderer used for thumbnail rendering, and by the WebRenderer scripting API, now uses Chromium on all platforms. (It previously used another method for rendering on Mac/Windows.)

Version 4.0.1

Released on April 30, 2020, this version contains mainly bug fixes and minor enhancements.

  • Reveal Behavior Now works also inside Locator or Reference.
  • Volume Behavior Fixed a problem on some mobile devices.
  • Volume Behavior Doesn't work on iOS (not supported by iOS).
  • Speed Behavior Ignore "too low speed" browser exceptions silently.
  • Book Child blocks can now override book dimensions.
  • Book Swipe to navigate works also with pages named only with digits,
  • Book Exclude swipe navigation for back button purposes.
  • Synchronizer Made media sync properly also inside Scroller.
  • Reference Block Refresh preview in editor on various setting changes.
  • Locator Ensure new spot always opened when locating by scanner while playing other.
  • Locator A QR code scan can jump directly from one spot to another.
  • Button/Indicator Picker added for selecting the target root block.
  • WATCHOUT Support auxiliary timelines in folders.
  • Spot Fixed a rare websocket connection failure caused by temporary loss of wifi.
  • Scripting Fire 'Spot connected' a bit later, after setting any Block.
  • Scripting Improved some error messages to better indicate location in script.

Version 4

Released on March 17, 2020, this version brings new features as well as minor enhancements.

New features

  • Behaviors attached to blocks provides new levels of interactivity.
  • QR Code new block type.
  • Low Latency Live Video: Local capture (USB) and network camera/encoder (RTSP).
  • Swipe to flip pages in Book blocks.
  • Spot Parameters are now unified with other properties under "Local".
  • Spot Parameters also accessible as system properties under <spotname>.parameter.xxx
  • Go Back Button action backtracks local navigation.
  • Locate Spot by Name in Button (for use with invisible Locator)
  • RFID/QR scanning support in Locator (augments manual method for entering location ID).
  • Hidden numeric keypad in Locator (for use with RDID/QR/Button navigation).
  • Go Back action added to Locator Exit button.
  • RFID/QR scanning support added to Spot (exposed as Spot property).
  • Reference Block Target block can be specified using a property.
  • Modbus adds configurable poll rate for inputs.
  • Modbus supports 32 bit floating point inputs.
  • Modbus supports full 16-bit address (0-65535).
  • SimpleWebsocket new scripting API for connecting to external servers.
  • Spot API reload function, usable from Task and User Script.
  • Spot API locateSpot function, forcing a Locator to a specified location.

Improved or changed

  • Synchronizer faster switching of synchronized content.
  • Task evaluates trigger condition on start even if task has no explicit trigger.
  • Video in Scroller set to auto-play starts playback once scrolled into view.
  • iPadOS 13+ support for Visitor Spot to play audio.
  • Roles Creator can no longer access Manage page or create/edit Spots.
  • Instagram Block Removed (no longer supported).
  • Serve pre-compressed content (file.gz) under /public (when requested by client).
  • Reference Block opens referenced block when double-clicked in child block list.

Version 3.3

Released on November 15, 2019, this version brings some news as well as some bug fixes and minor enhancements.

New features

A Text block can now be used as a direct child of Scroller, where its size is determined by the text. This is useful when creating more traditional web-style pages mixing text and images. As a result, the command to add Text has been moved from the Add Control to the Add Child menu.

You can now also add basic padding to Text blocks.

Bug fixes and minor enhancements

  • Scroller: Child block can be selected by clicking the content.
  • Block Editor: Fixed an editor crash caused by specifying an invalid background color.
  • Scroller: Positioned properly when used as a direct child of a Composition.
  • Transition: Made Push, SlideIn and Dissolve work more reliably on Chrome-style browsers.
  • Scroller: Children can use natural dimensions in scroll direction also when scroller is nested.
  • Scroller: Apply custom classes properly.
  • Scroller: Fit oversized Reference blocks in the non-scroll direction
  • Custom CSS: Hoist CSS path when wrapping a block.
  • Duplicate command: Handle numeric suffix > 9 properly.
  • Synchronizer: Fixed a rare playback start delay.
  • Locator: Removed repeated properties in editor for root level Locator.
  • SimpleFile: Increased max file size from 100k to 2M.
  • Interactive elements: Show cursor if appropriate also after (re)loading a block.

Version 3.2.1

Released on October 1, 2019, this version contains mainly bug fixes and minor enhancements.

  • Text Block: Use white insertion point also on dark checkerboard background.
  • Block lists: Paste before any selected block rather than always appending.
  • Transitions: Consider wrapping as well for possible direction reversal.
  • Transitions: Improved reliability when used with reference blocks.
  • CSS: Apply to editor also when starting out at an inner block.
  • Drivers: Made max string receive length setter work for network devices.
  • Spot Parameters: Now work also with Dynamic Text and Text Input.
  • SSO: Allow log-out through menu command in Blocks.
  • Locator: Superimpose any parameters from located spot while there.
  • Block lists editor: Use indexes only in URL when editing child blocks.
  • Tizen Displays: Now works also with Samsung SSSP gen 5.

Version 3.2

Released on August 23, 2019, version 3.2 contains several significant new features.

  • Spot: Transition for block changes.
  • Book: Transition for page changes.
  • Composition: Press Shift while resizing to constrain image/video aspect ratio.
  • Composition: Configurable grid size for editor snapping.
  • Block: Hierarchy view for visualization and navigation.
  • Display Spot: Keyboard key 0…9 can be used as general purpose inputs (Spot option).
  • Book: Applies CSS class 'first-child' and 'last-child' to the first/last page element.
  • Spot Parameters: Allow use also for Realm variables and User Script Properties.
  • Logs: Changed from JSON format to plain text for better readability.
  • Locator: Settings available also when used as a child block.
  • Spot: Hidden in UI when can't be controlled by current user's role.
  • Block Group: Hidden when no blocks accessible to the current user's role.
  • CSS: Live-apply custom class change of child blocks in editor.
  • Editor: URL follows child block navigation, allowing the back button to be used.
  • Scripting: Fixed a bug in the SimpleFile append method.
  • Scripting: Added setMaxLineLength to NetworkTCP.

Version 3.1

This version, released on July 10, 2019, contains numerous small but important features and enhancements.

  • Media: Improved performance when playing large video files.
  • Display Spot: Can be added tentatively, without assigning a pending ID.
  • Block: Export/import using ZIP file.
  • Block: When duplicating a root block, ask for duplicate name up front.
  • Synchronizer: Child Video/Audio will no longer auto-play unless set to do so.
  • Synchronizer: Always use preferred sync master, even if offline.
  • Synchronizer: WATCHOUT Spot can act as synch master for Display Spots.
  • Licensing: Add unlimited number of Spots (but only USE the number licensed).
  • Licensing: Added time-limited Producer license option (terminates after 4 hours).
  • Licensing: Added date-limited Evaluation license option (expires after 30 days).
  • Spot Parameters: Can now also be set through URL query parameters
  • Roles: Allow Creator role to rename blocks.
  • Text: Use white caret for editing text on dark Composition background.
  • Security: Allow keyStorePath to be relative to PIXILAB-Blocks-root.
  • Security: Hide and restrict Realms and Tasks for roles below Manager.
  • Attractor: When using nested Attractors, only outermost governs Spot's active state.
  • DMX/Artnet: Auto-population of Generic types now works also under Windows.
  • Task: Added Duplicate command and fixed a Copy/Paste error.
  • Scripting: Authentication now optional for SimpleMail.
  • Scripting: SimpleFile now provides lastModified, list and delete entire directory.
  • Scripting: New SimpleImage service to analyze, scale and crop images
  • Networking: WebDav server support added.

Version 3.0

This is a major new version, released on June 1, 2019, with the following noteworthy enhancements and changes.

  • Duplicate a root level block. This is particularly useful when using a block as a template for making new blocks, then tailoring the copy to your liking.
  • Copy/paste between root blocks. Related media files are automatically copied across, keeping each block self-contained.
  • Copy/paste of entire tasks, between task groups or across realms.
  • New names for some spot types that we hope more accurately describe their purposes. The Mobile spot has been renamed Visitor spot, and the Virtual spot has been renamed to Location.
  • Built-in support for using multiple displays with a Display spot when using the PIXILAB Player.
  • Using the PIXILAB Player, you can choose the desired audio output device and profile.
  • The Linux-based server supports network booting (PXE) of PIXILAB Player PCs.
  • A spot can be reassigned to a new player.
  • Parameters can be used when binding buttons and other controls to their target properties. Useful when you want a target property to vary with the context.
  • Authentication of users supported in a number of ways, including enterprise-grade single-sign-on solutions.
  • Authorization based on user roles to perform various functions in or with Blocks.
  • User scripts can now send emails.
  • Device drivers can expose dynamic properties defined by code, depending on the circumstances.
  • The updated Linux-based server image is now based on Ubuntu 18.04 LTS, with numerous enhancements to further increase the robustness of the server.

Version 2.3

This version, introduced on December 14, 2018, adds a significant number of minor features and enhancements.

:!: Important notice to Windows users: When updating to this version, please download and install the complete Windows version (after uninstalling the previous version), as a number of components have been updated.

New Features

  • Composition and Text: More checkerboard styles in editor.
  • Composition: Manual scale editor setting.
  • Video: Progress indicator (if enabled) will appear initially before starting playback.
  • Video: Stop playing automatically when scrolled out of view.
  • Slideshow: Checkbox controlling whether audio/video pauses with slideshow.
  • Slideshow: Video with explicit duration will loop if required to fill duration.
  • Media files: Ask what to do when adding a file that already exists in the block.
  • Live Video: Stream can be paused and resumed.
  • Live Video: Video that includes audio can be started manually on iOS.
  • Licensing: License key can now be accessed over the LAN.
  • Video with controller: Add 'playing' CSS class to enclosing media-placeholder while playing.
  • Scripting: Relax return type for @resource methods (also includes Promise).
  • Display Spot: Added scrollTo method, allowing scrolling from task/script.
  • Display Spot: Added time property accessible from task/script.
  • Audio: Added optional progress bar/control.

Bug Fixes and Minor Tweaks

  • Button: Can use .. to navigate out of a block added by a Reference.
  • Video: Video without audio track set to "play inline" now appears reliably on iPhone.
  • Reference Block: Fixed a problem when used to include video in a slideshow.
  • Slide Show: Don't show incorrect duration for unknown duration.
  • Slide Show: Some transitions didn't work with Reference Blocks.
  • Bug: Block Group disappeared when making a Block with a name starting with #.
  • Attractor: Make active content appear on Mobile Spot.
  • Attractor: Made spot play/pause propagate into any currently active block.
  • Synchronizer: Now works inside an Attractor also on Mobile Spot.
  • Video/Audio: Fixed sometimes incorrectly shown duration.
  • Undo: Make changes applied to sub-blocks after using Undo work.
  • Media Block: Custom CSS class was not applied when used for plain image.
  • Block Editor: Wrap With should not include Locator.
  • Locator: Content inside Scroller sometimes didn't show properly
  • Text: Duplicating text now includes property bindings.
  • Text: Fixed a bug editing nested text with property bindings.
  • Text: Sanitize bound string properties before showing.
  • Licensing: Improved handling of "license count exceeded" situations
  • Scripting: Navigation event missing when navigating into a child of a Referenced block.
  • Scrollable: Allow mouse selection and resize in Composition editor.

Version 2.2

This version brings a number of new features, minor tweaks and bug fixes. For more advanced Blocks developers and scripters, there are also a number of API enhancements, described in more detail below.

New features

  • Text Input: New control, allowing properties to be changed by typing.
  • Text Block: Added dynamic text support (see below).
  • Media Block with video: Option to show a progress bar, with time and duration.
  • Display Spot: Checkbox for automatic/manual power management.
  • Display Spot: Improved WoL power management for PIXILAB Player
  • Slideshow: Added "Crossfade" transition, useful when transparency is involved.
  • Custom CSS styling, Tags: Tags now also applied as CSS classes with name tag-XXX on root level element.
  • Custom CSS styling, Indicator: Can apply a CSS class while "on" to its enclosing block's element.
  • Server configuration: CORS headers supported for /rest endpoints.

Bug fixes and tweaks

  • Media Block with video: Improved manual play/pause button behavior
  • Media Block with video: Looping now forces looping instead of merely hinting the default behavior.
  • Live Video: Add poll interval option to polling JPEG.
  • Scroller: Made scrolling work also inside a Composition.
  • Network UDP Device: Enable broadcast use.

Dynamic Text

The Text block can now incorporate dynamic text, originating from bound properties in a way similar to how Indicators and Bars work. After adding a property to a Text block, the property can be referenced inside the text using the following syntax:

{$1}

Where '1' here is an index number that refers to the first property. You can add multiple properties to a text block, making them all available for inclusion in the text using this syntax.

In addition to the property index number, some data types also accept additional formatting options. These options are separated from the property number (as well as from each other, when using more than one) by a colon. For example, a boolean value is by default rendered as 'true' or 'false'. If you instead want it to be shown as 'YES' and 'NO', reference the property like this:

{$1:true=YES:false=NO}

This example uses the 'true' and 'false' formatting options to specify how to render those states. See below for available formatting options available for each data type.

boolean

  • true What to show when the value is true.
  • false What to show when the value is false.

number

  • scale Factor to multiply value by (e.g., 100 to show as percentage).
  • fixed Number of decimals to show. Specify 0 to not show any decimals.

time

  • show Which parts of the time value to show, as any combination of hmsf (i.e., hours, minutes, seconds, fractions).

For example, if you only want to show minutes and seconds for a time value (such as the current time position in a video), reference the property like this:

{$1:show=ms}

User Scripting

The advanced scripting API had a number of new features added in 2.2. In order to use these new features, make sure you update to the latest version of the Block scripting system files found on our github page – in particular those found under /system and /system_lib.

  • WATCHOUT: Added aux timeline subscription.
  • SimpleServer: Can now create a TCP server.
  • SimpleFile: Can now copy, move and delete files.
  • Display Spot: New 'navigation' event indicating manual page navigation.
  • Display Spot: Added tryGotoPage, returning a promise rejected if it page doesn't exist.
  • New getProperty method with property change notification callback and associated PropertyAccessor object.

Web API invocation

This feature is of interest when developing custom solutions around Blocks, involving custom clients (web browser based, or originating from other web services).

You can invoke a method in a user script by making a POST request to

/rest/script/invoke/{script}/{method}

with {script} and {method} being the name of a user script and a method in that script. The method to be invoked must be marked with a @resource() annotation in order to make it accessible in this way.

A JSON object, passed as the body of the request, is decoded and passed to the method. The method can return a single object, which will be automatically JSON encoded and returned to the web client.

A 500 error code, will be returned if an error occurs, with error message string as the body.

Custom File Uploads

Upload a file using a multipart form by POSTing to /rest/upload/multipart with following form items:

  • file The file itself.
  • target Subdirectory under temp to upload to.
  • fileName Optional filename to use for the file. If not specified, this is taken from "file" field. You can request a server-created name using an asterisk, such as "*.jpg".

Returns the path to the file relative to the temp directory. This can be passed to a Web API invocation, as described above, for further processing, e.g., using the SimpleFile API.

Version 2.1

New features

  • Live Video: New block type displaying live video streams.
  • Widget: Block displaying live feeds such as news, weather, clocks, maps, etc.
  • Attractor: Adds activation by touch/click.
  • Attractor: Adds deactivation after timeout.
  • Synchronizer: Adds Loop checkbox, controlling whether content loops or runs just once.
  • Widget and Web block: Content scaling added.
  • Button: Multiple functions can be assigned.
  • NetworkTCP: Allow sendBytes and sendText to be used interchangeably.
  • Blocks server no longer requires GUI (mainly useful under Linux).
  • Controls: Title can now also be shown above the control
  • WATCHOUT: Added layerConditions property
  • Display Spot: Added forceTags() function to override local tags

Bug fixes and tweaks

  • Slideshow: Don't skip 1st slide if no transition set
  • Slideshow: Permit looping of a slide if its duration is overridden
  • Media block: Renders video start button in the right place also inside a Scroller.
  • Book: Can be resized after creation.
  • Synchronizer: Now works properly with spots grouped more that one level deep.
  • Tasks: Skip over MacOS "leftover" realm files ("._XXX") also under Windows
  • Spot: Improved server side logging of errors occurring in Display Spots
  • License management: Sometimes failed to start if another CodeMeter dongle was connected.
  • Block deletion: Handle "busy" blocks under Windows, where in-use files can't be deleted.
  • Task: Renamed "Automatic" trigger to "Server Startup"
  • Task: Don't re-run "Server Startup" when task is edited
  • Task Scheduling: Now works more reliably.
  • Task await statement: bug fixes
  • Book: Sized and positioned properly when used in Composition.
  • Slideshow: bug fixes
  • Reference block: bug fixes
  • When using Chrome on Mac, video no longer appear out of place in some cases.
  • Composition: Allow negative offsets, so a composition can be used for cropping
  • Attractor: Set Spot as "active" when gotoPage shows an active page.
  • Windows-based server: Render block names containing diacritical marks properly
  • Windows-based server: Set memory heap size explicitly to avoid out-of-memory errors

Version 2

  • Scroller block for horizontal or vertical scrolling.
  • Reference block to include blocks in other blocks.
  • Art-Net/DMX512 control from buttons, sliders and tasks.
  • Built-in and extensible lighting fixture library.
  • Media block has additional controls for inline/fullscreen playback on iOS.
  • Spot group gives explicit control over Synchronizer master spot.
  • Index-based page navigation from buttons and tasks.
  • Incremental (next/previous) page navigation.
  • New “note” statement for adding comments to tasks.
  • New “await” statement for running long-running statements in parallel.
  • Advanced scripting for complex control applications.
  • License management, showing licenses available and in use.