HermodLens 1.0.1 user manual
HermodLens answers four questions about the documents on a website before anyone quotes or plans remediation:
- Which documents do these pages link to?
- How bad is each PDF: scanned, untagged, or tagged with gaps?
- How many pages fall into each class?
- Roughly what will it cost at the rates you use?
It runs on your computer as a Chrome extension. It has no account, does not upload anything, and contacts only the sites you allow.
Important. HermodLens is a triage tool. Its checks are the ones a machine can make reliably. It does not certify conformance with WCAG 2.1, Section 508, EN 301 549 or PDF/UA, and it is not legal advice. Plan for a person to review every document.
The screenshots in this manual are real captures of version 1.0.1 in Chrome for Testing 151.0.7922.34 on Linux x64. They use the fictional "Hollowmere Township" example site included in the download.
---
1. Install and open
Follow the installation guide: load the extension folder with Load unpacked on chrome://extensions. Then open HermodLens with its toolbar button or Alt+Shift+H. The workspace opens in a new tab and has five numbered sections, which are linked from the top bar.
To practise first, run the example site from the download folder:
node tools/serve.mjs
and paste the six URLs it prints.
2. Define the scope
You can combine any of these inputs in one project:
| Input | Use it when |
|---|---|
| Pages to scan | You know the pages that list documents: agendas, forms, policies, department pages. HermodLens reads each page's HTML and collects links to PDF, Word, Excel, PowerPoint, OpenDocument and RTF files. It also collects links that match known CMS patterns without an extension, such as CivicPlus /DocumentCenter/View/ and Granicus /showpublisheddocument/. It does not follow other links. |
| Document URLs | You already have a list, for example a crawler export, a CMS media report, or a list from a records clerk. |
| Page you were viewing | The document list on a page is built by JavaScript or sits behind a login. See section 4. |
| Local files | You have the files themselves, for example a media-library export or a shared drive. They are analysed in memory and never uploaded. |
Give the project a name; it appears in exports. Advanced settings let you change:
- how many pages per PDF are analysed (default 500; longer files are marked as partial);
- the largest file size to download (default 50 MB);
- the download timeout (default 60 s);
- the CMS patterns, plus your own URL fragments to treat as documents.
Choose Scan pages and documents.
3. Allow access, site by site
Chrome asks before HermodLens reads any site. The dialog names the exact host. Choose Allow.

If the pages link to documents on another host (a CDN, a document server, a second domain), HermodLens stops and lists those hosts before downloading anything from them. Choose Allow and continue, then allow them in Chrome's dialog. Choose Skip these hosts to leave them out. Skipped documents stay in the register as "Cannot assess" so nothing disappears silently.

Pages and documents are downloaded without your cookies, so you get what an anonymous visitor gets. Progress and every result appear in 2. Run; Cancel stops the run and keeps what has been analysed.
You can review or remove site access at any time on chrome://extensions → HermodLens → Details → Site access.
4. Collect links from a JavaScript-built page
Some CMS widgets build their document list in the browser, so it is not in the page HTML. For these pages:
- Open the page in Chrome. Wait until the list is visible.
- Click the HermodLens toolbar button, or press Alt+Shift+H, on that tab.
- In the workspace, choose Collect document links from this tab.
- Choose Scan pages and documents. The collected links are analysed together with the rest of the scope.

This works for pages behind a login too, because links are read from the page you are looking at. The documents are still downloaded anonymously, so files that need a login appear as "Cannot assess" with the server's answer (for example HTTP 403).
5. Read the register
3. Register lists one row per document in priority order:
- documents you mark Service-critical;
- then by class, worst first;
- forms before other documents;
- then longer documents first.

Classes
| Class | Meaning | Typical next step |
|---|---|---|
| Cannot assess | Download failed, HTTP error, password required, too large or unreadable. | Fix the link or file, or ask the owner for an unlocked copy. |
| Image-only (scan) | No page has a text layer: scanned pages, or text converted to outlines. | OCR, then full tagging, or replace with a web page. |
| Partly scanned | Some pages have images or drawings but no text layer. | OCR those pages, then tag. |
| Untagged | Has text but no tag structure. | Tag (Acrobat, CommonLook, a vendor, or re-export from the source file with tags). |
| Tagged, gaps found | Tagged, but at least one basic property is missing. | Usually quick fixes: title, language, alt text, field tooltips, bookmarks. |
| Tagged, no machine-found gaps | Passed every check HermodLens makes. | Manual review: reading order, tag correctness, alt-text quality, tables, contrast. |
| Office document | DOCX, XLSX, PPTX, legacy Office, OpenDocument or RTF. | Check in its own application (light checks only). |
| Not a document | The link returned a web page or other content, often a "not found" page. | Fix or remove the link. |
Click a chip, or use Class, to filter. Search matches file name, title, host, URL and notes. Hide duplicates hides files whose bytes are identical to another listed URL. Column headings sort the table: press once for ascending order and again for descending.
What is checked in each PDF
- Text layer per page. A page without extractable text needs OCR if it paints an image or draws many shapes (usually text converted to outlines). Blank pages and tagged pages, such as a full-page photo with alt text, are not counted.
- Tags. The tag structure tree is read page by page.
- Title. Checks the document title (Info or XMP) and whether viewers are told to show it (
DisplayDocTitle). - Language. Checks the document language (
/Lang). - Figures. Counts figure tags without alternative text (
/Alt). - Forms. Counts form fields without a tooltip name (
/TU), and detects XFA forms. - Bookmarks. Flags documents over 20 pages without bookmarks.
- Security. Flags encryption settings that deny content extraction for accessibility.
- PDF/UA. Reports a PDF/UA claim in the metadata as stated, without verifying it.
- Information only. Page count, producer, creator and dates.
Each issue in Details names the related WCAG success criterion or PDF technique, for example WCAG 3.1.1; PDF16 for a missing language.
Details, decisions and notes
Choose Details on a row to see every property, the issues, the pages that link to the document and the link texts used. Write a Note; it is saved and exported. Press Esc or Close details to return to the row.

For each document, set a Decision: Undecided, Remediate, Archive, Remove or Replace with web page. Tick Service-critical for documents people need to use a service, such as applications, forms, schedules and notices. Decisions are kept when you scan again.
HermodLens also flags links whose text does not describe the document, for example "click here", a bare URL or a file name (WCAG 2.4.4). This is a problem on the page, not in the file.
Check scope coverage before estimating

After a scan, Scope coverage shows how many listed pages were read, failed, or returned no document links. Check each failed page URL and its access, then scan again. For a page with no links, confirm that it really has no documents; if the list is built by JavaScript, collect links from the live tab as described above. If you add document URLs or local files without scanning pages, coverage says that no pages were scanned. A saved PDF record without analysis is listed for follow-up and is excluded from the estimate until you scan or assess it.
The same section names documents outside the PDF estimate: duplicates, decisions excluded from the chosen scope, Office files, links that could not be assessed, and links that are not documents. Review in register opens the selected document's details. These items remain in the register and export for follow-up. A scan that finds no document links still allows an HTML report or JSON project export so failed and empty pages can be handed off; the CSV register requires at least one document.
6. Estimate
4. Estimate turns the register into quantities and a cost range:
| Line | Quantity |
|---|---|
| OCR of image-only pages | pages without a text layer in image-only and partly scanned PDFs (the register's Pages needing OCR column) |
| Tagging and remediation | all pages of untagged, scanned and partly scanned PDFs |
| Property fixes | number of tagged PDFs with gaps |
| Manual verification | every page of every PDF in scope |
| Form fields needing work | fields in PDFs that are not "no machine-found gaps" |

Enter your own low and high rates and a currency label. The defaults are placeholders, not market prices. Use rates agreed for your own project and review the assumptions with the person who will do the work. Review the rates, currency and included decisions, then tick the confirmation box to show the estimate. Any change to those assumptions clears confirmation. An HTML report exported before confirmation labels the estimate unconfirmed and omits monetary totals.
Use Include documents marked to choose which decisions are priced. By default these are Undecided and Remediate. Duplicates are counted once. Office files, documents that could not be assessed and non-document links are counted but not priced. If a PDF was analysed only partly, its image-only pages are extrapolated from the analysed share; the note under the table says so.
7. Export and keep your work
5. Export writes files to your downloads folder:
- CSV register: one row per document with 45 columns, ready for Excel or Google Sheets. Cells that start with
=,+,-or@are prefixed so spreadsheets do not run them as formulas. - HTML report: a self-contained, printable page with scope coverage, a summary by class, the estimate, the register and the method and limits. Open it in a browser and print to PDF if needed.
- Project (JSON): everything, including decisions, notes and rates. Use Open a saved project (JSON) to continue later, on another computer, or after updating HermodLens.

The current project is saved automatically in the browser. Start a new project clears it; export first if you want to keep it.
Narrow windows and printing
The workspace fits narrow desktop windows. Wide register and rate tables have a labelled scroll region: focus it with Tab, then use the arrow keys. In a narrow window, the exported HTML report presents each document as a labelled card. Summary and estimate tables keep their columns inside their own scroll regions. Printing restores the document table. This is a desktop Chrome extension; a narrow-window check is not an iPhone installation.

Open the actual fictional sample report without installing the extension. The matching CSV and JSON are in the same folder. These illustrate 17 document records; they do not represent a customer website.
8. Troubleshooting
| Symptom | Cause and fix |
|---|---|
| "Access to those sites was not allowed" | You chose Deny in Chrome's dialog. Scan again and choose Allow. |
| A page shows "no-permission" in the log | Access to that host was not granted. Scan again and allow it. |
| Many documents are "Cannot assess" with HTTP 403 | The server needs a login or blocks automated requests. Use local files instead. |
| A list on a page is missing | It is built by JavaScript. Use Collect document links from this tab. |
| A CMS document link was not found | Add a fragment of its URL under Extra document URL patterns. |
| "Could not read that tab" | Open the page and click the HermodLens button or press Alt+Shift+H on that tab, then collect again. |
| A large PDF shows "Analysed the first 500 of N pages" | Raise Pages analysed per PDF in Advanced settings. |
9. Limits of version 1.0
- Up to 300 pages and 2,000 documents per project.
- No crawling: only the pages you list, plus tab collection.
- Documents behind a login cannot be downloaded.
- Not checked: reading order, whether tags are correct, alternative-text quality, colour contrast, table header semantics, or the accessibility of the web pages themselves.
- A figure that spans two pages is counted twice. Push buttons are not counted as form fields. Alternative text given only as ActualText is not recognised.
- Password-protected PDFs are not opened.
- Office files get light checks only (DOCX/XLSX/PPTX title and language; DOCX image alt text).
See ../PRIVACY.md for what is stored and where, and ../LICENSE.md for the licence.
Verified scope for this release
The local fictional site exercises selected-page scanning, a separate document host, PDF and Office triage, live-tab collection, local files, decisions, own-rate estimates and CSV/HTML/JSON exports. The runtime in the buyer ZIP is the one checked. This is not a validation of customer sites, managed Chrome policy, 300 pages or 2,000 documents, other browsers or other operating systems. Review files before sharing any report.