Fork me on GitHub


Active 2018 - Contributors: Brendan Whitfield

LZR is a collection of back-end libraries and binaries which can form the bones of laser show GUIs, or creative applications.

Laser projection software

  • Technologies: C++, Qt, ZeroMQ, SDL 2.0
  • Source Code
  • License: LGPL v3

In the press

Excerpt from project website

One of my many hobbies is making laser light shows. To facilitate this, I have begun crafting my own software for drawing and transmitting lasers graphics. This project, called LZR, is currently a collection of backend libraries and binaries which can form the bones of laser show GUIs, or creative applications. It features basic point manipulation functions, an ILDA file parser (laser graphics file format), and a ZeroMQ daemon for handling inter-process communication.

In order to transmit graphics to the laser projector, a little bit of hardware is needed. This hardware typically comes in the form of a digital to analog adapter (DAC). Currently, this project is setup to communicate with the EtherDream Laser DAC developed by Jacob Potter.

The liblzr library, written in C++, currently provides the following utilities:

  • Point & frame structures
  • Fundamental frame effects (rotation, scale, mirroring, etc…)
  • Frame interpolator
  • Frame optimizer, for recalculating the vector graphics
  • ILDA file reader & writer
  • ZeroMQ transport functions

The library is also joined by a hardware daemon called lzrd. This daemon/driver accepts frames via ZeroMQ and contains all of the DAC-specific code needed to send frames to the hardware. It is meant to provide a common interface to programs using liblzr.

Since setting up the hardware can be cumbersome, there is also a preview application called lzrv. By listening to the ZeroMQ traffic heading to lzrd, this application can give you a real-time view of your laser projector. This is great for working offline, and debugging your system. It is written with SDL 2, and has hotkeys for viewing blanking jumps, as well as individual points.

My ultimate goal with this project is to craft my own interface for composing laser light shows. To that end, I have also begun development of a GUI interface. Written in Qt, the application above can already create and manipulate laser frames. It provides basic tools for working with vector laser graphics, such as selection, drawing, point deletion, etc. It takes a path-centric approach, meant to abstract the logistics of laser blanking.

This frame editor is only a small piece of the intended interface. Things left on the docket include a variety of timeline editing tools, as well as an effects stack for generating procedural graphics.