Open Brush File Format

The .tilt file format can also be parsed by the Open Brush Toolkit.

A .tilt is a zip-format file with a prepended header:

uint32 sentinel ('tilT')
uint16 header_size (currently 16)
uint16 header_version (currently 1)
uint32 reserved
uint32 reserved

Inside the zip, the strokes are stored in a custom binary format in a file, "data.sketch":

uint32 sentinel
uint32 version
uint32 reserved (must be 0)
[ uint32 size + <size> bytes of additional header data ]
int32 num_strokes
num_strokes * {
    int32 brush_index
    float32x4 brush_color
    float32 brush_size
    uint32 stroke_extension_mask
    uint32 controlpoint_extension_mask
    [ int32/float32 for each set bit in stroke_extension_mask & ffff ]
    [ uint32 size + <size> bytes for each set bit in stroke_extension_mask & ~ffff ]
    int32 num_control_points
    num_control_points * {
        float32x3 position
        float32x4 orientation (quat)
        [ int32/float32 for each set bit in controlpoint_extension_mask ]
    }
}

The orientation is that of the controller. Curve and surface frames must be reconstructed.

Stroke extensions:

Control point extensions:

Also inside the zip is "metadata.json", the metadata for the sketch in json format. Here are some of the fields that can be found there:

  • "Authors": an array of author names.

  • "SceneTransformInRoomSpace": the transform of the scene relative to the room.

  • "ThumbnailCameraTransformInRoomSpace": the transform used to generate the sketch as an array of:

    • translation (array of 3 floats)

    • rotation quaternion (array of 4 floats)

    • scale (single float)

  • "ModelIndex": an array of models imported into the sketch. Each model can have the following:

    • "FilePath": location of the model

    • "PinStates": an array to indicate whether each instance of the model should initially be pinned.

    • "RawTransforms": an array of transforms for each instance of the model.

Last updated