Foliowright

PDF accessibility remediation, for institutions that have to prove it

What it is

It re-tags the document you already have

Foliowright does not rebuild your PDF, regenerate it from a source file you no longer have, or convert it to something else. It reads the content streams of the existing document, works out what the structure actually is, and writes a conforming tag tree back into the same file. The pages look exactly as they did, because they are the same pages.

What happens to a document

  1. Read every drawing operation

    Text runs with their fonts, sizes and positions; images with their bounding boxes; vector rules; link and form annotations. Every operation is claimed — which is why orphaned content, one of the most common PAC failures, cannot happen by construction rather than by heuristic.

  2. Work out the structure

    Column-aware reading order, headings from typography rather than guesswork, lists from glyph and indent runs, tables from ruled lines and cell geometry, running heads and page furniture from what repeats across pages. All of this is deterministic: it is geometry and typography, so it is reproducible, auditable and free.

  3. Flag what geometry cannot answer

    What a chart means, what a form field is called, whether an image carries information. These are semantic questions, and the engine marks them for a person with the page and the image attached rather than inventing an answer.

  4. Write the tag tree back in

    Structure elements, parent tree, marked content, roles, language, metadata, and every remaining drawing operation wrapped as an explicit artifact so assistive technology skips it. Then validate, and repair what validation finds.

What it refuses to do

The failure mode in this category is not a tool that misses things. It is a tool that produces confident, plausible, wrong output that still validates — so nobody catches it, least of all the person relying on the description.

Describe a chart

Asked to caption a bar chart of WCAG conformance, a general caption model told us about “the percentage of people diagnosed with cancer… 71% experienced an increase.” Fluent, specific, invented, and a screen-reader user has no way to know. Data graphics go to a person.

Re-embed your fonts

A font the source never embedded cannot be fixed by re-tagging, whatever a product page claims. We report it as the source-document problem it is, and name the font and the page.

Guess a form field's name

An earlier version named twelve fields on a financial-aid form "$". A screen reader would announce “dollar sign, edit text” twelve times — worse than silence, because nothing looks broken. Implausible labels are now flagged instead.

Where your documents go

Nowhere. That is the whole answer, and it is worth being precise about.

Local by default
The engine runs on your machine or your server. In its default mode it makes no network requests at all. Files are read from disk, re-tagged, and written back to disk.
On-device models stay on the device
The optional figure-description model is downloaded once and then runs offline. Images are never sent over a network to reach it.
The cloud path is opt-in, per figure, by a person
If you choose to describe one figure with a frontier model, that single cropped image goes to that provider under your own key. Never automatically, never in bulk, never without a click.
No telemetry
Nothing reports back to us — not usage, not errors, not counts.

What it handles

Born-digital PDF Word exports InDesign & LaTeX output Multi-column layouts Ruled tables AcroForm fields Link & markup annotations DOCX

Scanned documents are detected and routed to an on-device OCR path that produces accessible HTML — there is no text on the page to wrap in a tag tree, and we would rather say so than pretend.

Scanned → HTML, not tagged PDF Spanning table cells inferred from geometry: not yet PowerPoint: not yet

Output is validated against veraPDF PDF/UA-1, the ISO reference implementation, on every build — and by hand in PAC 2024, which is what accessibility offices actually open. The measurements are on the research page.