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 for 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.