Skip to main content
image&pdf.com

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.

CategoryFile examplesWhy it's in the corpus
Text-only PDF3-page CV, 1-page invoice, 12-page contractBaseline. Catches text-layer destruction in compress/redact paths.
Scanned PDF (image-only)5-page bank statement, 1-page ID scan, 20-page legal exhibitConfirms OCR + tools that assume a text layer degrade gracefully.
PDF with embedded JPEG photos2-page real-estate brochure with 8 photos, 32 MB originalCompression baseline + watermark/redact must not corrupt the JPEG XObjects.
Modern PDF (object streams + XRefStream)PDF/A-3 invoice, PDF 1.7 with optional content groupsMany tools silently strip /ObjStm contents — this is where we catch it.
Form-fillable PDFW-4 tax form, US passport applicationVerifies that fillable fields survive transformations + sign/flatten preserves field data.
Encrypted PDF128-bit RC4, 256-bit AES, owner-password-onlyUnlock and protect routes are validated against each variant.
Mixed imagesiPhone HEIC, GoPro JPG, drone DNG-derived JPG, screenshot PNG, animated GIF, transparent WebPCross-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 pdfplumber and 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, and ocrmypdf. We switched compress from PyPDF2 to pikepdf in June 2026 after PyPDF2's compress_content_streams was 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), heic2any for HEIC decode in browser.
  • On-device AI (remove-background, upscale): onnxruntime-web WebAssembly + 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)

DateChange
2026-06-26Seeded into manifest. Awaiting Phase D rewrite with named encoders, corpus details, and per-category review dates.