Guides

    Choosing a Caption Font From the Registry Instead of Guessing

    A guessed font name doesn't error — it just doesn't do what you asked. What each font category does to legibility at caption size on moving footage.

    Versely Team7 min read

    Typing a font name into a caption request feels like a safe guess — "use Montserrat," "make it Bebas Neue" — because in a word processor, a wrong or misspelled font name is obvious immediately: the text just isn't in that font, right there on screen, and you fix it in one click. A caption render doesn't give you that same immediate feedback loop. You write the request, the job runs, and the only way to know whether the font name actually resolved to what you meant is to watch the finished video. That's exactly the failure mode Versely's font registry exists to remove: list_caption_fonts reads the app's actual font registry and returns exact id, name, category and a preview for every option, and the tool's own description is direct about why it exists — call it "before setting font_id/font_family on caption tools so you never guess font names." The registry isn't a nice-to-have catalog. It's the difference between naming a font and naming the right string for a font, and those are only the same thing if you already know exactly what's in the registry.

    What's actually in the registry

    Versely's caption font registry holds 23 fonts split across five categories: eight sans-serif (including Inter, Montserrat, Poppins, Oswald and TikTok Sans), four serif (including Playfair Display), five display (including Bebas Neue and Anton), five handwriting (including Pacifico), and one monospace. That range matters more than the count — each category behaves differently once you shrink it down to caption size and put it over footage that's actually moving, and picking by category first, then by specific font, is a far more reliable process than picking a name you remember liking on a poster once.

    What each category actually does at caption size, in motion

    A font that reads beautifully as a headline on a static page doesn't necessarily read at all as three words flashing across moving footage for under a second. The categories separate cleanly on exactly this axis:

    Sans-serif is the safe default, and there's a real mechanical reason for that. No serifs means no fine strokes to blur, alias or clog when video compression and small scale are both working against the text at once — the letterforms stay clean at sizes where finer detail simply disappears. It's not a coincidence that TikTok Sans exists as a named font in the registry, built specifically for exactly this job; Oswald's condensed width is a genuine practical advantage too, fitting more characters into the same on-screen line before wrapping.

    Serif is the category most likely to look worse than it did in your head. The fine strokes and terminals that make a serif font feel considered and readable in a printed paragraph are the first detail lost when the same text is shrunk and compressed for video — they can shimmer, shear or vanish depending on the background behind them. That doesn't make serif wrong; it makes it situational. Playfair Display's own registry preview describes it as built for "luxury & editorial," which is a real strength for a slower title card or a single elegant line held on screen for a few seconds — a much better job for it than dense, word-by-word transcript captions changing every half second.

    Display fonts are built for one or two words, not a sentence. Bebas Neue and Anton are both heavy, condensed, all-caps by design — genuinely excellent for a single punchy hook word held large on screen, which is exactly the register their own registry previews describe ("all caps headlines," "heavy & bold"). That same heaviness works against them once you're setting a full 10-word caption line: tight tracking and bold weight that reads instantly as one word starts to crowd and compete with itself across a whole sentence.

    Handwriting is the hardest category to read fast, by construction. Connected, irregular letterforms are the entire point of a script font aesthetically, and they're also the reason this category takes longest to parse at a glance — the opposite of what a caption someone has under a second to read actually needs. Reserve this category for a single accent word or a brand signature moment, not for the line doing the actual transcript work.

    Monospace is a register choice, not a legibility default. Courier New is genuinely legible at small size because every character occupies the same fixed width, but the fixed-width look reads immediately as "code" or "data" to a viewer — right for a stat callout or a deliberately technical aesthetic, wrong as a general-purpose caption font for anything that isn't leaning into that specific look.

    Where the font choice actually gets applied

    It's worth knowing there are two different caption paths in Versely, because font selection matters differently to each. add_video_captions burns a fixed text overlay you write yourself — a hook line, a headline, a CTA — and takes font_id directly as one of its parameters, so the registry choice maps straight onto what's rendered. add_veed_captions, the auto-transcribed subtitle path, works from styled presets (glass, whisper, corpo and others) that bundle a look, but it also accepts its own font parameter to override the preset's default where you want a specific typeface rather than the preset's built-in one. Either way, a valid id from the registry is what should be going into that field — not a remembered name, not a guess at how the app might have written it internally.

    Preview before you commit to a full render

    Once you've narrowed to a category and a couple of candidates, there's no need to render a full video to see how they actually look on your footage. preview_caption_style trims just the first few seconds of your video and runs the real caption path on that short clip alone — fast and cheap specifically because it's short, and built for exactly this decision point: "offer 1–2 styles to preview... do NOT auto-render every style," per its own description. That's the moment to actually check the legibility question against your real footage — a busy background behaves differently than a plain one, and a preview on your actual clip tells you more than any general rule does.

    Versely walkthrough: registry, preview, render

    The reliable order is registry first, preview second, full render last:

    "Show me the sans-serif and display caption fonts available. I want to preview 'TikTok Sans' and 'Anton' on the first five seconds of this video before picking one for the full caption run."

    That calls list_caption_fonts with the category filter to return real ids and previews rather than a guess at what's available, then preview_caption_style renders both candidates on a short sample of your actual footage — checking legibility against your real background, not a plain demo clip. Once you've picked a winner, the same font_id goes into the full run via add_video_captions or add_veed_captions for the complete video, so the font you previewed is exactly the font you get, string for string, rather than whatever the nearest guess happened to resolve to.

    The takeaway

    A font name typed from memory either matches a registry entry exactly or it doesn't, and a caption render isn't going to stop and ask which one you meant — the safest assumption is that you won't find out until you're watching the finished video. list_caption_fonts removes the guess entirely, and the five categories aren't interchangeable once text is small, moving and sitting over real footage: sans-serif is the safe default, serif and handwriting are for a slower or shorter accent moment rather than dense transcript work, display is for one or two words at most, and monospace is a deliberate register choice. Check Versely's font registry and caption style library before you write the request, preview on your own footage, and the caption you asked for is the caption that actually ships — not a burned-in best guess you don't notice was wrong until it's already rendered.