Skip to content

This website is still under development, so some information may not be accurate yet.Under development · details may not be accurate

Scriptiq Image Downloader

A Chrome and Firefox extension that finds every image on a page, upgrades CDN thumbnails to their full-size originals, collapses duplicates and batch-downloads them.

Scriptiq Image Downloader: Every image on a page, at full size. The popup over a shop page.

The idea

Saving images from modern websites, online shops in particular, takes more than a right-click: pages serve downsized CDN copies, lazy-load their galleries or keep only the active slide in the page, and the same photo appears in several sizes. I built this extension to collect the images a page actually contains, find the largest version of each one, and let me filter and download them in one step. Collections extend that to many pages at once.

Implementation

  • Built with WXT, Svelte 5 and TypeScript. One Svelte app serves both the popup and Chrome's side panel, with Chrome MV3 and Firefox MV2 builds from the same codebase.
  • The content script is injected only when the panel opens and runs 31 scanners at three scan depths: DOM and srcset, CSS backgrounds, shadow DOM, structured data, framework state and images captured from network traffic.
  • A full-size engine with 47 URL-rewrite rules (29 host-specific) and size-parameter ladders. A larger candidate replaces the original only after a perceptual-hash match.
  • Perceptual signatures (two dHashes plus a colour histogram) share one module between the page and the service worker, which hashes cross-origin images with OffscreenCanvas.
  • A typed message protocol, delta-based gallery sync and an alarm-based keepalive keep the MV3 service worker reliable during long jobs.
  • Filename templates, a Content-Disposition override and a dependency-free ZIP writer for batch downloads; collections download many pages with 1–5 adaptive parallel workers.
  • 343 Vitest tests, type checks and both browser builds run in GitHub Actions, and tagged versions are published as GitHub Releases.

Challenges

  • A guessed full-size URL can return a different photo or a placeholder, so candidates are checked on size and aspect ratio and confirmed with perceptual hashes. Anything unverifiable is kept only as an optional variant.
  • Product photos look alike (same palette, crop and file size), so purely visual de-duplication merged different shots. Merging now relies on URL, ETag and byte-size evidence, with visual similarity used only as a check.
  • Pages can't read the pixels of cross-origin images, so hashing moved into the service worker, with identical maths on both sides.
  • MV3 service workers shut down after about 30 seconds idle; network captures, keepalive state and the gallery sync all survive restarts.
  • On image-heavy pages, on-demand injection, idle background tabs, a probe budget and per-site learned rules keep the gallery usable within a few seconds.

Result

Version 1.0.0 was tagged in August 2026, and work has continued since with a performance overhaul, ETag-based merging and an on-page picking tool. Every push is type-checked, tested and built for Chrome and Firefox. It isn't listed on a browser store yet; I test it against real product pages whose expected image counts are documented in the README, including the cases where it still falls short.

Version history

v1.0.0Live now

A vanilla JavaScript Chrome MV3 side panel of about 2,200 lines that listed images, CSS backgrounds and srcset candidates and sorted them by resolution. Rewritten on WXT and Svelte from February 2026.

  • Image, background and srcset detection
  • Sorting by resolution
  • Dark mode
Stack at the time
Languages
JavaScriptHTMLCSS

Key Features

  • Normal, Deep and Max scan modes, remembered per site
  • Full-size upgrades for common CDNs and stores such as Cloudinary, Shopify and Nike
  • Duplicate collapsing with downloadable size variants
  • Filters for size, file size, format, orientation, colour and filename
  • Pick images directly on the page
  • ZIP or separate-file downloads with filename templates
  • Collections for multi-page downloads
  • Popup or side panel, with light and dark themes