Overtone: WCAG Audio Description for a Whole Video Archive at ~$0.03 a Minute, Generated in Place on Backblaze B2
WCAG requires a spoken audio-description track on prerecorded video: a narrator describing what is on screen in the pauses in the dialogue. Public universities owe this under federal law by April 26, 2027, but human describers charge $15-$75 per finished minute, so archives go undescribed or get deleted. Overtone reads each video out of a Backblaze B2 bucket, generates the description in place, and writes the described master back beside the original. Measured on a real 3-minute MIT OpenCourseWare lecture: about nine cents to describe, roughly three cents a minute end to end. Every generative step runs through Genblaze, with automatic provider failover so an archive-scale run does not die on a single transient error.
WCAG 2.1 SC 1.2.5 requires a spoken audio-description track on prerecorded video: a narrator describing what is on screen, spoken into the pauses in the dialogue. It is the accessibility requirement almost everyone skips, because captions are cheap and description is not. Human describers charge $15 to $75 per finished minute, so a university with twenty thousand lecture recordings faces a bill in the millions. The archive stays non-compliant, or gets taken offline. In 2017, UC Berkeley removed 20,000+ lectures from public access rather than pay to remediate them. US public entities owe WCAG 2.1 AA under the DOJ's ADA Title II rule by April 26, 2027.

The result on real footage
A 3-minute segment of an actual MIT OpenCourseWare lecture (18.03 Differential Equations, a chalkboard class) cost about nine cents to describe, roughly three cents per finished minute end to end. It reads the board with GPT-4o and voices the track with OpenAI TTS; short clips cost more per minute because fixed transcription overhead does not amortize. Either way it is hundreds to thousands of times cheaper than a person.



How the pipeline works
- Read the video out of B2 (source, not just sink).
- Transcribe with AssemblyAI universal-2 to get word-level timings.
- Find the pauses a describer would speak into (silences long enough to hold a useful phrase), merging overlapping speakers so a gap is never invented where two people talk at once.
- Sample keyframes for each pause, using a difference hash to skip slides that have not changed. A slide held for five minutes is described once, not eight times.
- Describe each new pause with GPT-4o vision in a prompt that reads technical content aloud, sized to the length of the pause.
- Fit the narration in a Genblaze AgentLoop (generate → evaluate → retry): speak it, measure the real audio, and if it overran the pause, rewrite it shorter using the rate the voice actually delivered.
- Compose: mix the descriptions into the pauses with the program audio ducked underneath. If a pause is too short to fit even a trimmed description, freeze the frame and play the full description (WCAG 1.2.7 extended description).
- Write back to B2, beside the original: the described .mp4, a WebVTT descriptions track, a reviewer transcript, and a hash-verified Genblaze provenance manifest.


Failover, provenance, resume
Vision and voice each run through a failover chain: if the primary provider rate-limits or errors, the next one takes over. Vision goes OpenAI → Google → GMI Cloud, voice goes ElevenLabs → OpenAI TTS. An archive-scale run does not die on a single transient failure. Every output is recorded in a hash-verified Genblaze Manifest stored beside the video in B2, so a re-run against a 10,000-video prefix costs almost nothing: unchanged videos are skipped (source SHA-256 matches the manifest), replaced videos are re-described (source SHA-256 changed).

What makes it different from the SaaS in this space
- Commercial AI description tools (3Play, Verbit, Visonic) price per minute with a human in the loop, so they cannot serve an archive. 10,000 hours at $7/min is $4.2M. Overtone's cost scales with compute, not human minutes, so the unit of work is the archive, not the video.
- They require upload. You ship them your video and pay egress. Overtone runs against B2 directly and writes results back in place, so the media never leaves storage you control.
- Batch AI-description SaaS does exist (ViddyScribe, MediaScribe, Maestra). The distinction is where the work runs: those are services you upload your archive to. Overtone runs against B2 in place and writes results back beside each original.
- And one thing generic description gets wrong that matters for lectures: technical content. Overtone reads the board (equations as spoken math, diagrams traced node by node, on-screen text read verbatim), not just that a slide is present.

Fits the workflow universities already have
Overtone emits a plain-text WebVTT descriptions track. That is exactly the format the two dominant university video platforms ingest: both Panopto and Kaltura accept an audio-description VTT that begins with WEBVTT and carries plain, time-based cues (they reject in-cue markup, which is why the output is kept tag-free). The described track drops straight into the system a university already runs, and the master and manifest stay in B2.
Honest limitations
- The cost claim is per finished minute end-to-end on a 3-minute real MIT lecture. Longer runs amortize fixed transcription overhead better, so the per-minute cost tends to fall on archive-scale runs, but a production deployment should measure its own corpus.
- Vision-model description quality on non-lecture material (film, sports, unscripted panels) has not been characterized. The prompt is tuned for chalkboard and slide content; other genres would need targeted eval.
- The hosted demo runs against a curated video allowlist with a spend cap and per-client rate limit, so it stays safe on a public URL. Running against your own archive means running the CLI or the container against your own B2 credentials.
- A production deployment should include a human review step for high-stakes content (medical, legal, safety training). The reviewer transcript is emitted for exactly this reason.
Overtone: WCAG Audio Description for a Video Archive, Generated in Place on Backblaze B2. ~$0.03/min vs $15-$75 per Human Describer.
View the project