When Apple released the free visual synthesizer tool Quartz Composer as part of Mac OS X 10.4, they hoped developers would take it up and create gorgeous eye candy. Keith Lang, part of the plasq team that created hit Mac software like Comic Life, has done just that with a new set of screensavers and visualizers for plasq’s audio software Rax. The lessons he learned in QC could be useful to anyone using the software, whether you’re a developer or building a live art installation or VJ set. -PK

We here at plasq recently released ‘sqreensavers’ – a set of 10 screensavers based on the visualizers in our Rax 2.0 Audio Unit Host. I’m proud to say that in the short period since release the set has been downloaded over 20,000 times.

sqreensavers @ plasq.com
Rax audio app @ Create Digital Music

The good people at CDM asked me, as the Quartz Composer guy behind these, to share my experiences in working with QC.

Quartz Composer is an amazing bit of (now) Apple technology – it allows some really complex and artistic results from only a reasonable amount of effort. It’s free, and it’s also supported really well on the Mac platform – any machine running 10.4 can open a Quartz Composition within QuickTime. Finder also previews Quartz Compositions, and it’s also a breeze to incorporate into applications. There’s no support for it on the Windows platform.

QC, (as I’ll abbreviate it) is an application where you can connect many modules together to create a real time visual output, which can be exported as a QuickTime Movie, turned into a screensaver,
integrated into applications, or shared with mac users. Lots more info is on the net.

My personal experiences:

1. QC is Zen. The hardest thing for me was learning the “Zen” of QC. The way of thinking about time, where changing a variable will mean that the systems works from that point on, as though it’s ALWAYS been this way from the beginning of time. Let me explain:

Say you have a friend who is emptying a swimming pool with a kiddies bucket. The pool is half full. You say to your friend “If you had used a bigger bucket the pool would have been empty by now”. So you
hand her a bigger bucket. Suddenly the pool is empty, because she HAS used a bucket from the beginning. Go and contemplate now, grasshopper.

2) No Undo. The Quartz Composer application has no undo. C’mon!

3) Highly efficient – if you know what the GPU *can* do, and what it *cannot* do. Eg. Particle systems, layering of sprites, cubes and spheres cost practically nothing in cycles.

4) Zen drawing. Back to the zen aspect for efficient drawing. Once you get your head around the Zen Time aspect, it’s like seeing the Matrix. Example: Say you want a still picture with some random squares. Seems easy? Actually very hard to do in QC (see 6) — until you start thinking that anything ‘still’ is simply motion which is frozen in time. So you could use a particle system (often used to emulate water
in fountains, fire, and explosions), use a square as its graphic, and lock its timer to 100 seconds into the future. Bingo, you now have a bunch of squares, because that’s what the particle system would look
like if run for 100 seconds. It’s not truly random, but it’s fast and easy.

5) Layering of structures. You can structure your QC to replicate objects inside of replicated objects – so you can create lots of things very fast. Don’t expect them to be different though; for that
see #6.

6) Variables. It’s hard to handle variables and have lots of different shapes with their own characteristics. To remember variables (for physics simulations, etc.) requires writing JavaScript. In many ways, QC is like an analogue synth; everything is designed to be real-time. There is no ‘RAM’- it’s all just ‘flow’. Ed: Note that JavaScript, while limited in its implementation in QC, can be really helpful. There are many times when just a couple of lines of JS can fill in for stuff that QC can’t do or can’t do easily, from Math.sin calculations to handling arrays. Just take care to note the limitations of the JS implementation. -PK

7) Things get messy fast. Due to the ‘physical’ nature of the wiring, you can end up with a real mess, real quick. There are methods to clean up the spaghetti, but at the expense of changeability – you
need to manually ‘publish’ inputs for extant macros (enclosures of modules). The other result of this ‘physicalness’ is needing to ‘wire’ through a few layers of heirachy to connect distant modules. Ugh.


I think the future is bright for QC – I wouldn’t be surprised if QC has a facelift boasting integration with Core Animation in 10.5. Also, there is a huge amount of things I didn’t use in the sqreensavers, due to their über-efficient heritage in Rax. However, wrapping live video over a sphere with a real-time filter is really easy to do, and remarkably efficient, for example. Good fun, despite the issues mentioned.

Ed: Thanks, Keith! I can echo a lot of what’s said here, though my sources at Apple suggest that we won’t see Core Animation integrated into QC. That could change, though, and I am holding out for some QC improvements in 10.5, particularly since it’s still a ways off.