OTF is an OpenType font with PostScript outlines. WOFF2 is the second web font format, compressed with Brotli. fontTools sits between the two, and this page says exactly what happens to an OTF file on the way to becoming a WOFF2 one.
What runs when an OTF file becomes WOFF2
fontTools in our own Python, on a machine we rent and watch. Your OTF file is uploaded once, fontTools runs once, the WOFF2 comes back, and neither file is kept. OTF to WOFF2 is one of the 3649 pairs that engine was probed on with a real file, which is why it has a page here and why the pairs the probe could not prove do not.
What survives from the OTF into the WOFF2
Every glyph, unchanged. This pair does not redraw anything: the outlines that leave the OTF arrive in the WOFF2 point for point, so the letters render exactly as the designer drew them. The engine counts them on the way out and refuses the file if the count moved. Measured on this pair: the probe file came back at 53 724 bytes in 0.5 s.
Hinting, kerning pairs and OpenType features: the tables that tell a renderer how to space and substitute glyphs. This pair moves the container around them rather than through them.
Size, and this is the reason to do it. Measured on DejaVu Sans, 6253 glyphs: 759 720 bytes of OTF become 258 392 bytes of WOFF2, a third of the original. Nothing was removed to get there; it is compression, and the browser undoes it before rendering.
Browser support you do not have to think about. Every browser in use today takes WOFF2, and it is what a modern build pipeline emits by default.
What OTF to WOFF2 costs you
Nothing about the OTF itself, and that is worth saying plainly rather than inventing a caveat. What this pair changes is how the font is packaged, never what it draws.
The ability to double-click it. A WOFF2 is not installable: operating systems do not accept it, and design tools do not list it. It is made to be served over HTTP and read by a browser, which is the whole point.
Nothing else, and specifically not quality. This is compression, not resampling: the WOFF2 decompresses to the same bytes the OTF held.
Where OTF and WOFF2 files come from
OTF. Type foundries write it, and so does anything descended from Adobe tools. Its outlines are cubic curves in a CFF table, not quadratic ones in a glyf table, and that difference is not cosmetic: it is why an OTF cannot simply be renamed to TTF.
WOFF2. A W3C recommendation from 2018 and what every browser prefers today. Same idea as WOFF, better compression: Brotli instead of zlib, plus a transform that rewrites the glyph table before compressing. Measured on DejaVu Sans: 759 720 bytes become 258 392, a third of the original.
If a model is going to read the WOFF2
Structure is what survives from the OTF file, and structure is what a model needs. OTF in, WOFF2 out, with the heading tree intact instead of flattened into one long paragraph.
OTF to WOFF2, measured rather than promised
Running OTF to WOFF2 against the real engine with a real file, fontTools wrote 53,724 bytes of WOFF2 in 0.5 seconds, machine otherwise idle. That is one OTF file on one day and not an average, which is why the number is given together with the file that produced it.
The OTF to WOFF2 verdict was reached by reading the font back with fontTools and checking what kind of outlines it holds, meaning the output was read back and recognised. Which check was used matters, because they do not all prove the same thing, and a status code of 200 proves nothing whatsoever about whether the WOFF2 file has anything inside it.
Other ways into WOFF2, and what they measured
Among the published routes into WOFF2, OTF is the third largest output of the 3 measured. The witness files differ, so this ranks the probe run and not your document.
WOFF to WOFF2: 258,516 bytes in 2.7 seconds.
TTF to WOFF2: 258,512 bytes in 2.8 seconds.
What we will not pretend about OTF to WOFF2
An OTF file over 25 MB is refused before the upload finishes rather than after it, so you do not wait for a rejection.
An OTF to WOFF2 run that passes 50 seconds is killed, and the fontTools process is killed with it. A run left behind would sit on one of the machine's two cores until somebody noticed.
This family will not change the kind of outlines a font carries, and that rules out OTF to TTF. A TrueType font draws with quadratic curves, a PostScript one with cubic curves, and turning one into the other means approximating every curve in the file. It can be done, it moves points, and it is not what happens here. Asking for it returns 415 with the name of the target that would have worked.
Renaming would have been easy and it would have been a lie. Measured on 30 August with a real OTF file: asking fontTools for a plain sfnt returns a file whose first four bytes are OTTO, byte for byte identical to the .otf output. Served as .ttf it opens in most tools and breaks in the ones that read the extension to decide what to do. The engine refuses it instead.
One OTF file at a time, chosen in the browser. There is nothing else to set up and nothing else on offer.
OTF to WOFF2: what people ask
What actually converts my OTF file to WOFF2?
fontTools does it, in our own Python, on a machine we rent and watch. Not a browser trick and not somebody else service: the OTF file is uploaded once, fontTools runs once, the WOFF2 comes back, and neither file is kept afterwards.
How long does OTF to WOFF2 take?
On the file the probe used, fontTools took 0.5 seconds and wrote 53,724 bytes of WOFF2. That is one real measurement on one real OTF file, not an average and not a promise about yours: a larger OTF takes longer, and past 50 seconds the run is stopped.
What do I lose going from OTF to WOFF2?
The one to know about first: Nothing about the OTF itself, and that is worth saying plainly rather than inventing a caveat. What this pair changes is how the font is packaged, never what it draws.
Will the WOFF2 look different from the OTF?
No. Not slightly, not in edge cases: the outlines are copied rather than redrawn, so every glyph has the same coordinates it had before. The engine counts the glyphs on the way out and refuses the file if the count moved, which is the one way this could go wrong silently.
How much smaller is the WOFF2?
Measured on DejaVu Sans, a 6253 glyph font: 759 720 bytes of OTF become 258 392 bytes of WOFF2. Your font will differ, but the ratio holds: WOFF2 uses Brotli and lands near a third.
Can I install the WOFF2 on my computer?
No, and that is not a limitation of this tool. A WOFF2 is a web format: browsers fetch it, operating systems do not install it. If you want to use the font locally, the OTF you started from is the file for that.
Is OTF to WOFF2 free?
There is a free allowance every month, and one OTF to WOFF2 conversion costs half a credit against it. When the allowance runs out the tool says so and stops, rather than quietly handing you a worse WOFF2.