HTML, JavaScript, Photography, PHP, Programming

Turn your iPhoto library into a Web photo album

Update: Now that Apple has dropped support for iPhoto, you may be more interested in the new version of this software, Photos Disc Export.

iPhoto is good for managing and organizing photos and photo metadata, but it’s not easy to get that information back out if you want to share more than a few photos. I recently finished scanning 13,000 family photos and importing them into iPhoto, and I wanted to be able to share all of those photos (complete with the faces I spent hours tagging) with my brothers and sisters.

I could just burn copies of the iPhoto library to discs, but not all of my siblings have Macs, and iPhoto may not be around for very long. I needed a way to export all of the photos and metadata in a format that I felt comfortable would be supported for a long time: the Web.

The result was a PHP script that exports an iPhoto library into folders of image files (one folder per event), generates JSON arrays of event and photo metadata, and builds a minimalist JavaScript-powered website that provides a simple photo viewing experience. The website can be put online, or it can be run entirely offline (like from a DVD, which is my plan for sharing with my family members). The code is all open source ( and the usage instructions are in the README.

Here’s a screenshot of the main page of the website it generates:


And here’s an example of a single photo’s page:

I know it’s a pretty niche project, but hopefully it will come in handy for anyone looking to make their iPhoto library more shareable and accessible, especially as Apple drops support for iPhoto in the near future.

iPhoto Disc Export


7 comments on “Turn your iPhoto library into a Web photo album

  1. Mark Keijzer says:

    This is so cool!

    But I have downloaded your github and when I try it out it breaks… Could this be because I do not have php installed?

    It crashes after ‘found x events’ with this message:
    “Warning: date_timezone_set() expects parameter 1 to be DateTime, null given in ../../iPhoto-Disc-Export-master/iphotodisc.php on line 142”

    “Warning: usort(): Array was modified by the user comparison function in ../../iPhoto-Disc-Export-master/iphotodisc.php on line 145”

    “Warning: usort(): Array was modified by the user comparison function in ../../iPhoto-Disc-Export-master/iphotodisc.php on line 154”

    “Fatal error: Uncaught exception ‘Exception’ with message ‘DateTime::__construct(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.”

    • You do have PHP installed, or it wouldn’t get that far. I think that adding this:

      date_default_timezone_set( 'Europe/Brussels' );

      on line 3 of iphotodisc.php might fix everything — the DateTime errors are probably because there’s no timezone set for PHP to work off of.

      Give that a shot, and if it doesn’t work, let me know what the new error messages are.

    • Great!

      I added a feature a few days ago that, when you hover over a face name in the sidebar, it shows a white rectangle around the person’s face in the picture. So if that interests you, you’ll want to download the newest code from GitHub and re-run any exports you’ve done.

  2. Cyril J says:


    I made lots of modification in your source code to add new functionalities :
    > possibility to re-compress images using SIPS (by choosing new size)
    > possibility to re-compress videos using HandBrakeCLI
    > creation of a log file
    > added sidebars to mode from one picture to another
    > …

    If your are insterested, I can send you my work to see if you are interested.


Leave a Reply

Your email address will not be published. Required fields are marked *