Towards the Perfect Live Motion Graphics Performance Tool

October 24, 2012

I think Luz Studio has a lot going for it. The Create Digital Motion article Luz: Live Motion Graphics, Controlled by Anything, Free on Linux and Now with DMX sums it up nicely, so I’ll leave it at that.

I’m going to talk about where Luz Studio fails, and then tell you how Luz 2.0 is going to overcome those failures.

Luz Studio fails in usability.  The seven User Objects (Actors, Directors, Themes, Curves, Events, Variables, and Project Plugins) that make up a user’s Luz set are a great model and effectively encompass everything that is required to make a fantastic interactive visuals show.

In Luz Studio these seven types are presented in tabs, which is consistent and makes the internals beautiful, but it fails in that it does not convey to the new user which of these are immediately relevant and important to them.  The user interface also fails to convey the organization of these objects, presenting them as flat when in fact Directors logically contain Actors, and Directors are themselves contained and controlled by the Project Plugins.

Luz Studio uses deprecated technology.  Specifically, the Ruby-Gtk bindings project that Luz Studio uses to create the user interface has dropped OpenGL support.  Hint: OpenGL is important to Luz.  I don’t want to fight with upstream projects.  It’s a deal breaker.  This is why Luz Studio doesn’t work out-of-the-box in any Ubuntu more recent than 11.04 (released April 2011).

Luz Studio crashes. This is entirely due to the Ruby-Gtk bindings (or Luz’s misuse of them).  Ruby applications needn’t ever crash– that’s one of the beautiful benefits of an interpreted language.  Ruby bindings, written in C, are able to introduce segfaults and segfaults make kittens cry.  Luz has only seen crashes due to the Ruby-Gtk bindings, not any other bindings it uses.

Luz Studio suffers from a Stop-The-World pause.  This is caused by Ruby garbage collection (GC), but more specifically it was found to be caused by our good friend, the Ruby-Gtk bindings, which does a tremendous amount of difficult work every time Ruby GC is invoked.  With Ruby-Gtk included in a Ruby app, the GC times are almost half a second, without them they are unnoticably short.  Like under 1/100th of a second.

Luz Studio is limited to Linux.  While the original plan for Luz did involve an amount of ideological evangelism for the Linux platform, it would be neat as heck to be able to run Luz on OSX, at least.  It’s what many live performance musicians use, so it would open up the potential audience significantly.  (Windows, too, for the poor suckers stuck there.)  What makes it difficult for Luz Studio to run in OSX or Windows?  Gah, beating a dead horse here: it’s the Ruby-Gtk bindings.  The Luz Performer has always worked in OSX and Windows, because it’s a much simpler Ruby+OpenGL+SDL application.

Luz Studio is single-user.  One mouse, one user.  Friends get bored.  There was some effort at making Luz multi-user over a LAN, but this was triggering the Ruby-Gtk crashes more often, when other people did stuff, which was just intolerable.

Luz Studio is not live-playable.  This was the original goal of Luz.  Create and play visuals live.  What it is good at now is creating a toy at home, and playing it live at a show.  This is largely due to the long Stop-The-World pause introduced by Ruby-Gtk, and partly due to window management problems with Gtk OpenGL apps.

Gtk is not meant for live performance.  This was never a consideration for the toolkit.  The implications are subtle but important for Luz.  For example, the user is using a spinbox to change a decimal value from 0.5 to 0.7.  Gtk sends us a few change notifications… 0.54, 0.68, 0.7.  The changes in value are not themselves beautiful.  Wouldn’t it be great if the user could change values beautifully?

Luz 2.0

If you’ve been following along so far, then you might guess where this is going.

We’re dropping the Ruby-Gtk bindings.  The bindings served us well so far and I am personally very grateful for the work done by the Ruby-Gtk team!  It was quite a useful stepping stone, and Luz wouldn’t exist today were it not for this project binding the extremely beautiful Ruby language with the extremely beautiful Gtk toolkit.

No more Gtk bindings means no more Gtk, and we need a new way to implement a user interface.

Instead of picking a new cross-platform interface toolkit and dealing with a whole new set of problems, the plan is to implement one from scratch, using only Ruby and OpenGL.

A shockingly simple sounding solution that will solve all the problems listed above.

Work is underway on this, and while it’s a large undertaking, it’s coming along nicely  (It turns out the existing codebase of Luz is in fact quite perfect for creating a user interface library!)

The goals of 2.0 are:

  • Fullscreen, animated and beautiful interface.
  • Extremely usable and intuitive.  Usable by young people.  My target age is 4.
  • Smooth and performable creation of sets.  Creation of sets from scratch as a type of live performance.
  • Multi-user set creation, each with their own cursor on one screen, or on multiple screens on a LAN.
  • Able to load existing Luz sets.
  • Linux, OSX, Windows

This is what it looks like so far:


Zoom H1 firmware update 2.0 adds USB Digital Audio support in Linux

February 3, 2012

I’m so happy about this added functionality! I want to publicly thank Zoom for such a great free update.

The Zoom H1 makes super high quality recordings, and now also serves as a high quality digital audio mic while connected to a Linux computer.

Performing the Zoom H1 version 1.x to 2.0 upgrade in Linux

In short, this fails.

Something about writing the H1MAIN.bin to the Fat32 file system in Linux causes the very brittle upgrade process to fail. It will notice the file and begin the process, and end with “WRITE ERROR”. Thankfully it doesn’t brick the device.

The solution is to:

  1. copy your recordings off the device
  2. format the card inside the device: hold the Trash button while turning it on, then confirm the format by pressing the Record button
  3. copy the H1MAIN.bin file to the root of the device’s filesystem using a Windows computer (download Zoom H1 System Software Version 2.0 and unpack)
  4. initiate the upgrade: turn on the device while holding the Play/Pause button, then confirm the upgrade by pressing the Record button (twice)

Once upgraded, the mic functionality is detected and works automatically in Ubunutu (and presumably other Linux distros), and shows up in PulseAudio as both an Input and an Output. This means you also now have two audio outputs.

It even works in the Luz Spectrum Analyzer. 🙂 Enjoy!

Open-Source Live Interactive Visuals at ReallyBIGVideo Studios

July 25, 2011

The video and photos from the last Luz-powered interactive show have been edited together:

Luz project page.

Introducing the Luz Body Tracker

April 25, 2011

Luz is an open-source live motion graphics editor and DMX controller.

I just checked in a major new feature, the Luz Body Tracker:

In this test, the hands control the heights of the bars.  The ‘praise jebus’ variable goes to 100% when both* hands move above the shoulders, and it in turn drives the amount of the Pixel Storm effect on the scene renderer.

*This effect is accomplished by setting the variable’s ‘Combine Method’ to ‘Multiply’, as seen in the screenshot. (%56 * %73 = about 41%)

With the Luz Body Tracker, any effect in Luz including DMX lighting can be easily controlled directly by human body movement.

Want to control a theater’s lighting entirely from body movement? Luz can do that.

Luz Body Tracker was graciously tested by the kids at the after school play space LightTroupe visits. (And apparently the Kinect can track kids on swings. Whodathunkit?)

Luz Body Tracker

The Body Tracker sends values like “Human 01 / Left Hand / X”.

It can track multiple people simultaneously, and you can limit the maximum number of people (to whatever number you choose to support in your Luz project).  It’s all unattended and automatic. The Luz Body Tracker is intended to facilitate museum installations.

The raw x,y,z data for each spot on the body (shown as circles above) is converted to the 0.0-1.0 range and sent to Luz via OpenSoundControl.  Elbow, knee, and hip bend angles (0.0-1.0) are also calculated and sent.

Like in the Input Manager application, where each axis of each device is auto-calibrated, here each body part is individually auto-calibrated.  This means that someone whose elbow can’t physically raise above their shoulder will still be able to send 100% activation for “Elbow / Y”.  It means shorter people can still reach a full “Head / Y” value.

Further, elbow and hands are calibrated relative to shoulders, knees and feet are calibrated relative to hips.  In other words, your expressive limbs’ calibrations are in body-space, not stage-space.  It feels great– if you stick your right arm out as far as it’ll go, “Right Hand / X” will always hit 1.0.

Luz Body Tracker uses OpenNI+NITE for skeleton tracking. Because these aren’t provided as debian/ubuntu packages yet, the Luz Body Tracker is a little harder to compile than the rest of the Luz Studio suite.

Big thanks to Ether Snow who began the Luz Body Tracker app, got it fully working, and then handed the code and a Kinect over to me for integration into the Luz world.

Luz has enticed many non-traditional users– artists, women, kids– to install Ubuntu. It has the potential to bring thousands of non-technical folks to freedom and fun.

Please support the Luz Project— it all goes directly to feature development, creation of tutorials and documentation, and the drive towards a 1.0 release.

Luz Project Page gets Simple Install Instructions

March 11, 2011

The Luz Project Page now has simple install instructions; just a single copy and paste into a terminal on any Ubuntu desktop!

Please leave a comment with any feedback on the process.

While you’re waiting, you may like these Luz Tutorials.

And, coming soon…

Driving visuals and DMX lighting from live 3D body motion, including ridiculously easy Johnny Lee style head-tracking using just a Kinect.

If you like where this is going, please consider leaving a tip.  It all goes directly to development of “killer app” open-source software for the linux desktop!

Luz Studio 720p LightTroupe Rendering

February 4, 2011

This video was produced while testing the Luz Studio video production workflow. It has some great moments so I thought I’d share it.

Direct download of the Matroska h264 1280×720 video (47MB)

There’s a video tutorial on how to produce HD video with Luz on the Luz tutorials page.


February 3, 2011

Click for animated gif (6MB):

Made in Luz Studio.

Soon after birth, the Troopa joined LightTroupe, and got along brilliantly.

Luz is an open-source live motion-graphics editor.