GSoC: How is digiKam’s non-destructive editing? (This time with pictures!)
Hi everybody,
long time no blogging. Time to fix this bug.
So...without any long prologues - (hold your breath now) - it's working! (Say WOW™). But how well does it work you ask? Pretty good! Ok ok, let's get some overview.
You open some image in digiKam's image editor, you add some filters, do some transformations, use some color-altering-stuff until you're satisfied with your creativity. Then you simply close the editor, autosaving kicks in, and bam, you have new version of your original image, which stayed completely untouched. Available versions can be then viewed/switched in the new sidebar widget (see pic below). The sidebar allows you to display all the available versions either as a simple list or as a tree, which is basically the same list with padded entries to reflect the relations between the images. Later it will also be possible to do some file operations in the sidebar, like Copy/Move/Remove etc. In the main view with thumbnails, (sub)versions are now marked by an (ugly) icon as you can see in the screenshot below, but I'm looking forward to hear your ideas about how to mark them in some better way (of course it will be on/off switchable). Let us hear your ideas or see your mockups!
You can set in the options to have only the latest selected version visible in the main digiKam view, or to have all of them visible and viewable all the time. In the first case, you select the image, then in the sidebar you select which version do you want to see/edit/work with and the pics get switched. Simple as that. They are all physically in the same folder, with the same filename but with "_v1" appended for the first version, "_v2" for second etc. So yes, the versions are complete images, just like in F-Spot versioning. The image's versions are saved in the original image format, except RAW (of course) - format for storing RAW versions is settable in the Settings, for now it's possible to do the saving in PNG or JPG.
Next new thing is list of all used filters/transformations/effects on a particular image. This is part of the new right sidebar tab. So you can see what modifications you did to the selected image. This comes very handy in the Image editor. You apply some filter, it will show up in the new sidebar. When you press undo, the last entry will get a 'disabled' look, so you know what was undo-ed. Also when you press redo, the entries will get 'enabled' accordingly. Then when you have a bunch of disabled entries and you apply some new tool, the disabled entries will get lost and they will be replaced by the new applied tool, just as you would expect. So in short, in image editor this list presents a visualised undo/redo list. In the future I'd like it to be able to dynamically switch any entries on or off to see how would the image look and also to change the used values for particular filters. Basic foundations for this are already laid down. This will later also allows you to take one set of modifications and apply it to any other images.
In the image editor, the 'Save' button is now replaced by 'New version' button. By default, when you're editing again some already created version, not the original image, the changes are saved back to that version. The new version file is created only in case you're editing the original. So, when you're editing some version of the original image and you want to have the changes in a new image (and preserve the old version), that's what the 'New version' button is for. It will create a 'subversion' of the current version. Another use is to open the original, modify, click 'New version', click 'Revert', do another set of changes, click again 'New version' and this way you can quickly create several versions off of the original image and after closing the Image editor, see them all next to each other.
And now you probably ask "When can I get all of this?" Currently it's all in KDE's svn repository along with Aditya Bhatt's Face recognition and Gabriel Voicu's Geotagging features and you can 'svn co'-it and build it yourself, but it's moreless an alpha quality code. This GSoC branch will be based on the soon-to-be-released 1.4 version and will be tagged as a 2.0 version around this Christmas.
We have a Coding sprint ahead of us in Aix en Province, which I'm attending and very looking forward to. We'll discuss & work on the whole GSoC work, on some new ideas for digiKam and do improvements here and there. If you have some ideas, mockups, patches or simply something worth discussing during the sprint, just join the digiKam devel mailing list and shout :)