While building a brand kit, eight of nine fonts we downloaded from Google Fonts got rejected by CapCut's Brand Kit uploader with 'Couldn't upload, try again' — on both desktop and web. A simple sans-serif (Anton) in the same folder uploaded fine on the first try. We checked the files one by one: none were corrupted, none had licensing restrictions. The only thing that made the error disappear was converting from TTF to OTF.
This piece explains the actual technical mechanism behind that fix: what TTF and OTF really store differently inside a font file, why that difference can trip up an app's uploader, and what to do if you run into the same wall.
What does CapCut's 'Couldn't upload, try again' error actually tell you?
Short answer: not much. The message is generic, and CapCut doesn't publish any technical documentation explaining exactly what criteria the Brand Kit uploader uses to accept or reject a font file — we couldn't find one in our own search. This isn't a documented rule violation; it's the app's internal upload/parsing logic getting stuck somewhere.
Our first suspicion was a corrupted or license-restricted file. We opened the rejected Allura-Regular.ttf with the `fontTools` library: it's a valid TrueType file with 15 tables, and the `fsType` field in its `OS/2` table is 0 — meaning no embedding restriction, the file should be perfectly installable and uploadable. The problem wasn't the file's validity; it was how CapCut processed it.
What exactly is the difference between TTF and OTF?
Both are dialects of the same OpenType container format (sfnt). Per Microsoft's OpenType specification, fonts containing TrueType outline data carry the version signature 0x00010000 at the start of the file; fonts containing CFF (Compact Font Format / PostScript) outline data use the 'OTTO' signature instead. A single font file can only carry one of the two — glyph shapes live either in the `glyf` table (TrueType) or the `CFF` table (PostScript), never both.
The real difference is in how letters are drawn. TrueType (`glyf`) defines glyphs using quadratic Bézier curves; CFF uses cubic Bézier curves instead. Adobe's Typekit blog makes this concrete: because cubic curves can describe the same shape with fewer control points, and because CFF goes through a compression step called 'subroutinization' that reduces repeated path segments to a shared routine, OpenType/CFF fonts average 20% to 50% smaller than comparable TrueType fonts.
- TTF (`glyf`): quadratic curves, generally more points, historically stronger on-screen hinting support.
- OTF (`CFF`): cubic curves, fewer points, smaller files thanks to subroutinization.
- Both can carry the same OpenType layout layers (GSUB, GPOS, GDEF — ligature and positioning rules); the difference is purely in outline math and the resulting table set.
Why does converting the font fix the CapCut error?
Converting a file from TTF to OTF with FontForge or an online converter doesn't just change the extension — it rebuilds the file from scratch: a new table directory, new checksums, and glyph data translated into CFF outlines. That has an important side effect: per the OpenType spec, the `fpgm`, `prep`, `cvt` and `gasp` tables are defined only for TrueType-outline fonts — a CFF-outline OTF file structurally has no room for them. These tables carry the bytecode instructions that describe how a font should be 'hinted', or fitted to the pixel grid, at small sizes.
So the OTF you re-upload isn't 'the same font with a different extension' — it's a freshly compiled, structurally leaner file that simply cannot contain TrueType-specific hinting bytecode. To be precise about what we can and can't claim: CapCut doesn't publish which table or field its uploader rejects, so we can't say 'this exact table breaks CapCut's parser' — that would be an unverifiable claim. What we can verify is that the rebuilt file is genuinely, structurally different from the original, and that difference plausibly means less unusual data for the uploader to choke on.
Why did Anton upload fine on the first try, but Allura didn't?
The two fonts are very different in character. Anton is a bold, disconnected display font; Allura is a script (handwriting-style) font whose letters connect to each other. The Allura file we inspected has 1,048 glyphs and includes the `GSUB`/`GPOS`/`GDEF` tables needed for contextual/ligature substitution — the layer a script font needs to look fluid, which a simple sans-serif typically doesn't carry.
ttfautohint often struggles to hint display or handwritten typefaces.
— Google Fonts Guide, Static fonts specifics
Part of the reason may sit upstream, at the source. Google Fonts' own build guide states that static TTF files are auto-hinted with `ttfautohint` — and that this tool specifically struggles to hint display and handwritten typefaces. That means a script font's TTF like Allura's may ship with more complex or unusual hinting/layout data than a plain sans like Anton's. We're not presenting this as a confirmed cause — we don't have visibility into CapCut's own validation logic — but it's consistent with the pattern we actually observed: the simple font passed, the complex script font didn't.
What should you do, step by step, if a font won't upload to CapCut?
- Confirm the file isn't corrupted first: if it opens a preview in Font Book (macOS) or by double-clicking (Windows), the file itself is fine.
- Don't skip the classic restart: fully quit CapCut desktop (Cmd+Q / Alt+F4) and reopen it — a surprising number of upload failures clear up once the app starts a fresh session.
- Switch platforms: an upload that fails on desktop sometimes goes through fine on web.capcut.com, and vice versa. They're separate upload paths, so if one is stuck, try the other.
- Update CapCut (desktop: Settings → Check for Updates) or uninstall and reinstall it — known upload bugs do get patched in version updates.
- Try a different browser, or a session with a cleared cache, for the web uploader — stale cache or extension conflicts occasionally cause the same generic error.
- If none of that works, open the TTF in the free FontForge app, go to File → Generate Fonts, choose 'OpenType (CFF)', and export as .otf. An online converter like CloudConvert does the same job if you'd rather not install anything.
- Re-upload the OTF file to CapCut.
- If it still fails, skip the Brand Kit uploader entirely: install the font at the OS level (Font Book / Windows Fonts), fully quit and reopen CapCut — the font shows up automatically under 'System Fonts'.
- One caveat: converting to OTF can drop fine hinting detail; in practice this only shows at very small pixel sizes and won't be visible at the large sizes typical of Reels/TikTok titles.
Frequently asked questions
Does converting TTF to OTF change how the font looks?
At large sizes — video titles, captions — not visibly. Both formats describe the same glyph shapes, just with different curve math (quadratic vs. cubic). Any difference is theoretically only perceptible at very small point sizes, where on-screen hinting kicks in.
Does converting a font's format create a copyright issue?
Format conversion doesn't change a font's design or license — only its internal encoding. Most Google Fonts ship under the SIL Open Font License, which permits modification and redistribution of derivative works — but it's always worth checking the specific license file bundled with the font you're using.
Which font formats does CapCut support?
CapCut's interface states it accepts both .ttf and .otf. But as this piece shows, a technically valid file can still be rejected by the uploader unpredictably. If you hit that wall, try converting to OTF first, then fall back to installing the font at the system level.
Why upload to Brand Kit instead of just installing the font on my system?
Fonts uploaded to Brand Kit sync across devices tied to your CapCut account, and across teammates if you work with a team. A system-installed font only works on that one computer — if you share the project file, the font may not show up for whoever opens it.
