{
  "_id": "6ac91ec5de46216d5edd9d52",
  "Package": "odiffr",
  "Title": "Fast Pixel-by-Pixel Image Comparison Using 'odiff'",
  "Version": "0.6.0.9000",
  "Authors@R": "person(\"Ben\", \"Wolstenholme\", , \"odiffr@benwolst.dev\", role = c(\"aut\", \"cre\"))",
  "Description": "R bindings to 'odiff', a fast SIMD pixel-by-pixel image\ncomparison tool <https://github.com/dmtrKovalenko/odiff>.\nCompares PNG, JPEG, WEBP, TIFF and BMP images, plots and PDF\npages with configurable thresholds, antialiasing detection and\nignore regions. Provides 'testthat' expectations and snapshot\ntesting (including for 'shinytest2' screenshots), batch and\ndirectory comparison, HTML, Markdown and JUnit reports,\nbaseline approval and audit records. Requires the 'odiff'\nbinary, which can be downloaded with install_odiff().",
  "SystemRequirements": "odiff (>= 4.1.1) -\nhttps://github.com/dmtrKovalenko/odiff",
  "License": "MIT + file LICENSE",
  "URL": "https://benwolst.github.io/odiffr/,\nhttps://github.com/BenWolst/odiffr",
  "BugReports": "https://github.com/BenWolst/odiffr/issues",
  "Encoding": "UTF-8",
  "Language": "en-GB",
  "Roxygen": "list(markdown = TRUE)",
  "Config/testthat/edition": "3",
  "VignetteBuilder": "knitr",
  "Config/roxygen2/version": "8.1.0",
  "Repository": "https://benwolst.r-universe.dev",
  "Date/Publication": "2026-10-09 09:57:54 UTC",
  "RemoteUrl": "https://github.com/benwolst/odiffr",
  "RemoteRef": "HEAD",
  "RemoteSha": "077176fc9fa1f5d33f3564765146ba84db1971a1",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-10-09 16:39:42 UTC",
    "User": "root"
  },
  "Author": "Ben Wolstenholme [aut, cre]",
  "Maintainer": "Ben Wolstenholme <odiffr@benwolst.dev>",
  "_user": "benwolst",
  "_type": "src",
  "_file": "odiffr_0.6.0.9000.tar.gz",
  "_fileid": "https://r2.ropensci.org/29caf7718a4728dc60e60fe66c5097a2078159e8988ab5642a5389e7982f1773",
  "_filesize": 686299,
  "_sha256": "29caf7718a4728dc60e60fe66c5097a2078159e8988ab5642a5389e7982f1773",
  "_expires": "2027-01-17T17:05:07.000Z",
  "_created": "2026-10-09T16:39:42.000Z",
  "_published": "2026-10-09T17:05:09.636Z",
  "_buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_jobs": [
    {
      "job": 113922685924,
      "time": 157,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11630909735"
    },
    {
      "job": 113922685928,
      "time": 151,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11629839370"
    },
    {
      "job": 113922685889,
      "time": 132,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11632995607"
    },
    {
      "job": 113922685902,
      "time": 108,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11632587785"
    },
    {
      "job": 113921133729,
      "time": 228,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11630388775"
    },
    {
      "job": 113922685785,
      "time": 88,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "11631303938"
    },
    {
      "job": 113922686035,
      "time": 109,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11630773943"
    },
    {
      "job": 113922685919,
      "time": 106,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11630673957"
    },
    {
      "job": 113922685947,
      "time": 100,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11630779217"
    }
  ],
  "_upstream": "https://github.com/benwolst/odiffr",
  "_commit": {
    "id": "077176fc9fa1f5d33f3564765146ba84db1971a1",
    "author": "Ben <32876119+BenWolst@users.noreply.github.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "Redesign the README and hex logo (#25)\n\n- New README: centered header, a hero image of real odiffr output\n  (baseline, current and diff), a \"Why odiffr\" grid, a three-step start,\n  a task table linking to the reference and guides, and collapsible\n  examples. Adds the image-level tolerance and expect_images_differ(),\n  and uses markup that renders the same on GitHub, pkgdown and CRAN.\n- New hex logo (man/figures/logo.svg and logo.png): odiff's pixel camel\n  walking a desert dune at night, with an odiffr wordmark redrawn from\n  odiff's lettering. Credited in inst/COPYRIGHTS.\n- Stop tracking dev/ (plans, specs and local scripts).\n\nCo-authored-by: BenWolst <benwolst@users.noreply.github.com>",
    "time": 1791539874
  },
  "_maintainer": {
    "name": "Ben Wolstenholme",
    "email": "odiffr@benwolst.dev"
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "graphics",
      "role": "Imports"
    },
    {
      "package": "grDevices",
      "role": "Imports"
    },
    {
      "package": "grid",
      "role": "Imports"
    },
    {
      "package": "tools",
      "role": "Imports"
    },
    {
      "package": "base64enc",
      "role": "Suggests"
    },
    {
      "package": "digest",
      "role": "Suggests"
    },
    {
      "package": "ggplot2",
      "role": "Suggests"
    },
    {
      "package": "jsonlite",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "lattice",
      "role": "Suggests"
    },
    {
      "package": "magick",
      "role": "Suggests"
    },
    {
      "package": "openssl",
      "role": "Suggests"
    },
    {
      "package": "pdftools",
      "role": "Suggests"
    },
    {
      "package": "png",
      "role": "Suggests"
    },
    {
      "package": "ragg",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.1.7",
      "role": "Suggests"
    },
    {
      "package": "tibble",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "xml2",
      "role": "Suggests"
    }
  ],
  "_owner": "benwolst",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-48",
      "n": 22
    },
    {
      "week": "2025-49",
      "n": 5
    },
    {
      "week": "2026-32",
      "n": 1
    },
    {
      "week": "2026-40",
      "n": 4
    },
    {
      "week": "2026-41",
      "n": 6
    }
  ],
  "_tags": [
    {
      "name": "v0.1.0",
      "date": "2025-11-26"
    },
    {
      "name": "v0.2.0",
      "date": "2025-11-28"
    },
    {
      "name": "v0.3.0",
      "date": "2025-11-28"
    },
    {
      "name": "v0.4.0",
      "date": "2025-11-28"
    },
    {
      "name": "v0.4.1",
      "date": "2025-11-28"
    },
    {
      "name": "v0.5.0",
      "date": "2025-11-28"
    },
    {
      "name": "v0.5.1",
      "date": "2025-12-01"
    },
    {
      "name": "v0.6.0",
      "date": "2026-10-04"
    }
  ],
  "_stars": 0,
  "_contributors": [
    {
      "user": "benwolst",
      "count": 62,
      "uuid": 32876119
    },
    {
      "user": "claude",
      "count": 13,
      "uuid": 81847
    }
  ],
  "_userbio": {
    "uuid": 32876119,
    "type": "user",
    "name": "Ben",
    "followers": 1
  },
  "_downloads": {
    "count": 270,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/odiffr"
  },
  "_devurl": "https://github.com/benwolst/odiffr",
  "_pkgdown": "https://benwolst.github.io/odiffr/",
  "_searchresults": 6,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/odiffr.html",
    "extra/readme.html",
    "extra/readme.md",
    "LICENSE"
  ],
  "_homeurl": "https://github.com/benwolst/odiffr",
  "_realowner": "benwolst",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2025-12-01"
    },
    {
      "version": "0.5.1",
      "date": "2025-12-11"
    },
    {
      "version": "0.6.0",
      "date": "2026-10-05"
    }
  ],
  "_exports": [
    "approve_changes",
    "audit_record",
    "batch_junit",
    "batch_markdown",
    "batch_report",
    "compare_dirs_report",
    "compare_file_odiff",
    "compare_image_dirs",
    "compare_images",
    "compare_images_batch",
    "compare_pdf_dirs",
    "compare_pdfs",
    "diff_image",
    "expect_images_differ",
    "expect_images_match",
    "expect_snapshot_image",
    "failed_pairs",
    "find_odiff",
    "ignore_region",
    "install_odiff",
    "odiff_available",
    "odiff_info",
    "odiff_preset",
    "odiff_run",
    "odiff_version",
    "odiffr_cache_path",
    "odiffr_clear_cache",
    "odiffr_update",
    "passed_pairs",
    "plot_options",
    "snapshot_report",
    "use_odiffr_ci"
  ],
  "_help": [
    {
      "page": "approve_changes",
      "title": "Approve Changes as New Baselines",
      "topics": [
        "approve_changes"
      ]
    },
    {
      "page": "audit_record",
      "title": "Create an Audit Record of Image Comparisons",
      "topics": [
        "audit_record"
      ]
    },
    {
      "page": "batch_junit",
      "title": "Write Batch Comparison Results as JUnit XML",
      "topics": [
        "batch_junit"
      ]
    },
    {
      "page": "batch_markdown",
      "title": "Write a Markdown Summary of Batch Comparison Results",
      "topics": [
        "batch_markdown"
      ]
    },
    {
      "page": "batch_report",
      "title": "Generate HTML Report for Batch Comparison Results",
      "topics": [
        "batch_report"
      ]
    },
    {
      "page": "compare_dirs_report",
      "title": "Compare Directories and Generate HTML Report",
      "topics": [
        "compare_dirs_report"
      ]
    },
    {
      "page": "compare_file_odiff",
      "title": "Compare Files with odiff (for testthat and shinytest2 Snapshots)",
      "topics": [
        "compare_file_odiff"
      ]
    },
    {
      "page": "compare_image_dirs",
      "title": "Compare Images in Two Directories",
      "topics": [
        "compare_image_dirs"
      ]
    },
    {
      "page": "compare_images",
      "title": "Compare Two Images",
      "topics": [
        "compare_images"
      ]
    },
    {
      "page": "compare_images_batch",
      "title": "Compare Multiple Image Pairs",
      "topics": [
        "compare_images_batch"
      ]
    },
    {
      "page": "compare_pdf_dirs",
      "title": "Compare PDF Files in Two Directories",
      "topics": [
        "compare_pdf_dirs"
      ]
    },
    {
      "page": "compare_pdfs",
      "title": "Compare Two PDF Files Page by Page",
      "topics": [
        "compare_pdfs"
      ]
    },
    {
      "page": "diff_image",
      "title": "Get the Diff Image of a Comparison",
      "topics": [
        "diff_image"
      ]
    },
    {
      "page": "expect_images",
      "title": "testthat Expectations for Image Comparison",
      "topics": [
        "expect_images_differ",
        "expect_images_match"
      ]
    },
    {
      "page": "expect_snapshot_image",
      "title": "Snapshot Testing for Images",
      "topics": [
        "expect_snapshot_image"
      ]
    },
    {
      "page": "failed_pairs",
      "title": "Get Failed Comparisons from Batch Results",
      "topics": [
        "failed_pairs"
      ]
    },
    {
      "page": "find_odiff",
      "title": "Find the odiff Binary",
      "topics": [
        "find_odiff"
      ]
    },
    {
      "page": "ignore_region",
      "title": "Create an Ignore Region",
      "topics": [
        "ignore_region"
      ]
    },
    {
      "page": "install_odiff",
      "title": "Install odiff",
      "topics": [
        "install_odiff"
      ]
    },
    {
      "page": "odiff_available",
      "title": "Check if odiff is Available",
      "topics": [
        "odiff_available"
      ]
    },
    {
      "page": "odiff_info",
      "title": "Display odiff Configuration Information",
      "topics": [
        "odiff_info"
      ]
    },
    {
      "page": "odiff_preset",
      "title": "Comparison Presets",
      "topics": [
        "odiff_preset"
      ]
    },
    {
      "page": "odiff_run",
      "title": "Run odiff Command (Low-Level)",
      "topics": [
        "odiff_run"
      ]
    },
    {
      "page": "odiff_version",
      "title": "Get odiff Version",
      "topics": [
        "odiff_version"
      ]
    },
    {
      "page": "odiffr_cache_path",
      "title": "Get Cache Directory Path",
      "topics": [
        "odiffr_cache_path"
      ]
    },
    {
      "page": "odiffr_clear_cache",
      "title": "Clear the odiffr Cache",
      "topics": [
        "odiffr_clear_cache"
      ]
    },
    {
      "page": "odiffr_update",
      "title": "Download Latest odiff Binary",
      "topics": [
        "odiffr_update"
      ]
    },
    {
      "page": "passed_pairs",
      "title": "Get Passed Comparisons from Batch Results",
      "topics": [
        "passed_pairs"
      ]
    },
    {
      "page": "plot_options",
      "title": "Plot Rendering Options",
      "topics": [
        "plot_options"
      ]
    },
    {
      "page": "plot.odiff_result",
      "title": "Plot an odiff Comparison",
      "topics": [
        "plot.odiff_result"
      ]
    },
    {
      "page": "snapshot_report",
      "title": "Report Failing Image Snapshots",
      "topics": [
        "snapshot_report"
      ]
    },
    {
      "page": "summary.odiffr_batch",
      "title": "Summarize Batch Comparison Results",
      "topics": [
        "print.odiffr_batch_summary",
        "summary.odiffr_batch"
      ]
    },
    {
      "page": "use_odiffr_ci",
      "title": "Add a GitHub Actions Workflow for Visual Tests",
      "topics": [
        "use_odiffr_ci"
      ]
    }
  ],
  "_pkglogo": "https://github.com/benwolst/odiffr/raw/HEAD/man/figures/logo.svg",
  "_readme": "https://github.com/benwolst/odiffr/raw/HEAD/README.md",
  "_rundeps": [],
  "_vignettes": [
    {
      "source": "pdf-outputs.Rmd",
      "filename": "pdf-outputs.html",
      "title": "Comparing PDF outputs",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Why compare PDFs visually?",
        "Comparing two PDF files",
        "Different numbers of pages",
        "Different page sizes",
        "Comparing whole directories",
        "Reports and CI",
        "Ignoring dynamic content",
        "Choosing the resolution",
        "RTF and DOCX outputs",
        "Limitations"
      ],
      "created": "2026-10-04 15:23:52",
      "modified": "2026-10-04 15:23:52",
      "commits": 1
    },
    {
      "source": "web-pages.Rmd",
      "filename": "web-pages.html",
      "title": "Comparing web pages and htmlwidgets",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Screenshot a page",
        "Screenshot an htmlwidget",
        "Compare with a baseline",
        "As a testthat snapshot"
      ],
      "created": "2026-10-04 15:23:52",
      "modified": "2026-10-04 15:23:52",
      "commits": 1
    },
    {
      "source": "getting-started.Rmd",
      "filename": "getting-started.html",
      "title": "Getting Started with Odiffr",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Introduction",
        "Installation",
        "System Requirements",
        "Basic Usage",
        "Check Configuration",
        "Compare Images",
        "Generate Diff Images",
        "Advanced Options",
        "Threshold",
        "Antialiasing",
        "Ignore Regions",
        "Batch Processing",
        "Directory Comparison",
        "Accessor Functions",
        "Batch Summary",
        "Column Reference",
        "Parallel Processing",
        "HTML Reports",
        "One-Liner Workflow",
        "Approving Changes",
        "Viewing a Diff",
        "CI Integration",
        "CI Outputs",
        "Working with magick",
        "Low-Level API",
        "Binary Management",
        "Install or Update the Binary",
        "Custom Binary Path",
        "Faster comparisons with npm installs",
        "Cache Management",
        "Visual Regression Testing with testthat",
        "Testing Plots",
        "Snapshot Testing with expect_snapshot_image()",
        "Diff Images on Failure",
        "Comparison with vdiffr",
        "For Validated Environments",
        "Audit records"
      ],
      "created": "2025-11-26 11:50:18",
      "modified": "2026-10-04 15:52:09",
      "commits": 10
    },
    {
      "source": "shinytest2.Rmd",
      "filename": "shinytest2.html",
      "title": "Using odiffr with shinytest2",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Why",
        "The one-liner",
        "Presets",
        "Use it in every test",
        "Where the diff images go",
        "Reviewing changes",
        "Continuous integration",
        "Variants or the cross_platform preset?"
      ],
      "created": "2026-10-04 15:23:52",
      "modified": "2026-10-07 12:06:07",
      "commits": 2
    }
  ],
  "_score": 5,
  "_indexed": true,
  "_nocasepkg": "odiffr",
  "_universes": [
    "benwolst"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.6.0.9000",
      "date": "2026-10-09T16:42:18.000Z",
      "distro": "resolute",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/e3af14aeb4e50843e0acd3e6089994f57581c384f56cadb8575f9e21ececdffe",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.6.0.9000",
      "date": "2026-10-09T16:42:04.000Z",
      "distro": "resolute",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/1519c23ed3ca5e65f496ffb9f64874bb1cb19d2f1c13527debd894729518db7c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.6.0.9000",
      "date": "2026-10-09T16:59:44.000Z",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/233b25ad2c756caae4b3de8f086ab4804e3d57c0b5950dafd4e2eee41558a1d2",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.6.0.9000",
      "date": "2026-10-09T17:04:23.000Z",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/6b2bb12ba3919f8ca785b941603f0094587561e5a1a89cc9733784e5679b7b35",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.6.0.9000",
      "date": "2026-10-09T16:41:33.000Z",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/b31274b59b975128e4cc57abc0225f444871a3c5effad7747929beb7146eb9cf",
      "status": "success",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.6.0.9000",
      "date": "2026-10-09T16:41:02.000Z",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/bb63012d4fe279c930b61bdcbff1a0c357f2c350d5bd073c5fef37946331cf06",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.6.0.9000",
      "date": "2026-10-09T16:40:57.000Z",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/4cf543af4281960158f5817dddf490704646f0fc4ebb800750a0ef80154a9dd2",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.6.0.9000",
      "date": "2026-10-09T16:40:59.000Z",
      "commit": "077176fc9fa1f5d33f3564765146ba84db1971a1",
      "fileid": "https://r2.ropensci.org/b858915326e423117d33096225127e6ec8df9a29a262d5f26ad917002e17b144",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/benwolst/actions/runs/37960196564"
    }
  ]
}