Open Source Software


GTO is an open source file format designed for computer graphics. It was developed by Tweak Films to serve as the core storage format for our geometry and rendering pipeline. GTO is used by VFX and animation facilities, post-houses, and game developers for a wide variety of applications. It's small size and versatility make it useful for animation, modeling, particle dynamics and 3D paint. It can be used to replace file formats such as PDB/PDC, obj, and binary RIB.

At heart GTO is just a clean and optimal way of storing large, named, and organized arrays of binary data (although there is a text version of the file too). GTO naturally lends itself to a "least common denominator" role between computer graphics applications. The storage mechanism and the data layout are independent, so that the format can be easily adopted without regard to how the format is used by any particular application. The GTO library has bindings in C++ and Python making it relatively easy to develop custom tools to read, write and manipulate GTO files.

The GTO library includes the low-level reader and writer classes, a slightly higher level raw data reader/writer, and source code for a Maya scene and particle export, particle display, a Maya deformer to use GTO as a geometry cache, Houdini plug-ins, a number of command line tools, a Wavefront .obj parser (for a command line converter), and a Python module for reading and writing GTO files. The GTO reader/writer and tools have been tested thoroughly in feature film and game production on GNU/Linux and OSX as well as Windows XP, Vista, and 2000. GTO is also used as part of Tweak Software's commercial products.


GTO is still being developed. In the past, all development occurred at Tweak Films. However, since Tweak Films has gone into hibernation, that situation has changed: there are now a handful of organizations contributing to the project. We at Tweak Software are also continuing development (GTO is native file format for RV), and are coordinating with the other big users.

There is a new project -- which is currently in the design phase -- to create a higher level library on top of GTO to make geometry and other graphics related data even easier to deal with in an agnostic manner. The primary use target for this work will be simulation, modeling, and image processing applications. Two of the major goals will be to have machine verifiable correctness for data layout and the storage and retrieval of multiple arbitrary graphs connecting GTO objects.

Getting the Code

The official distribution and project pages can be found on google code on the OpenGTO page. The old SourceForge and Github distributions have been deprecated. Please use the OpenGTO site.

License Brief

The GTO library and included programs are provided under the terms of the BSD Licnese. This is a change, the previous versions were released under the GNU Library General Public License with exceptions for static linking. See LICENSE file in the source code for details.

If you extend, repair, or invent a new protocol for the GTO format and would like it incorporated in our tree drop us a line at some email address you can probably figure out. Or just drop us a line telling us you're using it (at the same email address).

Version History

  • Version 3.5.3
  • Version 3.4
    • The GTO license terms have been changed: the code is still covered by the LGPL, but with additional exceptions similar to those used by the FLTK library. These exceptions make it easier to use GTO in commercial projects.
    • The library no longer attempts to be source code compatible with older Microsoft compilers. Some functions may throw on error.
    • Bug fixes to the C++ Gto::Writer class for output of text GTO files.
    • Run-time error checking of the Gto::Writer API. The class will complain if the API is used in a undocumented manner. It may throw an exception.
    • The GTO source code distribution now comes with Maya and Houdini plugins for cached deforming geometry and particle export and display.
  • Version 3.2
    • Human readable plain text version of GTO. Some readers may not function if they assume that the property size is known when the property() virtual function is called. The property size is only really known when the data() virtual function is called. Only version 3.2 GTO readers can read the text version.
    • Animation curves are now stored per-object using the animation protocol.
    • Bug fixes to Gto::Reader class to allow reuse of existing class with a newly opened file.
  • Version 3.1
    • RenderMan plug-in documentation added.
  • Version 3.0
    • An interpretation string has been added to the property header.
    • An additional uint32 has been added as padding to the object, component, and property headers for future expansion slop.
    • A section on interpretation strings has been added to the documentation and to the reader/writer classes.
    • Added a type reference to the documentation.
  • Version 2.1
    • -gtofilter- was changed to optionally accept POSIX style regular expressions in addition to shell-like “glob” expressions.
    • The C++ writer class now defaults to writing compressed files when the open() function is called. A second bool argument can be passed to it to prevent the compression.
    • The proposed texture assignment protocol (from version 2.0.4) has been rejected.
    • A new protocol “channel” is introduced for assigning mapped surface varying data on geometry. An arbitrary number of texture maps may be assigned to the geometry.
    • The material protocol has been fleshed out.
    • The polygon protocol was missing the definition of the optional mappings component.
  • Version 2.0.5
    • Bug fix version. Repaired problems with the configuration scripts. Missing headers.
  • Version 2.0.4
    • Bug fix version. Some configuration problems solved.
  • Version 2.0
    • File headers changed. The format is not compatible with 1.0.
  • Version 1.0