When converting between formats, glyphsLib can add bookkeeping metadata to minimize the number of changes (diffs) that appear in version control (git) when converting back and forth.
- Glyphs $\rightarrow$ UFO: Use
minimize_ufo_diffs=True in to_glyphs(). This adds bookkeeping to userData fields (e.g., remembering which GSClass came from groups.plist). - UFO $\rightarrow$ Glyphs: Use
minimize_glyphs_diffs=True in to_designspace(). This adds bookkeeping to the UFO lib (e.g., keeping the same UUIDs for Glyphs layers).
import os
from fontTools.designspaceLib import DesignSpaceDocument
from glyphsLib import to_glyphs, to_designspace, GSFont
# 1. Glyphs -> UFOs (with minimized diffs)
doc = DesignSpaceDocument()
doc.read("spectral-build-roman.designspace")
font = to_glyphs(doc, minimize_ufo_diffs=True)
doc2 = to_designspace(font, propagate_anchors=False)
doc2.write(doc.path)
for source in doc2.sources:
path = os.path.join(os.path.dirname(doc.path), source.filename)
source.font.save(path)
# 2. UFOs -> Glyphs (with minimized diffs)
font = GSFont("SpectralRoman.glyphs")
doc = to_designspace(font, minimize_glyphs_diffs=True, propagate_anchors=False)
font2 = to_glyphs(doc)
font2.save(font.filepath)