GIMP Paintbrush File Format
The GIMP Paintbrush File Format Version 1 (.gbr)
Based on examples and code, it seems that v1 is like v2, but it is lacking bytes 20 - 27 (no magic or spacing info), and thus having as last header field:
Bytes 20 - (header_size - 1): Type: char * Value: undefined encoding string - name of brush
GBR v1 is deprecated and should never be used to save new brushes.
The GIMP Paintbrush File Format Version 2 (.gbr)
Bytes 0 - 3: header_size: Type: 32 bit unsigned int Value: size of brush header (28) + length of brush name Bytes 4 - 7: version Type: 32 bit unsigned int Value: The file format version. Bytes 8 - 11: width Type: 32 bit unsigned int Value: Brush width Bytes 12 - 15: height Type: 32 bit unsigned int Value: Brush height Bytes 16 - 19: bytes Type: 32 bit unsigned int Value: Colour depth of brush. 1 = greyscale, 4 = RGBA Bytes 20 - 23: magic_number Type: 32 bit unsigned int Value: GIMP brush magic number. ('G' << 24) + ('I' << 16) + ('M' << 8) + 'P' Bytes 24 - 27: spacing Type: 32 bit unsigned int Value: Default spacing to be used for brush. Percentage of brush width. Bytes 28 - (header_size - 1): Type: char * Value: UTF-8 string - name of brush
Size: width * height * bytes Type: uchar * Value: Pixel values (row-first) for brush
The GIMP Paintbrush File Format Version 3 (.gbr)
This changed GIMP brush format was introduced by the FilmGimp or CinePaint developers without notifying the GIMP developers. We’ve added support for reading these brushes. The format is very similar to version 2 but uses the bytes field as a data format identifier. It seems the only format identifier in use is 18 which corresponds to 16bit floats. If you encounter brushes with a different data format, please let the GIMP developers know.