{
  "schema": 1,
  "environment": {
    "measuredAt": "2026-08-11T18:30:12.513Z",
    "os": "Ubuntu 24.04.4 LTS (linux 6.18.5-fc-v20, x64)",
    "cpu": "Intel(R) Xeon(R) Processor @ 2.80GHz",
    "cpuCores": 4,
    "totalMemoryBytes": 16856068096,
    "node": "v22.22.2",
    "playwright": "1.62.1",
    "browsers": {
      "chromium": "151.0.7922.34",
      "firefox": "153.0",
      "webkit": "26.5"
    },
    "timeoutMs": 180000,
    "headless": true,
    "enginesServedFrom": "local cache (scripts/measure/.engine-cache) — no network during the sweep",
    "fixtureSeed": 1366773063,
    "note": "One machine, one run, headless browsers, synthetic fixtures. Read the limitations section before treating any number here as a guarantee."
  },
  "fixtures": {
    "seed": 1366773063,
    "generator": "scripts/measure/fixtures.js",
    "ladders": {
      "pdf-size": {
        "unitLabel": "MB",
        "rungs": [
          1,
          5,
          10,
          25,
          50,
          100,
          250,
          500
        ],
        "description": "A 10-page text PDF padded with one raw-RGB image XObject to reach the target size."
      },
      "pdf-pages": {
        "unitLabel": "pages",
        "rungs": [
          10,
          100,
          500,
          1000,
          2500
        ],
        "description": "Text-only pages with no images, so the variable is page count rather than bytes."
      },
      "img-size": {
        "unitLabel": "MB",
        "rungs": [
          1,
          5,
          10,
          25,
          50,
          100
        ],
        "description": "Square RGB PNG of incompressible noise, stored uncompressed to hit the target size."
      },
      "img-px": {
        "unitLabel": "MP",
        "rungs": [
          1,
          5,
          10,
          25,
          50,
          100
        ],
        "description": "Square RGB PNG of a smooth gradient, so the file stays small and the variable is pixel count."
      },
      "text-size": {
        "unitLabel": "MB",
        "rungs": [
          1,
          5,
          10,
          25,
          50,
          100
        ],
        "description": "ASCII words, one line of twelve per newline."
      }
    }
  },
  "features": [
    {
      "browser": "chromium",
      "version": "151.0.7922.34",
      "features": {
        "WebAssembly": true,
        "SharedArrayBuffer": false,
        "OffscreenCanvas": true,
        "File System Access API": true,
        "Web Workers": true,
        "createImageBitmap": true,
        "performance.memory": true,
        "crossOriginIsolated": false,
        "canvas encode: WebP": true,
        "canvas encode: AVIF": false,
        "canvas encode: JPEG": true,
        "canvas encode: PNG": true,
        "crypto.subtle": true
      }
    },
    {
      "browser": "firefox",
      "version": "153.0",
      "features": {
        "WebAssembly": true,
        "SharedArrayBuffer": false,
        "OffscreenCanvas": true,
        "File System Access API": false,
        "Web Workers": true,
        "createImageBitmap": true,
        "performance.memory": false,
        "crossOriginIsolated": false,
        "canvas encode: WebP": true,
        "canvas encode: AVIF": false,
        "canvas encode: JPEG": true,
        "canvas encode: PNG": true,
        "crypto.subtle": true
      }
    },
    {
      "browser": "webkit",
      "version": "26.5",
      "features": {
        "WebAssembly": true,
        "SharedArrayBuffer": false,
        "OffscreenCanvas": true,
        "File System Access API": false,
        "Web Workers": true,
        "createImageBitmap": true,
        "performance.memory": false,
        "crossOriginIsolated": false,
        "canvas encode: WebP": true,
        "canvas encode: AVIF": false,
        "canvas encode: JPEG": true,
        "canvas encode: PNG": true,
        "crypto.subtle": true
      }
    }
  ],
  "records": [
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 554,
      "peakHeapBytes": 10000000,
      "outputBytes": 26214521,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": 10000000,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File \"pdf-size-100mb.pdf\" exceeds 50MB limit.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 1964,
      "peakHeapBytes": 10000000,
      "outputBytes": 52425179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 493,
      "peakHeapBytes": null,
      "outputBytes": 26214521,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File \"pdf-size-100mb.pdf\" exceeds 50MB limit.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 1167,
      "peakHeapBytes": null,
      "outputBytes": 52425179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 533,
      "peakHeapBytes": null,
      "outputBytes": 26214521,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File \"pdf-size-100mb.pdf\" exceeds 50MB limit.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 1718,
      "peakHeapBytes": null,
      "outputBytes": 52425179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 400,
      "peakHeapBytes": 10000000,
      "outputBytes": 1718962,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 671,
      "peakHeapBytes": 10000000,
      "outputBytes": 3438939,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 1487,
      "peakHeapBytes": 10000000,
      "outputBytes": 8595891,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 516,
      "peakHeapBytes": null,
      "outputBytes": 1718962,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 892,
      "peakHeapBytes": null,
      "outputBytes": 3438939,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 2067,
      "peakHeapBytes": null,
      "outputBytes": 8595891,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 686,
      "peakHeapBytes": null,
      "outputBytes": 1718962,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 1135,
      "peakHeapBytes": null,
      "outputBytes": 3438939,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 2395,
      "peakHeapBytes": null,
      "outputBytes": 8595891,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "timeout",
      "wallMs": null,
      "peakHeapBytes": 10000000,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "no result and no error after 180s",
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-5mb",
      "fixtureBytes": 5240346,
      "status": "ok",
      "wallMs": 1127,
      "peakHeapBytes": 10000000,
      "outputBytes": 5239055,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 1
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-10mb",
      "fixtureBytes": 10487427,
      "status": "timeout",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "no result and no error after 180s",
      "ladder": "pdf-size",
      "ladderRank": 2
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 1073,
      "peakHeapBytes": null,
      "outputBytes": 26214521,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 2105,
      "peakHeapBytes": null,
      "outputBytes": 52425179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 1689,
      "peakHeapBytes": null,
      "outputBytes": 26214521,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 2200,
      "peakHeapBytes": null,
      "outputBytes": 52425179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 996,
      "peakHeapBytes": 10000000,
      "outputBytes": 1718962,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 1333,
      "peakHeapBytes": 10000000,
      "outputBytes": 3438939,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 1991,
      "peakHeapBytes": 10000000,
      "outputBytes": 8595891,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 1190,
      "peakHeapBytes": null,
      "outputBytes": 1718962,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 1574,
      "peakHeapBytes": null,
      "outputBytes": 3438939,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 2891,
      "peakHeapBytes": null,
      "outputBytes": 8595891,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 1128,
      "peakHeapBytes": null,
      "outputBytes": 1718963,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 1934,
      "peakHeapBytes": null,
      "outputBytes": 3438939,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 3583,
      "peakHeapBytes": null,
      "outputBytes": 8595891,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 1595,
      "peakHeapBytes": 10000000,
      "outputBytes": 26214521,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 2240,
      "peakHeapBytes": 10000000,
      "outputBytes": 52425179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File size must be less than 50MB.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "the tool's action button (#split-pdf-btn) never became enabled, and the page showed no error explaining why",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File exceeds the 100MB limit. Split it first, then organize the parts.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "organize-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "the tool's action button (#organize-apply-btn) never became enabled, and the page showed no error explaining why",
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "organize-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-5mb",
      "fixtureBytes": 5240346,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "the tool's action button (#organize-apply-btn) never became enabled, and the page showed no error explaining why",
      "ladder": "pdf-size",
      "ladderRank": 1
    },
    {
      "tool": "organize-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-1mb",
      "fixtureBytes": 1050239,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "the tool's action button (#organize-apply-btn) never became enabled, and the page showed no error explaining why",
      "ladder": "pdf-size",
      "ladderRank": 0
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 5231,
      "peakHeapBytes": null,
      "outputBytes": 26214521,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File exceeds the 100MB limit. Split it first, then organize the parts.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 6527,
      "peakHeapBytes": null,
      "outputBytes": 52425179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "This PDF has 500 pages — the limit is 300. Split it first, then organize the parts.",
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-10",
      "fixtureBytes": 36145,
      "status": "ok",
      "wallMs": 907,
      "peakHeapBytes": 10000000,
      "outputBytes": 34804,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 0
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-100",
      "fixtureBytes": 359675,
      "status": "ok",
      "wallMs": 4652,
      "peakHeapBytes": 10000000,
      "outputBytes": 344223,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 1
    },
    {
      "tool": "organize-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "This PDF has 500 pages — the limit is 300. Split it first, then organize the parts.",
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "organize-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-10",
      "fixtureBytes": 36145,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "the tool's action button (#organize-apply-btn) never became enabled, and the page showed no error explaining why",
      "ladder": "pdf-pages",
      "ladderRank": 0
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "This PDF has 500 pages — the limit is 300. Split it first, then organize the parts.",
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-10",
      "fixtureBytes": 36145,
      "status": "ok",
      "wallMs": 2041,
      "peakHeapBytes": null,
      "outputBytes": 34804,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 0
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-100",
      "fixtureBytes": 359675,
      "status": "ok",
      "wallMs": 27259,
      "peakHeapBytes": null,
      "outputBytes": 344223,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 1
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 295,
      "peakHeapBytes": 10000000,
      "outputBytes": 26214517,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File exceeds 100MB.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 441,
      "peakHeapBytes": 10000000,
      "outputBytes": 52425175,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 437,
      "peakHeapBytes": null,
      "outputBytes": 26214517,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File exceeds 100MB.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 6785,
      "peakHeapBytes": null,
      "outputBytes": 52425175,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 1262,
      "peakHeapBytes": null,
      "outputBytes": 26214517,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File exceeds 100MB.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 840,
      "peakHeapBytes": null,
      "outputBytes": 52425176,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 354,
      "peakHeapBytes": 10000000,
      "outputBytes": 1719109,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 573,
      "peakHeapBytes": 10000000,
      "outputBytes": 3439128,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 1227,
      "peakHeapBytes": 10000000,
      "outputBytes": 8596184,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 498,
      "peakHeapBytes": null,
      "outputBytes": 1719109,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 772,
      "peakHeapBytes": null,
      "outputBytes": 3439128,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 1657,
      "peakHeapBytes": null,
      "outputBytes": 8596184,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 506,
      "peakHeapBytes": null,
      "outputBytes": 1719109,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 999,
      "peakHeapBytes": null,
      "outputBytes": 3439128,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 2039,
      "peakHeapBytes": null,
      "outputBytes": 8596184,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 2178,
      "peakHeapBytes": 10000000,
      "outputBytes": 3255826,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "ok",
      "wallMs": 10747,
      "peakHeapBytes": 10000000,
      "outputBytes": 3119962,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "fixture": "pdf-size-250mb",
      "fixtureBytes": 262145761,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File size must be less than 200MB.",
      "ladder": "pdf-size",
      "ladderRank": 6
    },
    {
      "tool": "compress-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "NetworkError: A network error occurred.",
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "compress-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-5mb",
      "fixtureBytes": 5240346,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "NetworkError: A network error occurred.",
      "ladder": "pdf-size",
      "ladderRank": 1
    },
    {
      "tool": "compress-pdf",
      "browser": "firefox",
      "fixture": "pdf-size-1mb",
      "fixtureBytes": 1050239,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "NetworkError: A network error occurred.",
      "ladder": "pdf-size",
      "ladderRank": 0
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 3214,
      "peakHeapBytes": null,
      "outputBytes": 3267179,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "ok",
      "wallMs": 10834,
      "peakHeapBytes": null,
      "outputBytes": 3058340,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "fixture": "pdf-size-250mb",
      "fixtureBytes": 262145761,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File size must be less than 200MB.",
      "ladder": "pdf-size",
      "ladderRank": 6
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 31783,
      "peakHeapBytes": 10000000,
      "outputBytes": 1718792,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 61541,
      "peakHeapBytes": 10000000,
      "outputBytes": 3438751,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "ok",
      "wallMs": 161616,
      "peakHeapBytes": 10000000,
      "outputBytes": 8595671,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "compress-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "NetworkError: A network error occurred.",
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "compress-pdf",
      "browser": "firefox",
      "fixture": "pdf-pages-10",
      "fixtureBytes": 36145,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "NetworkError: A network error occurred.",
      "ladder": "pdf-pages",
      "ladderRank": 0
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-500",
      "fixtureBytes": 1798058,
      "status": "ok",
      "wallMs": 50405,
      "peakHeapBytes": null,
      "outputBytes": 1718792,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 2
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-1000",
      "fixtureBytes": 3598705,
      "status": "ok",
      "wallMs": 105595,
      "peakHeapBytes": null,
      "outputBytes": 3438751,
      "outputMime": "application/pdf",
      "errorMessage": null,
      "ladder": "pdf-pages",
      "ladderRank": 3
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "fixture": "pdf-pages-2500",
      "fixtureBytes": 8997622,
      "status": "timeout",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "no result and no error after 180s",
      "ladder": "pdf-pages",
      "ladderRank": 4
    },
    {
      "tool": "pdf-to-word",
      "browser": "chromium",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "ok",
      "wallMs": 835,
      "peakHeapBytes": 10000000,
      "outputBytes": 10448,
      "outputMime": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "pdf-to-word",
      "browser": "chromium",
      "fixture": "pdf-size-100mb",
      "fixtureBytes": 104859084,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "File size must be less than 50MB.",
      "ladder": "pdf-size",
      "ladderRank": 5
    },
    {
      "tool": "pdf-to-word",
      "browser": "chromium",
      "fixture": "pdf-size-50mb",
      "fixtureBytes": 52426473,
      "status": "ok",
      "wallMs": 973,
      "peakHeapBytes": 10000000,
      "outputBytes": 10440,
      "outputMime": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "errorMessage": null,
      "ladder": "pdf-size",
      "ladderRank": 4
    },
    {
      "tool": "pdf-to-word",
      "browser": "firefox",
      "fixture": "pdf-size-25mb",
      "fixtureBytes": 26215815,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "NetworkError: A network error occurred.",
      "ladder": "pdf-size",
      "ladderRank": 3
    },
    {
      "tool": "pdf-to-word",
      "browser": "firefox",
      "fixture": "pdf-size-5mb",
      "fixtureBytes": 5240346,
      "status": "failed",
      "wallMs": null,
      "peakHeapBytes": null,
      "outputBytes": null,
      "outputMime": null,
      "errorMessage": "NetworkError: A network error occurred.",
      "ladder": "pdf-size",
      "ladderRank": 1
    }
  ],
  "toolNotes": {},
  "thresholds": [
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 1964,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File \"pdf-size-100mb.pdf\" exceeds 50MB limit."
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 1167,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File \"pdf-size-100mb.pdf\" exceeds 50MB limit."
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 1718,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File \"pdf-size-100mb.pdf\" exceeds 50MB limit."
    },
    {
      "tool": "merge-pdf",
      "browser": "chromium",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 1487,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "merge-pdf",
      "browser": "firefox",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 2067,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "merge-pdf",
      "browser": "webkit",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 2395,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-5mb",
      "maxWorkingBytes": 5240346,
      "maxWorkingWallMs": 1127,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": "pdf-size-10mb",
      "nextRungStatus": "timeout",
      "nextRungErrorMessage": "no result and no error after 180s"
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 2105,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File size must be less than 50MB."
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 2200,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "the tool's action button (#split-pdf-btn) never became enabled, and the page showed no error explaining why"
    },
    {
      "tool": "split-pdf",
      "browser": "chromium",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 1991,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "split-pdf",
      "browser": "firefox",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 2891,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "split-pdf",
      "browser": "webkit",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 3583,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 2240,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File exceeds the 100MB limit. Split it first, then organize the parts."
    },
    {
      "tool": "organize-pdf",
      "browser": "firefox",
      "ladder": "pdf-size",
      "maxWorkingFixture": null,
      "maxWorkingBytes": null,
      "maxWorkingWallMs": null,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-1mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "the tool's action button (#organize-apply-btn) never became enabled, and the page showed no error explaining why"
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 6527,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File exceeds the 100MB limit. Split it first, then organize the parts."
    },
    {
      "tool": "organize-pdf",
      "browser": "chromium",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-100",
      "maxWorkingBytes": 359675,
      "maxWorkingWallMs": 4652,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": "pdf-pages-500",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "This PDF has 500 pages — the limit is 300. Split it first, then organize the parts."
    },
    {
      "tool": "organize-pdf",
      "browser": "firefox",
      "ladder": "pdf-pages",
      "maxWorkingFixture": null,
      "maxWorkingBytes": null,
      "maxWorkingWallMs": null,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-pages-10",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "the tool's action button (#organize-apply-btn) never became enabled, and the page showed no error explaining why"
    },
    {
      "tool": "organize-pdf",
      "browser": "webkit",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-100",
      "maxWorkingBytes": 359675,
      "maxWorkingWallMs": 27259,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-pages-500",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "This PDF has 500 pages — the limit is 300. Split it first, then organize the parts."
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 441,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File exceeds 100MB."
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 6785,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File exceeds 100MB."
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 840,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File exceeds 100MB."
    },
    {
      "tool": "rotate-pdf",
      "browser": "chromium",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 1227,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "rotate-pdf",
      "browser": "firefox",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 1657,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "rotate-pdf",
      "browser": "webkit",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 2039,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-100mb",
      "maxWorkingBytes": 104859084,
      "maxWorkingWallMs": 10747,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": "pdf-size-250mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File size must be less than 200MB."
    },
    {
      "tool": "compress-pdf",
      "browser": "firefox",
      "ladder": "pdf-size",
      "maxWorkingFixture": null,
      "maxWorkingBytes": null,
      "maxWorkingWallMs": null,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-1mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "NetworkError: A network error occurred."
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-100mb",
      "maxWorkingBytes": 104859084,
      "maxWorkingWallMs": 10834,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-size-250mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File size must be less than 200MB."
    },
    {
      "tool": "compress-pdf",
      "browser": "chromium",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-2500",
      "maxWorkingBytes": 8997622,
      "maxWorkingWallMs": 161616,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": null,
      "nextRungStatus": null,
      "nextRungErrorMessage": null
    },
    {
      "tool": "compress-pdf",
      "browser": "firefox",
      "ladder": "pdf-pages",
      "maxWorkingFixture": null,
      "maxWorkingBytes": null,
      "maxWorkingWallMs": null,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-pages-10",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "NetworkError: A network error occurred."
    },
    {
      "tool": "compress-pdf",
      "browser": "webkit",
      "ladder": "pdf-pages",
      "maxWorkingFixture": "pdf-pages-1000",
      "maxWorkingBytes": 3598705,
      "maxWorkingWallMs": 105595,
      "maxWorkingPeakHeapBytes": null,
      "nextRungFixture": "pdf-pages-2500",
      "nextRungStatus": "timeout",
      "nextRungErrorMessage": "no result and no error after 180s"
    },
    {
      "tool": "pdf-to-word",
      "browser": "chromium",
      "ladder": "pdf-size",
      "maxWorkingFixture": "pdf-size-50mb",
      "maxWorkingBytes": 52426473,
      "maxWorkingWallMs": 973,
      "maxWorkingPeakHeapBytes": 10000000,
      "nextRungFixture": "pdf-size-100mb",
      "nextRungStatus": "failed",
      "nextRungErrorMessage": "File size must be less than 50MB."
    }
  ],
  "summary": {
    "probes": 93,
    "ok": 63,
    "failed": 27,
    "timeout": 3,
    "unsupported": 0,
    "not_tested": 0,
    "thresholds": 31
  },
  "pairs": [
    {
      "pair": "png-to-jpg",
      "from": "png",
      "to": "jpg",
      "tool": "image-converter",
      "fixture": "img-size-5mb.png",
      "status": "ok",
      "outputBytes": 1543548,
      "outputMime": "image/jpeg",
      "wallMs": 315,
      "errorMessage": null,
      "fixtureBytes": 5245237
    },
    {
      "pair": "png-to-webp",
      "from": "png",
      "to": "webp",
      "tool": "image-converter",
      "fixture": "img-size-5mb.png",
      "status": "ok",
      "outputBytes": 1544496,
      "outputMime": "image/webp",
      "wallMs": 722,
      "errorMessage": null,
      "fixtureBytes": 5245237
    },
    {
      "pair": "jpg-to-png",
      "from": "jpg",
      "to": "png",
      "tool": "image-converter",
      "fixture": "img-jpeg-5mb.jpg",
      "status": "ok",
      "outputBytes": 5952757,
      "outputMime": "image/png",
      "wallMs": 709,
      "errorMessage": null,
      "fixtureBytes": 1543548
    },
    {
      "pair": "jpg-to-webp",
      "from": "jpg",
      "to": "webp",
      "tool": "image-converter",
      "fixture": "img-jpeg-5mb.jpg",
      "status": "ok",
      "outputBytes": 1455144,
      "outputMime": "image/webp",
      "wallMs": 660,
      "errorMessage": null,
      "fixtureBytes": 1543548
    },
    {
      "pair": "webp-to-jpg",
      "from": "webp",
      "to": "jpg",
      "tool": "image-converter",
      "fixture": "img-webp-5mb.webp",
      "status": "ok",
      "outputBytes": 1460339,
      "outputMime": "image/jpeg",
      "wallMs": 470,
      "errorMessage": null,
      "fixtureBytes": 1544496
    },
    {
      "pair": "webp-to-png",
      "from": "webp",
      "to": "png",
      "tool": "image-converter",
      "fixture": "img-webp-5mb.webp",
      "status": "ok",
      "outputBytes": 5950309,
      "outputMime": "image/png",
      "wallMs": 636,
      "errorMessage": null,
      "fixtureBytes": 1544496
    },
    {
      "pair": "pdf-to-jpg",
      "from": "pdf",
      "to": "jpg",
      "tool": "pdf-to-jpg",
      "fixture": "pdf-pages-10.pdf",
      "status": "ok",
      "outputBytes": 3873184,
      "outputMime": "application/zip",
      "wallMs": 1065,
      "errorMessage": null,
      "fixtureBytes": 36145
    },
    {
      "pair": "pdf-to-png",
      "from": "pdf",
      "to": "png",
      "tool": "pdf-to-jpg",
      "fixture": "pdf-pages-10.pdf",
      "status": "ok",
      "outputBytes": 3954016,
      "outputMime": "application/zip",
      "wallMs": 1124,
      "errorMessage": null,
      "fixtureBytes": 36145
    },
    {
      "pair": "png-to-pdf",
      "from": "png",
      "to": "pdf",
      "tool": "image-to-pdf",
      "fixture": "img-size-1mb.png",
      "status": "ok",
      "outputBytes": 1052037,
      "outputMime": "application/pdf",
      "wallMs": 251,
      "errorMessage": null,
      "fixtureBytes": 1048652
    },
    {
      "pair": "jpg-to-pdf",
      "from": "jpg",
      "to": "pdf",
      "tool": "image-to-pdf",
      "fixture": "img-jpeg-1mb.jpg",
      "status": "ok",
      "outputBytes": 311378,
      "outputMime": "application/pdf",
      "wallMs": 111,
      "errorMessage": null,
      "fixtureBytes": 308014
    },
    {
      "pair": "webp-to-pdf",
      "from": "webp",
      "to": "pdf",
      "tool": "image-to-pdf",
      "fixture": "img-webp-1mb.webp",
      "status": "ok",
      "outputBytes": 994040,
      "outputMime": "application/pdf",
      "wallMs": 691,
      "errorMessage": null,
      "fixtureBytes": 309232
    },
    {
      "pair": "pdf-to-word",
      "from": "pdf",
      "to": "word",
      "tool": "pdf-to-word",
      "fixture": "pdf-pages-10.pdf",
      "status": "ok",
      "outputBytes": 10490,
      "outputMime": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "wallMs": 707,
      "errorMessage": null,
      "fixtureBytes": 36145
    },
    {
      "pair": "pdf-to-txt",
      "from": "pdf",
      "to": "txt",
      "tool": "pdf-summarizer",
      "fixture": "pdf-pages-10.pdf",
      "status": "timeout",
      "outputBytes": null,
      "outputMime": null,
      "wallMs": null,
      "errorMessage": "no result within 180s",
      "fixtureBytes": 36145
    },
    {
      "pair": "png-to-txt",
      "from": "png",
      "to": "txt",
      "tool": "ocr",
      "fixture": "img-text-page.png",
      "status": "ok",
      "outputBytes": 476,
      "outputMime": "text/plain;charset=utf-8",
      "wallMs": 3273,
      "errorMessage": null,
      "fixtureBytes": 128367
    },
    {
      "pair": "pdf-to-txt-ocr",
      "from": "pdf",
      "to": "txt-ocr",
      "tool": "ocr",
      "fixture": "pdf-pages-10.pdf",
      "status": "ok",
      "outputBytes": 30363,
      "outputMime": "text/plain;charset=utf-8",
      "wallMs": 65986,
      "errorMessage": null,
      "fixtureBytes": 36145
    },
    {
      "pair": "csv-to-xlsx",
      "from": "csv",
      "to": "xlsx",
      "tool": "text-to-excel",
      "fixture": "text-size-1mb.txt",
      "status": "ok",
      "outputBytes": 2272775,
      "outputMime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      "wallMs": 576,
      "errorMessage": null,
      "fixtureBytes": 1048576
    },
    {
      "pair": "png-to-xlsx",
      "from": "png",
      "to": "xlsx",
      "tool": "image-to-excel",
      "fixture": "img-text-page.png",
      "status": "ok",
      "outputBytes": 3994,
      "outputMime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      "wallMs": 3444,
      "errorMessage": null,
      "fixtureBytes": 128367
    },
    {
      "pair": "png-to-png-compressed",
      "from": "png",
      "to": "png-compressed",
      "tool": "compress-image",
      "fixture": "img-size-5mb.png",
      "status": "ok",
      "outputBytes": 5245389,
      "outputMime": "application/zip",
      "wallMs": 1250,
      "errorMessage": null,
      "fixtureBytes": 5245237
    },
    {
      "pair": "jpg-to-jpg-compressed",
      "from": "jpg",
      "to": "jpg-compressed",
      "tool": "compress-image",
      "fixture": "img-jpeg-5mb.jpg",
      "status": "ok",
      "outputBytes": 1025250,
      "outputMime": "application/zip",
      "wallMs": 968,
      "errorMessage": null,
      "fixtureBytes": 1543548
    },
    {
      "pair": "png-to-png-resized",
      "from": "png",
      "to": "png-resized",
      "tool": "image-resizer",
      "fixture": "img-size-5mb.png",
      "status": "ok",
      "outputBytes": 6013852,
      "outputMime": "image/png",
      "wallMs": 803,
      "errorMessage": null,
      "fixtureBytes": 5245237
    },
    {
      "pair": "jpg-to-jpg-resized",
      "from": "jpg",
      "to": "jpg-resized",
      "tool": "image-resizer",
      "fixture": "img-jpeg-5mb.jpg",
      "status": "ok",
      "outputBytes": 1462544,
      "outputMime": "image/jpeg",
      "wallMs": 1196,
      "errorMessage": null,
      "fixtureBytes": 1543548
    },
    {
      "pair": "png-to-png-cropped",
      "from": "png",
      "to": "png-cropped",
      "tool": "crop-image",
      "fixture": "img-size-5mb.png",
      "status": "ok",
      "outputBytes": 3852232,
      "outputMime": "image/png",
      "wallMs": 7935,
      "errorMessage": null,
      "fixtureBytes": 5245237
    },
    {
      "pair": "jpg-to-jpg-stripped",
      "from": "jpg",
      "to": "jpg-stripped",
      "tool": "image-metadata-remover",
      "fixture": "img-jpeg-5mb.jpg",
      "status": "ok",
      "outputBytes": 1703615,
      "outputMime": "image/jpeg",
      "wallMs": 1264,
      "errorMessage": null,
      "fixtureBytes": 1543548
    },
    {
      "pair": "jfif-to-jpg",
      "from": "jfif",
      "to": "jpg",
      "tool": "jfif-to-jpg",
      "fixture": "img-jpeg-5mb.jpg",
      "status": "ok",
      "outputBytes": 1543548,
      "outputMime": "image/jpeg",
      "wallMs": 11,
      "errorMessage": null,
      "fixtureBytes": 1543548
    },
    {
      "pair": "png-to-qr-decoded",
      "from": "png",
      "to": "qr-decoded",
      "tool": "qr-reader",
      "fixture": "img-text-page.png",
      "status": "failed",
      "outputBytes": null,
      "outputMime": null,
      "wallMs": null,
      "errorMessage": "No QR code found in that image. Try cropping closer to the code while leaving a clear margin around it, improving the contrast, or using a higher-resolution screenshot.",
      "fixtureBytes": 128367
    }
  ]
}
