pho: View and annotate multiple images


pho (pronounced like the first syllable in "photo") 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.

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

Back in the early days of Linux (and, before that, Unix), I used to use a program called xv for paging through images. It was quite a good viewing program, but it was non-free and had a few bugs and quirks that annoyed me. But, more important, there were a few extra features I wanted.

I take a lot of photos. During image triage, I need to be able to do a few things quickly:

With xv (or most of the modern Linux image viewers), 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 first wrote pho back in 2002, I keep hearing about other image viewers, and thinking maybe pho was redundant. But I'm still not sure any modern image viewer is 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 includes most common formats. It doesn't read GIMP's native XCF, and it doesn't read PhotoCD. It reads some cameras' raw formats but not others. Unfortunately I don't have any control over gdk-pixbuf's format list.

Pho can delete images on disk, but it can't save rotated images. It merely prints out the list of images that need to be rotated. I use my imagebatch scripts for that, or you can use a commandline utility like ImageMagick (which is what my imagebatch scripts use under the hood).

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:
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).
Rotate 180 degrees.
Go back to the first image.
Bring up a delete dialog (another d deletes the file)
Show information about the image (includes EXIF info and JPEG comment, if any).
Tag the image with a number. These tag lists will be printed out when you exit.
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)
Toggle in and out of "full screen mode" (make the image as big as it can be and still fit on the screen).
Toggle in and out of Presentation Mode (full screen, no mouse or window borders)
-, /
Zoom out, to half size
+, =, *
Zoom in, to double size o
Pop up a file selector to change the working file list (New replaces all the old images, Add just adds new files to the list)
Run gimp on this image (or set PHO_CMD to an alternate command).
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.

Keywords Mode

Keywords mode uses the same note flags that Pho has always had, but gives you an easier way to annotate a directory of images with strings. You can type in phrases for each note, and you can have up to 31 notes now, not just 10. If you use Pho to categorize your photos, you'll find Keywords mode very handy.

(By the way, if you want to do more serious tagging of images, you might be interested in my metapho app. As I started to extend Pho's Keywords mode even further, I realized that tagging and viewing were two different things, and rather than try to shoehorn real tagging into Pho I'd be better off starting with an entirely different user interface. Pho and Metapho work well as separate apps, and complement each other.)

In Keywords mode you can also type in a unique image comment for each image. Comments aren't tied to the numbered image flags -- each image has its own comment.

There's also a new slideshow mode, where you specify the interval in seconds (e.g. pho -p -s5 for a 5-second delay between images). You can use this for a screensaver, or just to go through slides automatically. Hitting the spacebar cancels slideshow mode.

You can now customize the command called up with the 'g' key. It defaults to gimp (not gimp-remote as in previous pho versions), but you can call any program you like, e.g. view the current image in firefox with export PHO_CMD="firefox %s" -- don't forget the %s for the filename!

Download: Getting pho

Latest source tree: Pho is now hosted on Github, and you can always get the latest source tree there, as well as file bugs or otherwise participate. Click on "Clone or download" for a download link -- unfortunately, GitHub only offers zip files, not tarballs.

Current released version: pho-1.0.tar.gz. (source tarball).

Ancient Windows binary (requires gtk+): (Thanks to Michael Schumacher!)

Mac users: Pho definitely does work on Mac OS X: my husband uses it frequently. You need the appropriate gtk/gdk headers and libraries. I've only seen it used as an X11 application, but in theory it should be able to run with the new experimental native gtk libraries too.

BSD users: pho should build just fine on *BSD if you have the required libraries. If it doesn't, please let me know.


pho uses the gtk+-2.0 libraries. You may need to edit the Makefile if your system has these libraries installed in different place from my system (sorry, no autoconf yet).

To compile pho, you'll need a C compiler such as gcc, plus gtk+, and all the libraries it depends on. For example, on Debian or Ubuntu, this command should get you what you need:

aptitude install build-essential libgtk2.0-dev

If you like pho, or if you think there's some feature it really needs ... let me know! Or file an issue on GitHub.


2020, pho-1.0:
I realized I never formally released 1.0. There have been a few minor changes since 1.0pre1, but nothing substantial. Basically, pho is stable, it does what I need, and hasn't had any feature requests in years.
2016, pho-1.0pre1:
Lots of changes, I need to update the web page before the final 1.0 release, but meanwhile you can check the git log.
9/5/2012, pho-0.9.8:
Finally! An actual release! Keywords mode; major work on more reliable scaling modes; swapped the meaning of f and F; lots of performance work since the last release.
4/10/2012, Pho 0.9.7-pre8:
Add captions/image comments (from David ) with -c. Improve scaling up from keywords mode (but some scaling issues remain). More aspect ratio fixing and code cleanup.
4/17/2011, Pho 0.9.7-pre7:
Fix aspect ratio of fullsize mode on vertical images; increase keyword dialog height, and add some keyword dialog reliability fixes; fix build warnings reported on Irix.
11/26/2010, Pho 0.9.7-pre6:
Much more reliable scaling code -- this (I hope) fixes the problems with aspect ratio upon rotation. New PHO_SCALE_FIXED mode: keep image's larger dimension <= the given size. Use PHO_SCALE_FIXED and .75 times the shorter dimension of the screen for Keywords mode. Alt+num toggles 10+num flag.
4/10/2010, Pho 0.9.7-pre5:
Fix a slew of subtle bugs involving going back and forward in the image list (e.g. when specifying nonexistent images). Add some information on how to test for regressions.
2/9/2009, Pho 0.9.7-pre4:
Fix a race condition involving the keywords dialog getting focus.
12/15/2009, Pho 0.9.7-pre3:
More cleanup of rotation/scaling, and transitions from one mode to the next.
9/26/2009, Pho 0.9.7-pre2:
Add ability to add new image files or change the list without restarting. Total cleanup/rewrite of rotate/scale logic. Remove old gtk1 code.
??/??/2009, Pho 0.9.7-pre1:
Clean up rotation code; List images with incorrect exif rotation; smarter PHO_CMD (can do other things, not just GIMP); don't go fullscreen from Ctrl-F in the keywords dialog. fix a minor Mac build issue.
11/9/2008, Pho 0.9.6:
RELEASE! The only difference from 0.9.6-pre3 is to change the default PHO_CMD command from gimp-remote to gimp, since gimp-remote is obsolete and no longer provided in Linux distros (and never was, on Mac or Win).
10/2/2008, Pho 0.9.6-pre3:
Change the list next/prev code to fix (I hope) a bug where pho would get confused and cycle from the last image back to the first.
8/13/2008, Pho 0.9.6-pre2:
Simplify exif/Makefile so it'll work on FreeBSD and other systems where make is non-GNU make.
8/11/2008, Pho 0.9.6-pre1:
Add Keyword mode. Add slideshow mode. Swap -f and -F. Add PHO_CMD environment variable. Lots of performance and stability work.
8/6/2007, Pho
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