@techreport{wei2010nonlinear, author = {Wei, Li-Yi}, title = {Nonlinear Revision Control for Images}, year = {2010}, month = {May}, abstract = {Revision control is a vital component of digital project management, and has been widely deployed for text files, such as documents and source codes. Binary files, on the other hand, have received relatively less attention as they tend to be less frequently used or revised. However, this might not be true for graphics applications, which could use a significant amount of binary data, such as images, videos, meshes, and animations. Existing strategies such as storing whole files for individual revisions or simple binary deltas could consume significant storage and obscure vital semantic information for individual edits. Furthermore, existing revision systems mainly keep linear history. Even though this could be sufficient for text files often with sequential semantics, linear history might be too restrictive for binary graphics assets as users could frequently perform nonlinear or semantically independent edits that cannot be faithfully represented by linear history. We present a nonlinear revision control system for binary graphics assets, focusing mainly on images as they are easier to visualize and more commonly used than other data types. We use DAG (directed acyclic graph) as the core representation, with DAG nodes representing image states and edit operations, and DAG edges indicating relationships between the nodes. A DAG permits parallel paths between state nodes, implying independent operations. This nonlinear DAG representation not only more faithful represents the semantics of image revision than sequential methods, but also allows flexible replay and exploration of past editing history. We describe design decisions and system implementation to achieve flexible behavior and good performance, and present an external user interface that facilitates easy and effective usage.}, url = {http://approjects.co.za/?big=en-us/research/publication/nonlinear-revision-control-for-images/}, number = {MSR-TR-2010-105}, }