An Image Organizer

Note: these notes are almost certainly inaccurate and incomplete. Feel free to give me feedback at davidATfriendlymoose.com.

Feast is an application for organizing collections of digital photographs. If you have a digital camera or a scanner, you soon find that you have a large number of pictures on almost any subject. One way of organizing them is to file them by topic, using a separate folder for each topic. However this doesn't work so well if you have many pictures on each topic. The idea in Feast is to allow you to move files around with a quick indication of how many there are in each folder, so that when you get too many in one folder, you know it's time to start a fresh folder. For example, instead of having one folder with a hundred pictures of your pet cat Fluffy, it will warn you when you get to 25 files, so that you can continue filing them in FluffyPlusPlus. Feast is a Java program, and in order to run it, you need a Java run time environment on your computer. You can download a JRE from http://java.sun.com/ under the J2SE area. You can fire it up with a command such as

"C:\Program Files\Java\jre1.5.0_06\bin\java" -Xmx100m -cp "blahblahablah\feast.jar" com.friendlymoose.feast.Feast

where blahblahblah is the location that you installed the JAR file containing Feast. You may also need to change the path for the java executable, depending on where you installed it.

Of course, in most cases you're probably better off using Picasa.

Here is an example screenshot:

I always prefer to use keyboard shortcuts, and the user interface is designed to work this way rather than in a more menu driven fashion. The top left hand corner is a folder browser. Image files in the currently selected folder are shown in the middle left panel, with the currently selected image in the panel on the right. The panel at the bottom left shows the folder assignments. Each folder is associated with a function key. When you press the key, the current image is moved to the folder. The number to the right of each folder shows the number of images in it. The colour changes according to how many images there are. So if you want each folder to have around 25 images, you could set up the colour so that it is green until there are 20 images, then orange for 20-24, and then red when you reach 25. The file types which are displayed are jpg, gif and jpeg.

To assign a key to a folder, right click on it in the folder browser and select the key assignment from the menu. To clear an assignment, click the folder name in the bottom left panel. The keys used to move files are the function keys f1 to f12. You can also use the digits 1 to 9, with 0 for f10, - for f11 and = for f12. Other key assignments are: delete to delete a file, enter for rename, insert to create a new folder, and escape to refresh the file list. The file list is normally refreshed on each action, but manually refreshing it is sometimes useful if you have added or removed files outside Feast. Refreshing can be slow if there is a very large number of files in a folder. Note that deleting a file normally happens without confirmation, and the file really is deleted rather than sent to the recycle bin, so once you've done it, it's final. If you want something like a recycle bin, assign one of the keys to a "junk" folder. File move operations can be undone using control-Z.

The File menu allows you to load and save all settings used by the application to a file. This happens automatically on starting and exiting the application, using the file Feast.properties in your home directory (e.g. C:\Documents and Setting\UserName for a Windows user logged on as UserName). You can explicitly specify the properties file by specifying the name on the command line. On the Settings menu, Random means that after a specified number of file operations, the position in the file browser is reset randomly, which can be useful if you want to get a sample of files from a folder. Confirm deletes prompts you before deleting a file. Colours brings up a table of the current colour settings. To change them, type in the "level", i.e. the count of files in the folder, and then click the cell next to it to set the colour. To remove a setting, just delete the text from the level entry.

Pin file list means that the file list in the middle left panel stays with the directory you currently have selected, even if you click on a different directory in the folder browser. List full paths causes the full path to be shown in the folder assignments. If you deselect this, only the last part of the name is displayed. File sort order allows you to change the order in which the files are listed.

You can also work with encrypted image files. This is largely experimental, and hasn't been tested much.

Feast is written in Java, and this imposes some limitations. Not being able to delete to the recycle bin is one (unless someone can tell me a portable way of doing it); another is the general ugliness of some of the user interface components. I have only tried it out on Windows 2000 with JRE 1.4.1 and Windows XP with JRE 1.5.

The licence of Feast is as follows. You may use it for any non-commercial purposes. You may not sell it or distribute it with a commercial product. You may not use it if you express opposition to software patents without having either been through the process of publishing a patent yourself or having placed significant intellectual property in the public domain. You may not use it if you are Richard Stallman. If you like it and get value from it, celebrate by going to work by bicycle, on public transport or by foot for one day more than you do normally each week.

Feast is not meant to be a good example of coding practice, user interface design, or anything else. I am releasing it on the off chance that it might be useful. Some parts of the code are loosely based on examples from various Java tutorials on Sun's web site; the folder browser was in part inspired by the code used in jV, but has been simplified, reworked and changed to give a better appearance.

What is it called Feast?

I wrote a similar application in Visual Basic called ImMoveAble (because it enabled you to move images). The Java version is the immoveable feast. Yes, I know, it doesn't make much sense.