ttfautohint

ttfautohint provides a 99% automated hinting process and a platform for finely hand-hinting the last 1%. It is ideal for web fonts and supports many scripts: Latin, Greek, Arabic, Devanagari, Hebrew, Khmer, Myanmar, Thai, and many more.

21st August 2021

This minor release adds support for the scripts Hanifi Rohingya, Nyiakeng Puachue Hmong, Medefaidrin, and Yezidi, together with some other, minor improvements that are briefly listed in the release notes as usual.

9th April 2019

Another bug fix release, version 1.8.3, correcting possible distortions for glyphs with complicated outlines. Mongolian support has been added as a new feature

Nore details on the changes can be found in the release notes.

24th July 2018

Today I'm releasing a bug fix release, version 1.8.2, mainly to make ttfautohintGUI compile again on homebrew. Georgian users might rejoice, however, since the only new feature is support of Mtavruli, which has been added recently to Unicode 11.

A list of the bug fixes can be found in the release notes.

1st January 2018

The new year starts with a new ttfautohint release, version 1.8.1! (Version 1.8 was not released due to a serious configuration bug found after publicly tagging the git repository.) Its main new feature is a third stem width and positioning mode, ‘natural’: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its ‘light’ (auto-)hinting mode.

Another important improvement is the possibility to manually override stem widths for the hinting process. This is especially useful for extra-bold fonts, where the algorithmically derived values are often too large, causing the filling of ‘eyes’ in glyphs like ‘e’ or ‘a’ at small sizes.

Finally, ttfautohint gets now installed as a library also (if you use the Unix toolchain for building and installation).

The complete list of changes can be found in the release notes.

26th August 2017

This release mainly brings support for a bunch of new scripts: Adlam, Avestan, Bamum, Buhid, Unified Canadian Syllabics, Carian, Chakma, Coptic, Cypriot, Deseret, Glagolitic, Gothic, Kayah Li, Lisu, N'Ko, Ol Chiki, Old Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai Viet, Tifinagh, Vai – many thanks to Sascha Brawer who contributed most of the code!

Other, minor changes are described in the release notes.

27th November 2016

The long overdue version 1.6 is finally out! Its main new feature is the support of a reference file from which all blue zone values are taken. Besides that, a large bunch of new scripts has been added: Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, Kannada, Malayalam, Sinhala, and Tamil.

A more detailed list of changes can be found in the release notes.

24th January 2016

I've just released version 1.5, which mainly brings support for some new scripts: Khmer, Mynamar, and Bengali (and more Indic scripts to come in the next release). Information on other changes and bugfixes can be found in the release notes.

18th October 2015

Due to a serious bug in applying control instructions to accent-like glyphs, it was necessary to release version 1.4.1 (containing no other noteworthy changes). All users should upgrade.

5th October 2015

Version 1.4 is out! It now supports hinting for fonts providing glyphs for Lao, Thai, and Arabic, among other things. It also fixes an annoying buglet for the ‘touch’ keyword as used in control instructions files.

As usual, you can find more information in the release notes.

7th January 2015

I've released version 1.3. Besides support for Telugu, there is a new facility for testing parameters of ttfautohint in parallel.

Please read the release notes for more.

7th October 2014

Since yesterday, version 1.2 is available for download. The most important change is a new possibility to fine-tune the hinting process at a low level.

Other improvements are covered here as usual.

7th May 2014

Version 1.1 is now available. The main new feature is support for the Devanagari script – please test!

In case you need hinting for GDI ClearType, you should upgrade to this version, since some bugs related to stem width computation were identified and fixed. As usual, the complete list of important changes can be found here.

27th March 2014

The Windows binary of ttfautohintGUI version 1.00 didn't work standalone, as intended. Please download it again (the new .7z archive has 26-Mar-2014 as the date and a size of 3278316 bytes).

Version 1.0 has been released

22nd March 2014

Finally, the long-awaited version 1.0 is here! Compared to the 1.00rc1 release, the memory management has been improved to avoid excessive allocation under certain circumstances. Support for symbol fonts has been fixed also.

As mentioned earlier, GDI ClearType hinting is now much better. However, I missed to show comparison images, which I now do. The top and bottom images (showing Ubuntu regular processed with ttfautohint) are the output of an older and the current version of ttfautohint, respectively.

A magnified screen snapshot of GDI hinting
                      created with an older version of ttfautohint A magnified screen snapshot of GDI hinting
                      created with version 1.0 of ttfautohint

The ugly flat tops and bottoms of round shapes are gone.

older news

Introduction

Werner Lemberg is making it easy for type designers to create web fonts that look great on Windows, with ttfautohint.

Hinting TrueType fonts can be a slow and expensive process, and many fonts lack good hinting totally because they are converted to TrueType from another font format.

ttfautohint solves this, by building on FreeType's auto-hinting system. It brings the excellent quality of FreeType rendering to platforms which don't use FreeType, yet require hinting for text to look good – like Microsoft Windows.

Across Windows rendering environments today, ttfautohint fonts look best with DirectWrite ClearType enabled. This is the default for Windows 7 and newer. Good visual results are also seen in recent MacOS X versions and GNU/Linux systems that do use FreeType for rendering.

The main part of the project is a code library, libttfautohint, which is described in here. There are utility programs with both command-line and GUI interfaces, ready to use today.

The goal of the project is to generate a ‘first pass’ of hinting that font developers can refine further for ultimate quality.

animated dollar glyph of LiberationSerif-Regular

The animation above shows how the hints created by ttfautohint get applied to the dollar glyph of Liberation Serif Regular at 19 pixels per em, using FontForge's TrueType hinting bytecode debugger. (You can view the image directly to see it in original size.)

Roadmap

The project started in 2010 when Dave Crossland suggested the idea of the program. Werner was able to start development thanks to financial support from the Google Web Fonts team.

He soon produced results that received some warm attention from professional type designers.

Hinting TrueType fonts is a very time consuming and expensive process for type designers. Producing high quality hinting for most glyphs in a font, and allowing them to fine-tune the results by hand will simplify the lives of all type designers. This little program is set to improve the quality of web typography!

The TODO file in the source code repository provides an extensive list of things which will be eventually handled in one or another way. Here is a short list of essential items:

  • Improve the way you can fine-tune the results – you can already control blue zones and stem widths together with delta instructions and other details of the hinting process, but there are certainly aspects that could be improved further. If you have feedback for this feature, please send an e-mail to Werner Lemberg.

  • Add hooks for other tools – to allow smooth integration with various font editors. Some of them already support a direct call of ttfautohint, but more has to be done, especially for fine-tuning blue-zones and the like.

  • Emit the actions in the high-level hinting command languages – those used in other tools, such as Visual TrueType (VTT) or FontLab, instead of only emitting final low-level bytecode. This will allow designers to fine tune the results by hand – essential for those tricky glyphs that require intelligent decisions by a human

Visual Samples

The late Vernon Adams helped in providing comparison images, testing the output of various browsers on different platforms. For this purpose, he used his excellent framework for testing browser fonts. Some of them are shown below.

You should look at the images without any zoom so that your browser doesn't rescale them.

Ubuntu Regular, Windows DirectWrite ClearType (as rendered by Firefox on Windows 7). Left the original, manual hinting, right the hinting applied by ttfautohint:

Ubuntu Regular, Windows DirectWrite ClearType,
                      original hinting Ubuntu Regular, Windows DirectWrite ClearType,
                      ttfautohint hinting

Ubuntu regular, GDI ClearType (as rendered by Chrome on Windows 7). Left the original, manual hinting, right the hinting applied by ttfautohint:

Ubuntu Regular, Windows GDI ClearType,
                      original hinting Ubuntu Regular, Windows GDI ClearType,
                      ttfautohint hinting

Bitstream Vera Sans, Windows DirectWrite ClearType (as rendered by Firefox on Windows 7). Left the original, manual hinting, right the hinting applied by ttfautohint:

Bitstream Vera Sans, Windows DirectWrite
                      ClearType, original hinting Bitstream Vera Sans, Windows DirectWrite
                      ClearType, ttfautohint hinting

Bitstream Vera Sans, GDI ClearType (as rendered by Chrome on Windows 7). Left the original, manual hinting, right the hinting applied by ttfautohint:

Bitstream Vera Sans, Windows GDI ClearType,
                      original hinting Bitstream Vera Sans, Windows GDI ClearType,
                      ttfautohint hinting

DroidSerif Regular, Windows DirectWrite ClearType (as rendered by Firefox on Windows 7). Left the original, manual hinting, right the hinting applied by ttfautohint:

DroidSerif Regular, Windows DirectWrite
                      ClearType, original hinting DroidSerif Regular, Windows DirectWrite
                      ClearType, ttfautohint hinting

DroidSerif Regular, GDI ClearType (as rendered by Chrome on Windows 7). Left the original, manual hinting, right the hinting applied by ttfautohint:

DroidSerif Regular, Windows GDI ClearType,
                      original hinting DroidSerif Regular, Windows GDI ClearType,
                      ttfautohint hinting

Finally, here the font files used in the samples above so that you can compare the hinting results by yourself.

Note that the fonts were generated with version 1.00rc1 of ttfautohint (using default settings); they were also manually edited with ttx to change the font names so that it is possible to use the original versions and the versions processed with ttfautohint in parallel.

Recently, Jasper de Waard completed his Proza Libre font family, using ttfautohint for hinting, which he documented both in a blog and a video.

Matt Wiebe has tested the font VAG Rounded with a very early version of ttfautohint; he presents the results on his blog.

How It Works

A detailed description of the auto-hinter inside FreeType can be found here. Although these web pages are in need of an update, the basic principles of the auto-hinting process haven't changed. There is one exception: The auto-hinter no longer tries to provide good hinting for monochrome rasterization. Instead, it expects anti-aliasing with 256 gray levels, which became standard with Windows 98.

A scholarly paper published in the EuroTeX 2003 proceedings, titled Real-Time Grid Fitting of Typographic Outlines, gives further insight into the auto-hinting system's inner workings.

In the above links, one aspect of the auto-hinting process is missing: The various steps performed by the auto-hinter (called actions) can be described as high-level operations, for example “aligning a given edge to a given blue zone,” or “linking this edge to another one within a given distance.” The ttfautohint library hooks into these actions and transforms them into bytecode routines.

Similar to most TrueType hints, the autohint actions depend on the device resolution. Consequently, ttfautohint walks over a large range of ppem values (8 to 50 ppem by default) and collects the actions as sets. A typical glyph outline needs three to four sets (covering the whole range), but sometimes more than ten are necessary.

Intentionally, ttfautohint adds hints only along the y-axis. The Anti-Grain research describes some of the reasons behind this decision. While the article is quite old, the mentioned ideas are still valid.

The ttfautohint library contains a copy of FreeType's ‘autofit’ module, reformatted and using a different function prefix, and with slight extensions for hooks into hinting actions. It therefore inherits the same dual-licensing as FreeType; you can choose between the GNU Public License (GPL) Version 2 and the FreeType License (FTL).

Contact

Werner Lemberg (wl@gnu.org) is Technical Lead, and does all the programming. He is a professional classical musician and lives in Salzburg, Austria.

Dave Crossland (dave@understandingfonts.com) is the Project Manager, and wrote and art directed the promotional video at the top of this page. He is a professional type designer and lives in New York City, USA.

Andy Ellis (hello@fadeinfadeout.co.uk) designed and produced the promotion video. He is a professional motion graphic designer and lives in London, England.

Download

Current version: 1.8.4 (21st August 2021)

Binaries

These stand-alone versions of ttfautohint and ttfautohintGUI don't have any dependencies and can be run directly after uncompressing the archive.

Windows
ttfautohint 1.8.4 – both command line and GUI.

Apple
ttfautohint 1.8.4 – currently command line only. This universal binary for the i386 and x86_64 architectures has been compiled under OS X 10.7.5 and should run with newer versions also. Read this page how to get the GUI version.

Source Code and Documentation

The latest source package of ttfautohint, including documentation in HTML, PDF, and text format, can be downloaded either from Savannah or from SourceForge.

The documentation is available online also.

All development takes places within a public git repository; see the repo.or.cz repository homepage for details.

Note: Prerequisites for compiling the library is FreeType version 2.4.5 or newer and HarfBuzz version 2.4.0 or newer; see FreeType's download page and HarfBuzz's download page for more information.

Compile ttfautohint for Mac OS X, including the GUI.

This page is maintained by Werner Lemberg.