A Synthetic Benchmark for Font Family Identification
Words in known fonts, printed or painted on real surfaces and in real scenes, with the exact font, the text and the position of every letter.
GitHub - v1.0 Explore200 sans-serif, 200 serif, 100 slab serif and 100 monospaced, from Adobe Fonts, Creative Fabrica, Google Fonts and DaFont (commercial-use licenses only).
20 per font: a word printed on a close-up surface, painted in a real scene, or on a printed object - in three levels, easy, medium and hard.
For every image: the exact font, the text, the word box and the four corners of every letter, plus how it was made (size, blur, noise, light). Also in COCO format.
20 example images from 20 different fonts, over all types, levels and categories, scaled to 1200 px. Green: the word; blue: each letter. All 11,995 images, full size, are in the release.
Ten sheets show all 600 fonts of v1.0, 60 per sheet. Fonts that only have capitals (107) are written in capitals.
| Font | Family | Category | Source | Images |
|---|
| Type | Easy | Medium | Hard | Per font |
|---|---|---|---|---|
| texture: the word printed or painted straight on a close-up photo of a real surface (wood, plaster, concrete, brick, metal, fabric, leather, paper, cardboard) | 3 | 2 | 5 | 10 |
| scene: the word painted on a wall inside a real photo (rooms, shops, facades, workshops) | 1 | 2 | 3 | 6 |
| object: the word on a printed object (label, box, book cover, poster, menu, shop sign, packaging, business card, painted wall) | 1 | 1 | 2 | 4 |
The images are frontal, with no slant or perspective, so an upright font never looks italic; texture and scene images add only a small camera deviation (corners moved at most 1.5 %, rotation at most 1°). Text contrast is at least 70 grey levels (50 on the hard level), no letter is clipped, and the long side is never over 2000 px. One word per image, 7-12 letters, taken from COCO-Text v2.
The WhatFontIs API on all 11,995 images of v1.0, September 2026. The API searches its whole catalogue of over 1.2 million fonts, not only the 600 fonts of the set. A result is correct when it is the right font family, in any weight or from any source: an image in Roboto Bold answered with Roboto Regular is correct; answered with Arial Bold it is wrong, however close it looks.
| Images | Correct at 1 | In top 5 | In top 20 | |
|---|---|---|---|---|
| All images - Top-1 font family accuracy 83.7 % | 11,995 | 83.7 % | 93.3 % | 96.5 % |
| texture | 5,997 | 83.6 % | 93.3 % | 96.3 % |
| scene | 3,599 | 82.4 % | 92.3 % | 96.0 % |
| object | 2,399 | 85.9 % | 95.0 % | 97.5 % |
| easy | 2,995 | 85.2 % | 93.9 % | 97.4 % |
| medium | 3,000 | 83.3 % | 92.8 % | 96.0 % |
| hard | 6,000 | 83.1 % | 93.3 % | 96.3 % |
| sans-serif | 4,000 | 75.7 % | 88.7 % | 94.2 % |
| serif | 4,000 | 84.0 % | 95.1 % | 97.7 % |
| slab serif | 1,995 | 95.0 % | 98.5 % | 99.0 % |
| monospaced | 2,000 | 87.8 % | 94.0 % | 96.1 % |
The 3 images where no letters were found count as misses.
Annotations, font list and tools are in the GitHub repository. The images of v1.0 are in the release v1.0, as four zip files:
| File | Size | Images |
|---|---|---|
| WFI-SynthFont_v1.0_images_part1.zip | 466 MB | 00000-02998 |
| WFI-SynthFont_v1.0_images_part2.zip | 470 MB | 02999-05997 |
| WFI-SynthFont_v1.0_images_part3.zip | 460 MB | 05998-08996 |
| WFI-SynthFont_v1.0_images_part4.zip | 604 MB | 08997-11994 |
With the GitHub CLI:
gh release download v1.0 --repo whatfontis/WFI-SynthFont
Unzip all four into v1/; they create v1/scenes/NNNNN.jpg. The text crops (the word cut out
of each image, unscaled) come from python tools/make_crops.py v1. Font files are not included.
| File | What it holds |
|---|---|
v1/labels.jsonl | one line per image: text, font (title, family, source, category, WhatFontIs page), type, level, crop box, word and letter corners, how it was made (cap height, font size, ink colour, contrast, blur, noise, JPEG quality, effects, camera transform) and the background |
v1/annotations.json | the same set in COCO format: images, categories (one per font), annotations (word box, text, letters) |
v1/fonts.json | the fonts: title, family, source, category, capitals-only flag, WhatFontIs page, number of images |
v1/backgrounds.json | the background photos, with source page, author and license |
words.txt | the word list the texts were drawn from (shared by all versions) |
v1/specimens/ | ten sheets showing all 600 fonts, 60 per sheet |
tools/make_crops.py | cuts the text crops out of the images |
backgrounds.json.Questions about the set: contact us.