I have two Canon cameras which I use for most of my photos these days. Unfortunately getting photos off Canon cameras is more complicated than it ought to be because Canon refuse to implement the USB Mass Storage Class (MSC) which allows a device to act just like a removable disk (this is what all the "USB Memory Stick" devices implement, and why they "just work" these days); most other camera manufacturers support USB MSC in their devices (including Nikon, Sony, etc).

Canon only implement the USB Picture Transfer Protocol (PTP) which is a much slower (eg, half or one third the speed) protocol for transfering one picture at a time (but in theory offers more flexibility in the import than just copying the pictures off a file system, even if most of the time that flexibility is not required).

Under Linux I used FUSE and GPhotoFS (current version seems to be 0.4; old manual), which used the GPhoto libraries to access the camera and then presented that as a user-space file system. It worked reasonably well, although the first time you tried to access anything in the mount the camera would read through each photo pulling in information about it -- which would take a while, as typically I leave the last several shoots of photos on my memory card until I'm sure I've got multiple backups of the ones I want to keep. (With the IXUS 80 I also used to pull the SD card out and plug it into the SD slot on my laptop; unfortunately with my older Canon camera it has a Compact Flash card which isn't directly compatible with either my old or new laptop -- and the multi-card USB adapter I have is USB1, so even slower. Interestingly there are a few SD to CF adapters with some clever technology which in theory would allow using a SD card inside my older camera since it will apparently accept Type II (thicker == 5mm) CF cards: Delkin adapter (review) or the Mittoni adapter or the EagleTech adapter or possible TradeMe auction for SD/CF adapter which seems to be this device or this even more expensive device. Or I could get a 500D which uses SD natively.)

There is a MacFUSE project to provide similar user-space functionality for OS X, which I seem to have installed as some earlier point, and I was able to get GPhotoFS to compile against MacFUSE and libgphoto from MacPorts (hint: export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig, so that the pkg-config script can find how to compile/link against the MacFUSE libraries) -- but unfortunately I was never able to get it to mount the file system (it just gave an I/O error).

After some searching, I stumbled across the hint that Image Capture in OS X can be configured for automatic imports on a per-camera basis (this per-camera option seems to be an OS X 10.6 (Snow Leopard) addition). Which caused me to look more closely at Image Capture (previously I'd been fighting with iPhoto which is poorly designed for mass-importing new photos -- the closest to that work flow it gets is "import all and delete", which isn't what I want so I'd been having to select individual photos to import each time and then get them out of iPhoto via drag'n'drop).

The trick is:

  1. Pick a top level folder for imported photos (I chose to just go with ~/Pictures (the suggested default) as that'll be automatically included in all my backups)

  2. Run /System/Library/Image Capture/Support/Application/AutoImporter.app/ to set the Auto Import Preferences (AutoImporter -> Preferences), telling it to create a folder for each import, and that the folder should be named after the Camera name (delete "AutoImport" out of the text field, then drag the "Camera Name" button up to the text field), and close the preferences (hint: for best results you need to run it from Finder by double clicking on it, otherwise it'll try to do an import and exit after a few seconds -- run from Finder it stays open until you are done setting the preferences)

  3. Plug in the camera that you want to auto-import and turn it on

  4. Run /Applications/Image Capture.app

  5. Select the camera in the "Devices" panel at the top left

  6. Select "Connecting this camera opens: Autoimporter.app" at the bottom left

  7. Exit Image Capture, and turn the camera off. Then turn the camera on again. Observe that it creates a folder named after your camera in your top level directory (eg ~/Pictures/Canon DIGITAL IXUS 80 IS) and copies all the photos on the memory card there.

This approach still has a bit of a delay as it scans the entire memory card (I'm guessing this is a Canon/PTP limitation), but with no involvement from me the "new" photos on the memory card are synchronised into the appropriate camera directory (files deleted from the computer folder but still on the memory card will be copied back from the memory card on the next sync; files still in the computer folder but deleted from the memory card will be left alone; files in both places aren't copied again). I can then copy/link the photos into my preferred layout (and eventually purge unwanted photos from both the memory card and import folder). (There's a little bit of waste space with this approach, but drive space is sufficiently cheap that I can spare the 2GB or so of spool space.) And thanks to the separate folders for my different cameras I don't have to worry about file name clashes on the different cameras.

The same approach also works with my iPhone, which ensures that the (few) photos I take with it (mostly "must remember this" snapshots) also get conveniently copied onto my computer when I plug it in to charge/sync via iTunes. (Photos on the iPhone have to be copied with iPhone or Image Capture -- they're not automatically synchronised via iTunes, unlike contacts, calendar, etc.)