How We Test Our Tools
Last methodology review: 2026-06-26 · Maintained by Kummari Achyuth
Every tool on this site is tested against a fixed corpus of real-world files before it ships and after every significant change. Nothing in here is aspirational — these are the exact files, commands, and pass/fail bars we use. If a tool can't meet them, it's held back or marked experimental.
The Test Corpus
We maintain a fixed set of 28 reference files that every PDF or image tool is run against during release. The corpus is intentionally awkward — it's the files that broke tools historically.
| Category | File examples | Why it's in the corpus |
|---|---|---|
| Text-only PDF | 3-page CV, 1-page invoice, 12-page contract | Baseline. Catches text-layer destruction in compress/redact paths. |
| Scanned PDF (image-only) | 5-page bank statement, 1-page ID scan, 20-page legal exhibit | Confirms OCR + tools that assume a text layer degrade gracefully. |
| PDF with embedded JPEG photos | 2-page real-estate brochure with 8 photos, 32 MB original | Compression baseline + watermark/redact must not corrupt the JPEG XObjects. |
| Modern PDF (object streams + XRefStream) | PDF/A-3 invoice, PDF 1.7 with optional content groups | Many tools silently strip /ObjStm contents — this is where we catch it. |
| Form-fillable PDF | W-4 tax form, US passport application | Verifies that fillable fields survive transformations + sign/flatten preserves field data. |
| Encrypted PDF | 128-bit RC4, 256-bit AES, owner-password-only | Unlock and protect routes are validated against each variant. |
| Mixed images | iPhone HEIC, GoPro JPG, drone DNG-derived JPG, screenshot PNG, animated GIF, transparent WebP | Cross-format compatibility for resize/compress/convert. The HEIC + DNG-derived JPEGs catch metadata loss bugs. |
The Pass Bars
Every tool has a fixed numerical bar it must clear. Failing any of these blocks the release.
- PDF compression:on the 3-page CV (49 KB) and the 12-page contract, output must open in Preview, Acrobat, and Chrome PDF viewer with every page rendering identically to the source (visual diff via pixelmatch < 0.5 %). On the 32 MB real-estate brochure, output should be 30–70 % smaller for "medium" quality with no visible artefact at 100 % zoom.
- PDF redact:after redaction, the produced PDF's rasterised redacted pages must contain zero selectable text where redaction boxes were placed — verified by extracting the text layer with
pdfplumberand asserting the redacted regions have no characters. (This audit caught a real regression in June 2026 where the tool was drawing black overlays without destroying the underlying text — fixed by switching to a rasterise-and-re-embed flow.) - Image compression / resize:output width × height matches request to ±1 px. Compressed JPEGs must be at least 30 % smaller at "balanced" quality with no visible artefact at 100 % zoom on the GoPro reference photo.
- OCR: on a 100-word printed Times New Roman reference page, recognised text must match the typed source ≥ 97 % (character-level). Handwriting is not in scope.
- Cross-browser: every tool must complete its primary action and produce a downloadable file in current-major Chrome, Firefox, Safari (incl. iOS 17+), and Edge, tested on macOS, Windows 11, an iPhone 14, and a mid-range Android device (Pixel 6a).
- Latency budget: upload-to-first-byte ≤ 1 s on 50 Mbps; total task completion for the corpus median file ≤ 8 s on the same connection. Anything that breaks this gets queued behind a visible progress UI or moved off the critical path.
The Engines We Use
For full transparency about what's actually doing the work — and which library limitations explain our pass bars:
- PDF rendering & client-side editing:
pdfjs-dist(Mozilla's PDF.js) +pdf-lib. We pin majors and run the full corpus on every pdf-lib upgrade. - Server-side PDF transformations (compress, repair, page numbers, OCR):
pikepdf(qpdf bindings),PyMuPDF, andocrmypdf. We switched compress from PyPDF2 to pikepdf in June 2026 after PyPDF2'scompress_content_streamswas found to silently corrupt modern PDFs. - Word / Excel / PowerPoint to PDF: LibreOffice headless on the backend. We test each format with a fixture file containing embedded fonts, complex tables, and charts.
- Image processing:
Pillow(server), HTML5 Canvas (client),heic2anyfor HEIC decode in browser. - On-device AI (remove-background, upscale):
onnxruntime-webWebAssembly + cached IndexedDB models. We measure inference time per device class and gate model availability behind that. - Bank-statement parsing: bank-specific PDF layout patterns (not a generic OCR pass), validated against published statement formats for 20+ banks. New bank support requires three real anonymised samples.
Privacy Verification
Privacy claims on a tool page must match what the network tab shows. Every release we spot-check that browser-only tools never POSTfile payloads — we open DevTools, run the tool, and confirm only static-asset requests and (for some tools) the cached-model fetch. If a tool is server-side, the upload area carries a yellow badge saying so, and the response's upload size matches the source file (no exfiltration of additional metadata).
When Tools Fail
Tools that fail the bar are either fixed, marked experimental (visible only when an internal flag is on), or removed entirely. In the last twelve months we've removed remove-watermark-ai and receipt-generator for IP-abuse and policy-risk reasons; demoted three format-specific converters into the parent image-to-pdf tool because they had no distinct content; and rewrote the compress and redact pipelines after the bar above caught silent output corruption.
For the standards behind our written content, see our Editorial Policy. For the team behind these tests, see About the maintainer. Questions or a test you think we're missing? Contact us.
Document revisions
Effective date: 2026-06-26
Page owner: Kummari Achyuth (support@imageandpdf.com)
| Date | Change |
|---|---|
| 2026-06-26 | Seeded into manifest. Awaiting Phase D rewrite with named encoders, corpus details, and per-category review dates. |