Oxide is a NLE, compositing and animation engine, in a library providing abstractions on top of gggl. Oxide is designed around a hierachical (xml based) data model, that is intended to be applicable for other applications as well, it's origin is experiments towards a xml based catalog for the next generation gimp file format. Bauxite is an editor for the oxide format.
The compositing model used in the file format is linear lists of image processing operations, similar to the user interfaces usually found in graphics editors with layers.
The start or background image is located at the bottom of a list. Filters or layers are stacked on top of it. A simple processing list to rescale and save a png image would be represented in xml as:
<-- sample1.xml --> <oxide> <op type='png_save'> <property name='resource'>sample1.png</property> </op> <op type='scale'> <property name='width_px' >80</property> <property name='height_px'>60</property> </op> <op type='png'> <property name='resource'>png/romedalen.png</property> </op> </oxide>
Nodes accepting two image inputs; like porter duff operations and other layer modes, have a sub list as the secondary input.
<-- sample2.xml --> <oxide> <op type='png_save'> <property name='resource'>sample2.png</property> </op> <op type='over'> <property name='x'>0.2</property> <property name='y'>0.2</property> <op type='text'> <property name='string'>hello</property> <property name='font' >courier</property> <property name='size' >90</property> </op> </op> <op type='bcontrast'> <property name='brightness'>-0.3</property> <property name='contrast' >1.0</property> </op> <op type='png'> <property name='resource'>png/romedalen.png</property> </op> </oxide>
Clones similar to symbolic links are possible within the document using the special op type 'clone', referring to a numbered output id in the same document.
<-- sample3.xml --> <oxide> <op type='png_save'> <property name='resource'>sample3.png</property> </op> <op type='over'> <property name='x'>0.21</property> <property name='y'>0.21</property> <op type='clone' idref='text'/> </op> <op type='over'> <property name='x'>0.2</property> <property name='y'>0.2</property> <op type='opacity'> <property name='level' >0.4</property> </op> <op type='invert'/> <op type='text'> <property name='string'>hello</property> <property name='font' >courier</property> <property name='size' >90</property> <output id='text'/> </op> </op> <op type='png'> <property name='resource'>png/romedalen.png</property> </op> </oxide>
Free form directed acyclic graphs can also be used as elements in the compositing tree, this allows for multiple inputs to a single op,. clones are also allowed used within the graph
<!-- need a better graph based example,. perhaps blurring of Cb Cr components in ycbcr space --> <oxide> <op type='display'/> <graph> <op name='source'> <output id='69'/> </op> <op name='bcontrast'> <property name='brightness'>0.1</property> <property name='contrast'>1.4</property> </op> <op name='sink'> <input idref='42'/> </op> </graph> </oxide>
Using the xml elements sequence and clip, a time dimension is added to the project, a sequence element acts like the png image used in the earlier example lists ans has a list of clip elements as children. Clips have specified in and and out times indicating both the duration of the clip and a local timescale to specify animated properties in. bauxite did at some point support all oxide features including keyframe interpolation of properties.
<oxide> <op type='ff_save'> <property name='resource'>output.avi</property> </op'> <sequence> <clip in='0.0' out='250'> <op type='over'> <property name='x'>0.4</property> <property name='y'>0.4</property> <op type='opacity'> <property name='level'> <value time='0.0'>1.0</value> <value time='125.0'>1.0</value> <value time='250.0'>0.0</value> </property> </op> <op type='text'> <property name='string'>hello</property> <output id='42'/> </op> </op> <op type='blank'> <property name='width'>400</property> <property name='height'>300</property> </op> </clip> <clip in='0.0' out='250'> <op type='avi'> <property name='resource'>foo.avi</property> <property name='frame'> <value time='0.0'>0.0</value> <value time='250.0'>250.0</value> </property> </op> </clip> </sequence> </oxide>
Oxide is licensed under GPL.
look in ../files/ it is in the bauxite module.
The cvs repositorty is currently situated on pippin's laptop, the best glimpse into a semi synced up version is probably.