In Norway, the Sun is up past midnight 6 weeks out of the year, and that messes with our compression algorithm.
Skyspace Updates 7 years later
Task: Bug Fix!

After working with the artist James Turrell on a small private lighting installation, Three Byte was commissioned again to create a new piece of software to control one of Turrell’s most celebrated and popular installations, the Skyspace. Prior to Three Byte’s involvement, almost every Skyspace was created using a slightly different lighting system and venue-specific control software. What he for was a system that could be used to control any lighting fixtures using standard DMX, along with an easily usable lighting control board. In addition, two primary features make programming a Skyspace installation particularly difficult. First, the light program needs to expand and contract based on the length of twilight each day. Second, because each program is unique to the sunset in a particular location on a given day, you can’t back up the program and rehearse it again. If you miss a cue, you can’t see it again until the next day.

Screenshot of SkySpace Controller UI (usually runs on dual monitors)

The Skyspace Control Console is a WPF application that is the primary controller of the Skyspace system, it communicates with nearly any lighting system with a PathPort interface, streaming 16-bit DMX. The software consists of two screens – the programming console and the timing monitor. The programming console contains an editable 24-hour timeline where lighting cues are added and edited. Much like video and audio editing software, the timeline here can have many layers in which multiple light fixtures can be grouped and affected together. The timing monitor shows vital information about the currently playing show; including a live preview of DMX light levels and current cue information as well as sunrise and sunset times, and current sun angle based on current user set GPS coordinates.  

In order to accommodate the constantly changing program and cue durations, we implemented an algorithm based on the current date and time to find the angle of the sun and calculate a “Twilight Compression” ratio each day.

The Skyspace control software is highly configurable, allowing for easy customization for each unique installation and has a cue and timeline system for easy programming of the look of the installation. A custom hardware controller allows for easy creation and editing and can be used with any installation using the Skyspace control software.  In addition to the main software and the hardware controller, an application was developed for the Windows Surface tablet to control Skyspace systems remotely.

Hardware Controller w/ endless scroll wheels and buttons with two way feedback from the SkySpace Software

The hardware controller communicates with the software via USB serial, in order to control light choices as well as insert and edit cues in the timeline. The controller consists of 10 endless encoders – 8 to control light groups, one master and a resolution encoder. DMX channels can be mapped to one of the first 8 encoders, allowing control of an entire DMX universe from one encoder. In order to maximize control of the light system, each layer of the timeline is associated with a page of encoders. Having multiple pages allows for the 8 encoders to be reassigned on demand, based on the previous configuration.

The Skyspace Remote app (implemented as a Windows Store/UWP app) allows clients to easily select a Skyspace “mode” to show on the system as well as configure what modes are available. A local web service runs on each system to act as a proxy between the remote app and the actual control software. The web service uses the ASP.NET MVC web API feature and exposes all available modes as well as configuration information.

After 75+ installs all around the world, we found a bug! There happens to be an installation in Norway where for 6 weeks during summer the twilight still occurs after midnight.

The problem is that we tightly bound the program clock to the local clock of the PC, and we recompress the next day's program based on DateChange. It's Ironic that at 3-Byte we have designed arbitrary 28 hour day clocks in several scheduling/control systems for Videowalls in Times Square and Dallas, so that one can schedule a schedule for a day to 4am, and have it reported correctly for billing & reporting purposes. We didn't think of that problem here. It simply goes to show how important it is to be able to maintain code- which means writing good code from the get-go. At 3-Byte we have a very strong Software Development Methodology & DevOps culture in place, from writing Unit Tests, Peer Code Review, CI (We use TeamCity) and deployment automation.

The solution was an offset, but it wasn’t easy to implement, we didn’t want to break any installations and didn’t want to make a hack. When we created the offset functionality, we made sure to write a Unit test, and then I also ran multiple VM’s with clock offsets and video screen captured them over the course of a few days to make sure the software worked as expected.

Unit Test Screenshot (MS Test)

Unit Test

Testing the changes in Virtual Machines

We ran 4 instances each of both Win 7 and Win 10 Machines configured for different installations and time zones and screen-capped the UI and speed up the playback time by x32 in order to perform a high speed scrub and look for any failures our unit test may have missed.

Project Photos