Aperture: 2.1.1 Changes The Compare Key
The Edit menu still says that it's Return. And once you're in Compare mode, Return does make the currently selected comparison the compared image. So I think this is a bug.
You can get the old behavior back by changing the mapping of the keys with Aperture > Commands > Customize...
Photo Books

I've been looking into the practicality of making photo books. There's no single winner as far as I have been able to make out, and I have not yet actually tested any of them. But here's what I believe the practical options are:
Lulu is optimized for text: books with words and some pictures. You send them a PDF and they print you a book. But not any PDF will work: in particular Pages PDFs are shunned. There are ways around this restriction but they cost money and/or are fiddly. Lulu's prices are OK.
Blurb is optimized for photos: books with photos and some words. Their prices are very good, and the quality is good. You have to use their tool, BookSmart, to create the book and upload it. It's template-driven and drag and drop. However, it's written in Java, is incredibly slow, and has enough interface and font quirks to drive a person batty. The templates are large in number, but ultimately limiting because they are it. These are not starting-points. Either the photos go exactly there, or they don't go. The good news is that it can only get better, but to date progress has been slow.
Aperture's and iPhoto's books are expensive and the tools limited, so I didn't seriously consider them.
Everyone else's solution is either aimed at a specific market. MyPublisher is extremely dumbed down and doesn't match what I want to do. But they have a great native Mac application called BookMaker.
I'll probably go for Blurb if I do make a book, but it will be on my terms. I'll design my book using Pages or something and then only as a last step put it all into BookSmart. Another option is to upload full-resolution JPEGs of pages designed outside of the application, so I may use that technique sparingly.
But first I need content.
WWDC Now Warming Up

No Doubt Who Is Here: 1/2000s f/5.0 ISO200 24mm -0.3ev, Canon 30D, Canon 24mm f/1.4L
No word on whether there will be any sort of Aperture meet-up so far. There's plenty going an already actually. I planned my sessions the other day and it is packed with good stuff.

Blue and Purple: 1/250s f/5.6 ISO200 24mm -0.3ev, Canon 30D, Canon 24mm f/1.4L
Aperture 2.1: Less Adjusting To Do

Life At Number 4: 1/200s f/8.0 ISO400 17mm -0.3ev, Canon 30D, Canon EFS 17-55 f/2.8
Having used it for a while, I'm finding that Aperture 2.1 gives me consistently better images than 1.5. I notice it because in most cases I am unable to improve them: it does a better job first time and there is simply less to do, or even attempt to do. This is good. I'd rather not spend much time tweaking.
Aperture: Plug-In SDK 2.1 Now Available
Aperture: Laptop Workflow

Ferris Wheel: 1/1250s f/8.0 ISO200 73mm -0.3ev, Canon 30D, Canon 70-200 f/2.8L IS
Here is what I am currently doing to manage photos on my MacBook and iMac. It's a simple one-way process.
When I import my photos onto the Macbook I do so as managed files so they go into the library. Then I'll cull, rate, keyword, or whatever I want to get done. I don't adjust much, since the screen is small and not as good as my iMac and I can't control the room illumination as well. I leave preview generation turned on for all projects in my library and set it to make half size images. This lets me quickly put together slide shows and skim through images in a flash.
Then when I'm done working on the laptop, I export the project to the desktop and rename the project in the library by adding "Exported" to the end. That's to remind me that I've already done the export and should not do any more editing.
To transfer the project to the iMac I either copy it across the network, or restart the laptop in Firewire target mode and use the Finder to drag the folder across and onto my iMac Aperture library.
Back on the MacBook I delete all the rejects by finding them with a smart album and pressing command delete and then relocate all the remaining project images to a temporary folder. I immediately delete the temporary folder, since I don't want the RAW images to remain on the Macbook, and rename the project again by removing "Exported" and adding "Previews".
So on the laptop I have previews that I can easily show, drag out to other apps, or email, and on the iMac I have the RAW files, the previews, and the project intact. On the laptop the images use up only about 1 MByte each with the thumbnails and previews, so it is pretty space-efficient.
Aperture: Adjustment Plug-Ins Starting To Appear

Tiffen now has their Dfx digital filter suite available as a plug-in for Aperture 2.1:
They are offering a 15-day free trial with full availability in May.Dfx digital filter suite offers precision adjustments over its range of effects that cannot be approached by any other digital filter software. A complete edition includes the most comprehensive array today, emulating more than 1,000 varied effects and gels, from factory pre-sets or custom effects, providing total creative and technical control with the most comprehensive and user-friendly filter-effect palette today.
Digital Film Tools has Light, Ozone, and Power Stroke, three tools that appear to be available right now.
Light: Using a pre-built light and texture library that includes windows, doors, leaves and abstract patterns, you can add realistic lighting and shadow to scenes just as if you were adding a light at the time of shooting.
Ozone: Inspired by Ansel Adams' Zone System for still photography, Ozone allows you to manipulate the color of an image with incredible flexibility and accuracy using a Digital Zone System. The Digital Zone System takes the spectrum of image values and divides them into 11 discrete zones. The color, brightness, contrast and gamma of each zone can be independently adjusted until you've painted a new picture.
Power Stroke introduces a simple, interactive stroke-based interface to quickly and intuitively perform targeted adjustments. Instead of meticulously selecting regions or hand-painting masks, regions of interest are isolated by drawing a few simple brush strokes with adjustments then made only in those areas. Strokes can be assigned multiple adjustments and effects such as color correction, recoloring or desaturation, colorization of black and white images, blur, fill light for dimly lit image areas and Diffusion/Glow.
Aperture: How To Install Aperture On A Second Machine
Dragging the application over does not work because there are some pro application frameworks that are needed. How about downloading another demo and entering my key? That would probably be OK, but then I need to fill out the form and download the whole thing over again.
What worked was to install the original 2.0 demo that I had kept, and then enter the upgrade key I had paid for. When I did that it requested my original Aperture 1.1 key as well and was unlocked. Then I ran the 2.1 updater.
I was quite pleased to find that Aperture 2.1 runs just fine on my MacBook. It's the lowest spec machine, but with 4G RAM fitted. Processing 7MB CR2 files is easily fast enough for normal use, but noticeably slower than my iMac. The glossy screen is nice, but low-end, perfectly acceptable for normal use.
Fraser Speirs On Keywording
In particular he talks at length about the keyword bar at the bottom of the window:So, finally, I’ve drawn together my thoughts about keywording in Aperture. My problem with keywording has always been more about “how can I make it easy enough that I will actually do it?”, rather than “what should the keywords be?”. I’ll explain my personal taste for both, though.
The magic — if that’s what it is — is that these button sets give keyboard shortcuts to your keywords. The first nine keywords in any set get the shortcuts Option-1 through Option-9, although the set of keywords can be arbitrarily large (I think). The second insight, that I think few people have noticed, is that you can cycle through these button groups using the shortcuts Comma and Period. This makes for really fast navigation through keyword groups.
Lightroom 2.0 Beta And Aperture 2.1
Undoubtedly in response to pre-empt any traction by Apple’s rapidly updated Aperture 2 software, Adobe has released a beta of the next version of its competing Lightroom, now at 2.0. As always, comparisons abound, and as always fans of either software will draw their respective lines in the sand.
Aperture: Migrating From 1.0 to 1.5 to 2.1
Aperture: Aperture 2.1 Released -- Adds Image-Editing Plug-Ins

Apple has added image-editing plug-ins to Aperture in this free update to owners of 2.0. The first plug-in is Dodge and Burn, but may more are coming. From the Aperture Resources page:
Aperture 2 includes a powerful plug-in architecture for the seamless integration of popular third-party image editing software, such as Nik Software's Viveza and PictureCode's Noise Ninja (both available soon).
Aperture 2.1 also includes an Apple developed plug-in, Dodge & Burn, that provides tools for making selective edits of images with dodge (lighten), burn (darken), blur, sharpen, and saturation effects.
There is a new movie that shows Dodge and Burn in operation.The free Imaging Plug-in Software Developer Kit (SDK) for Aperture will be available through the Apple Developer Connection (ADC) soon. Interested developers should contact Apple at aperturedeveloper@apple.com.
This considerably opens up the the usefulness of Aperture and will create a whole ecosystem of very useful additions. I will be very interested to see the SDK when it arrives.
In addition to the plug-in, there are a host of other features added:
• Customize Default Adjustment Set. You can now specify which adjustments appear by default in the Adjustments Inspector/HUD.
• Updated Crop Tool. A simplified UI makes it easier to preserve an image’s original aspect ratio, match the aspect ratio of your display, or use one of the standard preset aspect ratios.
• Sorting in All Projects View. A contextual menu allows you to sort the All Projects view in ascending or descending date order.
• Show on Map A contextual menu allows you to choose the Show on Map by right-clicking (or Control-clicking) on an image that contains GPS
data.
• Access to Toolbar on Second Display. When using multiple displays in Full Screen mode, the Full Screen toolbar is now accessible on a second display.
• “Snapshots” book theme. This additional theme includes new “photo border” frames in which to place images.
• Flip Images. You can now flip images horizontally or vertically within Aperture.
• Vignette. The range of gamma and exposure settings available has been expanded.
• Save Books as JPEG or TIFF images. Automator workflows have been added to the PDF pop-up menu in the Print Book window to automatically generate JPEG or TIFF images from book pages.
• Update EXIF from Master. This command allows Aperture to reread EXIF from master images after they have been imported.
• 8-bit External Editor support. Preferences settings have been updated to allow you to send images to an external editor as either 8-bit or 16-bit TIFF or PSD files.
• Extended AppleScript support. The “Reveal” verb in the AppleScript dictionary has been extended to include containers such as projects and albums.
The update also includes fixes that impact a number of other areas, including import, Quick Preview, All Projects view, image adjustments, books, printing and export.To get the update (41 Mbytes), go to the Aperture Downloads page. Then check the Late Breaking News from the Help menu.
[Late updates:]
Rob Galbraith has a particularly good write-up on his site.
The catch with the plug-ins is that they work on a copy of the original image, just like round-tripping to an external application like photoshop -- they are not integrated into the RAW processing that Aperture does. This means that you have to separate your plug-in adjustment workflow from your Aperture adjustment workflow, deciding what you are going to do first, last, and in the middle.
The logic of this implementation is understandable when you consider what will happen long-term, and what Apple has control over. Apple controls its own built-in adjustments and processing so can guarantee that they will stay intact, or be enhanced (like the RAW 2.0 processing update we received recently). But the same guarantees cannot be made for third-party plug-ins, so they have to create and store the intermediate images.
The improved crop is still lacking a basic setting: Current. There is no way to scale (except by math and typing) an image that has been custom-cropped and keep the same aspect ratio. There is also no "flip" option that keeps the clip rectangle the same , but rotates it 90 degrees.
Aperture: A Fix For The Leopard Printing Bug
Security Update 2008-002 v1.1 addresses reliability issues with the "Printer Settings..." button in Aperture 2.0 on systems running Mac OS X v10.5.2. No applications other than Aperture 2.0 are affected.
Aperture: Digital Camera RAW Support 2.0
Aperture 2.0: Processing 11,000 Images, 136GBytes
Ars Technica Reviews Aperture 2.0
Aperture: 2.0.1 Brings New Applescript Features
Aperture 2.0.1 Update Available
- Upgrading libraries from earlier versions of Aperture
- Publishing .Mac Web Gallery albums
- Preview generation and deletion
- Creating and ordering books
- AppleScript support
- Keyboard shortcut customization
- Appearance of metadata overlays in the Browser, Filmstrip, and on light tables
- Watermarking of emailed photos
- Highlight Hot and Cold Areas
- Loupe
- Smart Albums
- All Projects View
- Straighten Tool
- Filmstrip
- Drag and drop import
- Thumbnail generation
- Import window
- Export plug-in reliability
Aperture Export SDK: Missing Files
It failed at this line:
#import <PluginManager/PROAPIAccessing.h>in ApertureExportPlugIn.h. The PROAPIAccessing.h file is missing because it and PROPlugInBundleRegistration.h are not included in either Leopard or the ApertureSDK 1.5.5.
To fix it , I copied across the Headers folder that contains those two from a Tiger back up. The full path is /Library/Frameworks/PluginManager.framework/Versions/B/Headers. There is already a soft link for Headers that is correct. It should look like this:

Aperture: Apple's World Tour

Apple is starting a world tour for Aperture on March 5th. I plan on being at the San Francisco event on March 26th.
Get Your Head Around Aperture 1.5 Edition 3 Now Available
![]() | Eleven New Articles |
I have updated Get Your Head Around Aperture 1.5 with eleven new Aperture articles that were published on the blog between the second edition and the release of Aperture 2.0. For full details of the changes see the Publication History page.
If you have purchased the book, you will have received an email with a download link that is good for 5 downloads or one year, whichever comes first. Just use that link and it will download this new release.
If you have not purchased the book, then I'm afraid it is no longer available. Aperture 2.0 changed so much of the interface and features (and fixed so many problems!) that much of the material in the book is now unnecessary, incorrect, or misleading, especially to beginners. All the material in the book remains freely available on this site. If you really want a copy, then let me know. If there is enough demand I will reintroduce it for sale at a reduced price.
I am also interested to know what kind of information you would want to see in a future Bagelturf publication about Aperture or anything else.
Aperture 2.0 vs. Lightroom 1.3 At High ISO
At the Money:Tech 2008 conference a few weeks ago in New York City, I mostly took the high ISO approach and shot almost exclusively at ISO 3200 with my Canon 1D Mark III’s. Of course, an ISO 3200 image has noise in it. The question is how well does the combination of camera and RAW processor render that noise.
CNET Is Asking Which Is Better: Aperture Or Lightroom
The good news is that there's some competition again for software to edit and catalog raw images, the detailed and flexible file formats from higher-end cameras. The bad news is that anybody buying the software has a harder choice to make.
Aperture 2.0 vs Capture NX
Aperture: Complexity Killed Aperture 1.5
I've looked a little at the internals of Aperture 2.0 and there are some striking differences between the two. It looks as if the whole core of the application has been rewritten.
Here is one thing I found. That diagram below is the data model for Aperture 1.5. The boxes represent information stored about things like versions, albums, vaults, adjustments etc., all the things that are carefully managed by Aperture and kept in a consistent state, all the things that are needed to display and manipulate images through the interface:

What matters is the number of lines in the diagram. I reckon there are about twenty. Each one is a relationship between the data in the boxes and many lines means much complexity and lots of work to keep things in order. And the impact of complexity grows very quickly as the number of items increases.
Now have a look at the data model for Aperture 2.0:

Still plenty of boxes, several more in fact, but hardly any lines. And only two are actual relationships, the two in the center representing inheritance instead. This means that Apple has eradicated the complexity inherent in the data model and moved it elsewhere, clearly to something faster.
This is at least partly why Aperture 2.0 is so much faster than Aperture 1.5. The other benefit of removing the complexity is that reliability should increase, so I'm hoping for a more stable, less buggy application.
For anyone wondering how I got hold of the data models for Aperture; it was easy. I just decompiled the .mom file in the application with Xcode.
Aperture 2.0: No Tethering For You!

If you use one of the popular Canon DSLRs, there's a good chance that there is no tethering for you! There is a tally of which cameras work with the tethering feature and which ones don't at 20SEVEN. Mine, a Canon 30D, does not. It stays busy. It is still possible to use Automator and a hot folder with the Canon software, so all is not lost. Nikon is much better supported than Canon.
The tethering feature is accessed via the File > Tether... menu. From there you can define import settings and start the session.
Aperture 2.0: Hanging Up At The Splash Screen
2/18/08 1:54:59 PM Aperture[501] *** NSRunLoop ignoring exception 'Exception in Aperture: *** -[NSURL initFileURLWithPath:]: nil string parameter
Backtrace:
0x0006ffdc (in Aperture)
0x93c77eb7: +[NSException exceptionWithName:reason:userInfo:] (in CoreFoundation)
0x93c78023: +[NSException raise:format:arguments:] (in CoreFoundation)
0x93c7806a: +[NSException raise:format:] (in CoreFoundation)
0x92ef5039: -[NSURL initFileURLWithPath:] (in Foundation)
0x92ef4d28: +[NSURL fileURLWithPath:] (in Foundation)
0x002cfc00 (in Aperture)
0x002cfd3a (in Aperture)
0x002cdc64 (in Aperture)
0x00351982 (in Aperture)
0x00359b79 (in Aperture)
0x92ee602d: __NSFireDelayedPerform (in Foundation)
0x93bfeb5e: CFRunLoopRunSpecific (in CoreFoundation)
0x93bfed18: CFRunLoopRunInMode (in CoreFoundation)
0x92a7f6a0: RunCurrentEventLoopInMode (in HIToolbox)
0x92a7f3f2: ReceiveNextEventCommon (in HIToolbox)
0x92a7f32d: BlockUntilNextEventMatchingListInMode (in HIToolbox)
0x963227d9: _DPSNextEvent (in AppKit)
0x9632208e: -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in AppKit)
0x0035e62a (in Aperture)
0x9631b0c5: -[NSApplication run] (in AppKit)
0x00954e5a (in ProKit)
0x00003652 (in Aperture)
' that raised during posting of delayed perform with target 0x13b7230 and selector '_delayedFinishLaunching'
And a sample of the process just gives me a bunch of threads all waiting.
I did get Aperture back. First I reinstalled Aperture and renamed my Aperture Library file. Then I launched Aperture with the option key held down and selected to make a new library. That brought Aperture up. Then I could quit and relaunch and open other libraries with option launch. Finally I renamed my library back to Aperture Library. Somewhere in there I did remove the option to share previews with iLife and iWork, but I don't know if that had any effect.
Aperture 2.0: New Album Pick Behavior Kills My Workflow
Random Wok On Aperture 2.0
Note that Aperture 2.0 no longer displays a sheet to show progress. Instead, it exports in the background and progress is shown in Aperture's tasks window. Look at the bottom of the window next to the tools to see what is happening in the background:
Clicking on the spinner shows more detail:

A new feature in Aperture 2.0 is the ability to pause activity. That plus background operation makes exporting so much nicer.
[Update: A couple of problems have appeared if Random Wok 1.0 is used with Aperture 2.0. See below]
If used with Aperture 2.0 the behavior with respect to clashes with existing files has changed. With Aperture 1.5 Aperture would never supply an existing file name. However with 2.0 it does not check, and so plug-in exports will overwrite existing files with the same version name. Export to empty folders to work around.
If used with Aperture 2.0 the behavior with respect to clashes with existing random files has changed. Random Wok 1.0 will issue a warning if random files are exported that have a name clash, as before. However with 2.0, Aperture does not think that the export has finished and will show the export continuing forever in the background. This is usually only an issue if Freeze is used and repeated exports to the same place are performed. Quit Aperture and relaunch to fix.
Aperture: RAW Converter 2.0 Ate My Yellow

RAW 2.0 on the left, RAW 1.1 on the right. What happened to my yellow?
That's a screen shot of a zoomed-in pair of versions of the same master. That's a startling difference. Neither has been adjusted in any way. And I was unable to get the yellow back without affecting the rest of the image. That may be my lack of understanding of the myriad controls, but I thought it would be straight-forward.
Update: The consensus among the comments is that RAW 1.1 is the culprit here and that I should be glad the bug has been fixed.
I am also noticing that Aperture now sharpens thumbnails. That has the effect of making some images look harsher than they really are when viewed in the browser. Again, RAW 2.0 on the left, RAW 1.1 on the right:

But RAW 2.0 does better on the highlights by default.
Aperture 2.0: Updating And Migrating

The next thing I did was update my library. I did a couple of smaller libraries first as a sanity check, and all was well. My 90GB library with 32,000 images took about ten minutes to convert. Inside I can see that the original Aperture database has now been split into two. The original database pretty much doubled in size, while the new one is obviously dedicated to Blobs (binary large objects) and is quite small.
The surprise can when I quit Aperture: quitting took more than 20 minutes! The sheet said Writing Files... and I believe it was updating the database. It also used up an ungodly amount of RAM. I only have 3GB and it sucked up everything it could find. I sampled the Aperture process while it was doing this and saw 16 Exabytes in use -- about 5 billion times what I actually have:

It did finish, and all was well. My guess is that this delay was because I am still on Tiger and this is a Core Data efficiency problem.
Next I looked at the possibility of migrating my images to the new RAW converter:

Entire projects can be converted, or just individual selections. I selected Migrate and got this rather confusing dialog:

Upgrade existing RAW images
This means that of the images selected all the non-RAWs will be left alone. The RAW images will have their RAW converter changed to 2.0 and the versions and previews updated. While I can't go back on this, I can individually set the RAW conversion back to 1.1 from the RAW Fine Tuning adjustment panel if I want:

I can also create new versions manually and compare the RAW 1.1 and RAW 2.0 converters side by side for individual images. Note that none of this affects the masters. The reference to "images" should be to "versions".
Create upgraded versions of existing RAW images
This works exactly the same as Upgrade existing RAW images except that a new version is created (in a stack) with the original and the converter changed to 2.0 for that new version only.
All images
Means all selected RAW images. The other two selections are similar.
I don't recommend updating converters en masse. I am finding that the new converter is quite different, particularly for heavily adjusted images. Here is a quick example: RAW 2.0 is on the left here:

The new RAW converter does do a much better job with highlights.
Buy Aperture 2.0 Through This Site
![]() |
Buy Aperture 2.0 Buy 2.0 Upgrade |
Aperture 2.0: Get The Trial Version -- It's Fast
The installer requests the key and the application installs. It creates a new Aperture Library and you can fill it with images and use that as a sandbox for a while.
Aperture 2.0 is fast. Adjustments are much faster, though there is a short delay before they are active. Even traditionally slow adjustments like Straighten and Shadows and Highlights are very responsive. I have a lowly 2.16GHz Intel Core 2 Duo iMac 24" and it really flies now. Scrolling is like iPhoto, and the new Quick Preview mode (P key) prevents Aperture from doing the RAW conversions, so making scrolling through images in the viewer very fast indeed.
Aperture 2.0: Trackpad Gestures And More Details
The troubleshooting links on the page are also handy (they are Knowledge Base articles). XLR8YourMac has collected a bunch of them together into a list which reproduce here:
- Aperture 2: Tips on migrating images to RAW 2.0
- Aperture 2: Some tips on Baseline DNG support
- Aperture 2: RAW 2.0 not available with some cameras
- Aperture 2: Some referenced images may be reimported even when Do Not Import Duplicates is selected
- Aperture 2: Newly supported images may not display properly after upgrade from Aperture 1.5.x to 2.0
- Aperture 2: Avoid making manual changes to your library structure
- Aperture 2: Avoid putting the computer to sleep while shooting tethered
- Aperture 2: Date on exported master image may be different in rare circumstances
- Aperture 2: Externally edited images are automatically located alongside originals
- Aperture 2: Tips on tethered shooting
- Aperture 2: Duplicate Images in library when tethering
AUPN has two articles that cover the new features: Part 1 and Part 2. As AUPN points out, lost in all the hoopla is the fact that Aperture 2.0 supports editing plug-ins. This will lead to all kinds of interesting things.
Aperture 2.0: All The Video Links In One Place
Quick Tours
Streamlined UIAdjustment Tools
Platform Integration
Tutorials
Exploring the InterfaceCustomizing the Keyboard
Importing Basics
Tethering
Using Aperture and iPhoto Together
Making Multiple Selections
Using the Loupe Tools
Using the Zoom Tool
Using Quick Preview
Using the Sort Tool
Applying Ratings
Using Compare Mode
Using Stacks
Using Stack Mode
Assigning Keywords
Viewing Multiple Displays
Filtering and Searching in Aperture
Skimming All Projects
Creating Albums and Smart Albums
Using Light Tables
Using RAW Fine Tuning
Cropping and Straightening
Adjusting White Balance
Adjusting Exposure
Recovering Highlights
Enhancing Your Images
Setting Levels
Setting Advanced Levels
Adjusting Highlights and Shadows
Improving Color
Using the Retouch Brush
Applying Vignette and Devignette
Applying Black & White and Color Effects
Sharpening Images
Using Lift and Stamp
Editing Metadata
Adjusting Date and Time
Embedding and Exporting Metadata
Exporting Versions, Masters, and Projects
Making Prints and Contact sheets
Making Books
Creating Web Pages
Creating Web Galleries
Creating Slideshows
Using Export Plug-ins
Exploring Presets
Using Aperture and iPhoto Together
Creating Advanced Slideshows with Keynote
Making Photo Movies with iMovie
Accessing Aperture through Leopard
Aperture 2.0: Now Shipping

Aperture 2.0 has shipped. It needs Tiger 10.4.11 or Leopard 10.5.2. It's $200, down $199 from 1.0, and an upgrade is $99. If you purchased 1.5 recently then you can get it for $9.95.
Apple claims 100 new features that I have not had time to read yet.
Apple's Aperture page has many details. including the specs. The features page has some Quick Tours to watch and there are many tutorials. You download the User Manual, and a publication called Exploring Aperture. There is a compatibility checker that will see if your system can run it.
As usual there is active conversation (maybe less whining?) at Apple's Aperture discussion page.
Aperture: My Projects Have Disappeared -- Is My Library Corrupt?
If you have projects disappearing but not the images they contain, then you probably have selected Recent Projects at the top of the library pane. Change that to Show All and everything will be back to normal.

Recent Projects will show projects and blue folders that have been recently modified. What is confusing is that clicking on the blue folders will show images, and yet there can be no projects inside the selected blue folder to contain them. For example, I have 2005 selected and images are visible:

Aperture: 10.5.2 Released With Nikon D3 and D300 Support

Go grab 10.5.2! It supports the Nikon D3 and D300 as well as others.
Update: My Headline is wrong (still on Tiger here, and no Nikon). Comments are saying things like this:
The only remaining question is whether there will be a RAW update for Tiger or not. There is also a Leopard Graphics Update available that only appears in Software Update after 10.5.2 is installed. This all bodes well for a new Aperture coming soon.Unless I'm missing something-- 10.5.2 supports the D3 and D300 with everything BUT aperture. iPhoto, Finder, Preview... all open D300 RAWs... not Aperture...
Aperture Caption: An Applescript To Quickly Caption Images

Adam Tow has posted an Applescript called Aperture Caption that allows captioning of a series of images without all that frustrating switching between the mouse an the keyboard. You can use FastScripts Lite to create a keyboard shortcut for invoking it, so removing even more mousing.
Aperture: Applescripts To Extract Metadata

Berend Hasselman has a page dedicated to Aperture scripts he has put together. He needed to get at the metadata that Aperture stores but doesn't give access to, like Lens ID and Auto Focus point used so created these scripts. They run fine under Tiger and Leopard.
Aperture: How To Adjust And Compare Two Images
The first thing I do is press the S key to select Primary Only. This has no effect on adjustments (adjustments can be applied to only one image at time), but it does very conveniently make the currently selected image very obvious. Only the selected image has a white selection ring in this mode.
Here I have the upper image displayed as a reference and am adjusting the lower image:

This also works in full screen mode (F key) and with zoom on (Z key):

If I need to adjust two images at the same time, this is possible too. Clicking on an image changes the selection to that image and I make adjustments. This technique can be applied to as many images as I can cram on the screen.
Bagelturf Added To MacCreative

I've added Bagelturf to MacCreative. MacCreative collects together sites and links to all things creative in the Mac World. You can vote for sites and write reviews if you like.
Aperture 2.0: Joe Schorr Speaks; Photographers Dare Not Breathe
We're constantly working to make Aperture an even better tool for users, and will soon release an upgrade that includes RAW format support for new cameras and other exciting new features. Please stay tuned.
My guess is that at the first possible moment following PMA opening its doors (ie Thursday morning), Apple is going to announce whatever it is we have all been waiting for. Then, I'm sure the real whining will begin as it dawns on people that Apple has somehow not implemented every single one of their personal favorite missing features.Joe Schorr
Sr. Product Manager, Photo Applications
Apple
[Update: Nothing so far (the end of Jan 31st). I saw this posting at DPReview:
Curiouser and curiouser.The booth number reserved for Apple (X128) simply says HOLD. It doesn't even identify the company by name anymore. Perhaps they will be a no show.
Aperture: How To Share Image Adjustment Presets
Aperture 2.0 Rumors And Wishes

There has been a great deal of speculation as to what will be in the next release of Aperture -- even as to whether it will be called 2.0 or 1.6 -- but now there are rumors starting to appear. I saw this one on DPReview. It's a typical "I have a friend of a friend whos hair cutter knows this guy who overheard two people on a bus talking" kind of rumor. So there is no way to know how accurate it is. There are so many things that could be changed or improved, that practically any subset would be believable. You can even see how people were thinking a while back at MacPredict (the site appears to no longer be updated).
What does appear to be unanimous is that either Apple will announce something at PMA this week, or thousands will defect to Lightroom. Apart from some bug fixes, it has been an awfully long time since any significant changes were made: 1.5 was released September 29, 2006 according to Wikipedia.
Fraser Speirs posted his wishes for Aperture a short time ago. And Eric Barzeski made his wish-list known a year ago and is itching for information. Sören Nils Kuklau has a list that he posted last year. Inside Aperture speculated some time ago, around the same time that Ed Fladung had a go. Chuqui hoped for 2.0 before Christmas 2007, but was disappointed.
My needs are modest, so I'm wishing for things like better speed and better keyboard navigation. For the product, I think the best thing that could happen would be a flexible plug-in architecture so that the application could be expanded by third parties. I would also like to be able to have Aperture handle all media types, not just photos, and to have a lightweight application that can read the database independently. That would allow plugins and automation scripts run at the same time as Aperture, so not interrupting workflow.
We shall see. I hope it's not Leopard-only because I'm still on Tiger, waiting for a compatible update to SuperDuper.
Aperture: Use A Web Journal To Hold Project Notes
To add notes to My Macworld 2008 project, I control-click the project and select New > Web Journal:

That creates an unnamed web journal inside the project which I then rename. A web journal consists of blocks of text and images arranged on individual pages, the idea being that each page is a single entry for a unit of time such as a day. In this case I'm just going to use one page.
I add text to the blank web journal by clicking the +T icon, or by dragging it to where I want a new entry. The green line shows where it will be placed:

Placeholder text appears and can be replaced with notes by overtyping:

There is a control at the top right that selects whether the text is used as a subtitle or as body text. I can also replace the site title and other placeholder text.
To add images to the web journal pages, I must first add them to the web journal image browser. I add images by option-clicking on a project or album so that two browsers are displayed together and then drag the images I want over to the web journal browser:

In this case I am taking images from the MacWorld 2008 project, but they could come from anywhere in my library.
To make things easier, I can lock the viewer to the web journal browser:

This keeps the web journal displayed all the time even if I select album or project browsers and click on the images they contain.
Once I have some images in the web journal browser, I add them to my notes as illustrations by just dragging them in:

As well as living inside projects, web journals can also be stored in blue folders or brown folders. Although I can't have web journals inside albums or smart albums, I can name my web journals in such a way that they are easily associated with them.
While this technique does not allow documents to be stored with projects, I can still associate them. Using a copy of TextWrangler, I open a new file browser with option command N. Then I navigate to the document I want, in this case a Garageband file, and control-click:

By selecting Copy URL I have a URL that starts with file://. I paste that into my web journal. Later when I want to access the document I can copy and paste the URL into Safari. Safari will open the document if it can (for a movie for instance), or if it cannot will reveal it in the Finder. This technique works with folders as well. There is, unfortunately, no way to make the link clickable.
Aperture: A Fix For Leopard Automator Problems
-NSNull length: unrecognized selector sent to instance 0xa063f020
Berend posts this explanation and fix:
What has happened is that the Aperture Automator actions have been removed from /System/Library/Automator on installing Leopard (probably with Archive and Install).
I've been having this same issue and couldn't for the life of me figure out what was wrong.
The hint provided by the previous poster put me on the right track.
The Aperture Automator actions are located in the the Aperture application.
Steps to take for repairing the situation:
1. Open a Finder window and navigate to /System/Library/Automator
2. Open a second Finder window and navigate to /Applications/Aperture
3. Execute a Show package Contents of Aperture (you should get a third Finder window).
4. Now navigate to Contents/Library/Automator
5. Select everything (.definition and .action) in that folder
6. Copy with option drag to the folder in the window created in step 1.
You will be asked for the administrator password.
7. Close superfluous windows.
8. Start Automator and enjoy.
In short: copy the contents of /Applications/Aperture.app/Contents/Library/Automator to
/System/Library/Automator
I've done this and no longer get the NS Null error messages. I can now access the actions and will see if they actually work some time in the next few days.
Cause: Apple Leopard Installer.
Remedy: Apple should have warned beforehand that something like this would happen and should have provided the solution.
Hopefully the expected updated to Mac OS X and Aperture will fix this.
Aperture: Use The Thumbnail To Preview Crops

After starting the crop with the C key, adjustments of the crop rectangle in the viewer are accompanied by thumbnail regeneration in the browser. Once it looks right, press A to finish. The same trick works in full screen mode:

Just make sure that the thumbnails are set to be visible all the time by setting the viewer mode to On:

Aperture: How To Construct Impossible Smart Albums
However, due to the fact that there are actually two levels of filtering provided by the thumbnail and grid views, impossible filters can be constructed. For instance, I can find images taken on Wednesday OR Thursday OR Friday AND at between 100 and 130mm focal length. I can find images with the keyword Duck OR Swan OR Goose AND the keyword Lake AND rated two stars and above. And if I want, I can make these type of smart filters specific to a single project or to a collection of projects in a blue folder.
Here is how to combine logic using the two available levels. I'll use the requirement that I need to view all RAW images taken in 2007. To find all RAW images I have to create a filter that ORs together all the different kinds of RAW there can be, since there is no setting for "is RAW".
First I select the library and create a new smart album and call it RAW-2007:

I select the Library before I create the smart album because I want this to work on all my images. The dialog reflects this in its title.
Then I set the match to be ANY and filter to Filename ends with .CR2. I add some more conditions for the file name ending that deal with all the RAW formats I am going encounter:

I could check the Ignore stack groupings box at the bottom if I wanted to look inside stacks. This first filter finds all the RAW images in my library.
I close the dialog and with the smart album still selected I click on the filter icon on the browser, top right.
To set up the second level of filtering I filter on the EXIF capture year and match it to 2007:

I could add more conditions at this point, such as ratings or camera model, if I wished.
To make more filters similar to this one, say for different years, I duplicate the smart album, rename it, and then change the year number in the filter:

This second level of filtering works because each album, project, and smart album remembers its current filter setting. I have to be careful not to change it once I have the thumbnails displayed or else it will not work as expected when I reinvoke it. One way to reduce this risk is to select all the RAW-2007 images and create a new regular album from them (or just use the New Album With Current Images button) Since no more images will be added in 2007, the contents of that static album should never change.
Aperture: An Inconsistency In Your Database Has Been Detected
He did all the right things. He immediately made a back up of the library. Then he tried repairing the problem. When that didn't work, he broke the problem down and solved one part at a time. After he had some success, he made another back up in addition to the first. Eventually he found what was causing the problem, deleting the offending files, and all was well.
What Is Missing From The Aperture Library?

What is missing is a search field at the top of the library pane that filters on the name of projects and folders. Aperture works best with relatively small projects and provides blue folders for grouping them. But as time goes on, the number of projects and folders increases to the hundreds, and the point is reached where it is impossible to remember where anything is; hence the need to be able to filter.
Another missing feature is the ability to tag projects. Aperture is hot on keywords and has all these features based on metadata, but still offers only a hierarchical organization for projects. If I could tag projects then I could classify them in several different ways simultaneously. For instance, I could have some projects tagged Personal and Biking and others tagged Business and Biking and be able to filter to any Biking projects, not caring about the situation in which I shot them.
In the Finder list view I can open and close all folders at once with command right arrow and command left arrow respectively. I can include nested folders if I add the option key. But there is no similar facility in Aperture's library pane. In looking for a project I have to manually open, open, open, all the folders, and then when I'm done, close, close, close, all the folders. This adds to the frustration in dealing with many folders and projects.
Aperture: How Should I Move My Vault To Another Drive?
There are two ways to move a vault: move it yourself and tell Aperture where it has moved to, or abandon the old vault and create a new one on the new drive. The former is more useful if you have moved a Firewire disk from one server to another and have not had to copy anything; the latter if you are moving to a new drive and have to copy the data anyway.
Here is an example of moving a vault. Here is my current vault:

I want to move it to a different volume. First I notice that it is not synced, so I click on the arrows button to do a sync:

And then I copy the vault to its new destination by using the Finder.
I have make the current vault go offline before Aperture will allow me to give a new location for it. If it were on an external drive I could do this easily: just unmount the drive and Aperture would note that. In my case it's on my internal hard drive, so I must move or rename it. I can't make any changes to it straight away because it is locked:

I unlock the file in the Finder by deselecting the Locked checkbox in the Finder's Get Info window (command I):

Now I move the file to a different place on my hard drive so that Aperture will not find it, then quit and relaunch Aperture. Now Aperture sees it as disconnected:

I am ready to tell Aperture where the vault has moved to. I select the vault in Aperture's vault pane, and from the cog menu bottom right I select Update Vault Path...

I navigate to the new location to tell Aperture where it is and can now use the vault as normal.
To delete the old vault, since the lock was removed, I just drag it to the trash and empty the trash. If I had moved to another hard drive then I would format the old drive immediately to make sure that it was impossible to get the vault on it confused with my new one.
Fraser Speirs Shares His Workflow
He also has a more recent blog entry entitled When I Delete a Photo (almost never, basically). I have a different philosophy: I reject many photos and delete all the rejects about once a month.Someone asked me recently about how I work through my photographs after I shoot. When I go out to photograph, I shoot a lot - most people I go out with are usually surprised at the number of frames I produce. It’s not uncommon for me to take the kids to the park and come home with 150-300 images.I find that I can usually edit down 350 images to around 50 in 40-60 minutes and I thought I would share how I go about this.
Aperture: Übermind Releases ÜberUpload FTP Export Plug-in
• FTP and SFTP support
• Bonjour support for auto-detecting servers on the network
• Safari-like organizable Favorites
• Finder-style browsing of remote servers with Column and Outline views
• Narrow down a list of files on remote servers with Spotlight-like search
• Permissions on uploaded images and new folders simplified
• Zip your images, individually or as one, on upload
Aperture 1.5.6 Update may not succeed on Leopard
I almost never use Software Update to install updates. I use it to tell me what I need and then go and download and install the software manually. That also saves me from downloading multiple times to update all the machines in the house.
Aperture: Why Is There No Built-in Smart Album For 2008?
Those are built-in smart albums and there is nothing you can do about them:

I never use them. If you find where they are defined and change them, then Aperture will put them back to their defaults. But you would think that 2008 would have been automatically created since it follows 2007. Every time, so far at least.
The fix is to make regular smart albums for years. I click on Library and create a new smart album like this:

By selecting the library first, the scope of this smart filter is the entire library. Renaming the new smart album and clicking on the magnifying glass gives me the filter dialog. Notice that the title says (Library), showing the scope. I could use the + pop-up top right to add a Date line to the filter and then set a range of dates:

But this is messy. Once the dates are entered they change to include the time and time zone. When I set up one for 2007 the filter did not find images I had shot during the last 8 hours of 2007. I am 8 hours behind UTC, so I assume that this filter works on UTC. Handy for those who require the same universal time comparison worldwide so that everyone agrees on when 2008 starts and ends, but not what I need.
So I go for the quick fix by selecting select EXIF from the + button top right and matching the Capture Year:

In both cases I select Ignore stack groupings in order to allow images inside stacks to be included.
Aperture: Recover Images With File Juicer

File Juicer is a small Mac OS X application that extracts images, movies, text, and other useful data from practically anything. It's useful to Aperture users in two important ways: it can recover usable images from the library if the masters are lost and and can scrounge deleted images from memory cards.
One of the hazards of working with referenced image masters is that their management is the responsibility of the owner. Accidental deletions are not that uncommon, and if that happens then while Aperture can display the images, it cannot export or otherwise use any of the versions that are based on the lost masters. If the masters are truly lost -- no back ups, nothing in the trash -- then whatever images can be found become valuable.
If high resolution previews were generated, then these can be extracted from the Aperture library by simply selecting the thumbnail images in the browser and dragging them to the desktop. They will be in JPEG format and at a size and resolution that depends on the settings in Aperture's preferences:

If there are no previews, then attention turns to the thumbnail files that Aperture stores in each project. It is these images that are used to display the on-screen thumbnails in the browser pane and as placeholder images in the viewer while Aperture processes the RAW image. The files that contain the thumbnails are called AP.Tinies, AP.Minis, and AP.Thumbnails and contain images at 32, 256, and 1024 pixel sizes respectively. They are also present in exported projects, but not in vaults.
To get to the thumbnails, I control-click on the library and select Show Package Contents. Then I navigate down to the project of interest and open that with a control-click and Show Package Contents:

The AP.Thumbnails file is one big chunk of binary data, but inside there are complete JPEG images. File Juicer will go into it and locate and extract the JPEGs without knowing the format of the file.
I launch File Juicer and check that the preferences are set to include JPEG images (at least):

I also make sure that the extracted files will be stored somewhere sensible, such as on the desktop, because I don't want the extracted images put inside my Aperture library:

With the selections I have made, File Juicer will put each image type into a separate folder and create a parent folder for those. It will also get an HTML index file for easy browsing. To start scanning for images, I drop the AP.Thumbnails file from my project onto the main File Juicer window and wait for it to process:

After processing I get a new folder on my desktop containing the images:

And I can either open the jpg folder and browse the image icons in the Finder (or watch a slide show), or click on the index.html icon and see all the images in a browser window as a panoramic display:

Now my images have been extracted, I can reimport them into Aperture and sort through them. They will be smaller then the originals -- only up to 1024 pixels on a side-- and there will be one image per version. So a single lost master will result in five recovered JPEGs if it had five versions in that project. This is good because I get my adjusted images, albeit at low resolution.
Since File Juicer is scavenging for JPEGs rather than following any information that Aperture provides, there are some side-effects. The first is that there may be old images or possibly corrupted images in the folder of JPEGs. The second is that the names of the images are sequential and bear no relationship to the order in which they were taken or anything else. The third is that there is no EXIF or other metadata in the JPEGs, so all the keywords, camera and shooting data are lost.
File Juicer will also recover RAW and other images that have been deleted from camera cards, so if masters have been lost it is possible that they can be obtained that way. The process is very similar to the thumbnail recovery described here, except that there is an extra step at the beginning where File Juicer creates a disk image of the card and scans that.
The File Juicer web site has a page dedicated to its use with Aperture, and one about RAW image formats.
Aperture: How Do I Restore A Single Image From A Vault?
Yes, single images can be retrieved from vaults. By navigating down into the vault or by searching, the image can be located and copied out using the Finder. Once copied, it can be imported back into Aperture. This will lose all versions and adjustments, and any metadata that is not part of the original master file.
But first, check for the image in the trash. Images in Aperture that are deleted are put into the trash in a folder called Aperture. Inside that is another folder with the name of the project the image was in. Inside that is the images deleted from that project.
I'll find and restore a deleted image from a vault. The organization of a vault is very similar to that of the library, so delving into the vault is very similar to delving into the library. Since in this case I know that the name of the deleted image included the number 2486, I can search on that. First I open the vault using control-click and Show Package Contents:

Then by typing the part of the name I know into the Finder's search box, I can quickly locate the image:

I can use the slideshow and other features of the Finder window to examine my image. Once located, I option-drag the image out of the Finder window to copy it to the desktop, then drag it onto a project in Aperture to import it again.
If I had not already known part of the name of the image, then I would have had to do more work. By typing JPG into the search box (since I know that my master image was a JPG) I can find all the images and then browse through them:

This will of course work for other file name extensions such as CR2 or NEF. Selecting a image in the Finder window shows the full path at the bottom and double-clicking a folder in that list will open the folder for further examination. Control-click can be used to open projects that show up the path by selecting Show Package Contents. As before I can option-drag image masters out to copy them and restore them to Aperture.
If the deleted image is not in the trash and also not in the vault, there is one last place it may be. Images deleted from vaults by a vault update are not removed entirely, but they are not put into the trash. Instead the folder that holds the vault contains a folder with Deleted Images in its name. Inside that is a folder named for the date and time of the vault sync that removed the image from the vault. Inside that are folders for the deleted images and the masters:

My image is now available for reimporting into Aperture. The techniques I show here can also be used to find out if the image really was deleted from the Library in the first place.
Sal Soghoian on Leopard, Automation, and Aperture
Aperture: How Do I Set Metadata Views Back To Defaults?
The metadata view settings are kept in the user's Application Support folder. If you delete the file MetadataSets.plist, Aperture will create a new one with the default settings.
The Application Support folder in the Library which is inside the user's home folder. Aperture has its own folder. Mine looks like this:

This is also the home of many other settings for Aperture, including the keyword list, watermark images, and plug-ins. Sometimes these files are the cause of mysterious crashes on launch, so it can be a good test to rename the folder and relaunch Aperture to see if the problem goes away.
All these settings only apply to this user, note. There is another Application Support folder with an Aperture folder inside the Library on the boot disk. Here is mine:

BorderFX is here because it has an installer that put the plug-in in this central location. This gives access to the plug-in to all users of the machine. On my machine the Sample Projects folder is empty. That's because I trashed its contents after I had played with the images provided. It's worth checking to see if yours is wasting space and trashing the contents if it is.
Aperture: How Big Should My Library Be?
For 13,000 images, that works out to 540k each, about right in my estimation. The space is used mainly by the thumbnails that Aperture stores for each version.
Here I have a small project with 13 images, all referenced. None of them have previews. To look inside, I open my library with control-click and select Show Package Contents, then navigate down to the project and open that the same way:

Pretty much everything is small except for the AP.Minis and AP.Thumbnails files. The former holds 256 pixel thumbnails at 16 bits per pixel, 128K per image. The latter holds 1024 pixel JPEGs, about 415k each. The whole project is 7.3MB, so those two thumbnail files account for about 95% of the space used. This also shows why vaults are smaller than libraries: they omit the thumbnails.
Creating high resolution previews for these images would add somewhere between 2MB and 5MB per image, depending on the size and fidelity of the JPEGs generated. That would boost the project size by between 26MB and 65MB, a significant increase over the current 7.3MB.
The library has some overhead beyond the projects it contains. By opening the library with control click and Show Package Contents I can see the files at the top level:

The biggest non-project item is the database file at 2.2MB Not particularly significant in this 7GB library.
To a very rough approximation the library size is given by:
(number of managed masters * master size) + (number of versions * 500k) + (number of previews * 3MB)
Handy Cheat Sheets For Aperture And Lightroom

Greg Newman has cheat sheets for Aperture and Lightroom on his site. His screen shots take you to Flickr, so don't go there.
What you really need is to look for the links under the images and download the ZIP files, two for Lightroom (Mac and Windows) and one for Aperture. After unzipping you'll find a large PNG image for on-screen use and a PDF for printing.
Aperture: 32 Ways To Speed Up Aperture

Jellyfish: 1/20s f/2.8 ISO1250 @55mm, Canon 30D, Canon EF-S 17-55mm f/2.8, adjusted, cropped
I've put together what I think is a comprehensive list of ways to speed up Aperture. Some are quick, some are cheap, some are neither.
Get A Faster CPU Or More CPUs
Up to a point more GHz and particularly more CPUs will speed up Aperture. I say up to a point because there are diminishing returns as processors are added. And because CPU speed is secondary to GPU speed. Which brings me to...
Get A Faster Graphics Card
Aperture is very GPU-intensive. If you are buying an iMac, get the fastest graphics option you can, and get the most VRAM you can. If you have a Mac Pro, then configure it with fastest graphics card option find with the most VRAM. When you have your card...
Plug The Graphics Card Into The Fastest Slot
That's going to be a 16x PCIe slot on most machines. Second best is an 8x slot. If you have two graphics cards then put the fastest one in the fastest slot. And to run two screens with Aperture...
Connect Both Screens To One Video Card
It's much faster to drive both screens from one card because the CPU only has to transfer the data once to the card to have it available on both screens. And also because that one card will be in the fastest slot. But even if you have two screens you can make things faster ...
Use The Smallest Screens That Are Useful
Yes a 30" Cinema display is very nice, but you will get more speed out of 23" simply because there will be fewer pixels to process. Another reason for smaller screens is that the larger the screen, the more VRAM is used, and so the less that is available for cached images and the slower the overall performance. Or if you don't need the second screen...
Use Just One Screen
One screen will be faster than two for all the reasons that apply to using a smaller screen.
Add More RAM To Your Mac
Running Aperture on a machine with less than 2G of DRAM is asking for slow. Consider 3G a minimum, particularly if using RAW.
Get A Faster Hard Drive Or Use Striped Hardware RAID
A faster hard drive will have some impact on the speed of Aperture, but not as much as you might expect. The fastest set-up will have internal or eSATA drives running in a striped arrangement so that data can be read from both drives simultaneously. Hardware RAID will ensure that writing is fast as well.
Make Sure You Have The Latest Version Of Aperture
Each release has run faster than the previous one, so be sure you are up to date. While you are at it...
Install Leopard
While Leopard does appear to have some odd problems for some Aperture users, it also runs faster and smoother. At some point Aperture will be optimized for Leopard, not just compatible with it and we'll see a big speed bump.
Set Processor Performance On Fastest
Older PPC machines and some laptops have a setting in the Energy Saver preferences to run the processor at different speeds. Select the Fastest setting.
Plug Your Laptop Into The Mains Power
I'm guessing here (since I don't have a laptop), but it is normal for laptops to run faster when plugged into mains power since they have no need to conserve power drain. Speed throttling when used on battery includes the GPU these days, so will have an impact on Aperture.
Turn Off Spotlight
If you have images on a drive or partition separate from your boot disk, disable Spotlight for that drive. This will prevent the OS from attempting to index and reindex the library and its images and will make things a little faster.
Reindex The Aperture Database
Each library has an SQLite database that exists to speed up access to all the images and metadata. Over time the index for this database gets fragmented and so is slower. So about every month or so, it is worth forcing that index to get rebuilt (see Applescript here). It takes a few minutes and can have dramatic results. It's much faster than if you...
Rebuild The Aperture Database
By starting Aperture with Option and Command held down, the database will be rebuilt. This can take a few hours because Aperture has to read all the files in the library to collect all the data and store it in a new database. But it can work miracles.
Turn Off Previews
Generation of high resolution previews can eat up a lot of processing capacity as well as disk space. If you don't need them, then turn them off and delete them. Thumbnails up to 1024 pixels are always generated, so there is nothing you can do about that.
Turn Off Sharing With iLife
Sharing previews with iLife uses an XML file that is regenerated when Aperture quits. This can take a long while if there are a lot of previews, so by turning off iLife sharing quitting can go faster. You will find the setting in Aperture's preferences.
Turn Off Anti-Virus
Anti-virus software is invasive and very resource-hungry. Turn it off for a dramatic improvement in speed.
Make Changes To The Keyword List With No Thumbnails Showing
In some circumstances changing the keyword list -- things like renaming or rearranging the keywords -- can go extremely slowly. These delays can be almost completely eliminated by ensuring that the browser is not showing any images when the keyword list is changed.
Use A Small Viewer
Since thumbnails are generated at 1024 pixels size, using a viewer that is equal to or smaller than that can give some speed up. The thumbnail is almost identical to the processed RAW image, so many decisions can be made immediately without having to wait for the full image to load.
Turn Off Automatic Version Generation For Adjustments
Aperture has a peculiar option in its preferences that make it generate a new version every time a slider is moved or a button clicked on the adjustments HUD. This makes things very slow since Aperture generates thumbnails for each of these versions. Turn that option off.
Use A Firewire Card Reader
Most card readers are USB and USB is not particularly fast. Firewire card readers can run at more than twice the speed, especially if using several of them at once.
When Adjusting, Crop First
That might seem like odd advice, but cropping first results in fewer pixels that must be calculated and displayed and hence faster operation. Since this is Aperture and the workflow is non-linear the crop can be adjusted at any time if you are not happy with it.
Turn Off All The RAW Fine Tuning Settings
The RAW Fine Tuning settings are all turned on by default. You may not actually need them, and if you turn them off you will find that RAW processing is quite a lot faster. You can do this by changing the settings on one image and then using lift and stamp on the others.
Don't Display The Histograms
Calculating the histograms takes time and computing resources. Turn them off if you don't need them, or hide the whole adjustments panel or HUD if they are not in use. The cog menu on the HUD gives control of the histograms.
Use Slow Adjustments Last
The Highlights, Shadows, Straighten, and Spot tools are notoriously slow. So after cropping first, do everything else except those next and finish up with the slow tools.
Don't Use Full Text Search
Aperture's full text search will do a linear search of all the text available, including captions. This makes it very slow for large libraries. Instead use a limited text search if you can. A limited text search only searches text that is indexed by the database, so is much faster. Change the setting by clicking the magnifying glass in the search box.
Don't Fill Disks To Capacity
A consequence of the constant rotational velocity of hard drives is that data close to the edge of the disk can be read and written at twice the speed of that close to the spindle. Disks are filled from the outside inwards because this gives the highest data rates for the first data written to the disk. As disks are filled to capacity, the data rate slows, so fill disks only to 50% to 75% capacity for best performance.
Keep Projects Small
Small projects are faster to work with in Aperture, probably because the opportunity for caching images and database information is greater. Less than 1000 images is a good rule of thumb. Use blue folders to combine small projects into larger groups for easier management.
Use JPEG Images
JPEG images are much faster to work with in Aperture than RAW or TIFF. Rather than use RAW for everything, use JPEG where you can get away with it. Either shoot JPEG or RAW+JPEG, or just get the levels right with RAW, export as JPEG and reimport for all the remaining operations.
Use Smaller Images
Smaller images are processed faster than larger images. So unless you need the pixels, don't put them into Aperture in the first place. Shoot at less than the camera's maximum resolution, or export and reimport JPEGs at a smaller size.
Delete Aperture's Preferences File
Some weird slow-downs and delays are cause by corrupted application preferences. you can rid yourself of these by removing the preferences file and restarting Aperture.
Did I miss any?
Get Your Head Around Aperture 1.5 Edition 2 Now Available
![]() | Fourteen New Articles |
I have updated Get Your Head Around Aperture 1.5 with fourteen new Aperture articles that were published on the blog between the first edition and today. For full details of the changes see the Publication History page.
If you have already purchased the book, you will have received an email with a download link that is good for 5 downloads or one year, whichever comes first. Just use that link and it will download this new release. Or skip this update and get the next.
Aperture: SmugMug Export Plug-In Available

David Michael Holmes has an Aperture Export plug-in for SmugMug called ApertureToSmugMug. While that's the only one that interests me, others may find his other plug-ins for Phanfare, PBase, and ZenFolio useful.
Aperture: Chroma Blur To The Rescue

Flower and Sunset: 1/8000s f/3.5 ISO400 50mm -0.7ev, Canon 30D, Canon EF 50mm f/1.8, adjusted
A Thanksgiving trip to Monterey Bay Aquarium gave me some interesting photo opportunities, not all of them involving sea creatures. Sitting down to lunch, I snapped the photo above, just after the table has been relaid, and just before people were shown to it.
I literally snapped it, picking up my camera and pressing the shutter to seize the moment. Only later did I get chance to view the result and see how the camera had been set up at the time. This is what I had:

Since I was shooting RAW, the tungsten white balance could easily be adjusted out. The image had been underexposed two-thirds of a stop on top of metering on the bright sky, so the detail on the table was lost in the shadows.
After adjusting the white balance I increased the saturation to 1.8 and then started on the levels. By boosting the shadows with the Highlights and Shadows control and making some heavy changes to the Levels control, I was able to obtain a much better image. But the shadows, now light enough for detail, showed some very ugly blotches of color caused by chroma noise (100% crop):

Chroma Blur to the rescue. Chroma Blur is one of the RAW Fine Tuning settings hidden behind a disclosure triangle at the top of the adjustments pane and is normally set to 2.0. I boosted it all the way to 10.0 to achieve the result I was looking for:

A side effect of this adjustment is that the flower petals have dark edges -- that's not as the scene actually was, but in the final image if helps make them stand out against the light background.
Here are the final settings:

Notice that I changed the levels by moving the top triangle controls, not the lower markers. I find this often gives better control.
Aperture: What Are The Pros And Cons Of Managed vs. Referenced Masters?
Here is my list of pros and cons for referenced and managed masters:
Pros for Managed
- No file management needed
- Low risk
- All masters backed up with the library
- Can use vaults for complete back up
- Always have everything with you
Cons for Managed
- Potentially huge library
- Other applications can't access images
- Can archive by project only
- Adding storage requires that everything is copied
Pros for Referenced
- Organize and store the masters where you like
- Access them from other applications
- Masters can be backed up separately from the rest of the system
- Potentially sharable among many users and systems
- Can archive in many different ways
- Can be simple and fast to add storage
Cons for Referenced
- Must organize, manage, and protect the masters
- Risk of being caught by permissions problems
- Risk of Aperture not reconnecting them
- Must remember to back them up separately from everything else
- Not all images are with you all of the time if using a laptop
- Vaults don't have all the data
- Offline referenced masters cause filter difficulties
Aperture: Remove Duplicate Images

This project is full of duplicates. There are only 30 images I need to remove in this example, so I can do it by hand, but what if I had a thousand?
There are two ways to remove duplicates: find something that is common to all images in one set and filter on that, or find something that is common to each pair of images and use that to create a thumbnail arrangement that makes for easy selection.
An example of using the first method is to see if the duplicates exist because they were imported a second time. If this is the case then they have a separate import session and I can filter them and remove them. It's easy to check. I click on the filter button top right, select Import Session and see just two. I select one of the two import sessions to filter down to just one set of images:

Then I select all the images will command A and delete them with command delete. When I show all the images in the project, just one set is left.
If the duplicate images were imported together this does not work, so I need a different method of distinguishing them. For example, if one set of duplicates is a different size then I can filter on the EXIF data and use a condition such as Image Height Is Less Than to split them:

To use the second method, that of pairing up the duplicates, the sort order must use an image property that is the same for each duplicate, such as image date, caption, file name, or possibly file size. It depends on where the images came from as to what is available and what will work. The list view can be useful for doing this because it can sort on a much wider variety of image data than the grid view.
Once sorted, and assuming that every image has the same number of duplicates (all have one duplicate in my example), I arrange the display to show the duplicates in rows:

To select the ones that I want to remove, I simply click and drag a selection rectangle from the top to the bottom on the left-hand column:

Once selected, I press command delete to remove them. Just marking them with a keyword or as rejects are other options open to me. It depends how certain I am that I want them removed permanently and right now.
Another way I can get rid of duplicates is to hide them in stacks. This works only if the images have their image dates intact. I select all the images and go to Stack > Autostack. By addjusting the slider on the autostack HUD, the images are paired:

I close all the stacks with option semicolon and the problem has been hidden. If I later want to delete the duplicates, I can open all the stacks and adjust the width of the grid view to show one stack per row. Then I drag a selection rectangle across the right-hand images to select the images and delete them.
Having the duplicates in a stack like this also lets me mark one set. Selecting all the closed stacks and adding a keyword will only apply the keyword to the pick. If I subsequently unstack the images, I can then use that keyword to filter and remove the duplicates.
Aperture: Articles At Jürgen's Photography Blog

Jürgen Banda-Hansmann has written a short series of articles about Aperture that cover:
- Optimize Libraries
- Optimize your folder structure
- Personalize and structure your Keyword List
- Create your own Metadata Presets
- Autostacking
Aperture: DNGExport Plug-in

Micah Walter has released a beta Aperture plug-in that exports images as DNGs. It's a wrapper that calls Adobe's DNG Converter application, so that pretty much defines its functionality. You'll need to download the converter from Adobe as well as the plug-in.
A Quick Look At Photon 1.0

As soon as I put my card into a reader, Photon starts reading and converting RAW files, putting thumbnails into the area on the left. I can start working with images right away: no need to wait for the download to finish. Photon maxed out both my CPUs as it downloaded at about 7MB per second from my USB card reader.
Across the top are stacks: general purpose bins for images. The currently selected stack populates the thumbnail pane, so clicking on a different stack shows me a different set of images. Each card initially goes into its own stack.
To process my images I scroll through the thumbnails with the left and right arrow keys and restack the images using whatever criteria make sense for me. Each stack has a single-key short-cut, called a hotkey (the numbers 1 and 2 in the screen shot above). I can reassign these to any keys I like. 7, 8, 9, X might relate to ratings. I could add a stack called T for trash and another called P for print. If I were shooting a wedding I could assign hotkeys for different locations or people. There is no need to drag and drop images, just pressing the hotkey moves the image to the stack assigned to that key and shows the next image in the viewer. I can process 1000 images with only 1000 key presses this way.
Zooming is simplicity itself: I click on the image and it zooms to 100% with the click point at the center:

I let go, and it returns to a scaled view. To make zooming persistent I can move the switch bottom right.
Once I have my images sorted, I am ready to export the images to disk. Since many of my images have no value and were either moved to a junk stack or skipped over, I only save some of the stacks. I can save the original RAW, or opt to have Photon convert to JPG, TIFF, or a number of other formats. Once done, I am ready to import my surviving images into Aperture or another application or process them further, maybe adding GPS data or keywords.
I found this 1.0 release of Photo to be stable and fast. There are a few rough edges to the interface and a need for refinement in some areas. Photon is short on features -- but that's good. It does what it claims to do well, and there is plenty of functionality that can be added later once customers start telling Green Volcano what they would like to see. The demo version does everything except save stacks.
A Week Without Leopard

Roadster: 1/25s f/6.3 ISO400 55mm, Canon 30D, EF-S 17-55mm f/2.8
It's been a week since I went to the Los Gatos Apple store and picked up my copy of Leopard. But I'm not running it yet. I'm waiting for three things: an update to SuperDuper, some fixes for RapidWeaver, and an update to Aperture. All have some issues, or at least the potential of issues, when running under Leopard and since these are critical applications for me, I have to wait until they are ready.
The Apple discussions have reports of some odd problems with Aperture running on Leopard. Some people cannot launch the application beyond the splash screen. Others get crashes at the same point. Some can see their images, but get a crash as soon as they try to do anything with them. I've seen some problems fixed by turning off Time Machine, but others not. It's hard to distinguish one cause from another because the hardware configurations are so different. My suspicion is that graphics drivers are at least partly involved, but people have been able to fix some problems by ignoring ownership on firewire volumes. Suggestions are that Prokit and corrupted images are to blame as well.
The menu bar can vanish too. Some people have found that font duplicates were the cause. Others find that Leopard is thinking their video card is unsupported and once they get past that the menus come back. Spaces causes some odd interactions with Full screen in Aperture, but this is not specifically an Aperture issue. It interacts strangely with a number of applications. One person had problems with a color picker preventing Aperture preferences appearing. There are clearly many ways that all manner of easily forgotten additions cause problems under Leopard.
Meanwhile I've been booting into a copy of Leopard installed on another partition and playing with it there. I've already made a snapshot of my Tiger drive that I will keep for at least six months: that's my insurance in case of corruption or my own stupidity. When I do move over, I'll do all the requisite back ups and checks, clean out my fonts, remove all the non-standard preference panes and start-up items, unplug all the peripherals, etc. and then do an update install. The next step will be to test everything that's critical to make sure I don't need to revert and go forward with my fingers crossed.
Aperture: Compare Many Images Quickly
First I make the workspace as big as possible. I go to Window > Layouts > Maximize Browser (option command B), press W to get rid of the project browser pane if it is still present, and press shift T to remove the toolbar at the top. Now the screen is full of thumbnails.
With hundreds of thumbnails on the screen it can make sense to arrange them into groups. If I'm going to compare pictures of a cat against each other then the job can be made much easier if they are all together, so either I drag them so they are adjacent, or even better select all the cat images and press command L to make a new album out of them.
But however I have these thumbnails arranged, if I have hundreds then they are too small for proper comparison. So I move the slider on the lower right all the way to the right to make the thumbnails as large as possible:

The large thumbnails are of a lower quality than the original, but it is possible to make judgements on them at this reasonable size. I can reject many right away by selecting them and hitting the 9 key.
To compare the images that remain I need more detail, and there are a couple of ways of doing this: Multi mode and Three-Up mode.
First I make sure I am in Multi mode:

Multi mode allows the viewer (and full screen view) to show multiple images at once. Primary mode shows just the currently selected image.
Then I select four adjacent images thumbnails that I want to initially compare:

By going to full screen with the F key I can make each fill almost a quarter of the screen:

To display more images I hit command left arrow or command right arrow twice, quickly. This scrolls the images up and down two at a time:

For a bigger view of one image, I can switch into Primary mode temporarily. Pressing option R fills the screen with the selected image. Pressing option U puts it back in Multi mode. To repeat with another on-screen image I click it and use option R, option U again.
Of course the loupe is always at hand, but can only look at one part of one image. No use for comparisons.
For even larger views, I use the zoom function. The disadvantage with using zoom is that with the limited VRAM on my machine (24" iMac with better graphics), going into zoom mode arbitrarily reduces the number of images from four to two or three, so losing my selection.
If four images is too many, how about three? There is another display mode called Three Up that I can use for comparisons:

To use Three Up mode, I select one image:

And then go full screen with F:

The selected image is in the center and the adjacent images are shown to either side. It's wasteful of screen space, but does the job. As I hit left or right arrow keys, the images scroll left and right. I can also click on the left or right images to make them scroll to the center.

To narrow down to just the center image and one other, I command click on the image I want. That adds that image to the selection and prevents Three Up mode from doing its magic. Command click on it again to restore the Three-Up display.
Pressing Z to zoom from Three Up mode gives me three full-size images that I can freely scroll around for comparison. Command space drag moves single images and shift command drag moves all of them together.

I've gone from roughly comparing hundreds of tiny thumbnails to comparing just three images in great detail. By rating or keywording I can pick the ones that I think are the best and then move onto another group of images.
Aperture Marketshare At 5.5% Among Pros
Most pros use just Photoshop. Hard to believe, but I suspect that their workflow is simple. Also this only surveyed pros in North America. No word on the many users like me who have outgrown iPhoto and other tools.
Displaperture: Nothing To Do With Aperture

Displaperture rounds the corners of the desktop. Leopard no longer does this, and some people want that feature back.
Don't Use Time Machine With Aperture
I'm sticking with Tiger for a while and running Leopard off another partition to test things. One problem with doing this I have found is the Spotlight indexes are incompatible: each reboot will cause Spotlight to reindex all my drives.
Aperture 1.5.6 Provides Compatibility With Leopard
Recommended for all licensed Aperture customers, the Aperture 1.5.6 Update addresses issues related to performance, improves overall stability, and supports compatibility with Mac OS X Leopard v10.5.
Update: Later today Apple will release the Aperture Export SDK 1.5.5. This provides only minor changes. Notably there are no new APIs provided. I am seeing reports that Aperture is fast on Leopard. I'll get a chance to try it out later today or tomorrow when I have Leopard in my hands.• Resolves some minor compatibility issues with iPhoto 7.1, which organizes images by Event rather than Roll.
• Addresses issues related to metadata and sort order when sharing previews with iLife Media Browser.
• Improves reliability of queries based on Import Session.
• Addresses reliability when recovering an Aperture Library from a Vault.
Aperture: Don't Import Unsupported Images As Referenced Masters
Another good reason for using managed masters, or just not dealing with unsupported cameras at all.Referenced images from cameras that are newly supported sometimes cannot be connected after you update to a version of Mac OS X that supports them.
Aperture: A Quick Way To Add Keywords To Stacked Images
There are consequences to this. For example, if I change the pick after keywording, the new pick (and hence the stack) no longer has the keywords:

The water keyword will not find the pick and so will not find the stack. And unless I specifically select to ignore stacks, any smart album that filters on the water keyword will fail to find this image.
The choice I have is either to live with this behavior, or keyword every image in the stack when I do the keywording. But how to keyword every image in a stack without going crazy?
The obvious way is to select the pick, click the number to open the stack, then click drag, click drag each keyword to each image:

This is very slow and error-prone. A faster way, but still with too many keypresses, is to open the stack and select all the images in the stack at once with command E. Then each keyword can be dragged over from the HUD just once to apply it to all the images:

I can apply multiple keywords at the same time by command-clicking on them and then dragging, saving even more time. And if the keyword buttons are set up on the keyword bar at the bottom of the window, I can press them or their keyboard equivalents to quickly apply commonly-used metadata.
I actually use an even faster way that goes straight to the next stack and opens it all in one step. First I select the top image in the project or album, then press option page down. That single key-press seeks forward to the next stack, opens it, and selects all the images it contains. Now I simply add keywords to all the images in the stack, as before. I press option page down again to go to the next stack and repeat. Once done, I close all the stacks with option semicolon.
Option page down also works in list view, but in list view the images are to small to be recognizable.
The option page-down method for dealing with stacks skips all the intervening unstacked images and that can be inconvenient. I have to go back over my images picking out the ones that are not in stacks among those that are in order to keyword them. I can make this a little easier by sorting the display by Keywords:

Once I do that, all the non-keyworded images are together at the bottom of the browser ready for keywording.
Aperture: Display Full Captions and Keywords For Thumbnail Images
But Aperture limits the display to a single line, so unless the thumbnails are displayed at an enormous size I can only see the first part of the metadata:

And that is a problem. Are those words captions, keywords, or what? And how can I see what else there is?
There are a couple of ways to get information on individual images. The metadata pane (capital I) will show everything I have set up in the metadata view selected:

But that uses up screen real estate all the time. I can also press the T key and have the metadata tooltip come up:

That saves the space used by the metadata pane, and I can just move the cursor to any image that interests me, but it still displays information for only one image at a time.
A better solution, and one that is available with a keypress, is to look at my images in list view. I can click the button at the top left of the browser, or more quickly, hit control L:

The thumbnail images are replaced with a dense display that shows one data for one image on each line (shift W is sometimes needed here to "rotate" the display for extra width). The currently selected images are shown with a white background, so it is easy to identify them. The list can be quickly sorted by clicking on a column, and the columns widened so that the whole caption and keyword list is visible:

And if I go back into grid view (control G) the sorting column I selected stays and the thumbnails are displayed in Caption order, grouping all those with no caption at the top:
The list view columns can be reordered, to put the caption on the left for instance, but unfortunately that change does not stick. To change the order of the columns permanently, a visit to the metadata pane is required -- the order of the columns in the list view is reflected in the order of the items in the metadata view that is applied to the list view. That's a mouthful, because there two steps needed to set this up.
To customize the list view, first press command J and select metadata views for the two list sets:

The set that is displayed can be switched on the fly with shift U just like the grid views. Here I am using List - Basic for one and List - Expanded for the other. I can use any metadata view I like, including new ones I have created.
Now by closing the View Options window and selecting one of those List views in the metadata pane, I can edit it to choose what it displays and in what order. I'm going to modify List - Expanded:

I can rearrange the items into the column order I want. I put the caption first by dragging the Caption field to the top:

And then move the Keywords field to the next spot. To end the editing, I deselect the button at the bottom of the metadata pane:
and the set-up is complete.
Looking at the list view I see that the Caption and Keywords are on the left, or at least as far left as they can go, since the Version Name column is always shown on the left:

I can create any number of different column arrangements and select two of them up at a time to be toggled with shift U.
Finally I can see all my captions and keywords in their full glory just by pressing control L. Control G gets me back the grid view.
Aperture: Create Stacks With A Preferred Order
For example, I select these three images in the order right, top, bottom:

I hit command K to make a stack from them:

This can save time, since if you want to create a stack with the images sorted into rating order, there is no need to create the stack and the reorganize it. Just click on the images in the order they are rated and create the ordered stack immediately.
Aperture: A Fix For Vaults That Fail To Update?
Aperture is not letting me update my vaults. I am receiving update vault error messages when trying to back up to Vaults. I have three backup Vaults on external firewire drives, formatted Mac HFS+ (not MS-DOS) and not partitioned. My Aperture library is also on a dedicated external drive. I get the same message for all three vaults, so this seems to be an Aperture problem, not a disk problem. The error messages refer to NEF (raw) image files that do not exist in my Library (or anywhere else, for that matter). Message reads:
update vault error:
The following error occured:
Couldn't create/Volumes/LaCie/ApertureV2.apvault/Library/....
Another reader with a similar problem found a solution:Any insights would be appreciated.
This and the fact that all three of the poster's vaults fail to update implies that the problem is not with the vault, but with the library: there is something about the information that Aperture stores about that image that causes an error. When the image is adjusted the bad file is overwritten and the problem goes away. Vaults don't contain thumbnails or previews, so it can't be those. The master in this case is referenced, and in any case is never updated. So it must be with the sidecar files.I managed to fix my problem by making an adjustment to the photo that the error message referenced.
The original poster can't apply this fix because the image that is causing the problem apparently does not exist, so I'm investigating this with him. Update: We traced the problem to "something bad" about the folder or its contents that was being reported. By opening the library and the vault with control-click Show Package Contents and navigating down, it was possible to trash the folder. Not only did the vault update complete once that was done, but it worked many, many times faster than before. The bad news is that I think this is due to a bad spot on the disk, indicating a drive that is on its way out. If you have vault problems: back up carefully and consider that you may have a bad disk.
Vault problems can be caused by using the wrong disk format, typically FAT32, because the drive arrived that way and was never reformatted. FAT32 cannot support the characters used by Aperture in folder names and so causes errors. Another cause of problems is that the ownership of files and folders in the vault may be at odds with the current user. This can be fixed by checking the box for Ignore ownership on this volume on the information window for the volume (command I):

Aperture: Launching Photoshop Automation
Aperture: Having Found One Image With A Filter, How Do I Find Others In The Same Project?
You are not missing anything obvious. The features for doing this are somewhat limited, but it can be done.
Here is an album that displays some images. I want to find out which project the dog photo comes from:

By selecting the image and bringing up the metadata panel of the information pane I can look at the Master Location:

The Master Location is the name of the project that contains the master, so I can just go look there. If the project is in a blue folder or two, then those folder names will be given in a bread-crumb style list: Outer folder > Inner folder > Project.
A more specific method that will locate the master image more uniquely is to copy the File Name, and do a search on it. Start by creating a filter on the entire library:

And then either paste the file name into the text box:

Or use the + pull-down menu top right to add a new search term (Other Data) and specifically choose the File Name option.

The former can be very slow because it may search all the text in the library in a linear fashion. The latter takes longer to set up, but is more precise, matching only file names, and much faster. In either case, check the Ignore stack groupings box if you want to look inside stacks. More than one image may be found because, depending on how you have your master files named, there may be duplication. In the example I show here, the name that the camera gave me has the date appended, so I will only find a single image.
The same technique can be applied to the caption. I caption everything I keep, layering captions onto many images at a time. To find "similar" images, usually from the same project, I just search using part of the caption.
A fast way of finding images taken with the original (and usually part of the same project) is to note the date it was taken and filter the library on that date:

Using the calendar uses very few clicks and uses indexed information, so can often be the fastest.
None of these methods will show which albums contain a particular image. Nor is is possible to find out how many time and image has been used in albums. The best workaround I can think of is to delve into the library and search for image UUIDs, but this is messy.
Übermind Releases Aperture to Picasa Web Albums 1.3

Übermind has a number of Aperture export plug-ins available. They have just updated Aperture To Picasa Web Albums to 1.3, increasing the upload speed.
Intimidated By Keywording -- Use Captions Instead
I made a reply in the comments that I reproduce here:I’ve never really known why I couldn’t get into it, but last night I realised: Aperture’s beautiful hierarchical keywording system paralyses some part of my brain.
Better than keywording is captioning. The problem with keywording is that there is a temptation to worry about creating consistency, planning for the future, not duplicating things etc. It’s like trying to organize a chest of drawers when you have more kinds of things than you have drawers and you know that you will have to accomodate more things in the future that you’ve never even heard of. Keywording really exists to help other people.
So caption instead. Aperture allows you to layer captions. Caption everything with “Beach trip with Brian and Jan”, then add “In the car”, “On the beach”, “In the sea”, and “Evening bonfire” as appropriate. Then caption some of those with “Down the winding path” and others with “Falling into the water”, adding “Silly face”, “Too much beer”, and “Not enough beer” to others.
Really. Don't go overboard with rigidity. The takeaway is simple: keywords are for other people; captions are for you. Ask yourself why you are applying metadata.Captions are far richer and will capture much more of what is going on. Do you really have keywords for Silly, Face, Beer, Beach, Too much, Not enough, Winding, Path, etc.? They’re not noun-bound as keywords tend to be. And there is no structure. Why should there be? No use for it. Captions are there to help you. Think of them as evidence, not proof.
Aperture: How Do I Consolidate The Images I Have Shared With iPhoto Without Creating A Problem For iPhoto?
You can do this very easily using Aperture's Consolidate command. Select the images and go to File > Consolidate Master... or for an entire project control click on the project and choose Consolidate Masters for Project...:

While consolidating usually moves the master files into the Aperture library (so causing iPhoto grief), there is an option to copy the files instead. This leaves the originals intact:

Of course now you have two masters on your disk, one in iPhoto and one in Aperture. Once you have confirmed that Aperture has the photos in its library as expected, you can delete the iPhoto copies.
Aperture: How Do I Add Metadata To A Book That Is Not Offered In The Pulldown Menu?
In a word, no. The choices given are the only ones available. Your only practical option at this point is to move or copy the metadata to one of the available choices before you import into Aperture. There are no capabilities inside Aperture for moving or copying metadata between fields automatically.
When laying out a book, metadata boxes can be added and linked to images. Having selected the Edit Layout mode and clicked on an image, the Add Metadata button (center) creates the box:
The metadata box is linked to the selected image and includes the data shown by the tag:

There is a drop-down menu that allows the contents to be changed:

Only this small selection of possible metadata can be displayed. The only way to get more data is to move it into the available fields.
But I have never been able to get anything to appear for the Title, Author, or Copyright selections. It's as though Apple has simply missed something out here.
Aperture: Delete JPEGs Imported As RAW+JPEG
The short answer is that you don't. At least not with the tools supplied in Aperture, since Aperture treats the RAW file and the JPEG as a single composite master and won't let you do anything with them individually except create a new master from the JPEG. That new master can be deleted, but it doesn't buy you anything since the original JPEG is still there with the RAW file.
I have as technique that I think is better then Ellen and Josh's. It uses only the Finder and doesn't require any Terminal typing or scripts. And I don't leave any files behind. So without further ado, I'll show you what I do.
[Update: Aperture.fr has an Automator action that achieves the opposite: gets rid of the RAW files and leaves the JPEGs. It does, however, lose any adjustment history. Site is in French]
Here is a project called Yard shoot inside a blue folder:
All three of the images are RAW+JPG. Here they are:

I'll look inside the project to see how it is organized. I open up my Aperture library with control-click and select Show Package Contents, then navigate to the Z folder and then control-click on the Yard shoot project file and select Show Package Contents again. Here are all the files:

I can see the RAW files (CR2) and their JPEG (JPG)sisters. I can also see the apfiles which contain Aperture's information about the image files and the apmaster file that documents the master. What I want to do is to get rid of the JPG files and their apfiles, but leave the CR2 files alone and not leave the apmaster file in a state that will confuse Aperture. Also notice the JPEG files in there that are in the Previews and Thumbnails folders. Those are the previews used for iLife and other applications, and I may want to keep those.
1. Export the project
First I export the project to a temporary location. It looks like this:

2. Open up the project package
It's a package just like the library, so I control-click and select Show Package Contents to view its insides:

3. Find all the JPEG files in the package
I type .JPG into the search box top right and press return:

The Finder window changes to show me the apfiles and the images that match. I can tell the image files apart by looking at the pixel sizes underneath.
4. Select all the files and delete them
If I want to delete all the JPEG files (including the previews) then this step is easy. Select all with command A and delete them with command Delete. Command delete does not appear to do anything at all, but actually it has moved the files to trash. Close the window.
4a. or Select some of the files and delete them
If I want to delete only some of the JPEGs or if I want to leave the previews alone then I have to be selective. By command clicking on all the images that I want to delete, I can make a selection. I'm deleting the JPEGs for images 2563 and 2565 in this case, so I select those.
While it is not critical that the apfiles get deleted too it can be good to be neat. Making this additional selection can be made much easier with the following trick. Press command J to bring up the Finder view options and make sure that This window only is selected. Now select Group By Date and within the group, By Name:

The window changes, but the selections are still there:

Now I can easily command click the apfiles that immediately follow the images already selected and add them to my selection. I do that, and then press command Delete and close the window.
Now if I look in the exported project I see that the JPEGs I wanted gone are gone and the JPEGs I wanted to keep are still there:

5. Reimport the project into Aperture
I create a new blue folder for my project to avoid confusion, and drag the fixed project in:

Now the images I removed the JPEGs from no longer have the option to create a new master from the JPEG:

6. Clean up
After checking the project, I delete the temporary copy and the original. I am done.
Why do all this with an external project? One reason is that it is much safer to operate on a copy of the data than the original, so exporting the project satisfies that urge. The other reason is that the result is much neater. When the project is imported, Aperture does some checking and fixes up the apmaster files.
The original apmaster files have the JPEG listed (originalJPEGFileUUID):

But the fixed and imported image no longer lists the JPEG:

Hopefully Apple will add this facility into a future version of Aperture and we can avoid jumping though all these hoops entirely.
Contrast

Maple leaf: 1/50s f/5.6 ISO400 195mm, Canon 30D, EF 70-200 f2.8 L IS, adjusted
I rarely have reason to change the contrast of my images, but sometimes it is just what is needed. The image above started life as a much paler version:

It was taken in very diffuse light and the contrast was very low. Rather than increase the saturation as I usually do, I found that increasing the contrast dramatically had the desired effect. A small increase in the exposure was also needed:

The new version has much more depth than the original because there is enough detail to separate the leaf from the background.
AUPN Pro Members Get 50% Off Get Your Head Around Aperture 1.5
Aperture: What To Do If Your Camera RAW Is Not Supported?
Derrick Story at O'Reilly Digital Media has a partial answer: shoot RAW+JPEG and view the JPEGs in Aperture.
Aperture: How Do I Combine The Contents Of Folders That Contain Files With The Same Filenames?
There is a way to do this automatically, and surprisingly the tool that can do it is Aperture. The files do have to be image files that Aperture can read.
Here is a folder structure with two folders that contain different images with the same name, Mud.jpg:

I'll move these two images into a single folder in such a way that the names don't clash.
The first step is to import my two folders, Monday and Tuesday, one at a time, into the same Aperture project.
First I create a new project called Temp, then select it and press command I to bring up the Import pane. At the top of the import window I select the first image folder:

And make sure that the import is going to the right place:

Then I select a referenced import that leaves the files in their current location. This is an important step -- I don't want to move the files yet:

After performing the import, my Temp project has the images from the Monday folder, just one in this case, but it could be thousands. Here is the image in the project with the badge that tells me it is referenced:

Next I do another import into Temp using the Tuesday folder, making sure that I import referenced again. I could repeat this with many more folders of images if I wanted, all with clashing image names.
To combine the folders, I relocate the images in the Temp project to another part of the disk, in this case a folder called All Mud. I control-click on the Temp project and select Relocate masters for Project...:

And provide the destination folder in the dialog. I don't need any subfolders and I don't want to rename the files in any special way, so I select None and Master Filename from the pop-ups:

The relocation of the files is fast because they don't have to be copied if they are being moved into a folder on the same disk, as is the case here.
Once the relocation is complete, I see that the original Mud folder is now empty:

And the All Mud folder has the images:

Aperture renames with numbers in brackets; there is no choice about that. Not only are the masters in the same folder, but they are already imported into Aperture. I am done. If at any time I want to store then as managed masters in the Aperture library I can use the consolidate function of Aperture to do this.
Aperture: A French Aperture Site

I thought I knew all the Aperture sites by now, but this recently proved not to be the case. François Couderc emailed me to let me know that he has a French-language site dedicated to Aperture. It includes tutorials, a large number of videos, plug-ins, Automator workflows, and a forum. The other French-language site I know of is Aperweb.
Aperture: Dual Monitor Podcast

Ken Huth has a podcast called ApertureCast that broadcast its 12th edition today. He talks to Ron Cronk, a photographer who has switched from a PC with Lightroom to a Mac with Aperture. He's using two 20" monitors and likes it very much. I have an iMac 24" and no second screen, so I've not had a chance to try this. He also shamelessly plugs my book.
Aperture: Sensor Dust vs. The Spot Tool
In the photo on the left, the original, the bad spot is visible above the horizon. After adjustment, the spot is worse because of the better contrast.

Once I go into full screen mode with F, the spot looks like this:

To fix it I bring up the adjustment HUD with H and then select Spot and Patch from the HUD:

This brings up a radius control dialog which allows me to drag the control to get the approximate size I want for the spot:

Over the image, the cursor turns into a target:

And once over the spot, I click and a yellow circle appears to mark my adjustment:

Inside the circle the spot is fainter, but it's not entirely gone. And it's hard to see what is going on with that yellow ring around the spot. To toggle the yellow ring off and then on again I press A, then X.
The problem is that my spot adjustment is a little too small. All it takes is a small change to the radius using the Spot and Patch controls:

I can make it vanish completely:

I press again A to restore the regular cursor and I'm done with that one. Gone!

Now I have a puzzle. I want to fix another spot, but how do I get the target cursor back? Selecting from the + menu on the HUD doesn't work -- it's grayed out -- because the control is already in use. There is no button on the control to add another spot, just a button to delete one.
The answer is to use the hidden menu at the top of the screen in full screen mode. Taking the cursor up to the top of the screen reveals the controls and shows the keyboard shortcut for Spot and Patch, X:

By pressing X, the Spot and Patch control is activated and a new target cursor appears that I can use to banish the other spots. In fact, I could have pressed X at the beginning to create the first spot adjustment had I wanted to.
If I have other images with spots that I want to fix, then as long as the camera has the same orientation, they will appear in the same place in each image. So I can use Lift and Stamp to get a head start on fixing the spots in those other images. Pressing O to select the Lift tool and clicking on the image gets me the Lifted parameters:

By unchecking the items I don't want and deleting all the adjustments except for the Spot and Patch (why no checkboxes for those?), I end up with what I want:

Now I can stamp that spot adjustment onto other images that need the same set of spots eradicated.
Unfortunately I can't rotate the coordinates as I Stamp to mimic rotating the camera. So for each of the three other camera orientations, I have to create a despotted image to have spot removal ready for Lifting. And the tool does not have a numeric coordinate input like the Crop tool does, so I can't just move numbers around to move the spot between orientations.
I also find that images with spot adjustments are very slow to process, at least on my machine, so I do them last. After the other things that are slow in fact: Straightening and Shadows and Highlights.
When I get a Rocket Blower, we'll see how well it works. The final image can be viewed here on Smugmug.
Buy My Book! -- Get Your Head Around Aperture 1.5
![]() | "Steve Weller's insights go far beyond that of a typical photographer. Get Your Head Around Aperture is filled with tips and tricks, a must read for first time users and Aperture masters alike" -- Micah Walter, photojournalist and contributor to Inside Aperture |
It's done! I've taken more than a year's worth of Aperture articles and compiled them into a living PDF e-book. Many people suggested that I do this, so thanks are owed to them and to everyone who reviewed the book and made comments and corrections.
A PDF version of the Aperture articles on the site is convenient and useful. It's portable since you don't need to be on-line. You can put it on your laptop to read in the field. It's searchable by Spotlight and Preview. And it's printable. You get three editions: one 490-page edition optimized for screen viewing at 100%, so you can stash it to one side and have Aperture next to it, and two 160-page editions optimized for printing -- one for A4 paper and one for US Letter paper.
It's available only from this site. More information on the Get Your Head Around Aperture product page.
Underexposed
Here is the original image of a type of duck I have not seen before (what is it?). I caught it just as it had shaken the drips off its bill, but before they had hit the water. If you view the full-size final image you can see the sprinkle of drops frozen in the air.

After cropping and adjusting the under-exposed original in Aperture I was able to get this much more pleasing result:

1/2000s f/3.5 ISO100 195mm, Canon 30D, EF 70-200 f2.8 L IS, cropped, adjusted
It still looks a little dim, but I prefer it that way, and the sun was fairly low anyway. I was quite surprised that I could under-expose so much and still get a good result. It helps that I was using ISO100. The adjustments looked like this:

I could boost the exposure and the brightness on this image because the highlights were very small. As long as I didn't diminish the color in the drops or lose the feather detail it was OK. I used a little shadow boost as well. In other pictures from the same series I have found that the colors adjustment is very useful: I can desaturate the color of the water to focus the eye on the colors of the ducks.
I am also finding that the 70-200 zoom is not enough for bird pictures: a 1.4x TC is probably on the horizon. One of my reasons for going for the f/2.8 over the f/4.0 version of the lens was so that I still had a decent aperture with a teleconverter.
Extending Aperture 1.5
Aperture: A Seven Part Series On Adjustments At AUPN

Deck roof: 1/40s f/11.0 ISO100 200mm, Canon 30D, EF 70-200 f2.8 L IS, cropped
The Aperture Users Professional Network has published the first of a seven part series on image adjustment. I recommend that everyone read this series. There are a large number of controls in the adjustment panel and I'm sure that nobody understands all of them.
Now I'm shooting RAW most of the time, I'm doing more adjustment than I was (but still trying to minimize it) and I find myself poking around in this panel trying to understand how everything affects the image. What I have to adjust is a good way to learn what I got wrong.
Aperture: Adjusting For -0.3ev

I have found by trial and error that the best way to get the image back that I remember is to adjust the Exposure up just enough to get the highlights I want and then use the Shadows control for the darker areas. That's it. The other controls mess with the image in a way that makes it worse. Here is the adjusted version:

You can click it to see it full-size.
Applescripts Galore for Aperture

Hummingbird on a wire: 1/640s f/11.0 ISO400 195mm, Canon 30D, EF 70-200 f2.8 L IS, adjusted
Brett Gross has a sizable collection of very useful Applescripts for Aperture on his site. They include functions for helping with hierarchical keywords, backing up to DVD, managing multiple external editors, syncing folders and projects, and many more.
Aperture: Wild Image Adjustments

It came from the image below by setting the Exposure to -2 and the Saturation to +2:

I also took this terrible sunset-ish photo by pointing the camera in direction of the setting sun and clicking the shutter:

By cropping and playing with the adjustments so that they looked like this:

I was able to get a more artistic result. Notice how the exposure is set below -2. How did I do that? The slider only goes to -2, but if you keep clicking on the triangle in the numeric control or type a number in you can go beyond the sliders.

The only real details that are visible are the power lines, so I called it Electric Sunset (click to see full size).
Aperture: Highlights Follow-Up

I did try the highlights control, even the advanced version, but found it useless at solving the main problem: too many pixels jammed up against the right-hand end of the histogram that would not move. Also, the advanced version of the tool gives me five more sliders to play with, and so an even smaller chance of getting the adjustment right.
Generally I try to avoid the Highlights and Shadows adjustments because they are very compute-intensive and hence slow. I do those last on any image if I have to. Here are the stubborn white pixels I was left with:

Aperture: Settings To Get Detail From Highlights

I can't see an iPhone -- where is it? It's the big featureless white thing directly below the lamp. It must be an iPhone because it has no buttons. It should have buttons, but again Aperture has washed them out horribly, so there are none to be seen. Now I convert to monochrome using the Monochrome mixer and the image is just the same, not surprisingly:

After much twiddling I get what I am after. It improves the keyboard, the mice, and the curtain too:

Here are my final settings:

Again the technique is pretty much the same as before: Exposure way down, Brightness up, corrections with the Contrast, and Highlights and Shadows for the final touch.
Aperture: Recovering Highlights Is Tricky
The whales were having a tea party on the deck and to record the event I shot one frame of RAW+JPEG. I imported the images and accessed the JPEG sister by control-clicking on an image and selecting New Version from Master JPEG:

Here is a part of the JPEG version:

It's not sharp and I don't like the colors. But I can see detail in the white fin on the left. Now here is the RAW as processed by Aperture:

Sharper and nicer, but the fin is blow out. The blown out pixels are on the right of the histogram:

The JPEG version doesn't have this, so I know it's not inherent in the image:

How do I get the fin back? And why did Aperture do this to me?
First I turn the exposure way down. That brings the highlights back, but it kills the rest of the image. So I move the brightness and saturation up to compensate and then twiddle with the contrast to get a reasonable image with some loss of shadow detail:

Finally I get the shadows back with the Highlights and Shadows control:

And my final result is pretty pleasing:

The bucket is much better and the yellow color can be seen reflecting in other objects. The fin is how I want it, but the rest of the whale is visible too. The histogram looks entirely different now I have finished:

I wonder why this is so hard to do? Did I just use the wrong technique, or is there something missing from Aperture here?
Dominique James On Slideshows
[Update: Part 2 is now up. These two articles cover the subject very well]
1780 Photos To Process

I'm back from a trip, so I'm busy processing photos, catching up with email and comments, reading the Apple announcements, and doing laundry.
I took 1780 photos and imported them all into Aperture one folder at a time yesterday. After one pass through everything, 111 are rejects and 769 have been marked with one star to indicate that they are "show" images. I will be adjusting the ratings over the next few days.
Aperture: Now Supported By RapidWeaver

RapidWeaver 3.6.2 released today includes support for Aperture. RapidWeaver's iMedia browser can access previews created in Aperture just like Apple's iLife applications are able to. An additional great feature is the ability to generate the sidebar with PHP: this makes for much short upload times on large sites like mine because fewer pages are affected by sidebar changes (in my case almost 900!).
Aperture: How Do I Filter By 1/30s Shutter Speed?
Aperture records the shutter speed as seconds and in floating point, so it is not interpreting the numbers you type as intended.
To filter on shutter speed, add a new line based on the EXIF data to a filter:

And then select Shutter Speed. If the shutter speed is a simple integral value like 1/100s, you can select is and type in the value, 0.01 in this case. Use a calculator to get the decimal value of the fraction. For trickier values such as 1/30s, it's best to use a range and bracket the exact value of 0.0333333 like so:

This kind of thing lends itself to saving as a smart album in order to save repeating all the typing. It would be nice if Aperture could recognize fractions correctly, or even have a pop-up of common shutter speeds available.
Aperture: Add Color To Gray With The Levels Control

By selecting the Blue channel on the levels control, I can alter the amount of blue in the gray part of the chairs. In this case I'll boost the darker tones significantly to give a blue tint:

With some boosting of the saturation with the exposure control and a crop to focus attention where I want it, I get my final image:

Of course the colors can be cut or boosted individually or in combination to get any color. The Colors control can also be used to adjust the color once one is applied.
Aperture: GPS2Aperture Beta

Ian Wood continues to work on the problem of interchanging GPS data with Aperture. From a posting on DPReview:
GPS2Aperture is a floating system window which can grab GPS data from either Aperture or Google Earth, let the user edit it and then send the data to either Aperture or Google Earth.
http://ianjameswood.co.uk/aperture/GPS2Aperture_beta.zip (3.2MB)
For instance if an image Version has incorrect GPS info, you can view the location in Google Earth, move around the the right location and send the edited location data back to the image Version in Aperture. Alternatively, use Google Earth to visually pick a location and add it to Versions that had no GPS data in the first place.
Jason Kerner has some examples of photos with GPS buttons that take you to Google.Note - GPS2Aperture makes changes directly to Aperture's SQLite database as the interface gives no way to alter GPS or other EXIF data. It's been tested on multiple computers and multiple Libraries without problems, but make sure you backup first, just in case!
Aperture: BorderFX Export Plug-In

BorderFX is a new Aperture export plug-in from Reinhard Uebel. It's a beta, and it's free, but you can donate on his web site. You can leave comments on his blog as well.
BorderFX comes with an installer that appeared to freeze when I ran it, but apparently it was just waiting for my disks to spin up so it could display them, so give it a little time. The installer puts the plug-in into the system's Application Support/Aperture folder hierarchy, so it requires and Admin password, but is consequently available to all users on the machine.
The window looks like this with a preview of one of the selected images on the right:

The cog menu saves and restores the settings as presets so you can define different borders for different uses:

The Output Sizes menu can also be customized:

The main part of the controls is tabbed and has settings for the image:

And for the border:

I found the controls a little quirky. It was quite hard to get what I wanted and I never did fully figure out how everything interacted. With no scaling option it was hard to see what was happening. I could drag the image around, but I could not figure out what the horizontal yellow lines meant:
It's a beta, so I expect some rough edges. It certainly looks useful.
Übermind Releases Aperture to Picasa Web Albums

Übermind continues to crank out new Aperture plug-ins. The latest release is Aperture To Picasa Web Albums. It automates the process of uploading from Aperture to Picasa.
Aperture: How Do I Fix Thumbnails That Bring Up The Wrong Image?
It looks like your thumbnails have been corrupted. Rebuilding the database won't fix that, so you'll need to delve into the affected library. It's easy to fix.
Another symptom of corrupted thumbnails is that they look like this:

To fix, quit Aperture and locate the Aperture library with the problem. Control-click on the library icon and select Show Package Contents:

A Finder window will open. Navigate down through the folders (they correspond to the blue folders in your Aperture library) until you get to the project with the problem thumbnails:

Open that project with a control-click Show Package Contents and locate these three files:

Drag those to trash, or select them and hit command-delete.
Close the windows that you opened, and launch Aperture. Aperture will immediately start regenerating the thumbnails, and that could take a little while. To see what it is doing, click on Window > Show Tasks List and you'll get a count-down of the number of images still to process:

When it is done, all should be well, at least with that project. You'll need to repeat this with each affected project in the library.
Aperture: Hazards of Referenced Masters -- Bone-Headedness Part 4
Part 4: Write Protect
For maximum paranoia against accidental modification or deletion, write protect the master image files. This can be easily achieved from the Finder.From the Finder I select the top-level folder of the folder structure to protect and press command I to bring up the Info window. I open up the permissions part at the bottom, and it looks like this:

By changing the Details pop-ups to Read Only and applying it to all enclosed items, the settings are propagated to all the files and folders:

Now if I try to modify a file, I get a dialog like this:

I get an opportunity to override by authenticating, but usually I would not want to, just accepting the OK button. If I drag a file to the trash, I get the same dialog.
To change everything back, I use the same procedure, this time setting the permissions to Read and Write for myself.
Aperture Podcasts From Ken Huth

Ken Huth has published ApertureCast number 11: Workflow part 2: Six Ways To Edit on his HuthPhoto media page. Ken publishes an image-enhanced Aperture podcast every month or so.
Aperture: Use Albums and Stacks To Manage Adjusted Images
This article shows a powerful technique for managing adjustments to large numbers of images. It brings together stacks and albums and shows how they can be used as part of an efficient workflow. It was prompted by a posting on the Apple message boards for Aperture:
Here's the conundrum: I have 800 event photos in an Aperture project. I stamp adjustments to all of them. So, now I have 800 stacks, each with a master RAW image and an adjusted version. In each stack, the unadjusted master is the default pick. If the stacks are closed and I Export Versions, I get 800 JPEGs rendered from the unadjusted masters. If I open all stacks, select all, and Export Versions, I get 1,600 JPEGs rendered from both the masters and the versions. How in **** do I select the 800 adjusted versions for export without having to command-click on each one? Is there no way to automatically export just the versions?
Here is a project with some images that I am going to adjust. There could be thousands: the workflow is the same.The only approach I've found is to select the versions and make them the picks in their stacks, one by one. Then I can close the stacks, select all, and Export Versions. This is painfully time-consuming. I can't even just select the versions one by one and then batch promote them to pick status. I not only have to select the versions one by one, but I also have to promote them one by one. Argh! Am I missing something here? Please help.

Before I start adjusting I select the three images I want to work with and create new versions by pressing option V:

This creates duplicates of the three and puts each duplicate into a stack with the original as the pick. This is where the difficulty lies as the person with the problem found. Since those new versions are in stacks but are not the pick then Aperture will not use the adjusted version for exports.
To turn this to my advantage (without clicking anywhere else so that the duplicates are still selected) I control click one of the new versions and select New From Selection > Album:

Pressing command L has the same effect. The new album is created and displayed and I can rename it to something meaningful, such as Adjusted:
The new album shows the stacks just as the project did, but this time there are check marks on the duplicates showing that these are the album picks:

An album pick is the image that will be on the top of the stack for this album only. Look what happens when I close all the stacks with option semicolon:

Just the album picks are left showing. That's the preparation complete. I have an album which will show me all the new versions, so no changes to the original project are needed. Now I adjust the images. For this example the changes are rather radical, so the difference is obvious:

I could have adjusted just one image and used lift and stamp to process thousands.
Selecting the original project shows that the adjusted versions are still in the stacks, and are not the picks as they are in the album:

Closing the project stacks will show me the originals. Closing the album stacks will show me the adjusted images. So by selecting either the project images or the album images I can choose which I export, print, or continue to process.
This technique can be used any number of times with any number of selections and albums and should be part of your standard workflow.
Aperture: Hazards of Referenced Masters -- Bone-Headedness Part 3
Part 3: Organize Masters For Growth
Relocating and renaming masters imported into Aperture helps to ensure that they will not be accidently altered, misplaced, or deleted as referenced files.But when they are relocated, where should they be put? Everyone has a different system for doing this. Often that system arose from a need to either find images or process them, but these are requirements that Aperture does not have of disk storage: the library and its tools take over that organizational role.
What is left to organize? There must be some logic to the folder structure. My answer is to organize around change and minimize risk. What can change?
Adding Storage
The first thing that changes is that the disk fills up and more is needed. Unless you have a RAID system that can be transparently expanded, you must either add a new disk to your computer and split the masters across both, or replace the old disk with the new one and copy everything over. Which is the better approach depends on how the masters have been organized, so ideally your master organization is planned according to your plans for expansion. Do you have any plans for expansion?If you are storing referenced masters primarily chronologically, say by month, then you add a new drive and all the new images get put on the new drive and the old ones stay on the old drive. It's a quick upgrade and you are unlikely to accidently delete or damage anything. Further, you can stop backing up the old drive: it will never change. Just keep the old off-site back up until you get rid of the smaller drive a few years from now. One small catch is that the addition of the new drive will happen mid-month. So do you have two July folders, one on each disk, or move the July folder to the new disk and then continue adding to it? I recommend the latter, and will be looking at how that can be achieved in this article.
If you are not storing referenced masters primarily chronologically, then the approach is different. Masters organized by client and then by project cannot be handled the same way as the strictly chronological system because any client could ask for another project and overrun an already-full disk. In this case it makes sense to copy everything over and stop using the old disk. Copying between disks can take a little while, even with fast disks -- about an hour per 100GB -- so this is something that may take some planning. The catch with this method of storage expansion is that backing up will need to include both drives now, so don't forget to change your settings or procedures to do that.
Both method of adding storage require copying, and Aperture can do it for you. In fact you should always use Aperture to do the copying. In that way Aperture always knows where its library masters are at all times and reconnecting is never needed.
To move referenced masters to another drive using Aperture, relocate them using exactly the same system of organization that was in use on the old drive. You already have a preset for this because the current organization or referenced masters was built with it.
Archiving
In deciding how to organize referenced masters there is more to consider than just storage expansion. The other change that occurs is that archiving is needed: some images no longer need to be at-hand and can be stored more cheaply or in a place that is not immediately available. These are not back-ups (copies stored short-term as insurance that you hope to never need) -- they are archives (originals stored long-term with the expectation that they will be needed).I described one folder systems based primarily on date, and another based on client and project. But there are others. Which one is best? In my mind the best folder system is one that Aperture can create and maintain and that can be adequately backed up incrementally.
That may sound restrictive because you may not want to look at a library organized that way, but remember that the folder organization on the disk does not have to follow the library organization at all. For instance your library may be organized by client and then city (both using blue folders) and then by project because your work involves travel to different locations for each client to shoot vacation accommodation. But since renovation is common, you almost never need access to images that are more than three years old. So you organize your referenced masters on the disk by year and project (using Finder folders) and archive a whole year at a time to DVDs or a hard drive each time you start a new year. Note that the library still contains the thumbnails and the metadata for all images, allowing you to view, tag, and find those other images at any time.
Organize masters to reflect how you archive images and manage storage. Organize the library to reflect how you find and work with images.
Part 4 has been posted.
Aperture: Hazards of Referenced Masters -- Bone-Headedness Part 2
Part 2: Manage, then Relocate
Always import new images into the library as managed masters as a first step. Then edit, cull, rate, tag, stack as usual. Then finally move the masters out of the library using the Relocate command to a reserved area of your disk and add another prefix to show that they are referenced, such as "REF". Finally, possibly much later, delete the rejects.You can relocate masters in two ways: either by selecting individual images and from the File menu going to Relocate Masters For Library... or by control-clicking on a project and selecting Relocate Masters for Project to relocate an entire project full of images at once:

Relocating the masters also has the ability to rename as it moves. To relocate and rename at the same time, set up a new Name Format preset from the Relocate masters sheet:

By clicking on the Name Format drop-down and selecting Edit... Give the new name format a name and set it up something like this:

Then select that new name format and do the relocate. As the files are moved, the names will be changed. Here is a referenced master on the disk after it was relocated (I used a slightly different prefix than above in this example to show this image is referenced, omitting the dash):

The original image was called 6830-1.JPG. Importing added MAS-2005-04-20 and relocating added REF.
Why work this way? This workflow keeps all the images that are still being worked on in one place so they can easily be found with a smart album that shows only managed masters. This workflow means that if it's managed, then you're not done with it. The library becomes a staging area. Once relocated and renamed, the master files are immediately identified as being referenced from their name and you know that they have already been processed and so are ready for use or to be archived. And, since importing into the library makes a copy, the originals are still on the card or disk they came from and another layer of corruption insurance has been created.
Creating a smart album to show only managed files is straight forward. Create a new smart album by clicking on the magnifying glass next to the library (so it will apply globally) and add a File Status filter:

Then filter on Managed status and check the Ignore stack groupings box so that stacks don't hide any images:

Part 3 has been posted.
Aperture: Hazards of Referenced Masters -- Bone-Headedness Part 1
I see a quite a few postings on message boards and get emails from Aperture users who have done disastrous things to their referenced masters because they didn't realize that the files were still part of their Aperture library. Referenced masters are master image files stored outside the Aperture library. This feature allows a small internal hard drive, such as on a laptop, to maintain a very large image library where the originals are stored on a separate removable drive or central storage system. In the other kind of master storage, managed masters, the masters live inside the Aperture library itself. While not impossible, damaging managed masters takes some persistence and the barrier formed by the library protects them against most bone-headed errors.
That referenced masters live outside the library leaves them prone to several kinds of abuse. Moving them by hand is harmless, unless the move goes to another volume. That will break the connection with the library and require a reconnect. Aperture's Referenced File Manager does this well, but it is very fussy about restoring the connection. If the image has been edited, for instance, it will likely not reconnect. If the pixel dimensions have changed, it will not reconnect. If the file size has changed, it will not reconnect. And this is where the big problems start. Since Aperture only checks these things when reconnecting, problems can go undetected for a very long time. A reconnect is needed and suddenly many masters (and hence their versions) are effectively lost.
The best medicine, then, is prevention. So how do you go about protecting referenced masters? They could be stored anywhere and called anything -- what kind of barriers can be constructed to protect them?
This the first of a four-part series on protecting referenced masters.
Part 1: Name Defensively
When you import, rename the masters in such a way that all of them can be seen to be masters. Prefixing with "MAS" or an equivalent short word will make masters instantly recognizable and you will no longer feel compelled to trash them in haste.The input screen allows a selection for the version name and can optionally rename the masters:

Above that setting is a block of information that gives confirmation of the change if an image is selected:

Another recommendation is to rename the masters in such a way that all of them have unique names. For instance, add the current date to the name given by the camera. This will ensure that as the camera or card numbering rolls over, the images still have unique names. While not critical, this defensive step may help in the future when it is necessary to list or index all of the images. Ensuring unique naming now will obviate managing duplicates and messing with hierarchies later on.
At the bottom of the Version Name drop-down the Edit... option allows the naming schemes to be edited. Here is how MAS prefix used above is defined:

Part 2 has been posted.
Aperture: How Do I Display The Number Of Images In Each Project?
Turn on the display of the number of versions in the Aperture preferences:
When you have it turned on, the library shows the number of versions in each project like this:

That version count includes all versions, including those in stacks. So you may have 100 versions in a project, but only 5 images that are really different, the other 95 being the non-pick stack items.
Aperture Plugin: Integrating Localized Data Part 2

Now the strings in my code and my image are localized into French as well and English, I can move on to the strings in the interface. So far the French nib is just a copy of The English nib, created when I made the French nib localization. I used nibtool to extract the strings before translation, and I use nibtool again to put the translated strings back.
To do this I fire up Terminal, cd to the French.lproj folder and use the following command line:
nibtool -w new.nib -d file.strings Random_Wok.nib
This creates a new nib file with the English strings replaced by French ones. I use the Finder to replace the old nib with the new one and I am done. Now my resources look like this:

But if I run the plug-in in French, some of the strings no longer fit:

This is unfortunately typical for English. With its huge vocabulary, English can take up as little as 50% of the space of other languages. So my nice tight interface needs adjusting.
And there is a problem with subversion. After checking all of this in I find that my repository does not contain the French files and the NoImage.tiff file is in both the localized and the main folder:

To fix this I do two subversion things: svn delete the extra TIFF and svn add the folder and its contents. Svnx could do the delete, but not the add. After a fair amount of trying things that did not consistently work, I eventually went to the command line, did a svn add of the French.lproj folder, then quit and relaunched Xcode, then finally did a commit. That worked and now everything is synchronized.
I fix the layout with IB, but don't neaten it up yet. That's because I want to run it past my translator again to make sure nothing weird has happened that I won't spot. Once the translator has OKed it, I'll peek the pixels and straighten everything.
And then there is the "Images Selected" binding. I have this set up with two display patterns, one for the number of images and one for the pluralization string. For French I have to put the second string in twice since both words gain an "s" in the plural:

When I come to add German, this will break. The German strings are "Bild ausgewählt" and "Bilder ausgewählt". There is an "er" added in the plural, not an "s". Japanese is easy: no plurals exist in the language. A better solution is to put both singular and plural strings in the strings file and do all of this in code.
The other parts of this series can be found via the Cocoa page.
O'Reilly Podcast On Export Plug-Ins

O'Reilly Digital Media has a 21 minute podcast with Richard Kerris (Apple), Micah Walter (Aperture Plugged In), and David Schloss (Aperture Users Professional Network) talking about Aperture plug-ins. You can also subscribe to the Inside Aperture podcast.
Mac OS 10.4.10 Adds Camera RAW Support
Übermind Aperture to Picasa Web Albums Beta

Übermind has released a beta of the Aperture to Picasa Web Albums export plug-in. They now have several Aperture plug-ins and are looking for ideas for more.
Aperture Plugin: Integrating Localized Data Part 1

Now my translators have sent back localized versions of Localizable.strings, file.strings, and images that I sent to them, I can integrate them into my project. Here is how my project is organized right now:

To localize the NoImage.tiff image, I select NoImage.tiff and get Info, then click on Make File Localizable:

This changes the image into a group and shows the targets that it is associated with:

The Resources have been rearranged like this:

Clicking on the General tab shows the languages that the image is localized for:

I'm going to add French, so I click Add Localization and select French. The French image created by Xcode is just a copy of the English image at this stage:

To get my French image in, I change its name from PasDimage.tiff to NoImage.tiff so that the code will be able to access it with the same file name and replace the current image in the French.lprog folder via the Finder. Xcode has a handy contextual menu item called Reveal File In Finder to help with this.
To Localize the strings I do the same sequence, this time putting my English Localizable.strings into the English localization as well as the French Localizable.strings file into the French localization.
I localize the nib file too, creating the localization, but just leaving it as a duplicate of the English for now. I want to see how Random Wok works in French with what I have to far. Only a few things will be French at this stage: the progress message and the missing thumbnail image will show me that things are working correctly. But how to run in French?
I go to the International preference pane and move French to the top:

Now when I run Aperture it will be French.
But when I do, I find that the NoImage image is not there. And when I run it in English it is not there either. The problem is this code:

I get the TIFF file using a path that does not take into account the localization folders (English, French). So the initWithContentsOfFile method fails and returns nil. The fix is to use -pathForResource:ofType:inDirectory with a nil directory name:

And now the image shows up correctly when I run in French or English:

Next is fixing the interface strings.
The other parts of this series can be found via the Cocoa page.
Aperture: Add Watermarks To Contact Sheets
I create a contact print with Aperture by saving as a PDF and then import into an empty transparent Photoshop document as a raster image background:

On top of that I add white Bagelturf watermarks by making one and then option-dragging to add more. It turns out that the technique of positioning the watermarks so that they match the images is just too much trouble, so instead I recommend that the watermarks just be scattered randomly or kept very small and used in a fine grid so that each image has at least one readable one. There is probably a Photoshop feature for doing this that I don't know about or doesn't exist in my copy of Photoshop LE.
I delete the background layer and create a full-page watermark document that is all transparent except for the watermarking scattered all over the image. I save it as a PNG to preserve the transparency and to keep the file size small.
Next I launch Automator and create a new workflow. First I drag PDF:Watermark PDF on, followed by Preview: Print Image. I set up the watermark action by adding the watermark file that I created previously with the Add.. button and adjusting the settings so that the watermark image is positioned correctly. This takes experimentation since the example image is not very helpful. I set up the Print Images action so that the orientation and printer selection is what I want. I have seen comments that this technique only works with the default printer, so you may find yourself wrestling with that.

And ignore the red text that says that the PDF files from the Watermark PDF action will not flow into the Image Files input to the Print Images action.
If you want to change the useless example document used in the action, replace the file called Bears.pdf in System > Library > Automator > Watermark PDF.action. Open the action with a control click and select Show Package Contents. It's in the Resources > English.lproj folder on a system that is using English language settings. If you want to get really hacky, you can examine the python script that does the watermarking that lives in the Resources folder.
Next I save the workflow as as a plug-in for a print workflow and call it Watermark3x4:

As long as the watermark image is correctly positioned I am done. To use this workflow from Aperture, I select my images and go to File > Print. I change the contact print settings to get it the way I want it (on one or many pages), but I don't press Print. I press Preview instead.

When Preview comes up and shows the first contact print page it has no watermarks.

To add the watermarking, I click the Print icon and then select the PDF button. I click on Watermark3x4 on the drop-down menu that appears and the pages print immediately. I click Cancel to get out of Preview.

The workflow I created lives in the Library > PDF Services folder in my home folder. To get rid of it I just drag it to the trash.
Meet and Greet In San Francisco
On Wednesday I plan on attending the Cocoaheads meeting at the Apple Store in San Francisco (7pm). The topic is Going Indie. With WWDC happening this week, there will be a greater than average concentration of Famous Names.
Aperture at WWDC

The Aperture Users Professional Network is having a get-together on Tuesday at WWDC. Click on the image to RSVP. I might be there.
Add Additional EXIF Data To Aperture Images
I have this problem myself: the Canon S3 does not put useful ISO data in a standard place and so I have no ISO data for my images. Other people want to import GPS data, lens data, and other information that sits uselessly in their images, unavailable to Aperture.
To add data to images already in Aperture he has this tool.
Aperture Plugin: Instructions To Localizers
The first item in the instructions was a series of screen shots of the plug-in. Several were needed to show the basic interface plus the pop-up menus popped up. The screen shots give the strings context and make it possible for localizers to work with the plug-in even if they cannot run it.
Here are the instructions I provided:
Enclosures
Enclosed is a ZIP file with a Localizable.strings file that was created by the genstrings utility. It contains all the strings that are localized in the application code. Also included is a file.strings file that has all the strings from the nib (user interface) and a TIFF image.
There is a folder for each language enclosed that contains a copy of the strings file used by Aperture. You can use this as a reference to see how Apple has translated things like Version Name. This will help consistency.
What To Do
You will need to use an editor that can handle UTF-16 encoding. TextWrangler can do this as can many others. Apple recommends this simple editor:
ftp://ftp.apple.com/developer/Tool_Chest/Localization_Tools/ADViewer_2.1.dmg
Edit the text in the strings files to make the second string the translation. For example if I were doing a British English translation:
/* NSMenuItem :
"Period" = "
becomes:
/* NSMenuItem :
"Period" = "
Do not alter the comments or the other strings in the files. Be aware of the semicolon at the end of each line.
The Localizable.strings file is a slightly different format with the comment and the first string telling you what the string is used for:
/* Continue renaming after failure */
"rename-error-continue" = "Continue";
This helps distinguish some subtle differences in meaning or tense that may not be conveyed by English.
The strings may include substitutions. These are identified by a leading %. For example:
"%@ のコピー %d";
The substitutions should be left alone and just the text translated. Notice that some strings have numbers prefixing the substituted arguments. The numbers define the order of the substitutions in the first string:
/* Message in alert dialog when something fails */
"%@ Error! %@ failed!" = "%2$@ blah blim, %1$@ bloo!";
The translated message above reverses the arguments, as may be needed in some languages.
You can enter characters directly into the second string and can use Unicode by prefixing with \U. For example \U0020 is a unicode space.
In addition translations are needed for:
"No Image"
This appears in the table (as a graphic) when no thumbnail image is available for display. I will create a graphic for each language unless you want to do that. I have enclosed the graphic I currently use.
Please do translate "Random Wok". If you can!
One part of the interface has a plural that is used if more than one image is present: "3 images selected", but "1 image selected". Please provide both the singular and plural translations for this phrase. I handle the pluralizing in code, and depending on the language will have to change the way I do this.
What To Deliver
The files you deliver (Localizable.strings, file.strings, and a file containing the translation for No Image and the two forms of Images Selected) must be encoded UTF-16. Please ZIP the files together so they don't get mangled by email systems.
For technical background information see Apple's documentation:
http://developer.apple.com/documentation/MacOSX/Conceptual/BPInternational/index.html
Specifically this page:
http://developer.apple.com/documentation/MacOSX/Conceptual/BPInternational/Articles/
NotesForLocalizers.html#//apple_ref/doc/uid/20000044
What Happens Next
I will take your strings files and put them into the project. For those that live in the nib, I duplicate the nib file and then will adjust the layout so that things fit. It is likely, English being such a terse language, that things will have to move somewhat. That is OK, but finding translations of similar size would be most helpful.
I will send you a beta of the plugin when it is ready so you can check that is still OK. Your comments on the beta as well as what I have done with your strings will be welcome.
There were actually some problems. I had mistakenly left a macro in my source files that contained strings that were nothing to do with my plug-in, so that was translated unnecessarily. Despite my efforts with the screen shots, not all of the meaning was clear and I had to answer some questions about some words. One of the ZIP files came back empty for unknown reasons. I also realized that the way I have implemented the pluralization of the number images selected -- providing a method to add the pluralising string "s" -- is unlikely to work in all languages. So I will need to change that.
The name itself, Random Wok turns out to be hard to translate. A Wok is literally a Chinese Pot in Japanese. So I opted for the more phonetic Randamu Wokku ランダム・ウオック. And the phrase No Image is seven characters that I am supposed to keep on one line inside a small button. So I had to request a different meaning for that.
Aperture: Use Undo/Redo To Compare A Set Of Adjustments
Here is an image I selected and displayed in the viewer:

I press C to bring up the crop tool and then make a crop, but I don't press A to end the crop yet:

Now by making several alternate crops either with a new rectangle or by dragging the one that is already there:

I get Aperture to remember this series of adjustments in its undo buffer.

Finally I press A to accept the last crop and show it:

Now by pressing command Z to undo and shift command Z to redo I can go back and forth through the crops. This works best in full screen mode, and I can press F at any time to go into or out of full screen.

When I find the one I like, I just stop and go do something else. The alternatives are forgotten automatically. If I don't like any of then, I press C again and adjust or replace the currently displayed crop.
Aperture: How Do I Manage Adjusting, Rating, and Keywording In The Field With A Small Hard Drive?
After I erase the master files the images and ratings etc still appear in Aperture but of course the images show as off line. Upon returning home I copy all of my images onto my eSATA hard drives (from DVD or from Wolverine). Now I want to have Aperture look for the master images on the eSATA drive and re connect, but cannot figure out how to do this. The only solution I have so far is to re do the rating, culling, keywords etc referencing the images on the eSATA drive and erase the older versions. This besides being time consuming is for me fraught with peril. My administrative skills are almost non existent.
You can reconnect the copied masters with the Referenced File Manager. I have an article that describes how to do this called Burning Masters To DVD and The Referenced File Manager. However, you can make all of this workflow faster and less perilous by working with complete projects rather than individual masters. And you won't have to go near the Referenced File Manager to do it.
As you import images into the Aperture library on your laptop, make the projects fairly small. Do your rating and sorting. When your laptop is too full, export these projects a few at a time.

You can check that the projects look OK by dropping them onto an open TextWrangler document and seeing if the expected files are present:

Looks good to me. Also check the size of the project in the Finder as a sanity check:

My project has 18 images of about 2.5MB each, so that looks right.
Burn as many as will fit onto a DVD, verify the DVD, and then delete the project in the Aperture library and empty the trash. Emptying the trash is necessary because the deleted masters in the projects will be moved there. Repeat with all the projects you want to move. You'll have to come up with a foolproof scheme for naming these projects so there is no chance of deleting the wrong thing.
Now when you get back into the office, just import the projects into Aperture's library. That's it. Mount the DVD and drag the projects to the library:

If you trust that the keywords coming in with the projects are well-behaved (ie match the scheme you are using, have the correct spelling etc.) then before importing the projects, unlock the keyword HUD by bringing it up with shift H and clicking the lock icon. This will give the newly-imported images the same keywords are are already used in the library. If you leave the keyword HUD locked, the imported keywords will be added to a separate keyword hierarchy called Imported Keywords and have to be merged later.
The big advantage of using projects to move images around is that they are self-contained. They include all the masters, versions, keywords, ratings, albums, adjustments, and everything else needed to work instantly as soon as they are put back into the library. They even contain thumbnails, so you won't have to wait for them to be regenerated once you are back in the office.
Aperture: Resources for Book Designs

Mac:Method is selling Aperture book templates. The format that Apple uses in Aperture is not documented, but it is straight forward and easy to adapt and build on. There is always a risk that installing the next update will break this kind of add-on, at least for a short time while the developers catch up. [Update: A reader has informed me that Mac:Method had accepted his payment for one of these templates but had not provided them. Further investigation seems to show that Mac:Method is no longer in business, but Kagi is accepting payments through their site].
Another way to jazz up Aperture's books is with graphics, frames, textures, and backgrounds. Gina Miller sells all of these. Using the wash feature of Aperture's books backgrounds can be desaturated so they don't overpower the images. Here is an example of a coordinated kit that contains many elements that can be used together in a book:

In my own book examples I specifically took pictures of some things so that I could use them as backgrounds and textures. The result was the pebble background that I incorporated on some pages.
Aperture: How Do I Change The Color Of The Boxes In A Book?

Great site of Aperture how-to's and tips. A question for you. In a book, special occasion template, how does one change the color of all those colored boxes? What are those boxes, If I drag one from one page to another the color seems to vanish, though the selection handles are still there.
Here is an example of the colored boxes in that theme:

The colored boxes in the Special Occasion book are defined in the Aperture application itself. They are part of the theme, and so unless you hack into the theme by opening up the Aperture application bundle and edit plists, you cannot change them. You can, however get rid of them and add your own without any hacking.
If you do want to hack, then open the Aperture application with a control click and select Show Package Contents. Navigate to the folder Contents > Resources > Book Themes > Special Occasion > Hardcover > Graphics and you will see that it holds the files that define the blue rectangle and other things:

The BlueRect plist file contains just this, as shown by the plist editor:

and can be easily modified. However any modification will be lost if you update Aperture, so this is not advised.
To replace the blue rectangles with your own creation, you will need a colored graphic. Just a plain color square made in PhotoShop or some other utility will work fine. Perhaps you have some already available.
Here is is how I do it with ImageWell. I launch ImageWell and click Edit and delete anything that is there by selecting it and pressing delete:

I click on the rounded rectangle top left and drag the rectangle onto the editing area:

And change the size using the numbers bottom left to something that is big enough for print, say 3000 x 3000 pixels. I click the small rectangle on the right just below the yellow rectangle in the image above:

This opens the color picker and lets me pick a nice color. I don't have to be particularly fussy with my choice as you will see. I also set the border width to zero by editing the number bottom right:

I click the ImageWell icon top left to go back to the main window and give the image a name. Then I click and drag the image to the desktop.

Now I have my green image I import it into Aperture (just dragging onto a project works) and then drag the Aperture thumbnail to my book album. Here it is:

In my book I change to editing the layout:

and click on the blue rectangle I want to change. A right-click and a Cut removes it:

To put in the color I want, I create a new photo box and drag in my color image:

And there it is in the book:

If I don't like it, I can always change it. I just click on the thumbnail image and adjust the color and lightness using the controls in the HUD:
Adjusting the thumbnail will affect all the boxes that show that same color image, so I can adjust the look of the whole book with just a few HUD sliders. I can work with multiple versions of the same starting image and adjust each of them independently to vary the color scheme in many ways. This same method can be used to set background colors and patterns as well, of course.
Aperture: View Your Library With A Web Browser

This is really neat. John Hoogstrate has created a PHP-based system for browsing, filtering, and viewing Aperture libraries with a web browser called PHPture. It's open source and available at Source Forge . It uses SQLite to access the Aperture database and makes use of the high-resolution previews feature of Aperture 1.5 to display the images. It only ever reads the database so should be completely safe. Installation is not trivial since it needs PHP 5.
The design is very Aperture-like as you can see from the screen shot. An obvious application for this is when you have a number of people who need to be able to browse a library. Share it on the network or your machine and point PHPture at it. Multiple copies of Aperture are not needed.
It *does* need a new name though.
Aperture Plugin: Preparing For Localization

Random Wok 1.0 is currently not localized: the only language it supports is English. Before I release the 1.1 version I am going to add translations for the languages that Aperture supports: French, German, and Japanese. This requires extra files in the plugin's bundle that provide the language information.
To prepare, I replace all the messages and strings that are generated by the program and are human-readable with macros that retrieve the localized version. Code like this:

is replaced by code like this:

I use the NSLocalizedStringWithDefaultValue macro because it allows me to provide a key (exporting-images in this case) that is not the same as the string Exporting Images.... It also supports use of a specific bundle. I need that because Random Wok is a plugin and otherwise Aperture's main bundle would be used.
Once I have replaced all the strings in my code with macros, I use the terminal to run the genstrings utility on all the source files in my project:

I get this entry in the text file Localizable.strings created by genstrings for the exporting-images string above:
To provide for other languages the Localizable.strings file is duplicated and the string on the right replaced by the translation. When the plugin is run, the correct language files in the bundle are accessed and the key used in the code (exporting-images) matched with the entry in the file. Since the file is encoded UTF-16, the right hand string can contain ASCII and any unicode characters.
There are two other sources of strings that I need to worry about for localization in my plugin. First, the nib file contains all the strings used in the interface and it is currently English-only. To fix that I will need a new nib file for each language and will probably have to adjust the placement of some interface elements due to the size of the new strings. Second, I have an image that is displayed when there is no thumbnail available that says "No Image". That will have to be replaced with a new image for each language.
Apple provides a tool for helping with the translation of nibs called nibtool. Nibtool used with the -L option extracts all the strings from a nib file and sends them to stdout. The Random Wok nib file generates entries like these:

As before, a translation replaces the right hand string. Nibtool is used again to replace the strings in copies of the nib file with the translated versions.
The other parts of this series can be found via the Cocoa page.
Pro Application Support 4.0
CocoaHeads May 10: Write An Aperture Plug-In

CocoaHeads on May 10th at the Apple campus in Cupertino features John Anon giving a presentation on writing Aperture Plug-Ins. More information on Scott Stevenson's site.
Aperture Plugin Writer Needed

Fotki, a photo sharing and printing site, has contacted me looking for someone who can write an Aperture export plugin for their service. If you are interested, email mail me and I will forward to Fotki. I have some travel coming up, so you will not get a response for a few days.
Aperture Plugin: Problems With Arrays and Key Presses

A problem that I encountered along the way as I implemented my cache was that any change to the data always caused the array controller to load all the elements. This was exactly what I was trying to avoid with a cache, yet it was happening.
After much hair-pulling (and posting to Apple's Cocoa mailing list) I figured that the array controller believed that my array (implemented by methods in my Random_Wok class) was immutable, and therefore any observed change must mean that the entire array had changed and so need a reload. The fix was to make the array controller believe that the array was mutable. To do this I added three more methods:

These are the mutable array methods. I didn't even have to write any code for them because they are never called. They are just there so that the array controller knows that my array is mutable and so will allow updates to individual elements.
Another problem I found that was while the Page Up and Page Down keys worked on the NSTableView, the Home and End keys did not. A little odd. To fix this I subclassed NSTableView and overrode -keyDown:.
I created a custom class called BTKeydownTableView and told Interface Builder to use it instead of NSTableView. Here is the interface:

The implementation is very simple. I read the first character from the event queue and act on it:

To scroll the window to the right place I tell the view to scroll to the first or last rows, as required.
The other parts of this series can be found via the Cocoa page.
Aperture Plugin: Caching Table Data

Retrieving the thumbnail image and generating the text for the table is time-consuming and called very often by the array controller that is controlling the table of images. This results in very slow scrolling of my table. To solve this problem, I added caching; the idea being that repeated requests for the same data come out of memory and do so quickly.
Adding caching was relatively simple, at least to implement simply. Here is the code:

The cache needs a key to cache on. For this I turn the index number into a string and use that as the key. The cache itself is a mutable dictionary that holds dictionaries:
This stores the data I get from Aperture fine and the interface is fast again. But now I have another problem. When the random file name parameters are changed, the cached data becomes stale. So each time a change occurs, I must update the cached text:

And the cached images:

This code enumerates through the cached data replacing the cached text and thumbnail objects. Bindings take care of the table updates. -updateCachedFilenames is called whenever anything changes that could affect the file name, such as a change of alpha case:

-updateCachedImages is called when the type of image changes:

This all works well, and is how Random Wok 1.0 was released. But it still has a problem. The cache grows forever, eating memory as it goes. And as the cache grows, the time taken to update the cached data grows. What is really needed is a cache that throws away the oldest entry once it reaches a certain limit and more data is added. So that is what I implemented next.
The other parts of this series can be found via the Cocoa page.
Aperture Plugin: Translations Needed

My next release of Random Wok will be localized. Since Aperture supports English, French, German, and Japanese my plugin cannot successfully support any more languages than those.
Are there any readers interested in volunteering their language skills to this task? There are probably less than 20 translations needed in all, maybe 150 words total. I will provide plain text files for translation: there is no need to have XCode or any development tools.
Aperture: Tips From Bakari Chavanu

Bakari Chavanu is a wedding photographer who posts Aperture tips as short Quicktime movies on his site. The items covered include organizing folders for wedding photography, using full screen mode, and using the tooltips. There is also an iTunes podcast link and an RSS link.
Aperture Plugin: Improving Image Table Performance

My first attempt at providing table thumbnails was to load an NSMutableArray with all the images that the user has selected when the plugin starts. Unfortunately there can be a significant delay while they are retrieved from Aperture: above a few hundred the delay becomes irritating. Once the data was in my array, access was fast and the table scrolled up and down smoothly.
To improve start-up performance I replaced my array ivar imageTable with two methods: -countOfImageTableData and -objectInImageTableDataAtIndex:. Now, through the magic of KVC the array controller instantiated in the nib will access these two methods instead of the array. In fact it was trying to do that all along, failing, and falling back to accessing the ivar directly. The idea is that by generating the data on demand, the start-up performance problem will go away and the time taken distributed across all the images as they are viewed in the table.
Here is the code for the first method:

The check for the API version exists because my code simply does not support it. There used to be a less efficient way to retrieve thumbnails that I have no intention of coding. The result of this is that the image table is blank if an old API is detected. I also log a message to that effect on initialization, so it is not a complete mystery to the user.
The second method is very simple:

The code for -textForImageAtIndex: and -thumbnailForImageAtIndex: is not simple, however. But it is straight forward. The text code gets the properties of the image from Aperture and formats it appropriately. The thumbnail code is much easier to follow:

Master images (and potentially any image) don't have thumbnails, so I have to substitute. I do that with a small TIFF image that I put into the plugin bundle that says "No Image".
How did I do? Start-up was fast, even for thousands of images, so that problem was fixed. But there were other problems. Scrolling was dog slow. Logging showed that -countOfImageTableData and -objectInImageTableDataAtIndex: were being called for practically every pixel of scrolling I was doing, retrieving the image and generating the text each time. Horrible.
So the next step was to implement caching: retaining the images and text in memory and delivering those instead of getting them from Aperture each time they are needed.
The other parts of this series can be found via the Cocoa page.
HUDs Just Like Aperture's
Aperture Plugin: Implementing A Table Of Images

At this point in the project I decided two things: that I was going to release the plugin as 1.0 in a month, and that I needed to change the interface. I had already switched from a vertical arrangement with the prefix on top, to a horizontal arrangement with the prefix on the left. The trigger for this next change was the unsatisfactory display of the example random filename and the need to distinguish between what happens to the random naming when the freeze feature is used and is not.
The final version I decided to go with features a table that shows a thumbnail, plus the image version name, the image caption, and the new random name. This is the clearest way to show what is going to happen: show it happening.

By using the propertiesWithoutThumbnailForImageAtIndex: and thumbnailForImageAtIndex: methods I can get the data I need from Aperture for each table entry. So my plan was to bind the table to an array controller and bind the array controller to an array in the Random_Wok object that contained all the thumbnails and text. Updating the thumbnails and text would cause changes to propagate through the controller to the view as needed.
So I added an array controller to the nib and called it ImageTable:

I then bound it to the model like this:

and set up like this:

The model key is imageTableData and I use the keys thumb and text to access the data for the columns. So to support the needs of the array controller I implement an array called imageTableData as an ivar in Random_Wok and fill it with dictionaries with keys thumb and text, corresponding to NSImage and NSString objects I want to display.
I set up the table view like this:

Notice that I actually used a custom class for this. More on that later. The first (image) column is set up like this:

To display the image, I drag in an image cell. The properties of the image cell is accessed via the small triangle top right:

The inspector shows it as an NSImageCell, set up this way:

Now onto the bindings. The first column is bound to the array controller and uses the thumb key to get data from the model:

The second column is set up this way:

And bound to the text key through the array controller like this:

As I discovered while attempting to bind each table column to a separate array, setting up table column bindings also automatically sets up the the table bindings. This makes it impossible to bind separate columns to separate array objects: they have to all go to one object and then use the key path to get data from separate places. This pretty much means that you need an array of dictionaries to drive a table.
To provide data for the model, I loaded all the thumbnails and text into the array during the plugin initialization. Through the bindings I was able to change the dictionary contents and have the table update automatically. This all worked fine for a small selection of images.
However if I selected 500 images, the array would take a long time to fill. Worse, this was happening before anything was displayed (since the array controller was set to prepare content), making it look like the plugin has frozen. And changes to the text caused by changing the parameters for the random file names were also very slow because they too would be performed 500 times on all the items in the array.
So another approach was needed.
The other parts of this series can be found via the Cocoa page.
Aperture: 1.5.3 Now Available
About Aperture 1.5.3 Update
Aperture 1.5.3 addresses issues related to overall reliability and performance in a number of areas, including:
- Generation of thumbnails for adjusted images
- Entering and exiting Full Screen mode
- Working with large sets of keywords in the Keywords HUD
- Restoring from a vault
Among the specific issues that have been addressed:
- Previews now update properly when images are sent to an external editor.
- Leaf Aptus 22 and Aptus 75 images are now imported with the correct orientation.
- When folders are imported as projects, the folder structure is now correctly preserved when identically named subfolders are included in the hierarchy.
- Reconnecting referenced images that have been externally edited now works more reliably.
- Setting the ColorSync profile in the Aperture Print dialog now correctly suppresses color management settings in the Mac OS X Print dialog.
Aperture Plugin: Better Logging

The logging I have been doing is very primitive. I call NSLog() to see what I want to see and have to manually insert and remove these calls (or mess with comments) to control what is going on. It's time for something better. Looking around, I found a handy logging class at Borkware that does much of what I want called MLog.
It implements a logging system that includes the line number and source file name with each message. This is very useful for understanding what is happening when reading the logs. The change I made to that code was to add control over the logging level.
Here are the definitions for my version of MLog.h. I implement seven levels and add the ability to revert to standard NSLog() calls, or to remove all the logging code completely:

Macros take care of inserting the correct code and extracting the file name and line number from the preprocessor. The class implements two class methods: one for actually logging messages, and one for setting the current log level. The idea of the level control is that the minimum log level can be set either by an environment variable or by code and only messages logged at that level or above will be shown.
The Implementation includes a static variable that holds the current log level:

Initialization is done in the class initializer:

It reads the environment variable MLogMinLevel and uses that to set the initial level. The logging code compares the logging level passed to the method with the current level and ignores those below the minimum:

The level setter code is very simple:

To use the logging, I add lines like this to my code:

and it provides messages that look like this that include the level, the file name and the line number:
Since I provide logging control with an environment variable, I can quite easily create build configurations that behave differently. If I go to the Project menu and select Edit Project Settings I can duplicate the current Debug and Release configurations and make two new ones:

Clicking on on the Build tab lets me set these up:

I edit the preprocessor macros to include the symbols I need to control the logging system. The Release No Logging configuration sets __BTREMOVE-LOGGING, for instance. Once set up I can change the current configuration I want to build and run from the main XCode window just by selecting it:

For this to fully work I edit the custom scripts I added to copy the executable and run Aperture, since the build names have changed and there are more of them.
The other parts of this series can be found via the Cocoa page.
Photo Book Quality

Mike Franklin has been testing the quality of photo books created by a number of different suppliers: Blurb, Apple, Viovio, and MyPublisher.
Aperture Plugin: Creating A Universal Binary

Random Wok is only being compiled for Intel right now. I need a universal binary so that it will run on the PowerPC architecture as well. This is easy to change. I select the Random Wok target:
Then click on the Info button, and under the Architectures tab, select what I need:

That's all there is to it. Everything happens behind the scenes.
The other parts of this series can be found via the Cocoa page.
Aperture Plugin: Automating Builds And Using The Debugger

So far in this project all my debugging has been done with NSLog() calls since the code is pretty simple. To run my plugin each time I have been dragging the binary from the Build folder to Aperture's export plugins folder, launching Aperture, and then selecting Random Wok from the File > Export menu.
So how about debugging with the debugger? If I do a debug build, go through the same steps, and the run Aperture, my breakpoints are never hit. What is going on?
This is happening because the application, Aperture, is not being run by the debugger, and so my plugin is not being run by the debugger. To make XCode run Aperture I modified the instructions I found in a technical Q & A on Apple's developer site that shows how to handle this situation with a Web Kit plugin. In my case I create a new custom executable in the Projects folder on the left side of the XCode window and set it up this way:

Then I make sure that my build options for the debug build are set correctly: no optimization, generate all symbols, don't strip:

Now I can set breakpoints and have them hit:

I still have to copy the executable and run Aperture manually. But there is a way to fix that. I add a new run script :

And set it up like this:

The debug version is set up with a symbolic link and the release version with a copy. Here is the full text:
# clean up any previous products/symbolic links in the target folder
if [ -a "${USER_LIBRARY_DIR}/Application Support/Aperture/Plug-Ins/Export/${FULL_PRODUCT_NAME}" ]; then
rm -Rf "${USER_LIBRARY_DIR}/Application Support/Aperture/Plug-Ins/Export/${FULL_PRODUCT_NAME}"
fi
# Depending on the build configuration, either copy or link to the most recent product
if [ "${CONFIGURATION}" == "Debug" ]; then
# if we're debugging, add a symbolic link to the plug-in
ln -sf "${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}" \
"${USER_LIBRARY_DIR}/Application Support/Aperture/Plug-Ins/Export/${FULL_PRODUCT_NAME}"
elif [ "${CONFIGURATION}" == "Release" ]; then
# if we're compiling for release, just copy the plugin to the Internet Plug-ins folder
cp -Rfv "${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}" \
"${USER_LIBRARY_DIR}/Application Support/Aperture/Plug-Ins/Export/${FULL_PRODUCT_NAME}"
fi
Here is how the debug version looks in the Export folder:

Now when I compile and run or compile and debug, the script is run and Aperture is launched. Any breakpoints I have set work.
The other parts of this series can be found via the Cocoa page.
Frasier Spiers Talks About The Aperture Export API

Late Night Cocoa has just published a podcast featuring Frasier Spiers. He talks about the Aperture export plugin API.
Aperture Plugin: Displaying The Image Count With Bindings

To give some feedback to the user I want to include a display of the number of images that will be exported. I can do that by using bindings: by binding text on the window to an ivar in my Random_Wok object.
I create an ivar called imagesToProcess and an accessor to set it:

In -willBeActivated, I add some code to set it up before it is used:
And since changes in the image type (master or version) can change the number of images, I have to set it each time the export type changes:

That is all the code except for this method:

It returns "s" if imagesToProcess is more than one, otherwise an empty string. I need that in order to implement correct pluralization of my display string.
To display the image count on the window I add an NSTextField in the corner like this:

Its value is unimportant because I will be constructing it dynamically with bindings, but it helps to have a descriptive string there. I set up its bindings like this:

The Display Pattern string is what does the magic. Value1 and Value2 are bound to different key paths. The first to the value given by imagesToProcess, and the second to the plural string given by pluralImagesToProcess:

When these are substituted into the Display Pattern string, the result is what the user needs to see how many images are selected:

Because I implemented the accessors and I use them to change the value, bindings take care of doing this display updates automatically. If I select images in Aperture that include some with multiple versions of one master, the image count displayed changes when I click Master and then Version, just as it should.
The other parts of this series can be found via the Cocoa page.
Aperture: End A Show Of A Selection Of Photos With A Blank Screen
To fix both of these problems, I use command-click. Here's how:
• Make sure the display is in Primary Only mode (option R). This makes the viewer show only one of the selected images at once.
• Select images using shift-clicking and command-clicking until the selection is as desired
• Go into full screen mode with F
• The first selected image will be displayed -- command-click it
• The next image is displayed. Keep command-clicking until all images have been displayed. On command-clicking the last one, a blank screen will appear.
[Added from the comments:]
Add an image of your logo (or URL or whatever) to the album or project. It doesn't matter where it is in the browser, as long as you click on it *last* to add it. Then click on the first image you want to show and hit F. Now the last image to be shown will be the logo.
Using the method of display above, images are shown in the order added to the selection, so you can not only choose what to show, but the order as well and very easily.
Aperture Plugin: Making A Customized Button

The next feature I want to add is a Bagelturf badge that can be clicked to launch a browser to my home page. For that I need a graphic and some way of making a click open a URL. Since the badge won't obviously be a button, or have a button action, I want the cursor to change to a pointing hand to show that it is clickable.
After a lot of messing about with tracking rectangles I discovered that the correct way to implement the pointing hand was by using -resetCursorRects. I have to subclass NSButton and then override -resetCursorRects to define the cursor shape that I want when the cursor is inside my button.
First I drag a button in Interface Builder onto my window and select the Rounded bevel Button type. Then I create a new file and declare it as a subclass of NSButton using this code:

Then I add the implementation code:

To use the custom class in my nib file, I save those files and drag the .h file onto my nib file. This makes the nib file aware of the custom class and selects the class:

Now I can select my button and set its custom class to BTPointingHandButton:

By making a small image in Photoshop that has transparent background and saving it as a TIFF, I can have the image lay on the window background. To add the image to my XCode project I drag it onto the Resources folder and opt to copy it in.

Clicking on the image and using the inspector shows me what is there:

By dragging the image onto the button, the image is automatically set:

And finally I can add an action to File's owner via the attributes pane called bagelturfAction and hook it up to the button with control-drag. To make the action open a URL I add the action code to Random_Wok.m and use NSWorkspace's openURL method:

Done. Now if I hover over the button the cursor changes and a click launches Safari and goes to my home page.
The other parts of this series can be found via the Cocoa page.
Aperture Plugin: Saving The Default Folder

As currently written the plugin defaults to the same folder each time I run it. This is not convenient. There is a very good chance that I will want to go back to the same folder each time, so I added the exported file path to the defaults that are written to a read from the prefs file.
As part of doing that I changed -defaultDirectory to this code:

Here I check to see if the value read from the defaults (_defaultExportPath) is a valid folder using NSFileManager. If it is, then I use it, otherwise I use the built-in default of ~/Documents. This deals with the user moving or renaming the folder between runs.
Another change I have made is to make the Generate button do something. I decided that using the current date and time would make for a good salt value:

And here is the latest interface:

Note that since I am posting this after the plugin was released, this interface design is no longer current.
The other parts of this series can be found via the Cocoa page.
Aperture: Using The Light Table
I find that the easiest way to create a light table is to select some images and use a control-click to get New from Selection > Light Table:

Then rename the light table by filling in the name:

At this point I try to make the light table as big as I can. I collapse the header with the small toggle button top right, and use Window > Layouts > Maximize Viewer (option command V). Using a small window so I can post the images here I get this:

There are my images at the bottom. Option W will put the thumbnails at the top, and shift W will put the thumbnails at the left or right. I like a black viewer background. This is set in the Aperture preferences:

To get images on the light table, I select and drag. They are automatically positioned if I select and drag more than one at once:

Now I can move them around and scale them with their handles. The thumbnails gain little 1 markers that tell me how many times they have been used. Since I can't use each image more than once on a light table, I never see 2 or 3 (there is a workaround for this, later).
Usually two things happen at this point that cause images to disappear. Either I lose images under other images or I drag one close to the edge of the window and it races off to one side as the light table is scaled, leaving the others far behind. To get an image out from behind others, as in this case:

there is the uncover (shift X) button top left:

Selecting a foreground image and clicking the button pulls those behind out. Clicking it again puts them back. Clicking one of the uncovered images cancels the uncover operation and leaves the clicked image on top:

The other problem, that of a dragged image leaving the others behind is fixed by using one of the controls top right:

The button second to left scales the display to fit the items. Or it should! Actually it scales to fit the light table. If the light table has been stretched, then it stays stretched and the button is not very useful. Because of this it is pretty much equivalent to dragging the scale slider on the right all the way to the left. The light table can be bigger than you think, so this can result in some small images in a big black space. I have yet to figure out how to reduce the size of the light table once it has been stretched out like this:

The leftmost control is the navigator. It can be hard to use. It scales the display and shows a very faint rectangle that represents the window. By dragging that rectangle I can select what part of the light table I want to view. I almost never use it. Unfortunately there is no working scale to selection button. That is really the only button I need for fitting content to the screen.
Having viewed the light table in this way I can drag the errant image back to the flock and then rescale it back to something sensible.
One puzzle is how to get two identical images onto the light table. Dragging an image on a second time just replaces the first image. The trick is to make new versions of the image and use those. By selecting one of my images and pressing option V twice I make two duplicates:

Then I can drag them out of the stack or use command shift K to unstack the stacked items all at once. Now each version can be dragged once to the light table:

The loupe works on the light table, as do all the other controls. T will bring up image data in a tooltip, F will make any image full-screen. Images can be adjusted in place by bringing up the adjustment HUD (H). Cropping will not work in place, but it is much easier to hit F and H and do all editing full-screen if needed, and crop works fine there.
Stacks can be viewed in-place and reordered. Most useful though is the ability to specify an album pick. By setting an album pick, a specific image from a stack can be chosen for use by this album (or light table). That lets the stack be kept in its original order while showing a particular preference just for this album:

The checkmark on the monochrome image shows the album pick. When the stack is closed, only that image will be visible. To get rid of the badges overlaying the images on the light table shown above, I can use shift G.
Two buttons lower left control how the browser and viewer are related. To use the regular viewer instead of the light table viewer to show the browser images, press the Show Viewer button on the left:
and select images as normal:

The lock button next to the Show Viewer button locks the browser to the light table viewer. With that selected, I can option click another project or album and have that display in a separate browser at the same time:

Selecting items in that new browser does not take over the viewer, so I can drag them into my light table browser and manipulate them in other ways. I have more information on using multiple browsers on the page entitled Multiple Browsers For Fun And Profit.
Control-clicking brings up a small contextual menu that includes options for aligning and distributing images. And of course light tables can be printed. All the selected images will be scaled to fit on one page, with the unselected images showing up as blank areas. That can be output to a PDF or printed on a printer.
I wish for a few more features: duplication of images without new version creation, the ability to add text blocks, rotated images, images with borders, layout templates, grid lines and/or alignment markers that images snap to, distribute to grid, randomize layout, scale images to the same size, and a scale display to selection that works.
This is actually one area where 3D effects would be useful: show a perspective view of the light table so it can be seen as a tablet top would. And add the ability to stand up photos and show them rendered into frames.
Aperture Plugin: Storing The Settings Between Runs

[Note: my blogging this project is some way behind the development. Random Wok 1.0 has already been released.]
An inconvenience with the current version is that it always presents blank text fields to the user. I would like to store the prefix, postfix, salt, use salt, random format, random length, and alpha case selection somewhere so that their settings are retained from one run to the next.
Implementing this turned out to be harder than I thought it would be. After reading up on NSUserDefaults and looking at several examples, it all looked straight forward enough. But something very odd happened: the values I were successfully saving and restoring between runs was being stored somewhere, but not in the com.bagelturf.Aperture.Export.Random_Wok file as I had been expecting. Not only were they not in the expected file, the expected file did not exist. It was never created.
The values I was storing were actually getting put into Aperture's own preferences file in ~/Library/Preferences. While under some circumstances this would have been the desired behavior (such as writing my own plugins for my own application), in mine it was not. I could not use most of the NSUserDefaults methods because of this side-effect.
So I created two methods: -getDefaults and -setDefaults and inside them used -persistentDomainForName: and -setPersistentDomain:forName to read and write the complete plist file as a dictionary.
Setting the defaults (that is writing the file) is done like this:

It first accesses the shared instance of user defaults and then uses the bundle identifier to retrieve the settings into a mutable dictionary. That dictionary is then updated with the latest values from the ivars, suitably encoded, and written back to the file. This allows older versions of the plugin to work with newer versions of the plist file: anything not used is simply left alone.
Reading the defaults is much more involved. The extra work comes from the need to set up the file if it does not initially exist and to manage plugin version changes. The first part is much like before, with the addition of reading the version from the plugin bundle:

Then I deal with the first run. This is indicated by an empty dictionary:

This results in a file on the disk, and a mutable variable defaultsDict with the same information. Now I am ready to deal with a change of version number:

I have nothing to do: there is only one version so far. If the version has changed, then the new version number is written to the dictionary and out to the file. Finally I am ready to set up the ivars from the dictionary values:

I call -getDefaults from the -initWithAPIManager method so the ivars are ready to go when the window is created. Then in -willBeActivated I set up the various elements of the view:

Finally in -willBeDeactivated I call -setDefaults to write the current state of the interface to the plist file.
Here is what the final com.bagelturf.Aperture.Export.Random_Wok.plist file looks like:

The other parts of this series can be found via the Cocoa page.
Random Wok 1.0 Released

Random Wok 1.0 has now been released and is available on the Downloads page. It's a Universal binary for Aperture 1.5 or later and Mac OS X 10.4.8 or later. Random Wok exports images from Aperture and gives them random names. For more information on Random Wok see its product page.
Aperture Plugin: Dealing With Duplicate Random Names

Now that I am finally exporting with random file names I feel like I am on the home straight. But there is plenty more still to do: looking for problems, for instance.
There are two things that can go wrong with the export. First there could be an existing file in the folder I am exporting to. This is actually quite likely since repeated exports will create the same names for the same files unless the salt is changed. To solve that I add some code to display an alert if the rename fails. I modify the call to movePath by adding a handler. If there is an error with the rename, the handler method will be called:

To support the handler, I added two methods:

I had to incorporate a workaround for a bug: the return value of fileManager:shouldProceedAfterError is actually ignored by movePath:toPath:. NO always comes back. So I had to create an ivar to pass that value.
Although this code handles errors just fine, there is a better way of dealing with the situation of existing files with the same name as new files. I can create all the random file names and make sure that none of them exist in the folder before I even start the export. That will ensure that errors are truly exceptional (cause by hardware or other programs maybe).
Another problem I may run into is that there may be too many files for the randomness. Exporting 1000 files with three random decimal digits in the name is guaranteed to run into trouble.
So my code needs to ensure that all of the random names are unique with respect to themselves and to the destination folder. The solution is to create dictionary of existing filenames with NSNull objects. I use a dictionary for finding duplicates because they are very efficient for large numbers of images:

To that I add the files being renamed, the difference being that the files being renamed are stored with the new random name. The case-insensitive nature of the filing system means that I need another another dictionary to track file names coerced to lower case. Collisions in that dictionary mean that I have a problem.

My renaming code ignores the existing files by looking for the NSNulls and renames the rest:

The other parts of this series can be found via the Cocoa page.
Random Wok: Heading Toward Release
The interface has transformed somewhat, and it has gained the ability to display thumbnails:

I have been learning a great deal about bindings, KVC, NSTableView, and other aspects of Cocoa programming. Over time I will post more blog articles about its development to show how this was implemented and what I learned. There will be a 1.1 release as well since there are some non-essential features and optimizations that I want to add that will not make it into the first release.
Read more about Random Wok on the Products page or see blog articles about its development on the Cocoa pages.
Aperture Plugin: Generating The Random Name and Renaming Images

Now I am able to generate the random string I can rename the images after they have been exported. So for each image file I do this:

To get the image UUID, depending on the API version I call either a method that gets the image properties with or without the thumbnail. I don't need the thumbnail, so I prefer to use the one that uses least memory. To determine which API to use, I add this code to the -initiWithAPIManager method:

To generate the random string I either use the salt string or not, depending on whether the checkbox is set. Then the random string is combined with the other parts of the name and used for the rename (achieved with the movePath:toPath:handler method). I add hyphens to the name in the code above for debug purposes. In real life the format string will drop the hyphens.
This code is not very memory-friendly. Each time around the loop will allocate more memory, so I need to refactor it with better memory use.
There. Finally making random file names!
The other parts of this series can be found via the Cocoa page.
Aperture: Backing Up With Aperture

I have a sizable article published in MacZealots today entitled Backing Up With Aperture. It looks in detail at the various ways of backing up your Aperture library.
Mac OS X 10.4.9 Update Improves Aperture
• Improved Spot & Patch results: The update contains changes to Core Image that improve the visual correctness of images using Spot & Patch adjustment.
• Reduces issues of temporary "black" Viewer: Mac OS X 10.4.9 addresses several issues that could cause the Viewer to temporarily turn black when displaying adjusted images.
• GPS metadata is preserved when image versions are exported.
• Incorporates all RAW file format compatibility and other imaging issues originally addressed in Digital Camera RAW Support Update 1.0.1. This update improved RAW file format compatibility for the Canon Digital Rebel XTi / 400D / Kiss X Digital, Nikon D80, and Pentax *ist DS. It also addressed the following issues: Handling of large Canon RAW files (.CRW); DNG compatibility on Intel-based Macs; Lines sometimes appearing in images exported from Aperture.
The full list of supported cameras is listed on Apple's site. I expect we will see an update to Aperture before very long. Joe Schorr has already posted such on Apple's Aperture forums recently.
Aperture Plugin: Generating A Random String From A UUID

The final part to implementing the randomness is actually making the real file names. To do that I write a method for generating a string from an NSData object using a character set and a length:

This first uses eight bytes to create a long long (64 bit) value and then uses repeated division to extract character via an index into the character set string.
Then I use that to help create the random string from the UUID and the salt:

First it makes a single string from the UUIDF and salt, then converts that to an NSData object and creates the MD5 digest of that. That is then used to generate the final string that will be used in the file name.
The other parts of this series can be found via the Cocoa page.
Aperture Plugin: Creating The Example File Name

There are several parameters that depend on the settings for the random string format, the alpha case, and the length. I concentrate all the decisions for these into one big ugly switch statement that starts off like this:

This sets a character set for generating the random string, and also an example string that I will use on the display. Displaying the example random string now consists of this:

I truncate the example random part by the selected string length. Anywhere that the random string parameters change, I add a call to recalculate the parameters, such as in the action code for selecting the length:

Now the dialog looks like this:

The example file name now follows the settings.
The other parts of this series can be found via the Cocoa page.
Aperture: Using TextWrangler To Browse And Modify Aperture Libraries

TextWrangler is a freeware text editor and general-purpose text-processing tool published by Bare Bones Software. One of the things it is good at is processing a whole folder hierarchy of files at once, making the same edits to each with just a few mouse clicks. Since Aperture libraries and vaults are just large file hierarchies, I can use this tool to browse and modify them.
TextWrangler can be set to automatically process hundreds or thousands of files, so it is a really fast way to destroy an Aperture library too. Conversely, if I really know what I am doing, it is a fast way to find things and make changes that Aperture cannot, such as recovering from corruption, removing problem data, or globally changing parameters.
The simplest way to use TextWrangler is to open a new blank document and drag an Aperture library onto it. TextWrangler reads the file hierarchy and displays it as tab-indented text:

Now I can browse and search this text document. If there are lines that I don't want to see I can use the Text > Process Lines Containing... function to delete or modify all lines that matches criteria I define, such as file name endings or character patterns.
I can also do the same thing with two libraries and two windows and then go to the menu and compare their contents with Search > Compare Two Front Documents. In this way I can compare the contents of two Aperture libraries side by side:

Another way to use TextWrangler is to look inside the files in the library. In the example that follows I browse all my library image file information files (only the XML .apfile files) and examine the information they store about the disk that hosts the image.
I launch TextWrangler and hit command F to bring up the find panel. To get TextWrangler to open the library, I locate it on my hard drive and drag it onto the drawer on the left (the Open dialog will not allow it to be selected):

Pressing the Options... button bottom right allows me to set up a filter so that TextWrangler will only open certain files in the library. I set up the dialog as below:

I click on Edit Filter to set up a new filter called apfiles that will make TextWrangler only open the XML files that describe images in the Aperture library:

Closing that and clicking OK takes me back to the Find window. By typing diskUuid into the top search box and clicking Find All I get a window that shows all the matches:

I can scroll up and down by clicking on the top pane and using the up and down arrow keys. This allows me to view each file in turn in the lower panel and look at the disk and other data that the apfile contains. It's so fast that I can easily flick back and forth across several files and see the differences.
This technique can be used to make global edits on the Aperture library. By filling the Replace With box and clicking Replace All, TextWrangler will go through all the matching files and match and replace the values. Of course this is very dangerous, so I recommend only working on a copy of the library, and even then going very carefully. Since exported projects are almost identical to a library, they make a good practice area.
Many changes to the files that make up the library also have to be made to the database if they are to have any effect. But since the database is out of bounds to applications like TextWrangler, the only way to accomplish this is to quit Aperture, delete the database and then open the library, so causing Aperture to rebuild it. Another way to achieve the same effect is to launch Aperture with option and command held down.
I've only scratched the surface of what TextWrangler can do. It's a very powerful tool and can be put to good use to explore and solve Aperture library problems. But be careful with it!
Aperture Plugin: Adding Randomness

To get my randomness I will use the MD5 message digest. That delivers a 128 bit number based on an input of any number of bytes. Since Mac OS X ships with MD5 functions in a dynamic library, all I have to do is to call that appropriately.
Appropriately in this case means using code that has already been written. Andreas Mayer submitted some code to the Cocoa mailing list that creates a category on NSData for MD5 and SHA1 digests. A Cocoa category is a collection of methods that extend those of an existing class. They cannot add ivars. The interface to the category AMDigest looks like this:

It declares two methods, each returning an NSData object with the digest inside. Since it is a category on NSData, the methods are used just as any other NSData methods are. The implementation code wraps some C function calls and returns a new autoreleased NSData object:

To add the methods, I create a new Objective C class called AMDigest in my XCode project and paste in the code. Left as is, this does not work, because I have not told XCode to link to the library and the function calls go unresolved. It took some work to figure out that the libcrypto.dylib file that is provided with OS X is a stub and should not be added to the project in the Frameworks and Libraries folder. All that is actually needed is to select the Random_Wok target and add this item to the build configuration:

To use the new method I also have to #import the header file that contains the interface in my Random_Wok.m file.
The plan is to concatenate the salt and the UUID of the Aperture image together and create an MD5 digest of that. I can then use 64 bits of the digest to create a random string based on the settings of the length, format, and alpha case that the user has selected.
The other parts of this series can be found via the Cocoa page.
Aperture Plugin: Ending Editing

I discovered a problem with the Use Salt checkbox. If the checkbox is clicked then it disables the salt string text field. When it is clicked again, the field is re-enabled, but the string it contained is gone. Looking into this further I found that if I clicked away from the text field before disabling the field, the string would stick.
What is happening is that the field editor attached to the text field is not being told to end editing. Normally that is done when focus moves to another field or control, but not in the case of disabling the control. The cure was to change the -useSalt: method like this:

That call to -endEditingFor: tells the window manager to end editing for the field and all is well.
I also fixed the name "Random_Wok" in the menu and the window title. I edited the info.plist file by changing the display name string:

The other parts of this series can be found via the Cocoa page.
Aperture: Speed Up Aperture By Rebuilding The Database Index

Everyone is excited about the discovery of using the sqlite vacuum command to rebuild the index for Mail.app. Well the same trick works for Aperture. Rebuilding the library database indexes is much faster than rebuilding the entire database. While probably not as effective, it does improve the speed of Aperture, especially for heavily-used libraries with a lot of deleted images. [Update: Aperture 2.0 has two databases: the Aperture.apdb database and a new one called BigBlogs.apdb. As currently written, this script does not touch the BigBlobs database.]
Here is the script. You can download a ZIPped version from the download page or paste the text below into Script Editor. Be careful of the single- and double-quotes getting modified in the process. They are all straight quotes. [Update: I added an improvement sent to me by Adam Tow. The script now only opens bundles and defaults to the Pictures folder.]
tell application "Aperture" to quit
set new_file to choose file with prompt "Select Aperture Libary to compact its database" default location (path to pictures folder) of type





















