List Grid

Blogs Media Lab

Quartz Composer in Leopard

Most techies probably know that Leopard has been out for a while now. Aside from all the goodness that is Time Machine, the thing that has me most excited is the new version of Quartz Composer. Create Digital Motion did a great post about what’s new, and you should read their post for the exhaustive […]

Most techies probably know that Leopard has been out for a while now. Aside from all the goodness that is Time Machine, the thing that has me most excited is the new version of Quartz Composer. Create Digital Motion did a great post about what’s new, and you should read their post for the exhaustive info.

Aside from many useful things (closed loops!), there are two things that stick out to me as exceedingly useful for creating dynamic digital signage:

  • Data crunching: Quartz Composer can now load, and download XML files, which makes it much easier to move large chunks of data in and out of your composition.
  • Multiple screens — or multiple projectors: There is now support for running Quartz compositions across multiple screens, and also a cluster.

Being able to use XML data rather than just an RSS feed could be extremely useful for specifying things beyond text and images. Color values, timing, or any number of things could be included here in XML. The way we generate most of our pages here at the walker, our output is XML, so piping something like the Walker Calendar into a Quartz Composition just got much easier.

The second thing on that list is the really exciting part. As part of the Developer Tools, apple added a new application called Quartz Composer Visualizer, aka QCV. It does a couple of things. It lets you play a single quartz composition across multiple screens, which you could not do with Quartz Composer in Tiger. I’m not sure yet how this works across multiple video cards. It also adds a network mode, where a host and clients share the same composition and synchronize via the network. Here’s a movie I made of a modified version of our Vineland Lobby Kiosk Screensaver:

[youtube]http://www.youtube.com/watch?v=baVKPNsNWyY[/youtube]

This is running on two different computers, my laptop and my desktop (with two displays). For the most part, the displays are in perfect sync. There is a little blip, but I think that’s probably because my Desktop is struggling to keep up, due to an older video card. There is also the option to run a second composition as an “optional processing composition”. What this means is that you can create another composition that has the logic for processing the data and settings, which gets passed along to the display compositions. Basically, this allows you to use a MVC way of doing things. Here’s a screenshot of the app in use:

Quartz Composer Visualizer

Finding clients is done via bonjour, so it is limited to the local network, but all you have to do is fire it up on each machine and they find each other. Depending on how well separate video cards are supported, it could be quite easy to run a multiple screen setup from one high-end Mac Pro, since most of QC processing happens on the video card(s). Mac minis could also work as well, though due to the underwhelming onboard video, might not have enough horsepower to do any fancy core image effects.

QCV isn’t an industrial level application; you couldn’t ship this off to a client as a complete solution for a digital signage project. But for use in house, or a situation where it could be monitored more closely, it could be extremely useful. The complete source code to QCV is also included in the developer tools, and it’s meant as a template and example for people. An enterprising objective-c developer (which I am not) could create such an industrial level application. But as a template application, it is surprisingly useful. QC and QCV are the things in leopard that excite me the most.

  • Steven Sokulski says:

    Though it is true that QCV is not a final solution, the code for it is available in the Quartz Composer/Examples folder allowing you to brew a customized app with specific input variables for use in a digital signage instance.