Guide

Imbricalt Chrome Extension: Surface Alt Text on Any Website

·Imbricalt Team

Imbricalt Chrome Extension: Surface Alt Text on Any Website

The Imbricalt Chrome extension surfaces alt text on any website by detecting Imbricalt-processed images through two complementary methods: reading embedded XMP/IPTC metadata directly from the file, and as a fallback, computing a perceptual hash (pHash) locally and querying the Imbricalt API for a match. This dual approach ensures coverage even when image-optimisation pipelines strip metadata. The extension works retroactively on every image ever processed by Imbricalt, regardless of where it is hosted. According to the WebAIM Million 2026 report, 56% of home page images lacked alt text, and 68.4% of the top one million websites failed WCAG 2.2 SC 1.1.1 (Non-text Content) entirely.

What the Extension Does

Most alt text on the web is stored in a CMS database or an HTML alt attribute — both of which are tied to a specific page, platform, or deployment. When an image is copied, cached, syndicated, or migrated, the description stays behind. The Imbricalt extension solves this by reading alt text from the image file itself.

When you visit any webpage, the extension scans all JPEG and PNG images and processes each one in two stages. Stage one is a lightweight metadata parse: it fetches the first 64 KB of each image via a HTTP Range request and looks for the imbricalt:processed signature inside the XMP or IPTC metadata. If found, it extracts the alt text from the dc:description or IPTC caption field and displays it. Stage two — the perceptual hashing fallback — runs only when no XMP signature is found, covering images whose metadata was stripped by CDNs, social media platforms, or aggressive optimisers.

A performance audit in February 2026 measured median detection time at 210 milliseconds via the XMP fast path and 680 milliseconds when the pHash fallback was required, including the API round trip.

Two Detection Methods: XMP Metadata and Perceptual Hashing

The extension uses a tiered detection strategy designed for maximum coverage with minimum latency.

Method 1 — XMP/IPTC metadata scan (fast path): This is the primary detection method. The extension requests the first 64 KB of each image and parses the binary structure to extract XMP XML or IPTC caption data. If the imbricalt:processed signature is present in the XMP namespace, the alt text is read directly from dc:description and displayed. This path requires no network calls beyond the initial image byte fetch and completes in under 300 milliseconds on a broadband connection.

Method 2 — Perceptual hash lookup (fallback): If no XMP signature is found — because the metadata was stripped during re-encoding, format conversion, or CDN transformation — the extension computes a DCT-based perceptual hash (pHash) of the image using the @stabilityprotocol.com/phash library. This 64-bit hash is sent to the Imbricalt API, which looks it up against a database of hashes computed during image processing. If a match is found, the API returns the original alt text.

The extension uses the same pHash library that runs on the Imbricalt server (via sharp + phash on Node.js Trigger.dev tasks), ensuring bit-exact hash matches between client and server. A compatibility test against 5,000 images in April 2026 found that the XMP path alone detected 83% of Imbricalt-processed images. Adding the pHash fallback raised detection to 97%. The remaining 3% were images that were cropped or resized after processing, which alters the pixel data and changes the hash.

How pHash Works on the Extension Side

Perceptual hashing converts image content into a compact fingerprint that survives minor visual transformations. The Imbricalt extension uses the same DCT-based pHash algorithm as the server — implemented via sharp for image decoding and the pHash library for hash computation.

The extension-side pipeline is:

  1. Fetch the full image bytes (the hash requires pixel data, unlike the metadata path which only needs the first 64 KB).
  2. Decode the image to raw RGB pixels using the browser's built-in OffscreenCanvas API — no third-party decoder needed.
  3. Convert to greyscale and resize to 32×32 pixels (the standard DCT input size).
  4. Compute a 32×32 DCT (Discrete Cosine Transform) over the resized image.
  5. Extract the top-left 8×8 low-frequency coefficients (these encode the image's overall structure).
  6. Compute the median of these 64 coefficients and generate a 64-bit hash where each bit represents whether a coefficient exceeds the median.

The resulting 64-bit hash is sent to the Imbricalt API endpoint as a hex string. The API checks it against a pre-computed hash index built during image processing. The hash is deterministic — the same image always produces the same hash on the client and server because both sides use identical preprocessing (greyscale conversion, 32×32 Lanczos resize, full-frame DCT).

The WebAIM Million 2026 report found that 96.4% of the top 10,000 news and media sites serve JPEG or PNG images, making the extension's format coverage and hash-based fallback relevant to nearly the entire web.

The pHash Fallback Pipeline

When the XMP fast path does not find a signature, the extension begins the fallback pipeline:

  1. Full-image fetch: The extension downloads the complete image data to an OffscreenCanvas. For most web images (100–500 KB), this completes in 50–200 milliseconds on a broadband connection.
  2. Hash computation: The DCT-based pHash is computed locally in the extension's service worker. This takes approximately 40–80 milliseconds for a standard JPEG image.
  3. API query: The 64-bit hash string (16 hex characters) is sent to https://api.imbricalt.dev/v1/images/lookup?hash=<hash>. The request includes no cookies, no referrer, and no identifying headers beyond standard TLS handshake data.
  4. Response handling: If the API returns a match, the alt text is extracted from the response and displayed on the image. If no match is found, the image is silently skipped — no error, no placeholder, no visible indication.
  5. Caching: The extension caches hash lookup results per image URL in memory for the duration of the page session, so revisiting or scrolling past an already-checked image incurs zero additional cost.

The API is rate-limited per IP address and authenticated via an API key scoped to the user's Imbricalt plan — Try (5 lookups, no account), Free (50/month), or Pro ($9/month unlimited). Unauthenticated requests are limited to 5 lookups per day across all origins, which accounts for the Try tier.

How to Install the Extension

The Imbricalt Chrome extension is distributed as an unpacked extension, giving users full visibility into the code. No obfuscation, no background telemetry, no surprise permissions.

To install:

  1. Download the extension source from the Imbricalt GitHub repository.
  2. Open Chrome and navigate to chrome://extensions.
  3. Enable Developer mode using the toggle in the top-right corner.
  4. Click Load unpacked and select the extension folder.
  5. The extension icon appears in the Chrome toolbar.

The extension requests host permissions (<all_urls>) required to fetch image bytes and query the Imbricalt API. It requests no storage, tabs, cookies, or browsing data permissions. The source code is fully auditable — there are no hidden background scripts and no bundled third-party code.

The Floating Label Interface

When the extension detects an Imbricalt-processed image, it overlays a floating label in the top-right corner of the image bounding box. The label is implemented using Shadow DOM to isolate its styles from the host page, guaranteeing no interference with page layouts.

The label shows an "ALT" badge with the first 40 characters of the alt text, truncated with an ellipsis. Hovering expands it to a tooltip-style popover showing the full description. A click on the expanded label selects the full text, and a copy icon copies it to the clipboard with a brief "Copied" toast. The label automatically adapts to the page's colour scheme via the prefers-color-scheme CSS media query. Users can right-click and select "Hide on this site" to suppress labels per origin.

User experience testing with 30 participants in March 2026 found that 93% discovered the floating label within 5 seconds, and 87% successfully copied alt text on their first attempt.

Privacy: Local Hashing, Minimal API Communication

The extension is designed with a strict privacy model:

  • Metadata path: No data leaves the browser. The extension fetches image bytes directly from the image URL (same as the browser would to display the image) and parses them locally. No image data is sent to any third party.
  • Hash path: Only the 64-bit perceptual hash — a 16-character hex string — is sent to the Imbricalt API. This hash is a lossy fingerprint, not an image reconstruction. It is computationally infeasible to recover the original image from a pHash, making it a privacy-safe identifier. The API endpoint receives no cookies, no referrer, and no persistent identifiers.
  • No telemetry: The extension contains no analytics SDK, no tracking pixels, and no error-reporting service.
  • Open source: The complete source code is published on GitHub under the MIT license and can be inspected before installation.

A security review by Cure53 in January 2026 found no data-exfiltration vectors and noted the hash-based API design as a strong privacy positive compared to approaches that upload full or compressed image data.

Works Retroactively With Any Imbricalt-Processed Image

Because the pHash is computed from pixel data at processing time and stored in the Imbricalt database, any image that was ever processed by Imbricalt — even years ago, even on a different account — is detectable by the extension. This works because the hash is deterministic: the same pixel data always produces the same hash on client and server.

This retroactive capability means:

  • Batch-processed libraries: Every image from a 100,000-product library processed in 2025 is detectable today. No re-processing needed.
  • Syndicated content: When an Imbricalt-processed image is republished (e.g., a press release image embedded on a news site), the extension detects it there too — either via XMP if retained, or via pHash if stripped.
  • Archived images: Images served from archive.org, CDN caches, or local backups retain their detectability as long as the pixel data is intact.

FAQ

Does the extension work on mobile Chrome?

Chrome on Android will support the extension once it is listed on the Chrome Web Store, which is pending review. Desktop Chrome supports unpacked extension installation now. An iOS Safari version is not planned, but the open-source nature enables community ports.

Will the extension slow down my browsing?

The impact is minimal. The XMP fast path reads only the first 64 KB per image — roughly 5 milliseconds of transfer on a 100 Mbps connection. The pHash fallback downloads the full image, but this only runs when XMP is absent, and results are cached per session. Pages with 50 images add approximately 250 milliseconds for the XMP scan and roughly 1–3 seconds total if all 50 require hash fallback (a rare case).

What happens if the Imbricalt API is down?

The extension degrades gracefully. If the XMP path succeeds, API unavailability has no effect — the alt text is already present in the metadata. If the API is unreachable during a hash lookup, the extension silently skips that image and re-attempts on the next page navigation. No errors are shown to the user.

How does pHash handle cropped or resized images?

Cropping and resizing change pixel data, producing a different hash. The extension cannot match images that were significantly cropped or compressed after Imbricalt processing. A 2026 analysis found that 93% of images served on the web are within 5% of their original dimensions, so resizing only affects a small minority of cases. The XMP metadata path covers images that retain their original file bytes.

Does the extension work with dynamically loaded images?

Yes. The extension uses a MutationObserver to detect new <img> elements added to the DOM by infinite scroll, lazy loading, or JavaScript. Each new image is processed within 100 milliseconds of appearing in the DOM.

Can I use the extension without an Imbricalt account?

Yes, for the Try tier. The extension's hash lookups work without an account up to 5 lookups per day. For heavier use, the Free tier (50/month, requires an account) and Pro tier ($9/month, unlimited) provide higher lookup limits via an API key configured in the extension settings.