One file holds the words and a line cut for each shape: 16:9, 9:16 or any you add. The player shows the cut closest to the picture. Re-cut subtitles you already have, or make new ones from audio.
Real pipeline output on Tears of Steel, a Blender open movie. The same moment is cut for 16:9 and 9:16. Key words pop, and the CC button cycles off → styled → plain. · MP4 version
Why Overtone
Most captions are cut once, for one screen, by filling each line to a length limit. Turn the video vertical
and that cut falls apart. Overtone stores every word once, with its time and speaker, and cuts
the lines for each screen shape by reading rules. A line avoids ending on “the” or “of”. Names
and numbers stay together. Each speaker gets their own caption, and pauses show as breaks. Bring your own SRT or
WebVTT, or let the CLI transcribe your media: a transcription model writes the text, speech engines time each
word, and an LLM editor fixes names and terms. The LLM never sets timestamps.
Same words, cut two ways
A NASA interview with two speakers, cut for a 9:16 phone video (22 characters × 2 lines), from the same words and times. Filling lines to the limit ignores who is speaking and ends lines on “Jim,”, “A”, “I”, “the” and “about”.
Lines filled to the limit
the 2004 class. Jim,
thank you for joining
us. It's great to be
here, Allard. Thanks.
Well, if you wouldn't
mind, we've got a
…
don't you walk us
through you? Okay. A
little about me: I
grew up in Eugene,
Oregon. I joined the
Astronaut Corps about
four years ago, as you
said, May of 2004,
Overtone
Jim, thank you
for joining us.
It's great to be here,
Allard. Thanks.
Well,
if you wouldn't mind,
…
Okay.
A little about me:
I grew up
in Eugene, Oregon.
I joined
the Astronaut Corps
about four years ago,
as you said,
May of 2004,
On three English clips (21 minutes, 16:9 cuts), 0.3% of Overtone’s breaks end on a word like “the”, “of” or “and” with no pause after it. Filling lines to the limit gives 29%, ElevenLabs’ SRT export 16%. Overtone shows all 47 pauses of 0.5–1.5 s as a break; the other two show 28% and 72%. These are rule checks, not reader judgments. Details in the caption benchmark.
Three packages. Use any one.
The format sits in the middle. The player shows it, and the CLI writes it.
Format overtone-format
One .overtone.json file holds each word once, with its time, speaker and semantic classes, plus a line cut per screen shape. Comes with a JSON Schema, a validator and exporters to WebVTT, SRT and plain text. No runtime dependencies. Runs in Node and the browser.
A video.js 8.5+ plugin. It shows the line cut closest to the shape of the picture and switches live on resize. The CC button or the C key cycles off → styled → plain. Pick one of 5 style packs or write your own CSS.
Re-cuts the SRT or WebVTT you already have, offline and with no keys. Or turns audio and video into captions: text from a transcription model (OpenAI, Azure OpenAI or ElevenLabs), word times and speakers from Azure AI Speech (or ElevenLabs or OpenAI), and an LLM editor (OpenAI, Azure OpenAI or Anthropic). Code checks the structure of every edit. --local runs it all on your machine. Writes JSON, WebVTT, SRT and a transcript, or an MP4 with the styled captions burned in.