Multiple ways to get a list of image files into the program: command line args (with recursive glob), read from stdin, slideshow file, etc.

Manually navigate through the list of images.

Pan/scroll around an image if it is larger than the window.

Shrink an image.

Save and load a slideshow file (it is XML formatted).

Filter (grep) and order (sort) the list of images based on any metadata criteria.

Automatic slideshow mode: advances to next image every 2 seconds.

Execute an external command on the current image (for example, launch an image editor)

All metadata for each image are persisted when you save the slideshow file.

A number of commands, accessible via menus, for operating on the
slideshow file, the list, and the currently displayed item.
Many commands are also bound to keys, and some can be executed
via command-line switches.

Command line options: (NB - All of the following is subject to change!)

--grep pattern = filter the image list

--sort sortcode = order the image list

--byname = order the image list by file name

--bysize = order the image list by file size

--random = randomize the order of the image list

--first = jump to the first image in the list. Useful if any of the above are specified.

--input = read file specifications from stdin rather than getting them on the command line

--scale N = pre-scale all images. The default, 0, means full scale. 1 = 1/2 scale, 2 = 1/3 scale, etc.
You can think of it as the number of times you hit the - key.

--icon = start the gui in the iconified state.

--exit = exit, rather than lauching gui. still does all the data initialization.

Some of the commands accessible through the GUI:

PageUp / PageDown = go to previous/next image (loops around)

Up / Down arrows = scroll the image vertically

Left / Right arrows = scroll the image horizontally

+ / - = zoom in/out

F3 = Order list by file name

F4 = Order list by file size

F5 = Randomize the list's order

F5 = Reverse the list's order

G = Enter custom filter (grep) code

S = Enter custom ordering (sort) code

0 = Jump to the first image in the list

Delete = Remove the current image from the list

space = Select/unselect the current image (and go to next)

s = Save slideshow file as...

l = List slideshow to stdout

c = Copy list to the Clipboard

q = Exit

Escape = Exit

mouse Click+Drag on the image = move the image around in the viewport

mouse wheel = scroll up/down

and many more. See the actual menus for complete set.

List-oriented commands, such as s, l, and c,
operate on the entire list currently in memory, in its current order.
The filtering and ordering functions operations alter the image list.

Currently, very few operations are aware of the selected subset of images.
More are planned.

For the custom grep and custom sort operations,
the text you enter is whatever you'd put inside the curlies if you were writing a grep or sort block in perl.
$_, $a, and $b are filenames, as displayed in the window title bar.

Grep and sort can be invoked on the command line as well, via the --grep and --sort commandline options.
Multiple --grep and --sort options can be given; their effects will be cumulative.

Note that the sorting is stable: if the current sort operation's comparator finds no difference between two files ($a and $b), their relative ordering will remain unchanged.

Currently, this program has a number of unpleasant hacks for working on Windows.
It has only been tested on Windows, but my desire is for it to be cross-platform.
If you have any feedback on how well it doesn't work on another platform, please send it to me. I appreciate it very much.