views:

208

answers:

8

I would make crazy use of such a revision control. If it doesn't exist - where would to a good starting point for building one? I can probably make a lot of designs and interaction flows, but to implement it is another thing.

Would it be a good idea start by creating a macro to work with Adobe Photoshop / Illustrator? Or one of the online image editing tools?

Can anyone refer me to anyone working on one of the online image editing tools?

+1  A: 

Most revision control systems support binaries. You could easily use SVN or GIT to store binaries, i.e. pictures in.

Romain Hippeau
+4  A: 

Subversion is actually pretty good for version controlling binary files. It's just about the only great strength it has over, say, Git (as far as I'm concerned, anyway). See this answer of mine for a more detailed explanation of that assertion.

ImageMagick has a compare command that shows you the pixel-by-pixel difference between two RASTER images. Vectored images might be trickier (unless you can look at an SVG source and immediately see the resulting picture). Unfortunately this doesn't really help you with Photoshop/Illustrator though.

If you're working under Windows, TortoiseSVN has an image comparison utility too.

detly
Hi detly, I noticed that you mention CAD. Is that what AutoCAD uses? Subversion? Thank you for your helpful answer, Mei
meilas
I couldn't say, we don't use AutoCAD here.
detly
+2  A: 

Does PixelNovel count? PixelNovel is source control for Photoshop, and it looks like it's based on SVN. To be fair, it won't work outside of Photoshop and it seems to be a commercial product, but it has been done by someone, so I guess it's not too outrageous an idea.

Perrako
Gotcha, my bad. Added more information.
Perrako
Thanks Perrako. Good to know SVN has been used.
meilas
+3  A: 

How would you propose to diff and patch images? Figure that out and we can get right on it.

Does this even make sense? Is someone ever editing the upper left corner of an image while someone else is editing the lower right?

If you just want to see different "versions" of images with the same filename, that's trivial. Would get rather expensive on storage though.

jeremiahd
Yes, jeremiahd, this does make sense. Creative work works best when a lot of feedback and changes are made to the creative. Just like code.
meilas
@meilas - but it only makes sense if they are separable. If somebody changes every pixel in an image (eg color balance) then a RCS doesn't really help you combine that with somebody else changing every pixel to rescale it.
Martin Beckett
@Martin - I should probably illustrate what I mean by revision control for images, to clarify. I don't expect every aspect in code revision control to port over to image revision control. Interaction design time! yay.
meilas
@melias I mean does it make sense in the diff/patch/incremental-change model that is what is generally meant by version control. If someone makes the background color of an image different, and someone else adds a tree to an "older version" of that image, you need a way of representing those changes so that the person who added the tree can "pull in" the new background color while keeping their tree, or provide a way for them to choose both the new background color and the tree. I don't doubt that something like VC would be good for images, but the conceptual models do not seem to map exactly.
jeremiahd
@Martin @jerjemiahd - do you know of any helpful links that provide a good overview of code revision control?
meilas
http://en.wikipedia.org/wiki/Revision_Control http://svnbook.red-bean.com/ http://progit.org/book/ will give you a high level overview, and two thorough examples of currently widely-used VC systems.
jeremiahd
@jeremiahd that would be a really great idea. bc if my friend did something really great to a logo we were both working on - then it would save me a lot of time if i were to just be able to pull in the change that she made...
meilas
@melias the problem is that representing changes in binary files is not easy. You can't analyze a binary file in the same way as a text file, making diff and merge algorithms harder to create if not practically impossible right now. If we knew how to diff and patch (show the changes between two versions of one file and apply changes from one version to another, respectively) images, this would have been a solved problem long ago. If the image was stored entirely as metadata, it might be easier, but I'm not aware of any image formats (minus XBM icons, i guess) that are like that.
jeremiahd
@jeremiahd thank you,
meilas
@jeremiahd - SVG files are basically XML files, and can theoretically be diffed and merged via source control. There is still the problem of semantically conflicting changes, but that's a problem for source code too anyway.
detly
@detly good point. are you aware of any people working on merge algorithms for SVG files? It is a problem for source as well, but it's a much harder problem for images. Analysis is easier (and more thoroughly researched) for source due in part to a richer contextual environment, and I might be wrong, but I'm betting that most people aren't going to be wanting to to a textual conflict resolution on a bunch of svg paths ;) I'd definitely be interested to see work being done in this area though.
jeremiahd
@jeremiahd - no, I'm not aware of anything useful. Working on RabbitVCS I spent a bit of time recently researching potential diff tools for various file formats, but image diffs are still fairly prehistoric :P I can envisage how it could work, but of course coding it is altogether different...
detly
+3  A: 

Perforce is fairly commonly used in game development where image content may be included in source control. They have invested quite a bit of effort in handling this type of content very efficiently.

They also have visual diff tools. http://blog.perforce.com/blog/?p=1394

...and other graphics oriented plugins. http://www.perforce.com/perforce/products/plugins-p4gt.html

Oh, and apparently when used for content rather than just code, these types of tools are referenced as Digital Asset Management tools or DAMs rather than the SCM name with which most of us are familiar.

Rob Cooke
Thanks Rob. Links bookmarked :)
meilas
A: 

I was thinking about this for PhotoShop recently and I think the way to go it would be to store the command stack or a variation of it.

How this could be done I don't know. Presumably a plugin could access this data.

Perforce looks good for bitmap images

Rob Stevenson-Leggett
A: 

In general, you should investigate tools that provide digital asset management (DAM), which is what you might consider revision control in the media world. See, for example, http://thedambook.com as a gateway to such tools.

One popular tool is that mixes image editing and digital asset management is Adobe Lightroom. Adobe has been pushing the idea of recording a history of non-destructive edits and then applying them as a recipe on top of the raw camera data. You can create and name snapshots of different edited versions (perhaps a sequence of versions) and navigate between them in a visual manner. Apple Aperture may provide similar ability. Another professional tool is Canto Cumulus.

These tools don't preserve the "diff"-ability that other answers seem to be focused on, nor do they necessarily provide the ability to have commit messages. But, they do allow tracking of variations and association of image files back to their original components.

Emil
A: 

To manage binary formatted digital asset repositories, I use unison, and backups.

I decided that managing revisions did not make sense, but being able to keep multiple repositories in-sync did, and backups are a "no-brainer".

Unison gets overlooked too often, and although I discovered it about five years ago, I only recently identified it as the perfect tool for me in certain circumstances.

http://www.cis.upenn.edu/~bcpierce/unison/

Note however that vector images are a totally different story. SVG images can be manifested in complete plain text, where revision management would make perfect sense.

Docunext