How it explains each slide

A slide is not running text: it is loose blocks on a page. Filmina works on that, and from there come the two things that separate it from a text-to-speech reader: it explains instead of reading, and it can point at what it is talking about.

What gets read off the slide

Two things are stored for each page: the render, exactly as it looks, and the text blocks with their coordinates. Those coordinates are what later lets the frame surround the exact block the voice is talking about.

Not everything written on the page is content. Before explaining, running headers, footers, page numbers, dates and file paths are discarded: they are detected because they repeat page after page. If they got through, the total coverage rule would force it to explain the footer to you.

The segments

The explanation does not come back as one block of text: it comes back split into segments of one or two ideas, between three and seven per slide, ten to thirty seconds spoken each. Every segment knows which blocks of the page it covers.

That is what lets the frame move: the segment being spoken says where to look. It is also the unit you navigate with, because the up and down arrows jump from one idea to the next, not from one second to the next.

What the model is not allowed to do

The explanation is written to be heard, not read, and that comes down to concrete rules:

Coverage is verified in code

Asking a model to skip nothing is not enough: it has to be checked. On the levels with total coverage, when the answer comes back every block is reviewed to make sure none was left unexplained, and if one is missing it is asked for again on its own.

Coverage does not depend on the model complying. It is checked, and what is missing is asked for again.

Diagrams and figures

The model is a text model: it does not see images. So it does not explain them to you. A figure is marked as a figure and you are told to look at it, which is better than being told about a chart nobody saw.

A diagram's labels are a separate case. They arrive marked as what they are and get explained together, in a single segment, describing what the schematic shows and how those elements relate according to the slide. They are labels on a drawing, not claims made by the material: giving each loose word its own segment would mean inventing a definition for each one.

The queue: you do not wait twice

While you listen to one slide, the ones after it are being generated in the background. The whole document is queued, so in the long run you do not wait on any of them.

The queue goes by priority, not by arrival: the slide you are looking at goes first. If you jump somewhere else, whatever was being thought gets cut short, but not thrown away: what the model managed to write is kept so it can be resumed, instead of being thought twice.

What gets generated stays on your disk. The script is saved per detail level and per language, and the audio per voice: changing voice does not rethink the explanation, it just says it again.