Many designers and foundries like to offer trial versions of their fonts. Such fonts are often limited versions of the complete fonts, with a reduced character set and/or with a reduced set of features.

The FontToolsAn open-source library for manipulating font files with Python. module includes a very powerful subsetter which can be used to generate trial fonts. It provides several options to remove data from a font – from removing glyphs to OpenType features, kerning, hinting, font names, etc.

Using the subsetter in a script

RoboFont comes with FontTools as an embedded module, so you can use it in any script.

The example script below does the following:

  1. open a dialog to select an existing UFO font
  2. generate a complete OpenType font from the UFO
  3. close the font without saving any changes
  4. generate a trial font by subsetting the complete font
  5. remove the complete font
from fontTools import subset

font = OpenFont()
fullPath = font.path.replace('.ufo', '_Full.otf')
trialPath = font.path.replace('.ufo', '_Trial.otf')

# generate full otf
font.info.familyName += ' Trial'
font.generate(path=fullPath, format='otf', decompose=True, checkOutlines=True, releaseMode=True)
font.close()

# subset full otf
options = subset.Options()
# print(dir(options))
font = subset.load_font(fullPath, options)
subsetter = subset.Subsetter(options)
subsetter.populate(text='ABCDXYZ abcdxyz')
subsetter.subset(font)
subset.save_font(font, trialPath, options)

# delete full otf
import os
os.remove(fullPath)

# open generated trial font in UI to check
OpenFont(trialPath)

Using the subsetter in Terminal

If FontTools is installed in the system Python, the subsetter is also available in Terminal as the command line tool ftpysubset:

pyftsubset myFolder/myFont.otf --text='ABCDXYZ abcdxyz'

See the included --help for more information about each option.

pyftsubset --help
Last edited on 01/09/2021