Private, offline AI-image evidence for Chrome — WebGPU/WASM, Manifest V3, MIT.
See the code
Calm, local evidence for likely AI-generated images in Chrome.
Every inference stays on the device. No account, telemetry, cloud API, or local server.
Created by Sebastian Legarraga.
OriginLens is an MIT-licensed Chrome Manifest V3 extension. It discovers ordinary webpage images—including dynamically inserted images, open shadow roots, and same-page frames—then attaches an accessible confidence badge to each eligible image. Click a badge to inspect the score, evidence source, inference backend, and limitations.
The default operating point is 65%, matching POIDH Arbitrum bounty #323. A score is evidence, not proof: OriginLens deliberately says “likely” and never presents the output as a factual authorship verdict.
The exact pinned FT1 weight was produced and evaluated by the upstream Sieve project on a 36,384-image proxy benchmark disjoint from training. The benchmark combines SynthBuster, OpenFake test/reddit, COCO val2017, and OpenFake real images. These are upstream-reported results at the frozen 0.65 threshold:
| Condition | Balanced accuracy | AI recall | Real-photo accuracy |
|---|---|---|---|
| Clean | 91.3% | 85.6% | 97.1% |
| Web: ≤768 px, JPEG q60 | 87.3% | 78.8% | 95.7% |
| Hard: ≤512 px, JPEG q40 | 84.6% | 74.1% | 95.0% |
OriginLens does not relabel these numbers as a new benchmark. It pins the exact evaluated artifact and independently verifies extension behavior, preprocessing, backend parity, and UI integration. See BENCHMARK.md for the evidence boundary, commands, smoke-set results, and limitations.
flowchart LR
A["Webpage <img>"] --> B["Viewport-aware discovery"]
B --> C["MV3 service worker<br/>dedupe + bounded LRU"]
C --> D["Offscreen document"]
D --> E["Bounded metadata hint scan"]
E --> F["ViT-S/16 @ 384<br/>always runs"]
F --> G["WebGPU"]
F --> H["WASM SIMD fallback"]
E -. "unverified hints" .-> I["Confidence badge + evidence panel"]
G --> I
H --> I
J["One-time public weight download"] --> K["size + SHA-256 verification"]
K --> L["OPFS model store"]
L --> D
Only the setup step downloads an inference asset. ONNX Runtime code and WASM are packaged with the extension; the model is read from OPFS on later launches.
Requirements: Chrome 124+, Node.js 20+, and npm.
git clone https://github.com/slegarraga/originlens-ai-image-detector.git
cd originlens-ai-image-detector/extension
npm ci
npm run check
# Optional deterministic distributable + SHA256SUMS
npm run package:release
Then:
chrome://extensions.extension directory.Pinned model:
| Field | Value |
|---|---|
| File | ft1_best_fp16.onnx |
| Bytes | 43,779,538 |
| SHA-256 | 87277637277f7d4f82222f0aaf1b4b114132ca13e5e4f02f71a65693e9606aed |
| Source | Sieve v0.1.0 release |
# Static policy, unit, hash, icon, CSP, and build checks
cd extension
npm ci
npm run check
# Real Chrome extension + model smoke tests
cd ../eval/e2e
npm ci
npx puppeteer browsers install chrome
npm run e2e -- --download --headless
npm run e2e -- --model /absolute/path/to/ft1_best_fp16.onnx --headless
npm run e2e -- --model /absolute/path/to/ft1_best_fp16.onnx --headless --disable-gpu
npm run offline -- --model /absolute/path/to/ft1_best_fp16.onnx
npm run ui -- --model /absolute/path/to/ft1_best_fp16.onnx
Use --out /absolute/path/scores.json with npm run e2e only when you want
to save scores. Full details are in BENCHMARK.md.
OriginLens has no analytics endpoint and no account system. It stores only the model, user settings, and a bounded local result cache. The broad HTTP/HTTPS host permission is necessary to discover and read webpage images in a content script; it is not used to transmit images elsewhere. See PRIVACY.md for the complete data and network inventory.
<img> elements. It does not currently analyze
CSS backgrounds, canvas pixels, video frames, PDFs, or closed shadow roots.See MODEL_CARD.md for model-specific risks and COMPLIANCE.md for a requirement-by-requirement audit.
OriginLens was created and is maintained by Sebastian Legarraga. GitHub's Cite this repository panel is backed by CITATION.cff.
OriginLens is derived from Sieve and retains its copyright notice and MIT terms. The classifier begins with the MIT-licensed Community Forensics ViT-S/16 by Jeongsoo Park and Andrew Owens, then uses Sieve's FT1 fine-tune. Third-party attributions and font licenses are recorded in THIRD_PARTY_NOTICES.md.
Code is licensed under MIT.
Private, offline AI-image evidence for Chrome — WebGPU/WASM, Manifest V3, MIT.
See the code
Calm, local evidence for likely AI-generated images in Chrome.
Every inference stays on the device. No account, telemetry, cloud API, or local server.
Created by Sebastian Legarraga.
OriginLens is an MIT-licensed Chrome Manifest V3 extension. It discovers ordinary webpage images—including dynamically inserted images, open shadow roots, and same-page frames—then attaches an accessible confidence badge to each eligible image. Click a badge to inspect the score, evidence source, inference backend, and limitations.
The default operating point is 65%, matching POIDH Arbitrum bounty #323. A score is evidence, not proof: OriginLens deliberately says “likely” and never presents the output as a factual authorship verdict.
The exact pinned FT1 weight was produced and evaluated by the upstream Sieve project on a 36,384-image proxy benchmark disjoint from training. The benchmark combines SynthBuster, OpenFake test/reddit, COCO val2017, and OpenFake real images. These are upstream-reported results at the frozen 0.65 threshold:
| Condition | Balanced accuracy | AI recall | Real-photo accuracy |
|---|---|---|---|
| Clean | 91.3% | 85.6% | 97.1% |
| Web: ≤768 px, JPEG q60 | 87.3% | 78.8% | 95.7% |
| Hard: ≤512 px, JPEG q40 | 84.6% | 74.1% | 95.0% |
OriginLens does not relabel these numbers as a new benchmark. It pins the exact evaluated artifact and independently verifies extension behavior, preprocessing, backend parity, and UI integration. See BENCHMARK.md for the evidence boundary, commands, smoke-set results, and limitations.
flowchart LR
A["Webpage <img>"] --> B["Viewport-aware discovery"]
B --> C["MV3 service worker<br/>dedupe + bounded LRU"]
C --> D["Offscreen document"]
D --> E["Bounded metadata hint scan"]
E --> F["ViT-S/16 @ 384<br/>always runs"]
F --> G["WebGPU"]
F --> H["WASM SIMD fallback"]
E -. "unverified hints" .-> I["Confidence badge + evidence panel"]
G --> I
H --> I
J["One-time public weight download"] --> K["size + SHA-256 verification"]
K --> L["OPFS model store"]
L --> D
Only the setup step downloads an inference asset. ONNX Runtime code and WASM are packaged with the extension; the model is read from OPFS on later launches.
Requirements: Chrome 124+, Node.js 20+, and npm.
git clone https://github.com/slegarraga/originlens-ai-image-detector.git
cd originlens-ai-image-detector/extension
npm ci
npm run check
# Optional deterministic distributable + SHA256SUMS
npm run package:release
Then:
chrome://extensions.extension directory.Pinned model:
| Field | Value |
|---|---|
| File | ft1_best_fp16.onnx |
| Bytes | 43,779,538 |
| SHA-256 | 87277637277f7d4f82222f0aaf1b4b114132ca13e5e4f02f71a65693e9606aed |
| Source | Sieve v0.1.0 release |
# Static policy, unit, hash, icon, CSP, and build checks
cd extension
npm ci
npm run check
# Real Chrome extension + model smoke tests
cd ../eval/e2e
npm ci
npx puppeteer browsers install chrome
npm run e2e -- --download --headless
npm run e2e -- --model /absolute/path/to/ft1_best_fp16.onnx --headless
npm run e2e -- --model /absolute/path/to/ft1_best_fp16.onnx --headless --disable-gpu
npm run offline -- --model /absolute/path/to/ft1_best_fp16.onnx
npm run ui -- --model /absolute/path/to/ft1_best_fp16.onnx
Use --out /absolute/path/scores.json with npm run e2e only when you want
to save scores. Full details are in BENCHMARK.md.
OriginLens has no analytics endpoint and no account system. It stores only the model, user settings, and a bounded local result cache. The broad HTTP/HTTPS host permission is necessary to discover and read webpage images in a content script; it is not used to transmit images elsewhere. See PRIVACY.md for the complete data and network inventory.
<img> elements. It does not currently analyze
CSS backgrounds, canvas pixels, video frames, PDFs, or closed shadow roots.See MODEL_CARD.md for model-specific risks and COMPLIANCE.md for a requirement-by-requirement audit.
OriginLens was created and is maintained by Sebastian Legarraga. GitHub's Cite this repository panel is backed by CITATION.cff.
OriginLens is derived from Sieve and retains its copyright notice and MIT terms. The classifier begins with the MIT-licensed Community Forensics ViT-S/16 by Jeongsoo Park and Andrew Owens, then uses Sieve's FT1 fine-tune. Third-party attributions and font licenses are recorded in THIRD_PARTY_NOTICES.md.
Code is licensed under MIT.