November: A Cautionary Tale

Lotus Lives New Video Player

Earlier this year, I upgraded the programming and staging options for my projections in Su Lian Tan’s opera, Lotus Lives. It had been running on the live performance video software VDMX (which I love), but I wanted to create a more customized setup with an interactive cue sheet and single-button operation. I made a patch in Max, and ran it during a performance in Boston without a hitch.


The cue sheet is a table (Max jit.cellblock object) with the columns:

cue number
measure number (in the score)
cue notes (when to trigger the next cue)
active screens
whether the media is a still image or movie

Here is my documentation for the video playback:


Lotus Lives is a chamber opera for two singers, a brass quintet, and percussion.

Video plays throughout the performance, sometimes acting as the set, and other times taking center stage.

It is designed to be flexible. A basic concert performance uses only one screen, plus audio playback, while the full staging uses multiple projectors with video mapped onto 12 surfaces. And it is possible to stage versions with complexity in between. It should adapt to fit the performance space.

The video is broken into sections ranging from 30 seconds to 5 minutes long. The end of each section has a tail of extra video, which will play until the video operator launches the next clip. This way, the video remains in sync with the live performers, who don’t have to cater their actions to the technology.

The playback software has two parts: the Controller and the Player.

The Controller is like a smart remote control, operated from a single computer to trigger the cues. The Player is the program that actually plays the media clips for projection.

Both can be on the same computer, or it is possible to have Players on multiple computers, one for each projector, controlled from a single Controller over a network.

The software is written in a program called Max (Max/MSP/Jitter). If projecting onto multiple surfaces from one projector, additional video mapping software is needed. Technical details about the software and mapping are below.

It’s also possible to run this media on other performance playback software (Isadora, Resolume, VDMX, modul8, etc.), in which case the fade timing would need to be set according to the cue list.

The Set


lotusmirrorcThe video surfaces are:

(A) a large central screen above or behind the performers.
(B) four banners on either side of this screen (for a total of eight).
(C) a dressing room “mirror” set piece (best as rear-projection).
(D) projection across the width of the stage, onto a handheld scrim during the ballet sequence, and onto the performers as a lighting effect at other times.
(E) projection onto the walls and ceiling of the performance space, to fill the venue with rippling light during the climax of the Folktale.

The video is meant to be immersive, and the size and placement of the surfaces can be tailored to each production. The only thing that needs to be maintained is the aspect ratio of each surface, and relative distance between the banners.

The aspect ratios are:

(A) 1.78:1 (16:9)
(B) 1:4 for each banner, to be spaced 1/2 the banners’ width from each other, four on each side of surface A.
(C) 1.14:1, which is a 1:1 square with an additional border on the left, right, and top.
(D) 4:1. The handheld scrim should be a white or gray mesh suitable for projections, about 7′ high and the width of the stage, or at least 30′.
(E) This is an abstract rippling texture meant to fill as much of the performance space’s ceiling and walls as possible at one point during the Folktale. While the source movie is 16:9, the projected aspect ratio does not matter.

The Media

The “media” folder contains QuickTime movies and audio for playback. These use the ProRes 422-LT codec, which has a lower data rate than the master clips (saved as ProRes 422-HQ) but maintains quality.

There is also an audio folder which contains .aif audio files, which are to be updated with recordings by the performers. See “Setting Up Audio Clips” below for details.

There are four versions of the video, which are configurations for different projection setups.

V1: This is for running projections from multiple networked computers. There is one screen per video, with the exception of surface B.

For surface B, all eight banners are composited onto this video, so it will need to be sliced up with mapping software.

V2: This is the version for one screen only. Critical elements that would be lost by eliminating surfaces B-E are included on this single, main-screen video.

V3: This has all the surfaces composited onto one large movie, to be mapped onto multiple screens from one projector, or multiple projectors from one computer.

V4: This is surfaces A and E composited into one movie, since it’s likely that a single projector can be used for both surfaces. Mapping is required.

I have prepared and included MadMapper files for V1-B, V3, and V4.

Setting Up the Computer

While Max runs on Mac or Windows, I have only tested this patch for Mac. Additionally, the output for mapping with MadMapper uses a Mac-only framework, called Syphon.

You will need to install:

Max (version 7 or later)
Max is free if using it for running files like the Lotus Controller and Player. A paid license is only needed for saving changes, after the free trial period.

– Apple ProRes codec
Probably installed on any Mac with QuickTime; also available for download from Apple.

If mapping the video output:

Syphon for Jitter
Syphon is a Mac OS framework that allows multiple applications to share the same space in video memory, without a hit to performance. This is how the video gets to the mapping software.

To install Syphon, unzip the package, then move the Syphon folder into Users/[user]/Documents/Max 7/Packages

– Mapping software of choice
I use MadMapper.
It does require a paid license, but it’s easy to use and runs beautifully. There are other options (search for “projection mapping software”). Max can also handle mapping, although this Player isn’t set up for it.

Setting Up Audio Clips:

In addition to movies 301 and 401, which have stereo audio tracks, there are four more separate audio clips that will play back in sync with the video. These are recordings of the performers, and need to be prepared for each production.

The reference folder of the Lotus hard drive contains QuickTime movies of the subtitled narration, which can be read karaoke-style for exact timing.

Once the new audio files are placed in the media/audio folder of the playback drive, with the specified file name, the Player will play them back at the correct point during the performance.

The Lotus Player

This runs the video and audio for Lotus Lives, controlled by the Lotus Lives Controller. It should be on the computer that’s hooked up to the projector.

Double-clicking Lotus Player.maxpat will launch Max, and open the Player.



1. Select which surface video you want to run.

2. Click CHECK FILE PATHS to make sure the Player can find the media. If the media is on a drive other than “lotus,” click Set Movie / Audio File Path and find the folder with the media.

3. If the Controller is on the same computer, leave “controller” set to “local.” If it’s on a different computer on the same network, select “network.” Be sure “network” is selected on the Controller too.

4. Set the video output:

4a. If projecting directly from the Player, move the “projector” window to the projector display. If the projector is attached when launching the Player, the “projector” window will already be on the second display.

4b. If mapping the video output with a program that uses the Syphon framework (like MadMapper), select “Syphon,” then launch the program and use that for display.

5. Test the audio, and set levels for the individual clips. From the Controller, select cue 301 or 401 for movies with audio. Press “play” below the levels sliders on the Player for the additional clips.

5a. The audio clip levels will not save when the Player is closed, but you can make note of the numerical setting, and adjust it the next time you launch the Player.

5b. The beat in 601 should be played live, so by default it will not play; but it can be cued for playback too by selecting the toggle next to the levels slider.


window visible – toggles whether the “projector” window is visible. Turns off if Syphon is selected.

video render – refreshes the video screen. Video will not appear to play if this is off.

audio – turns audio playback on and off.

video fullscreen – toggles whether the “projector” window is fullscreen. Also activated by the escape key.

hide menubar & cursor on fullscreen – use this option if presenting the window on the same screen as the Player, ie. if the projector is the only display.

Load Calibration Grid – this will load a calibration grid for the selected surface.

play, pause, restart, eject – controls playback of the video in either bank.

slider – A/B fade. Operates automatically when the GO button is triggered on the Controller.

“X” toggle next to audio sliders – enables or disables individual audio clips.

play for audio sliders – manual playback of audio clips, for testing purposes.

The Lotus Controller

This controls the video Player(s), which can be on this computer, or networked over several different computers.

Double-clicking Lotus Controller.maxpat will launch Max, and open the Controller.



1. Launch the Controller and the Player(s)

2. Set the settings on the Player(s)

3. START THINGS RUNNING by pressing the “Run” button

4. Go to the first cue by pressing “go to beginning of show,” or the GO button several times, until the CURRENT Cue # is “1 – BLACK”

5. Press GO or the space bar to trigger the next cue

Duration is an estimated countdown to the next cue. Actual time will vary depending on the performance, but it will let you know when to be ready.

Also keep an eye on Cue Notes, which is a description of when the next cue occurs.


Black – toggles a fast fade to / from black, and pauses the active movie.

Grid – activates a calibration grid on all Players.

CURRENT Cue # and Description – what’s playing now.

NEXT Cue # and Description – what’s cued up to play when GO is pressed. NEXT Cue # is a dropdown menu, so you can jump directly to any cue.

Fade is the duration of the crossfade from current to next clips. This can be adjusted manually, but will automatically set according to the cue list.

Measure – The measure of the next cue in the score.

play – plays the active movie

pause – pauses the active movie

restart – goes to the beginning of the active movie

eject – clears the active movie from the Player

previous and next move forward and backward through the next cue to be loaded.

go to beginning of show
– loads the first cue up next

open cue list – this is the cue sheet in table form, which is where all the playback data is stored. Editing this will affect the show’s playback.

Local / Network – If the Controller and the Player are on the same computer, keep the lower-right setting on local. If networking several computers, select network on the Controller and all Players. It is recommended to have a dedicated network, wired if possible.

Star Box

My toddler loves looking at stars projected on her ceiling before bedtime.

I had ideas for a homemade planetarium using laser-cut shapes and programmed full-color LEDs. But then I thought I’d just drill holes in a metal box and use my phone’s flashlight. It took 10 minutes and works great.




Standup Reminder

I rarely sit down from call time to wrap during film production. But when editing, the reverse is true, and I find that’s far worse for the body.

Here’s a reminder program I built to run in the corner of my desktop.


When the blue dial lights up (every 12 minutes), I drink water; the green dial (30 minutes), I stand up and stretch for a moment; yellow (55 minutes), I take a walk and look outside.


Times are adjustable. If you ignore a reminder and it goes around twice, it turns red. Click on the dial to reset.

It works!

The Standup Reminder uses a few simple UI elements in the graphical programing language Max. I was able to export it as a standalone Mac App for anyone who wants to give it a go, although it’s 73 MB for some reason (the price of using Max for something so simple). Download that here.

If you have Max, download the patch here.

Or copy and paste this into a patcher window:


Highchair Blinky

Here’s my third baby/toddler blinky toy, and first official entry to the canon of IKEA hacks… the blinking high chair, aka the Antiloputer.

This is four arcade buttons and four smart full-color LEDs, drilled into an IKEA Antilop high chair (a spare tray is $5). The brain is a 5v Adafruit Pro Trinket, powered by four AA batteries.

The default mode is the same as the blinky my dad made for me long ago: press the red button and the red light lights up, press the green button and the green light lights up, and so on.

Holding down all the buttons at once lets you switch modes: mode two is like mode one, except each light stays on until the next one is pressed. Mode three is like a typewriter, and mode four is a step sequencer.

This was my first time programming with the FastLED library to control the LEDs. Download the code here.


I suspect the high chair wouldn’t make it through airport security — below is what it looks like inside… Normally, baby legs are protected from the electronics (and vice versa) by a piece of heavy cardboard.


The buttons are attached between the regulated 5v power rail on one side, and pins 10-13 on the other, with a 10k ohm resistor running to ground from each. The LED data is on pin 9, and power for the LEDs also comes from the 5v power rail, through the Trinket. I did this since the 6v coming directly from the batteries is too much for the NeoPixels.

The Trinket can only provide 150 mA, which is pushing what four LEDs will draw at max brightness. Fortunately, the FastLED library has a line where you can specify the max current, and it will dim the LEDs as needed. Genius.


The LEDs are below the high chair tray, aimed up through small holes. I hot glued translucent plastic containers from an art store over the holes, which glow nicely. Be warned, babies are stronger than hot glue, although there’s no danger if the containers get ripped off. You could probably skip the holes and containers, since the LEDs are bright enough to show through the tray.

Also check out the BABYTRON for more blinking.


My grandfather built a panel of light switches from WWII surplus for my dad as a toddler, and my dad built a panel of buttons connected to indicator lights for me. So now, I’ve built the Model C, a set of light switches for my daughter. It’s easier than holding her up to play with the house lights.


These switches are connected to white LEDs, powered by two C batteries. The switches are hot glued to holes drilled in a board, covered with plastic containers from an art store.

I used the LED wizard to figure out what resistor to use. Burnt out LEDs stink, literally.

Next up, the Model D, using programmable LEDs in a high chair.

[UPDATE] The lights are in holes beneath translucent plastic containers. I put some cheap plastic Easter eggs inside, and voila! Now in color!


Toddler’s Cardboard Computer

My one-year old daughter looooooves buttons, and always wants in on the action when someone’s using a computer… so I transformed her new car seat box into the BABYTRON, inspired by the Burroughs B205.

It features a keyboard, arcade buttons, and a strip of LEDs from Blinkinlabs.

The LEDs have a built-in controller, so no wiring was required beyond USB power. In fact, the whole computer was assembled only using glue, tape, scissors, and string. The buttons don’t control anything — but they do make a satisfying “click” when pressed.

There are several ways to talk to the Blinkinlabs LEDs. I’m familiar with Adafruit’s NeoPixel library, so I told the Arduino IDE that it was a Leonardo, assigned data to pin 13, and uploaded my sketch. Code here.

I kept the brightness of each LED below 20 out of 255, because they’ll hurt your eyes if fully on. It’s also running off a portable USB battery pack, so I wanted to keep the power draw fairly low.

I did consider adding a tape drive, using a paper plate behind a round plastic cover from a food delivery container, powered by a LittleBits motor. Next time.

It turns out that this is ideal for someone who’s able to stand up while holding onto something, but can’t walk on their own. My daughter’s younger friends love it. But she’s now savvy to the buttons not doing anything, and is most interested in the power button — the one that mom and dad push. Time to build something else and recycle the BABYTRON.

A Tasting of New York City Beers

My friends Christine and Brian invited me to curate a post-dinner beer tasting at their wedding this past summer. Her family knows a thing or two (a lot) about craft beer, so I decided to introduce them to New York City’s exploding beer scene by keeping the selection local.

I took my assignment seriously, sampling over 60 NYC beers in the month leading up to the wedding. My final selection was designed to represent a range of styles from breweries both big and small, from the ubiquitous Brooklyn Lager, to Transmitter’s farmhouse ales, crafted beneath the Pulaski Bridge in Queens. It was a delicious assortment of bottles, cans, and growlers.

The following descriptions are pieced together from the official brewery copy, Beer Advocate, and myself.

Below that is a list of all NYC brewers as of August, 2015.

1. Brooklyn Brewery – Brooklyn Lager
American Amber Lager – 5.2% ABV

Brooklyn Brewery’s founders commissioned fourth-generation brewmaster William M. Moeller to develop a recipe for Brooklyn Lager in 1988. Moeller pored over his grandfather’s brewing logs, who had brewed in Brooklyn at the turn of the last century. The result was a lager beer brewed with American Two-row Malts, and a tangy aroma created by “dry-hopping” Hallertauer Mittelfrueh, Vanguard, and Cascade hops. It’s an American take on a Viennese-style lager.

2. Sixpoint Brewing – The Crisp
German Pilsener – 5.4% ABV

Sixpoint was founded in 2004, in Red Hook, Brooklyn, and began canning in 2011. The Crisp has a bright pilsner malt taste up top, followed by the bitterness and taste of an American IPA afterward. Sixpoint’s Sweet Action cream ale is one of their most popular beers (best on draft). If you like double IPAs, the Resin is well-regarded.

3. Transmitter Brewing – F1
Brett Golden Ale / Saison – 6.4% ABV

Dry American Farmhouse Ale with a peach/citrus nose and grapefruit notes. 100% Brettanomyces fermentation with two strains of Brett. Hopped with over 2 lbs of hops per barrel. Transmtter’s Rob Kolb and Anthony Accardi have secured over 20 isolated strains of Brettanomyces, Lactobacillus, and Pediococcus, as well as a brewhouse library of traditional Belgian, French, English and American yeasts.

4. Other Half Brewing Co. – Forever Ever
American IPA – 4.7% ABV

Session IPA with Azacca, Jarrylo, and Mosaic hops. Other Half Brewing Company was founded in 2014 by Samuel Richardson and Matt Monahan, in Carroll Gardens, Brooklyn. They’re well known for their IPAs.

5. Grimm Artisanal Ales – Psychokinesis
American Wild Ale (Sour) – 5.0% ABV

A hoppy, tart American Wild ale fermented with a mixed culture of yeast and lactobacillus and conditioned on American white oak. Dry-hopped with Mosaic, El Dorado, and Jarrylo hops. This beer has never been boiled or filtered. Grimm Artisanal Ales is a Brooklyn-based nomadic brewery founded in 2013 by Joe and Lauren Grimm. The couple develops each recipe in the kitchen of their Gowanus apartment and travels to existing breweries near and far to craft their beers.

6. Barrier Brewing Co. – Rembrandt
American Porter – 7.5% ABV

A straight-forward porter, delicious and smooth. Barrier Brewing is run by Sixpoint veterans Evan Klein and Craig Frymary, just outside the city in Oceanside, Long Island. When the brewery was two years old in 2012, their newly-expanded facility was destroyed by Superstorm Sandy. The craft beer community rallied in support, and their new, new brewery opened in 2013.

New York City Breweries and Brewers

Alphabet City Brewing Company (2012) *
Dyckman Beer Company (2012) *
Harlem Brewing Company (2000) *
Heartland Brewery (1995) ***
Third Rail Beer (2014) *

Brooklyn Brewery (1988)**
Coney Island Brewing Company (2007) *
Evil Twin Brewing (2010) *
Greenpoint Beer & Ale Company (2014)
Grimm Artisanal Ales (2013) *
KelSo Beer Co. (2003) ***
Other Half Brewing Company (2013)
Secret Engine (2014) *
Sixpoint Brewing (2004) **
Threes Brewing (2014)

Big Alice Brewing (2013)
Bridge and Tunnel Brewery (2012)
Finback Brewery (2013)
LIC Beer Project (2015)
Queens Brewery (2014)
Rockaway Brewing Company (2012)
SingleCut Beersmiths (2012)
Transmitter Brewing (2013)

Bronx Brewery (2011)
Gun Hill Brewing Company (2014)

Flagship Brewing Company (2014)

Barrier Brewing Co. (Long Island, NY)
Blue Point Brewing Co. (Long Island, NY)
Captain Lawrence (Elmsford, NY)

* NYC-based but brewed elsewhere.
** Brewed in NYC, with expanded production elsewhere.
*** Greenpoint Beerworks in Clinton Hill, Brooklyn, is home to KelSo, and brews for Heartland. Upstate NY breweries Empire Brewing Company and Great South Bay Brewery also have some production here.

Travel Photos 1998 – 2010

I’ve traveled a fair amount while shooting documentaries. Here are some photos I took along the way.

Lotus Lives Shadow Puppets

At our first meeting about visuals for Lotus Lives, composer Su Lian Tan said she’d pictured a Malaysian-style shadow puppet show during the Folktale section of the opera. This would become the centerpiece of the video projections, a 14-minute film designed for eleven screens, plus the stage, walls, and ceiling of the concert hall.


Wayang Kulit is the name for traditional Malaysian shadow puppetry. A temporary shadow stage is constructed outdoors in a village, and a single puppeteer operates and voices all the characters. Each puppet is supported by a single stick, propped up while the puppeteer operates a hinged arm with a second stick. The performance usually tells the classic tale of Ramayana, and lasts late into the night for several days.

In contrast, Chinese shadow puppets are more articulated, supported by rods connected to the torso, legs, and each arm. Their movement is acrobatic, as they spin and fly through the air.

Lotus Lives is about the transition between the worlds inhabited by three generations of women: the lead soprano’s (Lily) life in 1980s London and the present, her grandmother’s in 1920s China, and her mother’s in Malaysia in between. The Folktale is where the struggle between traditions comes to a head.


I traveled to Malaysia and Singapore to research Wayang Kulit and the Peranakan culture, and collect images for the opera.

The Peranakan are Chinese immigrants to Peninsular Malaysia, dating back to the 15th century. Lily’s grandmother (and Su Lian Tan’s own family) moved into this community after leaving China in the 1930s and 1940s.

The Peranakan Chinese adopted cultural elements from Malaysia, and later, Europe colonialism. We wanted to represent that blend of influences in the look of the opera, so I used a mix of both Chinese and Malaysian-style puppets.

Traditional shadow puppets are made of rawhide leather, but that isn’t a skill you can master in a week. So I decided to stick with what I know: pen and ink and lasers.


After coming up with a sketch of each puppet, I outlined the different puppet parts with blue pencil, and filled in the negative space with solid black ink.


I photographed the drawing and brought it into Photoshop for cleanup. I also copied repeated patterns like lace, and added holes at the joints.


Next, I converted the artwork to a vector image with Illustrator. Then more cleanup and scaling, and over to local hackerspace NYC Resistor to use their laser cutter.


This process allowed for multiple copies of each puppet, with different sizes of each. There is a large version of the Little Girl when she is on her own, and a smaller version when she appears next to her mom.


The puppet bodies are heavy card stock, with joints connected by thick, knotted embroidery thread.

It was tricky finding support rods that were thin and strong, which could be bent without cracking but won’t flex when in use. The winner was the poles on the little neon flags used for marking buried lines, like sprinkler systems or invisible dog fences.

I made handles from oak dowels, and attached each rod to the puppet with a single link made from art store armature wire.

The Malaysian style puppets were easier to rig, with wooden rods tied to the stock.


Authentic leather shadow puppets are painted, and the color shows up through the translucent skin. After some experimentation, I decided to keep the puppets black and white with tinted backgrounds, more in the cinematic tradition of Lotte Reiniger’s stop-motion silhouettes. (The Fine Lady’s carriage in Lotus is a nod to the carriage in The Adventures of Prince Achmed (1926).)


I considered compositing the images optically, using projectors and layered fabrics in a toy theater. In the end, I decided to gather clean optical elements and then composite everything digitally.


The puppeteers performed against a white screen, with marks for set pieces to be added later. The background and props were mostly pen, brush and ink.

I did build a simple toy theater frame for photographing backlit paper textures.


The Folktale climaxes with the Moon Goddess’s transformation from puppet into a dancer, with performance by Arika Yamada. Her choreography contains another blend of elements: classical ballet and modern dance.


I wanted Arika to be against a black background. The best way to do this without losing the shadow details was to shoot her against an evenly lit white wash and invert the image to negative. Also, the blue hue works for the ghostly Moon Goddess.


Even though the puppet show was pre-recorded, the music and narration were all performed live. I split the video into shorter sequences with loops at the end, to be triggered with the music. This way the musicians could concentrate on their performances without worrying about keeping in time with the video. (For a lot more detail about that, read here.)

There were a lot of parts, and in the end they all worked together as planned.