Hidden Quartz Composer Patches Redux Hidden Quartz Composer Patches Redux

Posted by smokris on 2006.08.09 @ 19:26

Filed under:

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 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?

(digg this!)

Nice one, Thanks for this!

The iTunes Database patch looks like it could be very useful, creating lists of movie files stored in the iTunes library. It’s a bit random so far (different movies have different element counts in their structures) but with a bit more tinkering I think it could be very cool.

Thanks again.

Dave

Quartz composer crashes I when I load the qtz file.

Argh.

I am using a 12”screen 1.33Ghz G4 powerbook with 768M and Os 10.4.7

Manjit -

I’m using a MacBook Pro 17”, 2.16ghz duo, 2gb, os x 10.4.7.

Could you cut-and-paste the crash message it gives you?

Also, which version of Quartz Composer are you using? I made this using Version 2.1.1 (17.1); I’m guessing that it probably wouldn’t work with an earlier version. This version came with Xcode 2.3.

Thanks, Steve

Very nice work. This is most useful. I wonder what will be exposed in Xcode 3.0/10.5.

DOh composition not restored successfully

> Macro Patch Cannot create node of class “QCIMServices” and identifier ”(null)”

> Macro Patch Cannot create node of class “QCiTunesDatabase” and identifier ”(null)”

> (null) State restoration failed on

Any ideas why!?

It is the second macro patch in the hidden patches file that crashes Quartz Composer. I was able to copy the patches (except the sencond macro patch) and past them into a new document without crashing. So I am only missing that one patch now. Give it a try.

Sorry mine were not labled. Make that the Instant Messaging Status patch that crashes QC.

An easy way to enable these private patches is to: defaults write com.apple.QuartzComposer.editor QCRegisterPrivatePatches -bool true

Stéphane -

Yes! Right.

In fact, this blogpost is superseded by a post I made a few weeks afterward, mentioning just that.

  • smokris

Fun times ahead with simple itunes database link.

Works well with using specific keys (“track”) to access structure members. I have only been playing with it for 10 mins but would use it together with current track, beats per minute, but I guess that is Ivisualize. If anyone can access the lyrics tab in itunes I would love to rock out with karaoke.

Using it now to library clips with metadata. Nice one!