OpenType Feature Playground
See which OpenType features and variable axes a font has, and what they do to your text.
How it works
Upload a TTF, OTF or WOFF font to list its scripts, languages and OpenType features (ligatures, small caps, figures, stylistic sets, kerning …) and its variation axes. Switch features on or off and set axis values: the text is shaped with the font's own GSUB and GPOS lookups and drawn from its outlines, next to the browser defaults, with the features that change your text marked.
- Scripts, language systems and features are read from the ScriptList and FeatureList of GSUB and GPOS; names follow the OpenType Layout tag registry (ssXX = stylistic set, cvXX = character variant).
- Default features match what browsers apply to horizontal text (ccmp, locl, rlig, rclt, calt, liga, clig, rvrn, kern, mark, mkmk, dist, abvm, blwm, curs); your switches turn features on (smcp) or off (-liga). All selected GSUB lookups run in lookup-list order (types 1–7, the first alternate for type 3), then GPOS (types 1, 2 and 4–9).
- Arabic and Devanagari text first gets Lumina's required shaping (joining forms, Indic reordering); other scripts are shaped from the character map in logical order on one line without bidi reordering.
- Axis values are clamped to each axis range; outlines and advances come from gvar and HVAR at that location. GPOS adjustments are the default-instance values (variation deltas of GPOS are not applied). A feature "changes this text" when toggling it alone changes a glyph or a position.
Outlines are drawn for TrueType (glyf) fonts; CFF fonts list their features but are not drawn. WOFF2 is not read. Browsers can differ in details (font fallback, bidi, justification).
Sources
Part of Lumina
-
Lumina Photo editor & image toolkit
Bring out what you saw. A free photo studio, right in your browser.
Related tools
- Font File Inspector & Glyph Coverage – Read TTF, OTF and WOFF names, tables, metrics, axes, kerning and Unicode coverage.
- Webfont Subsetter (WOFF & TTF) – Shrink a font to the characters your site uses and get a WOFF file with its CSS unicode-range.
- TrueType & Variable Font Builder – Turn glyph outlines or a grid font into a verified TTF, including variable weight fonts.
How to use the OpenType Feature Playground
See which OpenType features and variable axes a font contains, switch them on or off and find out exactly what each one does to your text.
What it is for
Fonts often contain more than the default letters: small capitals, oldstyle or tabular figures, real fractions, slashed zeros, stylistic sets and kerning. Font menus rarely show them, and in CSS you have to know the four-letter tags. Upload a font and the playground lists every feature with its registered name, shapes your sample text with the font's own substitution (GSUB) and positioning (GPOS) rules, and marks the features that actually change your text.
Variable fonts get their axes too, such as weight or width, and the text is drawn at the location you set. The result includes the matching CSS. Lumina's Type Lab → Glyph Lab runs the same engine on your device and also shows the browser's own rendering next to it.
Worked example
We uploaded Noto Sans Regular, typed "Office 1/2 AV 0" and set Feature switches to smcp, zero, -liga.
- Features in the font: 28; Features that change this text: 16; Glyphs changed from the defaults: 16.
- With the defaults, "ffi" in Office becomes one ligature glyph. With small capitals on and ligatures off, the shaped glyphs read
O f.sc f.sc i.sc c.sc e.sc. - kern (Kerning, GPOS, 3 lookups) is marked as changing this text because of the pair A–V; lnum (Lining Figures) is not, because the figures are already lining.
- The CSS box suggests
font-feature-settings: "liga" 0, "smcp" 1, "zero" 1;.
In a check in Chrome, five different feature combinations on Noto Sans gave the same line width as the engine to within 0.02 pixels at 44 px.
How to read the result
- The drawing shows browser defaults on top and your settings below, drawn from the font's outlines.
- OpenType features lists tag, name, the tables it lives in, how many lookups it has, whether browsers turn it on by default, your setting and whether it changes this text. A feature counts as changing the text when toggling it alone changes a glyph or a position.
- Shaped glyphs shows each glyph with its name (from the font's post table), id, position and advance in font units.
- Scripts and language systems tells you which languages have their own forms, for example
TRKorDEU; enter one under language system tag to see localized forms.
Tips and common mistakes
- Write switches as a list:
smcpturns a feature on,-ligaturns a default feature off,ss01=1orkern=0also work. - Axis values look like
wght=650, wdth=90; values outside an axis range are clamped to it. - A feature that "does nothing" usually has no rule for the characters you typed. Try other text: fractions need a slash between digits, ordinals need
1stor2o. - Stylistic sets and character variants are numbered; the font decides what they change.
- Alternates with several choices use the first alternate here, as browsers do for a plain
"salt" 1.
FAQ
Does it work with CFF (.otf) fonts?
The feature list, scripts and glyph sequence are exact for CFF fonts too, but their PostScript outlines are not drawn.
Are variable kerning values applied?
Outlines and advances follow the axis location through gvar and HVAR. GPOS adjustments use the default-instance values; variation deltas inside GPOS are not applied.
Is my font stored?
The tool uploads the file to the server for the calculation only. In Lumina Glyph Lab the font never leaves your device.
Guide last updated:
For scripts and AI agents
- JSON API:
POST https://luminafontfeatures.usefulweb.app/api/v1/calculate(same calculation as this page) - Interface description: OpenAPI 3.1 · AI guide: llms.txt
- MCP server (Streamable HTTP):
https://luminafontfeatures.usefulweb.app/mcp· tool namelumina_font_features
Example request
curl -s -X POST https://luminafontfeatures.usefulweb.app/api/v1/calculate \
-H 'content-type: application/json' \
-d '{…see OpenAPI examples…}'