Preliminary notes on Aperture 2.0 plug-ins

February 13, 2008

Many Aperture users are starting to get excited about the upcoming Aperture 2 plug-in SDK. I think some people are expecting this to be some kind of “adjustments” API, perhaps allowing you to add additional effects filters on top of the standard adjustments like white balance, exposure, and so on.

Unfortunately, from what I’ve been able to figure out, the SDK will not support non-destructive adjustments. It doesn’t ask the plug-in to “apply” its changes anywhere in the current chain of non-destructive adjustments or anything of the sort. It creates a copy of the selected photo, lets the plug-in do whatever it does to that copy, and that’s pretty much it. So, if the user does some exposure adjustments, then uses some type of “filter effect” edit plug-in, and finally applies a few more standard (ie. contrast) adjustments, he won’t be able to change the initial exposure adjustments and have them reflected in the “edited” copy.

Using class-dump we can see that the following is all a plug-in appears to be able to do:

@protocol ApertureEditPlugIn
- (id)initWithAPIManager:(id<PROAPIAccessing>)apiManager;
- (void)editManager:(id<ApertureEditManager>)editManager didImportImageAtPath:(id)imagePath versionUniqueID:(id)versionUniqueID;
- (void)beginEditSession;
- (id)editWindow;
@protocol ApertureEditManager
- (id)selectedVersionIds;
- (id)editableVersionIds;
- (id)importedVersionIds;
- (id)propertiesWithoutThumbnailForVersion:(id)fp8;
- (id)thumbnailForVersion:(id)fp8 size:(int)fp12;
- (id)editableVersionsOfVersions:(id)fp8 stackWithOriginal:(BOOL)fp12;
- (BOOL)canImport;
- (void)importImageAtPath:(id)fp8 referenced:(BOOL)fp12 stackWithVersions:(id)fp16;
- (void)deleteVersions:(id)fp8;
- (void)addCustomMetadata:(id)fp8 toVersions:(id)fp12;
- (void)addHierarchicalKeywords:(id)fp8 toVersions:(id)fp12;
- (id)apertureWindow;
- (void)endEditSession;
- (void)cancelEditSession;

To get at the data required to actually perform any “edits” on the image, you have to send the editManager an editableVersionsOfVersions:stackWithOriginal: message. This causes Aperture to create copies of the requested images. That’s all the plug-in is then able to work with.

I’d love to be completely wrong on this, but it appears that these “edit” plug-ins won’t be that much different than using “open with external editor.” This isn’t looking to be nearly as powerful or “revolutionary” as a lot of folks are hoping for, I’m afraid.