# OpenType Feature Playground > See which OpenType features and variable axes a font has, and what they do to your text. 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. Part of usefulweb.site (https://usefulweb.site/). Part of [Lumina](https://lumina.usefulweb.site/) (ownerApp: lumina). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://luminafontfeatures.usefulweb.site/ (interactive tool at https://luminafontfeatures.usefulweb.site/tool) - JSON API: POST https://luminafontfeatures.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://luminafontfeatures.usefulweb.site/api/v1/tool) - OpenAPI: https://luminafontfeatures.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://luminafontfeatures.usefulweb.site/mcp - tool `lumina_font_features` ## Inputs - font (file, required): Font (TTF, OTF or WOFF; up to 10 MB; uploaded to the server) - text (text): Sample text - features (text): Feature switches (e.g. smcp, onum, -liga, ss01) - axes (text): Axis values for variable fonts (e.g. wght=650, wdth=90) - script (text): OpenType script tag (auto = from the text) - lang (text): OpenType language system tag (optional, e.g. DEU, TRK) ## Method - 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. ## Limits - 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).