How to strip colour and chromatic glyph tables from a font
- Step 1Drop your colour font onto the tool — Accepted inputs are TTF, OTF, WOFF, and WOFF2 — the format is detected from the first four magic bytes (`0x00010000`, `OTTO`, `wOFF`, `wOF2`). A `.ttc` collection or an unrecognised magic is rejected with an `Unsupported font format` error. Free tier accepts files up to 5 MB per job; Pro 50 MB; Developer 1 GB.
- Step 2Let it detect and strip the chromatic tables — There is nothing to configure — the tool always removes the same eight tags: `COLR`, `CPAL`, `sbix`, `SVG ` (note the trailing space in the four-char tag), `CBDT`, `CBLC`, `EBDT`, and `EBLC`. Everything else (`cmap`, `glyf`, `hmtx`, `name`, `head`, layout tables) is preserved verbatim.
- Step 3Check the result metrics — The result panel reports the removed-tables list, the original SFNT size, and the output size in KB. A colour-emoji font with megabytes of `sbix`/`CBDT` PNGs collapses dramatically; a `COLR`/`CPAL` vector font shrinks only by the small layer/palette tables.
- Step 4Download the monochrome TTF — Output is always a single file named `<stem>.monochrome.ttf` with MIME `font/ttf`, regardless of whether you uploaded TTF, OTF, WOFF, or WOFF2. There is no WOFF2 output option on this tool.
- Step 5Re-compress for the web — Because the output is uncompressed SFNT, run it through [TTF to WOFF2](/font-tools/ttf-to-woff2) before shipping. A WOFF2-in → TTF-out step can temporarily inflate the byte count; the WOFF2 re-compression is where the real transfer-size saving lands.
- Step 6Verify the outlines render — Open the monochrome TTF and confirm the glyphs you care about still draw as black outlines. Use [Glyph Inspector](/font-tools/glyph-inspector) to render a specific glyph's vector path, or [Font Metadata Extractor](/font-tools/font-metadata-extractor) to confirm the colour tables are gone from the table directory.
Tables removed vs tables kept
The fixed removal set is hard-coded — there are no per-table options. The four-char SFNT tag is shown exactly as the tool matches it (the SVG tag has a trailing space).
| Tag | What it holds | Action |
|---|---|---|
COLR | Microsoft colour layer composition (v0 flat regions, v1 gradients/transforms) | Removed |
CPAL | Colour palette (RGBA entries) referenced by COLR | Removed |
sbix | Apple embedded PNG bitmaps per glyph at multiple resolutions | Removed |
SVG (trailing space) | OpenType embedded SVG documents per glyph | Removed |
CBDT / CBLC | Google colour bitmap data + location (Noto Color Emoji) | Removed |
EBDT / EBLC | Embedded bitmap data + location (legacy grayscale/mono bitmaps) | Removed |
glyf / CFF | Vector outline data | Kept — this is the monochrome fallback |
cmap, hmtx, name, head, GSUB, GPOS | Character mapping, metrics, names, layout features | Kept verbatim |
Input format handling
Format is sniffed from the first four bytes; WOFF/WOFF2 are decompressed to SFNT before stripping. Output is always uncompressed TTF.
| Input | Magic bytes | How it's handled | Output |
|---|---|---|---|
| TTF | 00 01 00 00 / true | Used directly as SFNT | .monochrome.ttf |
| OTF | OTTO | Used directly as SFNT (CFF outlines kept) | .monochrome.ttf |
| WOFF | wOFF | Each table zlib-inflated, SFNT rebuilt | .monochrome.ttf (uncompressed) |
| WOFF2 | wOF2 | Brotli-decompressed to SFNT first | .monochrome.ttf (uncompressed — may be larger than input) |
| TTC collection | ttcf | Rejected | Unsupported font format error |
Cookbook
Real before/after scenarios. Sizes are representative — your fonts will differ depending on glyph count and which colour format they use.
Apple Color Emoji → monochrome outlines
ExampleApple Color Emoji stores its colour as sbix PNG bitmaps — by far the heaviest colour format. Strip it and you keep only the outline glyphs, which on Apple's font are minimal. This is useful for monochrome rendering tests, not for shipping emoji to users.
Input: AppleColorEmoji.ttc -> rejected (TTC collection)
Input: AppleColorEmoji.ttf ~ from a single-face export
tables: glyf, sbix(50+ MB PNGs), cmap, ...
After Colour Table Remover:
AppleColorEmoji.monochrome.ttf
tables: glyf, cmap, ... (sbix gone)
result panel: Removed colour tables: COLR, CPAL, sbix, SVG, CBDT, CBLC, EBDT, EBLCNoto Color Emoji (CBDT/CBLC) stripped
ExampleNoto Color Emoji ships bitmap colour in CBDT/CBLC. The remover drops both. The outline fallback in Noto is more substantial than Apple's, so you get usable black-and-white emoji shapes.
Input: NotoColorEmoji.ttf
tables: glyf, CBDT, CBLC, cmap, GSUB, ...
After: NotoColorEmoji.monochrome.ttf
tables: glyf, cmap, GSUB, ... (CBDT + CBLC gone)COLRv1 brand font → vector monochrome
ExampleA COLR/CPAL vector colour font shrinks only by the (small) layer + palette tables — the outlines were never duplicated. The visual result is the base outline glyph in a single colour.
Input: BrandIcons-Colour.otf
tables: CFF, COLR, CPAL, cmap, ...
After: BrandIcons-Colour.monochrome.ttf
tables: CFF, cmap, ... (COLR + CPAL gone)
size delta: small (a few KB) — COLR is compact by designWOFF2 in, TTF out — the size surprise
ExampleFeeding a WOFF2 returns an uncompressed TTF. Even with colour tables removed, the TTF can be larger than the Brotli-compressed WOFF2 you started with. Re-compress to see the real saving.
Input: emoji.woff2 120 KB (Brotli-compressed, with COLR/CPAL)
After: emoji.monochrome.ttf 180 KB (uncompressed SFNT, no colour tables)
Then run /font-tools/ttf-to-woff2:
emoji.monochrome.woff2 ~28 KB (now the real win shows)Plain text font with no colour tables (no-op)
ExampleIf the font has none of the eight tags, the tool returns the SFNT unchanged — a deliberate safety path so you can run it across a folder without corrupting non-colour fonts.
Input: Inter-Regular.ttf (no COLR/CPAL/sbix/SVG/CBDT/CBLC/EBDT/EBLC)
After: Inter-Regular.monochrome.ttf
byte-identical table data to input (directory copied as-is)
compressionPercent: not reported (0% reduction)Edge cases and what actually happens
Every row below was probed against the live API. Some documented requirements (alphabetical axis order, numerical tuple order) are not actually enforced in practice — useful to know if you've been blaming the wrong thing for a 400.
Upload a `.ttc` font collection
Unsupported formatThe first four bytes ttcf identify a TrueType Collection, which the converter does not unpack. You get an Unsupported font format: ttc error. Extract a single face first (a desktop tool or the source vendor's single-face export), then run the remover on the standalone TTF/OTF.
Font has no colour tables at all
PreservedThe remover checks whether any of the eight tags are present. If none match, it returns a copy of the original SFNT unchanged — the table directory is not rebuilt and no bytes shift. The result panel shows a 0% reduction and compressionPercent is omitted. This makes the tool safe to run blindly across a mixed font folder.
WOFF2 input produces a larger output file
By designInput WOFF2 is Brotli-compressed; the output is always an uncompressed SFNT TTF. Removing colour tables shrinks the table count, but un-Brotli-ing the rest can outweigh that, so the .monochrome.ttf may be bigger in bytes than the WOFF2 you uploaded. Re-run the result through TTF to WOFF2 to get a smaller-than-original shippable file.
`head` table checkSumAdjustment is not recomputed
By designRebuilding the directory changes table offsets, but the tool does not recompute the head table's checkSumAdjustment field. Almost every renderer ignores it, so the font works fine. If you need a strictly conformant checksum (some validators flag it), run the output through a font validator or a tool that recomputes it.
Apple Color Emoji 'loses' its colour glyphs
ExpectedApple's font carries colour only in sbix; the outline glyphs underneath are deliberately minimal. After stripping you get the thin outline fallback, not pretty monochrome emoji. This is correct behaviour, not a bug — for actual rendering you almost never want to strip a system emoji font. Use it for monochrome-only contexts or testing.
Font over the tier size limit
413 tier limitApple Color Emoji and full Noto Color Emoji are large. The free tier caps each job at 5 MB, Pro at 50 MB, Developer at 1 GB. A 60 MB emoji font is blocked on free and Pro with an exceeds the … tier per-job limit message. Subset first with Font Subsetter to the glyphs you need, or upgrade the tier.
OTF (CFF) colour font
SupportedColour tables are independent of the outline format, so a CFF-flavoured OTF with COLR/CPAL or SVG is handled identically to a TTF. The CFF outline table is kept; the output is still written with the .monochrome.ttf name and font/ttf MIME even though the outlines are PostScript.
Hybrid font with both COLR and SVG
SupportedSome fonts ship COLR/CPAL for broad support plus SVG for richer rendering. The remover drops all of them in a single pass, so you always end up monochrome regardless of which format the renderer would have preferred.
EBDT/EBLC monochrome bitmaps removed too
ExpectedEBDT/EBLC are the older embedded-bitmap tables (often grayscale, sometimes used for hand-tuned small sizes). They are in the removal set, so embedded bitmaps go even if they were not colour. If you specifically need to keep hinted bitmaps, this is not the tool for that — it targets outline-only output.
Corrupt or truncated SFNT directory
Parse errorThe remover reads numTables and walks 16-byte directory entries. A truncated file or a bogus table offset/length can throw during the rebuild. Re-export the font cleanly from its source application; the tool does not attempt to repair malformed directories.
Frequently asked questions
Will my glyphs disappear after stripping the colour tables?
No. The colour tables (COLR, CPAL, sbix, SVG , CBDT, CBLC, EBDT, EBLC) sit alongside the outline glyphs in glyf/CFF . Removing them leaves the outlines intact, so a capable renderer draws plain black-and-white glyphs where it used to draw colour ones. The only exception is system emoji fonts whose outline fallback is intentionally minimal.
Can I choose which colour tables to remove?
No — there are no options on this tool. It always removes the same eight tags in one pass. If you need to keep one specific table you would have to edit the font directory by hand; this tool is intentionally all-or-nothing for predictable monochrome output.
What input formats does it accept?
TTF, OTF, WOFF, and WOFF2. The format is detected from the first four magic bytes. WOFF is zlib-inflated per table and WOFF2 is Brotli-decompressed to an SFNT before the colour tables are removed. .ttc collections and unrecognised files are rejected.
Why is my output bigger than the WOFF2 I uploaded?
Because the output is always an uncompressed TTF. A WOFF2 is Brotli-compressed; even with colour tables gone, the decompressed SFNT can be larger in bytes. Re-compress the .monochrome.ttf with TTF to WOFF2 and you will see the real size win.
What is the output file called?
Always <original-stem>.monochrome.ttf with MIME type font/ttf, no matter what format you uploaded. There is no WOFF/WOFF2 output choice on this tool — convert afterwards if you need a web format.
Does it work on Apple Color Emoji?
It strips the sbix bitmap table, leaving Apple's minimal outline glyphs. The result is a slim font that is only useful in monochrome contexts or for testing — you would not ship it as your emoji font. Note Apple Color Emoji often ships as a .ttc, which you must split to a single face first.
Is the conversion lossless for the outlines?
Yes for the glyph outlines, metrics, and layout — those tables are copied byte-for-byte. The colour data is intentionally discarded. The one caveat is the head checkSumAdjustment, which is not recomputed; renderers ignore it but a strict validator may flag it.
Does anything get uploaded to a server?
No. The stripping runs in your browser via JavaScript. The font bytes never leave your machine, which matters for unreleased brand or licensed fonts. Only an anonymous run counter is recorded for signed-in dashboard stats.
How large a font can I process?
Free tier accepts up to 5 MB per file, Pro up to 50 MB, and Developer up to 1 GB. Full colour-emoji fonts (Apple ~60 MB, Noto multi-MB) exceed free/Pro — subset them first with Font Subsetter or upgrade.
What if the font has none of those tables?
You get the font back unchanged. The tool detects that no removable tags are present and returns a copy of the original SFNT rather than rebuilding the directory, so running it on a non-colour font is harmless.
How do I confirm the colour tables are really gone?
Use Font Metadata Extractor to dump the table directory and confirm COLR/CPAL/sbix/SVG /CBDT/CBLC are absent, or Glyph Inspector to render a glyph's outline path.
Can I do this in a build pipeline?
Yes. GET /api/v1/tools/colour-table-remover returns the (empty) option list, and once the @jadapps/runner is paired you can POST http://127.0.0.1:9789/v1/tools/colour-table-remover/run with a font file. See Strip Colour Tables in Your Build Pipeline for the full CI recipe.
Privacy first
Every JAD Font tool runs entirely in your browser using opentype.js and the wawoff2 WASM Brotli encoder. Your fonts never leave your device — verified by zero outbound network requests during processing.