Collects the images (<img>) on the current page, lets you pick the ones you
want in a grid, and saves them into a single PDF — one image per A4 page.
Localized in English (default) and Russian.
From the prebuilt release (easiest):
- Download
images-to-pdf.zipfrom the Releases page and unzip it into a permanent folder (don't delete it — the extension runs from there). - Open
chrome://extensions(oredge://extensions) → enable Developer mode (top-right toggle). - Click Load unpacked and select the unzipped folder.
- The icon appears in the toolbar.
Updating: when a new version ships, download the fresh ZIP and repeat (self-distributed builds don't auto-update).
From source (for development): clone the repository and select the project folder in step 3.
- Open any website (http/https).
- Click the extension icon — a grid of the page's images appears.
- Small images (< 64×64 px) are hidden by default; toggle "show all" to see them.
- Tick the images you want (or "Select all").
- Click Export PDF. On the first export Chrome asks for access to the
domains of the selected images — allow it so they can be downloaded. A file
named
images-<site>-<date>.pdfis downloaded.
If this extension is useful to you, you can support its development with a small crypto tip — thank you!
USDT — Ethereum (ERC-20):
0xad39bdf2df0b8dd6991150fcea0a156150ed19b8
Send only on the Ethereum (ERC-20) network. The same address is also shown with a Copy button inside the extension popup.
src/popup.*— UI and orchestration; builds the PDF with jsPDF.src/content.js— injected into the page on demand, collects<img>elements.src/background.js— service worker, downloads image bytes (bypassing CORS).src/lib/*.js— pure logic (filtering, fit-to-page, filename, base64, origins, donate)._locales/{en,ru}/messages.json— localized strings.
Permissions: the extension only requests
activeTab+scripting. Access to image domains (optional_host_permissions) is requested on demand at export time — scoped to the specific sites.
Unit tests for the pure logic (Node 18+ required):
node --test tests/*.test.jsRegenerate the icons:
python3 tools/make-icons.pyBuild the distributable ZIP (output: dist/images-to-pdf.zip):
bash tools/package.shDonations: set your USDT (Ethereum / ERC-20) address in DONATE_ADDRESS
(src/popup.js) — a "Support the developer" bar with the address and a "Copy"
button appears at the bottom of the popup. With the placeholder value it stays
hidden.
Store listing copy lives in STORE-LISTING.md; the privacy policy in PRIVACY.md.
- On install there's no "read your data on all sites" warning.
- A page with many images — thumbnails render as proper tiles.
- Export → permission prompt for the image domain → Allow → PDF.
- Re-export to the same domain — no second prompt.
- Decline the prompt → friendly message, button stays active.
- Page with no images → "No images found";
chrome://extensions→ "page isn't supported".