Skip to content

Working with Font Variations»

In FontLab, the entire process of working with multiple masters, interpolation and instances is called Variation, and any font or glyph that can produce instances through interpolation is variable. See Variations for a general introduction to the concept of variable fonts, axes, masters and instances.

If your font has multiple variable masters, you can:

  • Preview the interpolation process dynamically using the Variations panel. The dynamically interpolated instance is always available in the Layers and Masters panel as the #instance layer.
  • Use Font > Generate Instance to interpolate an instance, and insert it as a predefined instance or a master into your font, or create a “static” (single-master, non-variable) font that you can later post-process and export.
  • Use File > Export Font As to export all font masters or all predefined instances into a final “static” font format such as OpenType PS (.otf).
  • Use File > Export Font As to export your entire variable font into a variable font format such as Variable TT (.ttf).

In FontLab, Variations panel is the primary place for controlling Variations. In the Variations panel, you can see all your axes, as well a visual/spatial representation of the design space, including the position of masters. Here you can also create a dynamic instance. You can use the Preview panel alongside to see how your glyphs look when you move the dynamic instance you have created. If you’re working in a variable font, Layers and Masters panel shows a list of all your masters and the dynamic instances. Finally, the Font Info dialog is where you can add, delete and manage the axes, masters and predefined instances of your variable fonts.

Working with axes»

Adding an axis»

To add an axis to a font:

  1. Open the Font Info dialog File > Font Info.

  2. Select Axes in the left sidebar.

  3. Click the + button and choose one of the common axes: weight, width, optical size, slant, italic, contrast, serif, grade, x-height, scale and tracking, or choose the custom axis. If you added a common axis, we recommend that you keep the name, code and tag, but you can edit other properties. If you added a custom axis, set your own name, code and tag.

Editing axis properties»

Each axis has the following properties:

  • Axis name: Human-readable name for the variation axis. Case insensitive, will be title-cased on export into variable fonts
  • Axis code: 2-letter code used inside FontLab to specify locations of masters and instances
  • Axis tag: 4-letter tag used in variable OpenType fonts (fvar table). Choose a common axis to use a registered or popular tag, use an all-uppercase tag for a custom axis
  • Axis is hidden from UI toggle: if this is on, apps that use variable OpenType fonts will hide that axis from their user interfaces. This does not hide the axis from the FontLab user interface.
The Axes page of Font Info lets you edit axis properties
The Axes page of Font Info lets you edit axis properties

To edit axis properties, open the Font Info dialog File > Font Info, select Axes from the left sidebar, and edit the values for the appropriate axis.

Removing an axis»

To remove an axis, select it in the list and click the - button.

Implicit weight and width axes»

Preferences > Variations has a checkbox with a dropdown: Guess [width | weight | width and weight] axis location from master style attribute or layer name.

Turn the checkbox off, and you’ll always need to explicitly define the Weight and Width axis when you have multiple masters.

Turn the checkbox on and choose one of the dropdown options, and FontLab will use the Font Info > Names > Weight and Font Info > Names > Width style attribute values to dynamically build the weight and/or width axes, and to infer the location of the master on those axes — even if these axes are not defined in Font Info > Axes. FontLab also makes glyph layers work as font masters if the glyph layers use names such as Regular, Bold or similar (using one of the registered weight or width keywords) — even if these font masters are not defined in Font Info.

Note

If you’re exporting a variable font and the Output panel reports errors like KeyError: : 'wght' when you export an OpenType Variations font, turn the checkbox off.

Working with masters»

If you want to interpolate along an axis, you need at least two font masters with different coordinates for that axis. FontLab Studio 5 allowed only two masters per axis (one for the minimal coordinate, one for the maximal coordinate) — and all instances were interpolated between these extreme coordinates. In FontLab, however, you can have any number of masters at different coordinates, for any given axis.

For example, you may choose to design three masters for your weight axis. The axis location of each of those masters would need a different coordinate for the wt axis. For example, your Thin master could have the location wt=200, your Medium master wt=500, and your Bold master wt=700. If you then define a Semilight instance to be derived at wt=300, it would be interpolated between the Thin and Medium masters. Design-wise, his instance would lie at ⅓ visual distance away from the Thin master (because (300–200)/(500–200)=⅓). Similarly, if you define a Semibold instance with wt=600, it would be interpolated between the Medium and Bold masters at a distance that is visually halfway between them (again, because (600–500)/(700–500)=½).

Apart from font masters, which are a complete font at a given axis location, you can also have font-less masters in a variable font. A font-less master is an additional master that contains the design for one or more particular glyphs, at an axis location where a font master does not exist. Font-less masters can be used to correct interpolation results for particular glyphs, but unlike font master, they do not contain font-wide information.

Adding a font master»

To add a new font master:

Open the Font Info dialog File > Font Info.

Click the + button in the bottom-left, and pick one of the entries from the dropdown that appears.

Choose Duplicate master, copy glyph layers to duplicate the current font master entry, the current masters’s glyph layers for all glyphs, kerning classes and the kerning pairs list and values.

Use this if you’ve finalized the design of the current master and you want to derive a new master from the current one for all glyphs (for example making a condensed or bold variant). The new master will have the same axis coordinates as the source master, you should change it on the Masters. Rename the master on the Names page.

Choose Duplicate master, blank glyph layers to duplicate the current font master entry and kerning classes, and create glyph layers for all glyph with the same advance widths as the current master’s, but without any contents (elements, contours or images). This does not create any kerning pairs.

Use this if you have not finalized the design of the current master and plan to draw contours in several masters concurrently or copy-paste between layers.

Choose Duplicate master, no glyph layers to duplicate the current font master entry and kerning classes but without creating any glyph layers or kerning pairs. Change the name of the new master on the Names page. Then select one or more glyph cells in a Font window, click the + button on the Layers & Masters panel and enter the same name as the new master. The new layer will appear in the panel only in glyphs where you created it.

To only make a few glyphs variable, for example along the Ascender axis, you can add a “long ascenders” font master without glyph layers and then add glyph layers only to the glyphs that actually change.

Choose Empty master to create an empty font master with no glyph layers, no kerning classes and no kerning pairs.

The Copy from entries list all currently open fonts and (in submenus) their masters. Choose one to copy glyph layer contents, kerning classes and kerning pairs from another font and master into a new master in the current font.

When you copy a master from another font and the Add missing glyphs when copying from font checkbox in the dropdown is off, FontLab will only copy glyph layers and kerning for glyphs that exist in both fonts.

To add all glyphs that are present in the other font but not in the current font, and to copy all glyph layer contents and kerning from the other font and master into the new master, click +, turn the option on, click + again and choose Copy from a font and master. Note: This will create additional glyphs in the current font, but will not create additional glyph layers in the masters of the current font for glyphs that are not present in the source font.

Editing font master properties»

You can edit the properties of any font master in the Masters page of the Font Info dialog.

Add font masters and assign them a design location on each axis
Add font masters and assign them a design location on each axis
  1. To edit the name of a font master, open File > Font Info > Masters, double-click the name in the masters list and type a new name. Click Apply and FontLab will rename the font master and all glyph layers that are associated with the font master. You can also change the master name in the Names page of Font Info.

For editing all other font master properties, open the Font Info dialog File > Font Info and select Masters in the left sidebar. Here, select the master from the list on the right.

  1. To edit the design attributes (weight class, width class, slope class) of a font master, use the dropdown menus that follow the title Attributes to select the appropriate value. You can also switch to the appropriate master in the bottom-left section of the dialog and use the Names page to edit these attributes. FontLab uses the design attributes of the main master when exporting a variable OpenType font, and uses the attributes of the master when exporting masters or the current layer. When exporting static instances, FontLab uses the design attributes set in the Instances page.

  2. To edit the location of the font master on the axis, enter a new value in the Location field. Make sure that the numeric value is preceded by the two-letter axis code and the equal sign. You can also update the location by clicking the dropdown menu named after the appropriate axis and selecting a value.

  3. To select which master will be default, mark it with the blue radio button in the list. Choose the default master carefully — FontLab will use the if you generate a variable font with TrueType outlines, and it is used in an old environment that does not understand variable fonts, the font will just show up with the outline of the default master.

  4. Finally, you can click the blue AAA icon associated with a master to exclude it from interpolation. When a master has been excluded from interpolation, you see a grey dot in the place of the icon.

Removing a font master»

To remove a font master, select it in the list on the bottom right of the Font Info dialog File > Font Info, and click the - button below the list.

Working with instances»

An instance is a “snapshot” of the interpolation process at a chosen location within the design space. In FontLab, you can have two types of instances: predefined or virtual. A predefined instance is a location in the design space, defined by one coordinate per axis. It is not a real font, but a “plan” to create a real font. When you export a variable OpenType font, predefined instances are stored in the font as “named design space locations”. However, to the end-user, choosing a predefined instance of a variable font (in apps that support variable fonts, such as Adobe Illustrator CC 2018, Adobe Photoshop CC 2018, Apple Keynote or Apple Pages) feels very similar to choosing different styles in an extended font family. A dynamic instance is not a real instance, instead you can use it to see how glyphs look at any particular position in the design space.

Defining axis instances»

Each axis can contain several named locations (axis instances). In a font with multiple axes, you can produce a list of predefined instances as a combination of all axis instances. FontLab also exports the axis instances into a variable font as a STAT (style attributes) table. The STAT table is a mandatory table in variable OpenType fonts, and future apps may use to let end users select instances from a series of per-axis lists of axis instances, instead of presenting end users with a huge list of predefined instances.

You can define axis instances in File > Font Info > Axes using a simple syntax:

AttributeName1=DesignLocation1, "Attribute Name 2"=DesignLocation2`, ...

Style Phrase»

The "Attribute Name" can have three forms:

  • Multiple words like "Extra Black". This form needs quotation marks, and will be used to build the style name of the instance.

  • A single word like Light. This form does not need quotation marks, and will also be used to build the style name of the instance.

  • Word in parantheses, like (Regular) or (Normal). When the Style phrase is in parantheses, it will be omitted when building the style name of the instance. This makes sense when you use several axes, and you wish the instances with the “normal” width to have style names like “Light”, “Black” and not “Light Normal”, “Black Normal” — you’d define the Axis instance for the normal width using the Style phrase (Normal). But then, the fonts with the condensed width should have style names like “Light Condensed”, “Black Condensed” — so for the condensed width, you’d define the Axis instance using the Style phrase Condensed (or “Condensed” in quotes).

DesignLocation»

The DesignLocation is a number that corresponds to the location of the axis instance on the axis using the axis location “design coordinates”, that is, the coordinates that you, as the designer, use inside FontLab for defining the location of the masters, or when using the sliders in the Variations panel. The progression of the locations in design coordinates is always constant, and the scale can be anything you want — for example, you can set the Light master to have the design location 0 and the Black master to have the design location 1000, but you can also use numbers that correspond, for example, to the thickness of the vertical stems of the letter “n” in font units.

UserLocation»

FontLab VI allowed you to use the extended axis instance syntax "Style phrase" UserLocation=DesignLocation. This syntax is no longer used. Instead, you can define the mapping from design coordinates to user coordinates using the Axis Graph. This mapping is not used when you export static instances, it is only used when you export variable OpenType fonts. FontLab writes the mapping into the OpenType avar table. This is important for the Weight axis and other registered variation axes. The Weight axis in variable fonts must follow traditional weight numbers (the Regular style must be at 400, Bold at 700, Light at 300 etc.). But as a designer, you may prefer a non-linear progression of the interpolation. The Axis Graph dialog lets you create such non-linear mappings.

You can work with just design coordinates, but for variable OpenType fonts, you also need a mapping to user coordinates
You can work with just design coordinates, but for variable OpenType fonts, you also need a mapping to user coordinates

Axis Graph»

Click on the Axis Graph button to change the axis range (minimum and maximum value) for the design coordinates, which is used inside FontLab for extrapolation and the scale of the Variation panel sliders.

Change the axis range in the Axis Graph
Change the axis range in the Axis Graph

In the Axis Graph, you can also map the design coordinates range to the user coordinates range.

Map the design coordinates range to user coordinates range in the Axis Graph
Map the design coordinates range to user coordinates range in the Axis Graph

The user coordinates range can be identical to the design coordinates range (if use interpolation values identical to the values that the variable OpenType font will use). And the mapping can be fully linear.

Add font masters and assign them a design location on each axis
Add font masters and assign them a design location on each axis

Define non-linear mapping in the Axis Graph, by manually or automatically adding “breakpoints” for the mapping. All variation sliders in FontLab work on the design coordinates, so you won’t see the non-linear behavior. The Axis Graph mapping does not affect the export of static instances, but when you export a variable OpenType font, FontLab will write this mapping to the avar (axis variations) table.

Add font masters and assign them a design location on each axis
Add font masters and assign them a design location on each axis

Adding a predefined instance»

To add a predefined instance from scratch:

  1. Open the Font Info dialog File > Font Info, and select Instances in the left sidebar.

  2. Click the + at the bottom of the list of instances. A default instance will be added as a result.

To add predefined instances from masters:

  1. Open the Font Info dialog File > Font Info, and select Instances in the left sidebar.

  2. Click From Masters at the bottom of the list of instances. As a result, the list of instances will be populated with font masters.

To add predefined instances from axes, you need to first define them in the Axes section of the Font Info dialog:

  1. Open the Font Info dialog File > Font Info, and select Instances in the left sidebar.

  2. Press the From Axes button. All the instances you have defined will be created. For example, if your weight and width axes have these axis instances:

Define Axis instances to build predefined instances
Define Axis instances to build predefined instances

You will get the following predefined instances:

Predefined instances are named points in the design space
Predefined instances are named points in the design space

Editing predefined instance properties»

To edit the properties of a predefined instance:

  1. Open the Font Info dialog File > Font Info, and select Instances in the left sidebar.

  2. From the list, select the instance whose properties you would like to edit.

Removing a predefined instance»

To remove an instance, select it in the Instances section of the Font Info dialog File > Font Info, and click the - button below the list.

Previewing Instances and Interpolation Results»

Open the Variations panel, switch to the Map mode and move the blue circle around the design space. This is an arbitrary instance and you can preview it in the Preview panel and the Glyph window.

This can also be one of the predefined instances that you can choose from the Instances bottom tab of the List mode of the Variations panel.

To preview some text in the current (predefined or interpolated) instance:

  1. Open the Preview panel and click the top-right button to open the panel’s content sidebar.
  2. In the Master dropdown, choose Instance.
  3. In the Content dropdown, choose what text you’d like to preview. “Current” displays the selected glyphs if the Font window is active or the visible text in the Glyph window if it is active. “Custom” displays the text that you type into the panel.
  4. Activate the Text tool in the Glyph window, type any text and choose the instance in the Variations panel.

When you’re choosing a current instance, FontLab automatically refreshes the special #instance layer for all glyphs. This is a read-only virtual layer that contains the contours of the current instance. Glyphs with incompatible masters cannot be interpolated and do not show the #instance layer.

By default, the #instance layer is set to be Service (which means that it doesn’t contribute to the exported final font, to the filled preview or to the interpolation as a master) and Wireframe (which means that whenever FontLab renders glyphs, you see the outlines instead of fills). You can change these properties and experiment with various settings in the Layers and Masters panel.

Importing Fonts»

FontLab can open both PostScript-based (CFF2) and TrueType-based (gvar) OpenType Variations fonts, as well as the predecessor TrueType GX Variations format.

FontLab does not directly open legacy Multiple Master fonts, the axis-based format that Adobe introduced around 1992 and phased out around 1999–2002. However, although FontLab can’t open Type 1 MM fonts directly, it can open the same data in a FontLab 5 VFB file. So as a workaround, you might open such a font in FontLab Studio 5, and save it again (as a FontLab VFB file). FontLab can open the MM VFB file and treat it as a variable font.

FontLab also opens fonts with multiple masters in DesignSpace+UFO and .glyphs formats.

Notes»

Note

The variations workflow mostly does not work with color. Specifically, it supports only fonts where glyphs are made from monochrome PostScript or TrueType contours (and some editing tools only work reasonably with PostScript contours, not TrueType contours). Interpolation between color glyphs (made from editable contours) is also possible to some extent. SVG or bitmap glyphs are not yet supported in variations. These are limitations because of what OpenType supports in the output formats.

Note

FontLab currently only supports master at extrema locations of the design space (there, undefined kerning pairs will have the value 0), and simple intermediate masters (undefined kerning pairs will have the interpolated value). It does not support intermediate masters with ranges, but it does support conditional glyph switching.