Hobby projects → Subtitles for every video in the house
Project · Speech recognition · Local AI · September 2026

Subtitles for every video in the house, made at home

Our library has films and series in Japanese that never came with subtitles, and a household that watches in English and in Thai. This is the pipeline we built on the AI appliance to fix that: it listens to a video, works out what language is being spoken and where, transcribes it with two speech engines that check each other, translates the result into every language the house reads, and drops a subtitle file next to the video — overnight, unattended, and without a single byte leaving the building.

What it does

The finding that made it work

The first versions transcribed beautifully and still missed whole conversations. It took a measuring tool rather than a better model to find out why: a voice-activity detector was deciding which parts of the audio the speech engines were allowed to hear, and on animation with a music bed it simply does not register a lot of dialogue. Thirty seconds of an argument, gone, because the detector called it music. Every downstream improvement — better engines, better merging — could only work on what it was given.

So the detector was demoted. The engines now hear the whole timeline, cut into thirty-second pieces at the quietest moments, skipping only stretches that are silent by energy. The detector keeps two advisory jobs — choosing speech-dense windows for language identification, and suggesting cut points — and never again decides what gets transcribed. Anything the engines invent over music is dealt with where it should be: by two engines disagreeing, by a referee that knows what a looping artefact looks like, and by a gate that checks a doubtful line has sound under it before keeping it.

On the episode that exposed the problem, the change recovered eight minutes of dialogue the engines had never been allowed to hear.

Thirty seconds is a rule, not a preference. Every published integration of the Japanese engine feeds it thirty-second pieces, and its own benchmarks were run that way. Longer pieces make the decoder skim or fall silent over music, and make its forced aligner collapse whole runs of words onto a single timestamp — on a sparse film, half the words. Short, speech-dense pieces keep both on track, and decode faster into the bargain.

How a run works

Point it at a folder and it works in rounds of ten files, so subtitles appear every round rather than at the end of the night. For each file:

Rules that came from measurement, not opinion

Each of these was a change made after a tool showed the size of the problem, and each one is checkable again on any file by re-running the tool.

What it runs on

Where it fits

The GPU box in the rack does the listening; its sibling, the N5 AI MAX, runs the house’s voice assistant on its own hardware, so an overnight subtitling job never competes with someone asking for the lights. Subtitling is simply the best use of a 24 GB card while everyone is asleep, and the same rules apply as to everything else we run — measure before changing, fix at the layer that can hold the fix, and never let a component that cannot be trusted make a decision for one that can. If your library has the same problem, write to us.