Any text on a line that follows a # character is ignored, and can be used for commenting purposes


Frames must always begin with their name followed by a colon, and an empty line following the last layer.

#Frame starts with a name

#Frame is now finished

If the frame's name is prefixed by a ! character then it will not be generated as output, but may still be used as a reference within the DrawDown file.


Each frame should contain one or more layers. Layers typically start with a resource reference which can be an image in the source path (by default the location of the DrawDown file) or a previously defined frame.



You can also flatten all previously layers by adding 4 or more - characters instead of a resource reference. This will flatten all layers above it and can be useful when you do not want to create an intermediate frame. They can be followed by any of the normal processing commands.

------------     512x512        #Resize the combined layers to 512x512

Processing Commands

Processing commands are specified after the resource reference in a layer

Translate - x,y

Move the resource by the specified x and y co-ordinates

"logo"    50,50            #Move the logo 50 across and 50 up
Resize - widthxheight

Resize the resource to the specified width and height

"logo"    50x50            #Resize the logo to 50 by 50 pixels
Scale - factorx

Resizes the current resource by the specified factor

"logo" 3.5x
Colorize - $RRGGBB

Apply the specified color (given as hexadecimal RGB bytes) to the resource

"background"    $6688FF            #Tint the background blue
Opacity - opacity%

Make the layer transparent by the specified amount

"logo"        50%                    #Draw the logo at 50% opacity
Rotate - Ødeg

Rotate the layer by the specified amount

"logo"        35deg                #Draw the logo at an angle of 35 degrees
Trim - ||

Trims transparent pixels around the resource. This can be particularly useful after rotating a resource.

"logo"        ||        #Trim transparent pixels from around the resource
Crop - |x,y widthxheight|

Crops the layer starting at x,y to the size widthxheight

"logo"        |512,512 512x512|        #Crop to just the top right-hand quadrant
Mask - |resource|

Scales the supplied resource to the same size as the current frame, and then masks the flattened current frame with that mask

"background"    |mask-image|


It is common to want to specify a value once and re-use it through out a Drawdown file. Define instructions enable you do this. For example to specify and then use DrawDown blue you might do the following:


"background" $(DrawDownBlue)    #Use DrawDown blue
"logo"         35deg 50,50        #Add the logo

Specifying a constant -

Defines a constant that can be used subsequently in the DrawDown file. The value can be any string, and a direct text substitution is performed


Using a constant - (key)

Will replaced with the value of key

"background" $(DrawDownBlue)    #Equivalent to "background"   $6688FF

Special Defines

There are a small number of reserved constants that control the behaviour of the DrawDown processor. These are supported by command line parameters for the command line tool, and the user interface in the MacOS app, but in either case will be overridden if defined in the body of a DrawDown file.


Specify the path for source images.

<define:path=~/Pictures/>    #Use the user's Pictures directory to search for resources specified in layers


Specify the path frames should be saved to. For the command line app this defaults to the directory the DrawDown file is in, for the MacOS app it will use the path specified when Build All is executed.

<define:output=~/Desktop/> #Save frames to the specified location


Specify the default format to save frames as. This can be png,gif,bmp,jpg,tiff,ice, or icns. It defaults to png.

<define:format=jpg> #Save frames as jpg files


Specifies the method used for resizing. It defaults to fast which uses a nearest neighbour algorithm. Setting it to smooth will apply a linear filter.

<define:resize=smooth> #Resize using a linear filter


Specifies that guidelines should be drawn, intersecting at the specified coordinates. This only applies to the MacOS app.

<define:guide=50,50> #Draw guide lines intersecting at 50,50