The Unidentified Flying Raw (UFRaw) is a utility to read and manipulate raw
images from digital cameras. It can be used on its own or as a GIMP plug-in.

The Unix philosophy is "Do one thing, do it well".
UFRaw tries to take this idea to the extreme and "Do nothing", or at least
not do anything by itself.
UFRaw uses DCRaw to convert the raw files.
Little CMS takes care of the color management.
libjpeg/libtiff are responsible to saving the image.
The user interface is made up of GTK+ widgets.
GNUgetopt handles the command-line parameters.
Glib reads the XML formated UFRaw ID files and takes care of
compitablility issues.
NikonCurve handles the Nikon curve formats.
CurveEditor is used to edit the tone curves.

(In the last two points I'm cheating a bit since this code was written
specifically for UFRaw. My only excuse is that I did not write it myself.)

The sole role of UFRaw is to glue all the ingredients together to a
usable interface. At the moment there are two such interfaces - one
graphical and one command line.

Hopefully, UFRaw's interface will evolve to a full raw image workflow.
I think that the UFRaw ID files (*.ufraw) should be the backbone for this
workflow. One possible scenario for such a workflow is as follows:

-Create an input folder with the raw images.
-Create an output folder with an ID file for each image.
-Manipulate each image as need saving the manipulation data to the ID files.
-Convert all the images in a batch.

Version 0.5 of UFRaw should be able to handle such a workflow
where steps 1,2 and 4 are done from the command-line
and only step 3 is done with the graphical interface.

Existing tools like Nautilus, GQview, Gthumb and Digikam could be configured
or modified to handle the rest of the steps. It is also possible to add this
functionality to UFRaw - as long as one remember that UFRaw should "Do nothing".

Everything in UFRaw is written in C. I like to keep it this way but other
languages like C++ could be considered. I would not like to rely on "heavy"
artillery like Java or C#. Perl and other scripts could be used as
warpers, but not in the internals. UFRaw should be usable on all platforms.
MS-Windows users are not used to command-line interfaces (they don't know
what they are missing), still they should be able to use UFRaw's command-line
interface using Cygwin and maybe also MinGW.

Possible future features:

Exif support - there is partial support already using libexif. This support
should be enhanced, hopefully by making better use of libexif or other tools.
ExifTool seems to be the best tool in the market for handling Exif data of
raw files. Unfortunately it is written in Perl.

Zoom in/out - it is a part of the graphical interface that should be
added to UFRaw. This feature should open the way to other features
which are at the pixel level.

Noise reduction - UFRaw should not handle this by itself. It would be nice
if it could use some external package.

Sharping - Same goes here. Maybe use refocus.sourceforge.net.

Lens distortion - PanoTools or something equivalent should be used.

Cropping/Rotation - this basic manipulations could be handled by UFRaw itself.

Thumbnails - maybe thumbnails should be added to the ID files (remember that
ID files are text files). I think that this will enable one to write
a fairly simple and very responsive file manager.

Comments - image comments could be easily added to the ID files or to
the EXIF data.

Camera database - ideally UFRaw should not care what camera the image
came from, DCRaw takes care of it. In practice some camera features
effect UFRaw directly. It would be nice to have a database with
supported (or tested) cameras and features. One example of camera
specific feature in UFRaw is the WB presets.
