The idea
An extension that intercepts the moment you save or copy an image from the web and records everything you will need later: the page URL, the direct image URL, the author, the license, and the exact attribution string that license requires. It keeps that record in a local library you can search, and exports a credits block in Markdown, HTML, or CSV when a post ships. The point is to capture provenance at the one moment you actually have it — not to reconstruct it three weeks later from a filename like hero-final-2.jpg.
Why build this
Anyone publishing regularly — bloggers, newsletter writers, course builders, people making slide decks — pulls images from Unsplash, Wikimedia Commons, Flickr, and a dozen stock sites. The license terms differ in ways that matter: CC BY needs a specific credit line, CC BY-SA infects derivatives, some "free" stock forbids resale or use in templates. The credit obligation is known at download time and forgotten within minutes.
The consequences are asymmetric. Nothing happens for months, then a copyright troll runs a reverse-image sweep and sends an invoice, or a client's legal review asks for the provenance of forty images and nobody can produce it. Meanwhile the metadata is right there in the page: Wikimedia Commons publishes structured license data, Openverse has a public API covering ~700 million CC-licensed works, and most stock sites emit og: tags and schema.org ImageObject markup. Nobody is reading it because reading it is a chore.
Stack sketch
- Chrome/Firefox extension on Manifest V3, TypeScript, built with WXT.
- Capture via
chrome.contextMenusonimagetargets, plus adownloads.onDeterminingFilenamelistener so ordinary right-click-save is captured too. - Provenance extraction: a content script parsing schema.org JSON-LD, Open Graph, Dublin Core
<meta>,rel="license"links, and CC REL RDFa from the host page. - Site adapters for the high-traffic sources: Wikimedia Commons
imageinfoAPI (returnsLicenseShortNameandArtistdirectly), Openverse API, Flickrphotos.getInfo, Unsplash API. Adapters are just functions returning a normalized record, so contributors can add sites. - Storage: IndexedDB via Dexie, with a thumbnail and a blockhash-js perceptual hash per image so you can later drop a file on the extension and find its record.
- Export: a small template engine producing Markdown, HTML
<figcaption>blocks, or CSV. Full library exports as JSON for backup.
Scope for v1
In:
- Right-click capture and download capture on any page.
- Automatic extraction for four or five named sources plus generic meta-tag parsing.
- A library view with search by domain, license, and date.
- A "credits for this project" grouping — a flat tag you attach at capture time.
- Markdown and HTML export.
Out:
- Any server component. Everything is local; sync is a JSON file you move yourself.
- Reverse-image lookup for images captured before you installed it.
- Legal advice. It records what the page claimed and links to the source; it does not adjudicate.
- Mobile.
Where it could go
The obvious next step is the reverse direction: point it at a folder or a published post, hash every image, and match against the library to flag anything with no recorded provenance. That turns it from a capture tool into an audit tool, which is the version a small agency will pay for.
After that, team libraries. A shared, self-hosted index where a five-person content team can see that someone already licensed a usable photo of a data center, along with what the credit line has to say. That also opens a compliance angle for AI-generated assets, where the interesting field is not a license but the model, prompt, and date — the same record shape, different source adapter.
Watch out for
License metadata on the open web is frequently wrong or absent, and a confident-looking credit line built from bad markup is worse than no credit line at all. Store what the page asserted, timestamp it, keep a link back to the source, and show uncertainty in the UI rather than smoothing it over.