Converting from VFB to UFO ↩
There are two main ways to convert between UFO and VFB formats:
- using Tal Leming’s UFO Central script
- using FontLab’s vfb2ufo command-line tool
Using UFO Central
UFO Central is a tool with many years of service to RoboFab+FontLab users in pre-RoboFont days. It can export VFBs to UFOs and import UFOs into VFBs.
Installation
- download the
UFOCentral.pyscript from GitHub - save it inside your
Library/Application Support/FontLab/Studio 5/Macrosfolder - restart FontLab
- UFO Central will appear in the list of scripts in the Macro toolbar

Usage
Select UFO Central from the drop-down list in the Macro toolbar, and press the Run button. A window with several options will appear:

The interface is simple and self-explaining. Use the Help button to get more information about each option.
Advantages / disadvantages
| advantages | disadvantages |
|---|---|
|
|
Using vfb2ufo
vfb2ufo is a command-line conversion utility provided by FontLab. It is able to convert both ways (from VFB to UFO, and from UFO to VFB), and is available for macOS and Windows users.
Installation
The tool can be downloaded for free here.
Usage
After you have installed vfb2ufo, you can run it in Terminal:
vfb2ufo myFolder/myFont.vfb anotherFolder/myOuputFont.ufo
The destination path is optional – if it is omitted, the output files will be saved with the same name and in the same folder as the source files.
For the complete list of options, see the included documentation:
vfb2ufo -h
Calling vfb2ufo with Python
Even though vfb2ufo is a C program, you can call it with Python using the subprocess module:
from subprocess import Popen
# path to vfb2ufo on your machine
ufo2vfbLocation = "/usr/local/bin/vfb2ufo"
# path to input VFB file
vfbPath = u"/myFolder/myFont.vfb"
# path to output UFO file
ufoPath = u"/anotherFolder/myFont.ufo"
# call the vfb2ufo program
p = Popen([ufo2vfbLocation, vfbPath, ufoPath]) # "-64", etc
p.wait()
# add a note to the converted UFO
f = OpenFont(ufoPath, showInterface=False)
f.info.note = 'converted from vfb with vfb2ufo'
f.close(save=True)
Here is another example, showing how to convert a whole folder of VFBs into UFOs:
import os
from subprocess import Popen
# path to vfb2ufo on your machine
ufo2vfbLocation = "/usr/local/bin/vfb2ufo"
# path to folder with input VFBs
vfbsFolder = u"/myVFBsFolder"
# path to folder for output UFOs
ufosFolder = u"/myUFOsFolder"
# collect all VFBs in VFBs folder
vfbs = [f for f in os.listdir(vfbsFolder) if os.path.splitext(f)[-1] == '.vfb']
# batch convert VFBs to UFO
for vfb in vfbs:
# make file paths
vfbPath = os.path.join(vfbsFolder, vfb)
ufoPath = os.path.join(ufosFolder, vfb.replace('.vfb', '.ufo'))
# call the vfb2ufo program
p = Popen([ufo2vfbLocation, vfbPath, ufoPath]) # "-64", etc
p.wait()
# add a note to the converted UFO
f = OpenFont(ufoPath, showInterface=False)
f.info.note = 'converted from vfb with vfb2ufo'
f.close(save=True)
Advantages / disadvantages
| advantages | disadvantages |
|---|---|
|
|
* Some known bugs in vfb2ufo:
- glyphs with overlapping components are decomposed
- unnamed guidelines get corrupted
- ghost hints are reversed
- OT classes are not written into features (remain as groups)