Skip to main content

TTF / OTF fonts

Status

FieldValue
Extension(s).ttf, .otf
Common ecosystemStatic font assets
Format familyArtwork/font asset
Satin Studio statusAvailable now
Open / importYes
ExportNo
ConfidenceHigh; implemented as project font assets.

What it is

TTF and OTF files are font binaries used for deterministic text outlines. They are not embroidery machine files.

Satin Studio direction

Satin Studio stores uploaded fonts with the project so text objects can compile from exact font outlines.

Versions and variants

This entry is tracked as a format lead, but Satin Studio does not yet have a public version or dialect matrix for it. Real sample files with machine/software provenance are needed before support can be planned safely.

File identification notes

Static TrueType/OpenType font binaries.

Observed structure notes

  • TTF and OTF are SFNT containers with a big-endian offset table and per-table records.
  • Common table tags relevant to embroidery text include cmap for character mapping, glyf/loca or CFF for outlines, head/hhea/hmtx for metrics, name for names, GSUB for substitutions, and GPOS for positioning.
  • Font parsing gives outlines and shaping facts. It does not choose stitch type, density, underlay, or pull compensation.
  • All multi-byte integers in SFNT directory tables are big-endian. Table checksums and offsets are validated before reading table payloads.
  • TrueType outlines use glyf plus loca; CFF-flavored OpenType uses CFF or CFF2 data instead. Both require shaping before Satin Studio can place glyph outlines correctly.

Structure sketch

TTF and OTF are SFNT-family font containers. Satin Studio uses them as project assets, not as embroidery files.

struct SfntFont<'a> {
offset_table: SfntOffsetTable,
table_records: &'a [SfntTableRecord],
table_data: &'a [u8],
}

struct SfntOffsetTable {
sfnt_version: [u8; 4], // 0x00010000 for TTF, "OTTO" for CFF OTF
num_tables: u16, // big-endian on disk
search_range: u16,
entry_selector: u16,
range_shift: u16,
}

struct SfntTableRecord {
tag: [u8; 4],
checksum: u32,
offset: u32,
length: u32,
}

What we still need

More font-family UX and expanded text stitch planning.