In a famous blogpost from summer 2005, ClockSkew poked around inside Quartz Composer and discovered some fairly-complete-looking patches that aren’t available through the interface. ClockSkew also made a cool patch plugin that made these available through the interface. Unfortunately this plugin was written when Intel Macs didn’t exist, and it isn’t a Universal Binary.

Having myself somewhat of an obscurity-obsession, I decided to investigate how ClockSkew did this, and insodoing discovered a few new hidden patches.

This release is only compatible with Tiger (10.4).

Please see This release is only compatible with Tiger (10.4).Please see kineme.net for Leopard-specific informations.

I started by using class-dump on the QuartzComposer binary itself (Version 2.1.1 (17.1)) and the stock “ExtraPatches.plugin”, then trimming the output down a bit with grep. This gave me the following:

smokris@sirota 26 .../QuartzComposer.framework -> class-dump QuartzComposer |grep QC.*Patch$ |grep -v UI$ @interface QCProgrammablePatch : QCPatch @interface QCThreadPatch : QCPatch @interface QCImagePatch : QCThreadPatch @interface QC3DShape : QCPatch @interface QCBillboard : QCPatch @interface QCCamera : QCPatch ... [another eighty lines or so] ...

and

smokris@sirota 34 .../ExtraPatches.plugin/Contents/MacOS -> class-dump ExtraPatches |grep QC.*Patch$ |grep -v UI$ @interface QCMidiPatch : QCPatch @interface QCQuickTimePatch : QCImagePatch @interface QCJavaScript : QCProgrammablePatch @interface QCMidiControllers : QCMidiPatch @interface QCVideoInput : QCQuickTimePatch @interface QCQuickTimePlayer : QCPatch @interface QCMidiClock : QCMidiPatch @interface QCMidiNotes : QCMidiPatch @interface QCTeapot : QCPatch @interface QCiTunesDatabase : QCImagePatch @interface QCSyndication : QCPatch @interface QCAudioInput : QCPatch @interface QCIMServices : QCPatch

I then browsed these lists for names that didn’t appear in the interface, and discovered the following:

QC3DShape QCCheckBoardImage QCColorMask QCColorMixer QCExpression QCFlameImage QCGLSLShader QCIMServices QCLog QCRSSParser QCSampleHold QCSignal QCStringTimecode QCSyndication QCTimeLoop QCiTunesDatabase

Weird.

So I went into QC and dropped a few patches on a composition, saved it, and opened it in Property List Editor.

I changed the class names of the dropped patches to those listed above, and found some surprising results:

Quick tests of these suggest they do more-or-less as advertised.

The “QCExpression” (the patch with the title “a * (1 - sin(b))”) I find particularly exciting, what with the prevalence “Math” patches tend to have in my compositions.

“RSS Parser” appears at first glance to be pretty much identical to the existing “RSS Feed”, but with different output names and an additional “Update Signal” input.

Unfortunately the “QC3DShape” wouldn’t initialize at all.

Eskatonia provides a composition allowing one to cut-and-paste hidden patches into your own compositions… In that vein…

I present to you: a composition containing the usual hidden patches and several never-before-seen hidden patches. Enjoy.

I’m still trying to figure out how to make a plugin that causes these hidden patches to appear in the interface, as ClockSkew did. Doing a registerNodeWithClass:[QCFlameImage class] causes QC to spin the rainbow endlessly. Any ideas?

Steve Mokris is a developer at Kosada, Inc.