My investigations of Aperture’s internals continue with a question from John:
There’s no way in Aperture to change the image date value Aperture stores in its database. We know it doesn’t have to be the same as the embedded image metadata value because if you import from iPhoto Aperture stores iPhoto’s user defined date value.
Is there a Scriptable API for changing the value of the Aperture database date value?
Here’s what I have found. In the Aperture database table zrkversion
, there are numerous timestamp fields:
ZEXPORTMETADATACHANGEDATE
ZEXPORTIMAGECHANGEDATE
ZFULLSIZEPREVIEWCHANGEDATE
ZDATELASTSAVEDINDATABASE
ZCREATEDATE
ZIMAGEDATE
The one we’re looking for is ZIMAGEDATE
. The value looks to be in NSDate format. I wrote the following AppleScript to convert the value into a more useable AppleScript date object:
set theDate to call method "dateWithTimeIntervalSinceReferenceDate:"¬
of class "NSDate" with parameter (theTimestamp as real)
There’s no AppleScript API in Aperture’s dictionary to access this data, so you’ll need to go directly into the SQLite3 database of Aperture if you want to edit the image date of selected images. Perhaps I’ll write an application that helps people edit the image date!
Email me if you have any suggestions. In the meantime, I will be poking around the Apple Discussion Forums for more details on what people want.
Thanks Adam, that’s fascinating. I have more in my own blog:
http://googlefaughnan.blogspot.com/2006/10/apertures-date-problem-adam-tow.html
I think there are two types of date changes:
1. Correct camera date errors or tweak dates to get a desired sort-by-date order.
2. Managing scans. In this case there may be hundreds of files where the date needs to be set.
A widget/tool to edit this date field would ideally allow on to select many images and apply a date to them with a specified interval. iPhoto 6’s date editing tools are really not a bad example.
If you wrote such an app, I might be able to buy Aperture (and your app too of course)