← Writing

Why your Hindi captions look broken even when the text is right

Devanagari fails in video captions for typographic reasons, not transcription ones. The five faults to look for, and what fixing them actually requires.

LumaCaption · · 7 min read

Hindi captions usually break because the caption typeface has no Devanagari coverage and the renderer silently substitutes a fallback font — which breaks the top bar, misplaces matras and changes the weight, none of which is a transcription error.

A recurring support pattern: someone sends a frame where the Hindi caption looks wrong, and asks us to fix the transcription. The transcription is fine. Every word is correct. What is broken is the drawing.

This is a typographic problem that almost nothing in the video-tooling world is written about, largely because the people building caption tools are mostly testing in Latin scripts where the failure mode does not exist. It is worth writing down, because once you can name the five faults you can spot them in any tool in about ten seconds.

Devanagari is not Latin with different glyphs

Latin text is, to a first approximation, a sequence of independent shapes placed side by side. You can draw each character on its own and the result is readable. Nearly every text-rendering shortcut in video software relies on this being true.

Devanagari does not work that way. Words hang from a continuous horizontal bar — the शिरोरेखा — that runs across the top and joins characters into a visual unit. Vowel marks, the matras, attach above, below, before and after their base consonant, sometimes reordering relative to the logical character order. Consonant clusters form conjuncts: क and ष combine into क्ष, a single ligature that looks like neither of its parts.

All of that requires shaping — a process that takes a sequence of characters and works out what shapes to actually draw, using tables inside the font. If the font has no such tables, or the renderer does not run the shaper, the output is not slightly wrong. It is visibly, obviously broken to anyone who reads the script.

The five faults, and what each one tells you

These are diagnostic. Each points at a specific thing being wrong, so it is worth knowing which is which rather than concluding "the Hindi looks bad".

Check them at full size on an exported frame. Every one of these is invisible at thumbnail scale, which is precisely why they ship.

A broken शिरोरेखा
The top bar has visible gaps between characters. The text is being drawn glyph by glyph with no shaping at all — the most fundamental failure, and usually means the renderer is positioning characters itself rather than asking a shaper.
Dotted circles
A small dotted circle appears next to a matra. This is the font telling you it could not attach the mark to a base character. It is the clearest possible sign the typeface has no real Devanagari coverage and something has been substituted.
Broken conjuncts
क्ष, त्र or ज्ञ render as separate letters with a visible halant between them instead of as single ligatures. The font has some Devanagari coverage but not the conjunct tables, which is common in hastily extended Latin faces.
Weight that does not match
The Hindi line looks lighter or narrower than the English lines in the same video. The caption font had no Devanagari, so the system substituted a default at whatever weight it had — this is the fault that most often gets misread as a design choice.
Clipped matras
The top or bottom of a vowel mark is cut off. Devanagari needs more vertical room than Latin, and the line box was measured with Latin metrics — a layout bug rather than a font one.

Why the fallback happens silently

The reason this is so widespread is that font fallback is designed to be invisible. When a renderer is asked to draw a character the current font cannot supply, it does not fail — it quietly finds another font that can. This is correct behaviour and it is what keeps the web from filling up with empty boxes.

For captions it is a trap. A caption style is a specific typeface chosen for a specific personality: a heavy condensed display face, a soft handwritten one, a precise editorial serif. When Devanagari triggers fallback, everything that made the style a style is discarded and replaced with whatever the system had, and no error is raised anywhere. The tool believes it rendered your caption in the font you picked.

The result is that a catalogue of forty beautiful caption styles collapses, for Hindi, into one system font wearing forty different colours.

What fixing it actually requires

There is no clever trick here. The fix is to decide in advance, for every caption family in the catalogue, which Devanagari face should be used when the script changes — and then to load that face at the weight and slant the caption will actually be drawn at.

We map eight Devanagari companion faces across the catalogue, chosen so the companion carries something of the original: a heavy Latin display face gets a heavy Devanagari face, a soft handwritten one gets a soft companion. It is not a perfect substitution, because a Devanagari face is not a translation of a Latin one and pretending otherwise produces worse results than accepting the difference. But a heavy style stays heavy, which is most of what the viewer notices.

The weight matching matters more than it sounds. Loading the companion at a default weight and letting the browser synthesise a bold produces exactly the mismatched-weight fault above, only now you have caused it deliberately. The companion has to be requested at the weight it will be drawn.

What to check, in what order

CheckWhat it rules outHow
Is the transcript correct?Transcription errorRead the text, not the video
Is the top bar continuous?No shaping at allFull-size frame, zoom in
Any dotted circles?No Devanagari coverageLook beside every matra
Do conjuncts form ligatures?Partial coverageTest क्ष, त्र, ज्ञ specifically
Does the weight match the English?Silent font fallbackSame video, both scripts

Run these against an exported file rather than a preview. Preview and export can use different rendering paths, and a fault that only appears in one of them is a different bug worth knowing about.

A test string worth keeping

If you are evaluating a caption tool for Hindi, do not test with a sentence of simple consonants — most fonts survive that. Test with something that exercises the hard parts: a conjunct, a matra above the line, a matra below it, and a nukta.

क्षत्रिय, विज्ञान and श्रृंखला between them cover most of what goes wrong. If those three render cleanly at full size in the caption style you actually intend to use, the tool is doing shaping properly. If any of them shows a dotted circle or a broken bar, you have found the problem before it found your audience.

Getyourvideoswatched.

Every style unlocked. No credit card.