pho: View and annotate multiple images

...Akkana

pho is a lightweight program for viewing large numbers of images quickly, rotating or deleting some, and making notes about what to do with each image -- for instance, for going through hundreds of images after uploading them from a digital camera.

Skip to the download section.

August 2007: Pho 0.9.5.1
. Lots of cool new improvements. Optimized for gtk2, but should still build on a gtk1 system. New "presentation mode" does fullscreen (no window borders). It also checks your environment for Grab pho-0.9.5.tar.gz. Let me know if you have problems.

And there's a Windows binary too! pho-0.9.5-pre5.zip, thanks to Michael Schumacher. (This is labelled 0.9.5-pre5, but there have been no changes between pre5 and the final 0.9.5.) You'll need to install gtk+ if you don't already have it.

Why another image viewer? Surely there are plenty of those?

I used to use xv for paging through images -- it's quite a good viewing program -- but it had a few features which annoyed me. For example, it creates a directory called .xvpics in every directory it touches; and if an image has to be resized to fit the screen, and after that you save it (perhaps after rotating it), it saves at the smaller size and boom, there goes your high-res image.

But, more important, there were a few extra things I needed. During image triage, I need to be able to do a few things quickly:

With xv, I found that I was writing these lists on paper, or trying to keep track of them in my head. That's dumb! Why not make the computer do that work? So I did.

Since I wrote pho several years ago, I keep hearing about other image viewers, and thinking maybe pho was redundant. But I recently did a search, and couldn't come up with any other image viewers that are similarly efficient for paging through large collections of images. So I guess I'll keep maintaining pho!

Pho can read any format supported by gdk-pixbuf. I haven't found a list of those formats anywhere, but it seems to be substantial. The only format I've hit so far that it doesn't read is photocd. You can convert those to other formats using the ImageMagick utility.

Pho can delete images on disk, but it can't save rotated images yet. I use my imagebatch scripts for that.

How to use pho

Usage: pho *.jpg (or whatever).
It will show the first image, scaled for your screen if needed. Then the following keys work:
space
Go to next image.
backspace, -
Go to previous image.
r, t, right-arrow
Rotate right (clockwise).
R, T, l, L, left-arrow
Rotate left (counter-clockwise).
up-arrow
Rotate 180 degrees.
home
Go back to the first image.
d
Bring up a delete dialog (another d deletes the file)
i
Show information about the image (includes EXIF info and JPEG comment, if any).
0-9
Add this image to the appropriate list.
f
Toggle in and out of "full screen mode" (make the image as big as it can be and still fit on the screen).
F
Toggle in and out of "full size mode" (show the image at its native size, even if that's too big to fit on screen)
p
Toggle in and out of Presentation Mode (full screen, no mouse or window borders) -, /
Zoom out, to half size +, =, *
Zoom in, to double size
q
Quit.
pho will remember the correct (last shown) rotation for each image. When it exits (either because the last image was viewed or because the user typed q), it will print out the images that need to be rotated and deleted (it does not actually change the files on disk), and the images which were added to numbered lists. For example, I might press 1 on all the photos I want to save for a web page, 2 on the couple of photos that need additional editing in gimp, and 3 on the photos I want to save as desktop backgrounds.

Getting pho

The current stable version of pho is 0.9.5.

Source tarball: Pho 0.9.5 source tarball.
Windows binary (requires gtk+): pho-0.9.5-pre5.zip.

Dependencies: pho uses the gtk+ libraries, including gdk-pixbuf. You may need to edit the Makefile if your system has these libraries installed in different place from my system (sorry, no autoconf yet). Also included is a little xlib program, xpho, which is mostly interesting as an example of how to use gdk_pixbuf_xlib.

Pho does work on Mac OS X, as an X application if you have the appropriate gtk/gdk headers and libraries.

If you like pho, or if you think it's promising but there's some feature it really needs ... let me know!

Changelog

8/6/2007, Pho 0.9.5.1:
Fix a buffer overflow bug on the 'g' key, which runs gimp-remote on the current file. 3/20/2007, Pho 0.9.5:
No changes except some manual and html page updates.
3/5/2007, Pho 0.9.5-pre5:
Check for a PHO_ARGS environment variable. Add a -P argument to force non-presentation mode. Fix a few bugs with double/half size and with scaling.
Make note 0 work properly.
7/24/2005, Pho 0.9.5-pre4:
Double and half size weren't working properly;
couldn't use arrow and spacebar to get out of the final Quit confirmation dialog (though ESC always worked).
10/9/2004, Pho 0.9.5-pre3:
Fixed a crash bug when revisiting an image which was previously rotated.
Added a workaround for Metacity's evil window size handling.
Made the background black when in presentation mode.
9/30/2004, Pho 0.9.5-pre2:
Fixed some bugs involving ending up at the wrong image when deleting or pressing HOME. Cleaned up handing of image list.
Fixed an aspect ratio problem.
7/13/2004, Pho 0.9.5-pre1:
Rewrote the image list handling to use a linked list. Lots of associated code cleanup.
Port to gtk2, and build under either gtk1 or gtk2.
Add new "fullscreen mode" (e.g. for presentations, or for difficult window managers).
Various futile attempts to hang on to window focus in various window managers.
9/30/2003, Pho 0.9.2:
Don't try to move the window unless the image size has changed (fix the annoying bug where pho wouldn't let you move windows).
Also fix a crash after dismissing the info dialog by clicking on the windowmanager "X".
2/26/2003, Pho 0.9.1:
Rusty Russell: fix an off-by-one error in rotation code, reducing the need for extra memory;
Brian Langenberger: bracket printed filenames with quotes if they contain spaces or quote characters.
1/8/2003, Pho 0.9:
Fix pho.spec version, and a make clean bug.
12/3/2002, Pho 0.9pre2:
Fix a crash in the quit dialog.
11/27/2002, Pho 0.9pre1:
Add EXIF handling, using code from jhead, by Matthias Wandel.
10/18/2002, Pho 0.8:
Build RPM and deb; show image size in titlebar; add home key.
8/13/2002, Pho 0.7:
Put image name in titlebar; prompt after last image before quitting; add fullscreen mode.
7/28/2002, Pho 0.6.1:
Fixed a bug with printing a note set on the last image.
7/21/2002, Pho 0.6:
Code cleanup, change the handling of the notes structures.
7/21/2002, Pho 0.5.1:
Fix a bug where image rotations were wrong when going backward.
7/11/2002, Pho 0.5:
Add delete dialog, and really delete files on disk.
7/3/2002, Pho 0.4:
Fixed a bug with gif rotation.
7/1/2002, Pho 0.3:
Rename yass to pho, add info dialog.
6/28/2002, Yass 0.2
Some added features; add manual and make install target.
6/24/2002, Yass 0.1:
First release.

Akkana's Software
Shallowsky Home