I am now using Kavasoft Shoebox and thus this whole entry is obsolete and kept only for historical purposes. It is interesting to see one of my requirements anticipated Aperture’s stacks.


I am in the process of migrating from Windows to Mac OS X as my primary home computing environment. IMatch is one of the key applications I need to migrate, but it is not available on the Mac. Ghola is an attempt to reproduce the key functionality of IMatch, and possibly go beyond. It is also a good way to learn Cocoa programming (my last programming experience on the Mac goes back to Think C 4.0 accessing raw QuickDraw calls).

Use cases

  1. Assign categories to images or a folder of images.
  2. Search for images matchin an expression of categories.
  3. Restructure a category (e.g. splitting a category grown too large into multiple, more manageable subcategories).

Requirements (incomplete)

The following are the key features from IMatch that need to be carried over:

  • The flexible set-oriented category system.

  • Support for RAW images (CRW and NEF).

  • Fast retrieval performance.

  • Extensible metadata.

  • Offline media support.

The following are the requirements for Ghola beyond IMatch:

  • Ability to group very similar variants of an image together. This would allow to group an image original, retouched versions, cropped and resized versions, or multiple very similar images taken in succession, yet manage them as a single logical unit. The role of each image in the group would be identified as well as part of its group membership, and each group would have a leader used by default.

  • Manage assets beyond images, such as PDF files.

  • Highly efficient categorization user interface.

  • Scriptable in Python.

  • HTML gallery generation, integrated with Mylos.

Implementation directions

The system core will be implemented in Python, and C if necessary. It should be as portable as possible. Possibly even multi-user and remotable.

SQLite will be used as the core database. Fast, simple, easy to manage.

GUI front-ends will use the native toolkits (PyObjC) whenever possible for optimal user experience and Aqua compliance.

A command-line UI could be more efficient for category assignment, if it is augmented with features like completion.

We may have to use bitmap indexes for efficient category indexing. Boolean operations on Python long integers are surprisingly fast, and C might not be needed at this point.


The System name is a reference to Frank Herbert’s Dune (the original series, of course, not the opportunistic add-ons by Brian Herbert. It has the nice side benefit of not being already used by another open-source program.