Shrink Your Aperture Library by Converting Originals

Converting originals into a smaller file format is a great way to shrink the size of your Aperture library. As I add more and more photos each week, managing disk space has become more important. The concept is nothing new and straightforward. In a nutshell, export the original in a smaller footprint image format (ex: JPEG) and then reimport it. Once you're happy the converted image is "good enough", destroy the original.

ApertureExpert (AE) has a fantastic script for automating this process. It's a steal for $1.99.

Now, this process is not for every image in your library. You're converting to a lossy format, which means less flexibility in post-processing (we shoot in RAW for a reason, right?). Any adjustments and other post-processing should be done prior to converting your original. And you should be selective on what images in your library you convert.

The instances where I most commonly convert originals:

An album to find 2-star photos.

  • 2-star photos: In my workflow, a 2-star photo is a shot I want to keep, but one that isn't great. Either something I'd never be able to re-shoot, or it has sentimental value. A very good candidate for conversion.

A smart album to find large files

  • Externally edited photos: Plug-ins are great. I do a fair amount of Photomatix work, and have become a big fan of OnOne's Perfect Effects. However, the resulting file sizes are tremendous. Particularly with Perfect Effects, the resulting PSD files are ~150MB. And once rendered, re-opening the PSD doesn't provide all of the effect layers and masks used in processing the photo. So for me, there's less value in saving the large PSD.

Aperture's smart albums make it a breeze to find photos that match my criteria. From there, it's just select the images I want to convert and run the script.

I've only had one issue with the script is the dreaded "Imported Keywords". In my workflow, I keep my keywords locked because of how Aperture imports photos with pre-existing keywords.  PhotoStream is the most common offender.

I've griped about this before (and before ... and before). And since the AE script imports the converted original, I wind up with "Imported Keywords" in my keyword hierarchy. It quickly became annoying to re-keyword converted originals, so I modified the AE script to do the work. This short video shows it all.

I don't own the AE script, so I can't redistribute a modified script. But, I have posted the changes I've made below. For those of you that have purchased the script, it should be simple enough to add in my changes.

Convert Master File Format changes to avoid the "Imported Keyword" issue.

In the code snippets below, the bold text is code I've added. Other lines are from the original AE script. I recommending making a copy of the AE script and modifying the copy.

First, find the second 'tell application "Aperture"' line and add the following code immediately after it:

tell application "Aperture"

  -- save keywords of image being converted
  set keywordList to id of every keyword in (item i of image_selection)

  -- delete keywords from image before export (avoid "Imported Keyword" annoyance)
  repeat with theKeywordID in keywordList
    tell (item i of image_selection)
      delete keyword id theKeywordID
    end tell
  end repeat

Next, find where 'new_size' is calculated. Add the following code. I have also chosen to comment out the "Converted to" keywording step. Personal preference.

set new_size to new_size + result

-- make new keyword with properties {name:"Converted to " & export_setting}

-- instead, reapply keywords saved prior to export
-- do this to both the original master and the newly converted master

repeat with theKeywordID in keywordList
  my addKeywordToImage(theKeywordID, (item i of image_selection))
  my addKeywordToImage(theKeywordID, (item 1 of new_image))
end repeat


Last, add the following code at the very end of the script, after the last 'end tell' line:

-- highly levereged from the fine work of Mitchell L Model

on addKeywordToImage(theKeywordID, theImage)
  tell application "Aperture"
    set tabpos to the offset of tab in theKeywordID
    if tabpos = 0 then
      set {theName, theParents} to {theKeywordID, ""}
      set {theName, theParents} to {rich text 1 thru (tabpos - 1) of theKeywordID, rich text (tabpos + 1) thru length of theKeywordID}
      -- I don't know why the compiler adds "rich" to "text"
    end if

    tell theImage to make new keyword with properties {id:theKeywordID, name:theName, parents:theParents}

    -- it isn't actually necessary to include the id property

  end tell
end addKeywordToImage