Audio description that waits for the silence.
Lull watches your video, writes lines about what is on screen, fits each into a real pause, and voices only the lines that pass a check against the frames.
Nothing plays until you press it.
The line traces who speaks in 90 seconds of Elephants Dream. Lull writes only into the lit pauses.
The problem
The missing half of a lecture
“As you can see on this chart…”
Lecturers point. At a chart, an equation, a diagram on the board. A student who can’t see the slide gets the pointing and none of the thing. Audio description puts that half back, spoken in the pauses, in a voice that never talks over the lecturer.
Human description is priced per minute of video, and most lecture libraries have none.
- 1.2.5WCAG 2.1, level AA
Audio description is provided for all prerecorded video content in synchronized media.
W3C, Understanding 1.2.5- Apr 26, 2027ADA Title II
- US public universities must meet WCAG 2.1 AA from this date, course video behind a login included.Federal Register, Apr 20, 2026
How it works
How Lull works
Five steps, in this order. Models do the seeing and the writing. Code keeps the time.
Listen
Every word gets a start and an end, every speaker a turn. What’s left between them are the pauses.
NVIDIA Parakeet TDT + Nemotron Diarization
Watch
The model watches the video itself and lists what a viewer would see, and what the dialogue already says.
Nemotron 3.5 Super VL
Write
For every moment worth describing, up to three versions of the line: short, medium and long.
Nemotron 3 Ultra
Fit
A solver places the lines. Durations are measured from real audio, never guessed by a model.
Constraint solver, no model
Check & speak
Each claim is checked against its frames. A line is voiced only if its check passes; one that fails is held for a person.
Super VL checks, NVIDIA Magpie speaks
The guarantee
Zero overlap, by construction.
Language models are bad at timing. On the timing-aware scoring in REFRAMED (COLM 2026), the best model reached 17.3%; human describers reached 61.2%. So Lull splits the job. The model writes. A constraint solver places each line in a window measured from the audio, and a run that overlaps a single word can’t publish.
- Guard0.20 s of clear air on each side of every word.
- DurationsMeasured from the voiced audio, never estimated by a model.
- Too longSped up to at most 1.10×, or replaced by a shorter version.
- Publish gateOverlap with speech must be 0.00 s.
Speech, words, guards, windows and the line’s voiced length come from the real run; the long version is drawn for illustration.
The refusal
A line that fails its frame check isn’t voiced.
Draft, cue 8Checked claim by claim against its frames
Both stand (supported) facing each other (supported), gesturing (supported) and talking (not visible in the frames, removed).
Unsupported claim removed. The line is re-checked, then voiced.
Both stand facing each other, gesturing.
Nemotron 3.5 Super VL takes another look at the exact frames the line came from and rules on each claim. What it can’t see is cut before a voice is made; a line that still fails is held for a person.
The check is a model too, so it can pass a line that is wrong. The benchmarks show how often, and what turning it off changed.
- Seen. Kept.
- Not visible or contradicted. Cut, and the line is checked again.
- Still failing. Held for a person; never published on its own.
What you ship
Six files, in formats players already read.
A text track, an audio track, two finished videos, a conformance report and the script.
Each line can be reviewed in the studio before it ships.
- descriptions.vttWebVTTEvery line with its timing, as a kind="descriptions" text track.
- described-audio.m4aWCAG G78The description as its own audio track, for players that let viewers choose it.
- described.mp4WCAG G173The video with the description mixed into its soundtrack.
- extended.mp4SC 1.2.7, G8Pauses the picture when a pause is too short for what needs saying, mid-sentence if the narration runs on.
- report.htmlConformanceWCAG conformance for the video, plus every model call and what it cost.
- script.mdMarkdownThe full description script, for editing and sign-off.
6 filesNeeds review in the studio: 1 held, none approved yet
The studio
Every line, with its evidence.
The whole timeline in one view: the soundtrack, who speaks, every pause and how much fits in it, and each line with the frames behind it. Edit a line and Lull re-fits, re-checks and re-voices just that one.
Cues13 lines, 13 pauses
- Extended 10:01.79A bald person in a red shirt and dark jacket stands among hanging wires.14 wordsExtended
- Extended 20:04.92A tall narrow shaft lined with metal panels and crisscrossed by wires appears, a platform extending into light.18 wordsExtended
- Cue 10:09.00The bald person and a younger person with dark hair walk through a doorway into a bright area.18 of 20Verified
- Cue 20:18.25The younger person runs across a narrow metal walkway in a dark wire-filled space.14 of 15Held
- Cue 30:24.47In a moment, a dark chamber with metal platforms and hanging objects.12 of 15Verified
- Cue 40:30.70Both navigate through the wire maze.6 of 15Verified
- Cue 50:42.69Small figures run across high beams and platforms.8 of 13Verified
- Cue 60:48.42In a moment, both walk together along a curved metal path.11 of 13Verified
- Cue 70:57.43In a moment, multiple figures move along a curved beam among wires.12 of 13Verified
- Cue 81:07.60Both stand facing each other, gesturing.6 of 10Verified
- Cue 91:12.20The bald person runs across a platform and looks out.10 of 11Verified
- Cue 101:18.12The bald person stands close to the younger person, looking upward and speaking.13 of 14Verified
- Cue 111:23.21The two figures fall through the dark space, tumbling among the wires and platforms.14 of 14Verified
Cue 8
Verifiedwindow 1:07.60 to 1:10.92

Both stand facing each other, gesturing.
- both standSeen
- both face each otherSeen
- both gestureSeen
- both talkNot visible, cut
- gestureSeen
- talkNot visible, cut
- facing each otherSeen
- standSeen
- Both stand facing each other, gesturing and talkingNot visible, cut
- watched by Super VL
- written by Ultra
- fitted by solver
- voiced by Magpie
For developers
From a terminal, an API or an agent.
The same pipeline as the studio, with the same checks and the same files.
- describe_videodescribe a sample, with progress
- get_tracksits lines and files
- get_reportWCAG status and held lines
$ lull describe lecture.mp4 --out described/ # writes described/ descriptions.vtt described-audio.m4a described.mp4 extended.mp4 report.html script.md
Runs the whole pipeline: listen, watch, write, fit, check and speak.
$ curl -N -X POST "$LULL_API/v1/runs" \ -H "X-Lull-Client: web" \ -F "file=@lecture.mp4" # streams progress; the first event carries the run id. # GET /v1/runs/{id} then lists its nine files: # descriptions.vtt extended.vtt described-audio.m4a # described.mp4 extended.mp4 (when made) cues.json # script.md report.html manifest.json
Every endpoint, with its answers, in the developer docs.
<!-- one script, one tag --> <script type="module" src="https://lull-omega.vercel.app/player.js"></script> <lull-player src="lecture.mp4" descriptions="descriptions.vtt" described-audio="described-audio.m4a"></lull-player>
Mixed audio, spoken lines, your screen reader, or the extended version: the viewer chooses.
# an agent, over MCP (streamable HTTP) { "mcpServers": { "lull": { "type": "http", "url": "https://lull-api-494617981995.us-central1.run.app/mcp" } } } # tools: list_samples, describe_video, get_tracks, get_report
The hosted server describes the samples; run it locally to describe your own files.
Benchmarks
Measured, misses included.
Four numbers from a pre-registered test on synthetic lectures, each with its interval. The comparison with human describers, the controls and every known failure are on the benchmarks page.
Overlap with speech
Seconds where a description plays over a word.
0.000 sSeconds of description over narration, across 12 videos.Hallucination rate
Claims in a description that aren’t in the frames.
18.1 %19 of 105 claims unsupported; 95 % interval 4.0–37.2 %.Visual-fact recall
Visual facts a viewer needs that the description covers.
2.6 %6 of 235 visual facts, standard track; 95 % interval 0.5–5.1 %.Cost per minute
Model spend for each minute of video.
$0.027Model spend per minute of video; web searches are counted apart.
Against human audio description of the same videos, Lull conveyed 0.8–4.5 % of the facts the describers chose to say; two people describing the same film shared 38.8–42.7 %. A person can add the rest in the studio.
Checked against the wrong footage, the frame check still passed 13.2 % of lines (5 of 38, an upper bound). On these synthetic lectures, checking each line against its frames did not measurably reduce unsupported statements, and it cost recall: with the extended track, 14.0 % of visual facts were described with the check and 28.9 % without it (+14.9 points, 95 % interval +6.2 to +23.1).